[jabref] 132/459: [svn-upgrade] Integrating new upstream version, jabref (2.4~beta1)

gregor herrmann gregoa at debian.org
Thu Sep 15 20:40:01 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 1cf9ffb30e91de4c1bd786c5d2e5042a6e9fab58
Author: gregor herrmann <gregoa at debian.org>
Date:   Sun Mar 16 14:39:46 2008 +0000

    [svn-upgrade] Integrating new upstream version, jabref (2.4~beta1)
---
 .classpath                                         |   23 +
 .cvsignore                                         |   17 +
 .project                                           |   17 +
 MEDLINE_FIX.patch                                  |   53 -
 build.number                                       |    4 +-
 build.xml                                          |  243 ++--
 changelog_highlights.txt                           |   27 -
 hs_err_pid7783.log                                 |  413 ------
 lib/JempBox-0.1.0-dev.jar                          |  Bin 38383 -> 0 bytes
 lib/JempBox-0.2.0.jar                              |  Bin 0 -> 42677 bytes
 lib/mysql-connector-java-5.0.7-bin.jar             |  Bin 0 -> 536609 bytes
 lib/plugin/JPFCodeGenerator-rt.jar                 |  Bin 0 -> 14427 bytes
 lib/plugin/JPFCodeGenerator.jar                    |  Bin 0 -> 1065413 bytes
 lib/plugin/commons-logging.jar                     |  Bin 0 -> 38015 bytes
 lib/plugin/jpf-boot.jar                            |  Bin 0 -> 41858 bytes
 lib/plugin/jpf.jar                                 |  Bin 0 -> 202416 bytes
 lib/plugin/velocity-dep-1.5.jar                    |  Bin 0 -> 698567 bytes
 src/help/About.html                                |    5 +-
 src/help/BaseFrameHelp.html                        |    6 +-
 src/help/BibtexHelp.html                           |  164 +--
 src/help/CiteSeerHelp.html                         |    6 +-
 src/help/CommandLine.html                          |   11 +-
 src/help/ContentSelectorHelp.html                  |    2 +-
 src/help/Contents.html                             |   82 +-
 src/help/CustomEntriesHelp.html                    |    2 +-
 src/help/CustomExports.html                        |   30 +-
 src/help/CustomImports.html                        |   14 +-
 src/help/DatabaseProperties.html                   |   50 +
 src/help/EndNoteFilters.html                       |    2 +-
 src/help/EntryEditorHelp.html                      |    2 +-
 src/help/ExternalFiles.html                        |    2 +-
 src/help/FileLinks.html                            |    2 +-
 src/help/GeneralFields.html                        |    6 +-
 src/help/GroupsHelp.html                           |    2 +-
 src/help/HelpHelp.html                             |    2 +-
 src/help/IEEEXploreHelp.html                       |    2 +-
 src/help/ImportInspectionDialog.html               |    2 +-
 src/help/JSTOR.html                                |   37 +
 src/help/JabRefHelp.html                           |    2 +-
 src/help/JournalAbbreviations.html                 |    2 +-
 src/help/LabelPatterns.html                        |   65 +-
 src/help/MarkingHelp.html                          |    2 +-
 src/help/MedlineHelp.html                          |    2 +-
 src/help/OpenOfficeHelp.html                       |    2 +-
 src/help/OwnerHelp.html                            |    2 +-
 src/help/Plugin.html                               |   99 ++
 src/help/PreviewHelp.html                          |    2 +-
 src/help/RemoteHelp.html                           |    2 +-
 src/help/SQLExport.html                            |   37 +
 src/help/SearchHelp.html                           |    2 +-
 src/help/ShortAuxImport.html                       |    2 +-
 src/help/ShortIntegrityCheck.html                  |    4 +-
 src/help/ShortPlainImport.html                     |    4 +-
 src/help/Spires.html                               |   43 +
 src/help/StringEditorHelp.html                     |    4 +-
 src/help/TimeStampHelp.html                        |    2 +-
 src/help/XMPHelp.html                              |   14 +-
 src/help/de/About.html                             |    5 +-
 src/help/de/BaseFrameHelp.html                     |    2 +-
 src/help/de/BibtexHelp.html                        |  126 +-
 src/help/de/CiteSeerHelp.html                      |    8 +-
 src/help/de/CommandLine.html                       |   15 +-
 src/help/de/ContentSelectorHelp.html               |    2 +-
 src/help/de/Contents.html                          |   96 +-
 src/help/de/CustomEntriesHelp.html                 |    2 +-
 src/help/de/CustomExports.html                     |   20 +-
 src/help/de/CustomImports.html                     |    2 +-
 src/help/de/EndNoteFilters.html                    |    2 +-
 src/help/de/EntryEditorHelp.html                   |    2 +-
 src/help/de/ExternalFiles.html                     |    2 +-
 src/help/de/FileLinks.html                         |    2 +-
 src/help/de/GeneralFields.html                     |    4 +-
 src/help/de/GroupsHelp.html                        |    2 +-
 src/help/de/HelpHelp.html                          |    2 +-
 src/help/de/IEEEXploreHelp.html                    |    2 +-
 src/help/de/ImportInspectionDialog.html            |    2 +-
 src/help/de/JSTOR.html                             |   42 +
 src/help/de/JabRef-UserManual_de.tex               |  142 ++-
 src/help/de/JabRefHelp.html                        |    2 +-
 src/help/de/JournalAbbreviations.html              |    2 +-
 src/help/de/LabelPatterns.html                     |   58 +-
 src/help/de/MarkingHelp.html                       |    2 +-
 src/help/de/MedlineHelp.html                       |    4 +-
 src/help/de/OpenOfficeHelp.html                    |    2 +-
 src/help/de/OwnerHelp.html                         |    2 +-
 src/help/de/Plugin.html                            |  107 ++
 src/help/de/PreviewHelp.html                       |    2 +-
 src/help/de/RemoteHelp.html                        |    2 +-
 src/help/de/SQLExport.html                         |   42 +
 src/help/de/SearchHelp.html                        |    2 +-
 src/help/de/ShortAuxImport.html                    |    2 +-
 src/help/de/ShortIntegrityCheck.html               |    2 +-
 src/help/de/ShortPlainImport.html                  |    2 +-
 src/help/de/StringEditorHelp.html                  |    2 +-
 src/help/de/TimeStampHelp.html                     |    2 +-
 src/help/de/XMPHelp.html                           |   14 +-
 src/help/fr/About.html                             |   21 +-
 src/help/fr/BaseFrameHelp.html                     |    6 +-
 src/help/fr/BibtexHelp.html                        |  162 +--
 src/help/fr/CiteSeerHelp.html                      |    6 +-
 src/help/fr/CommandLine.html                       |   14 +-
 src/help/fr/ContentSelectorHelp.html               |    2 +-
 src/help/fr/Contents.html                          |  102 +-
 src/help/fr/CustomEntriesHelp.html                 |    2 +-
 src/help/fr/CustomExports.html                     |   83 +-
 src/help/fr/CustomImports.html                     |    2 +-
 src/help/fr/DatabaseProperties.html                |   48 +
 src/help/fr/EndNoteFilters.html                    |    2 +-
 src/help/fr/EntryEditorHelp.html                   |    2 +-
 src/help/fr/ExternalFiles.html                     |    6 +-
 src/help/fr/FileLinks.html                         |    6 +-
 src/help/fr/GeneralFields.html                     |    4 +-
 src/help/fr/GroupsHelp.html                        |    2 +-
 src/help/fr/HelpHelp.html                          |    2 +-
 src/help/fr/IEEEXploreHelp.html                    |    2 +-
 src/help/fr/ImportInspectionDialog.html            |    2 +-
 src/help/fr/JSTOR.html                             |   35 +
 src/help/fr/JabRefHelp.html                        |    2 +-
 src/help/fr/JournalAbbreviations.html              |    2 +-
 src/help/fr/LabelPatterns.html                     |   63 +-
 src/help/fr/MarkingHelp.html                       |    2 +-
 src/help/fr/MedlineHelp.html                       |    6 +-
 src/help/fr/OpenOfficeHelp.html                    |    2 +-
 src/help/fr/OwnerHelp.html                         |    2 +-
 src/help/fr/Plugin.html                            |   94 ++
 src/help/fr/PreviewHelp.html                       |    2 +-
 src/help/fr/RemoteHelp.html                        |    2 +-
 src/help/fr/SQLExport.html                         |   31 +
 src/help/fr/SearchHelp.html                        |    2 +-
 src/help/fr/ShortAuxImport.html                    |    2 +-
 src/help/fr/ShortIntegrityCheck.html               |    2 +-
 src/help/fr/ShortPlainImport.html                  |    2 +-
 src/help/fr/StringEditorHelp.html                  |   10 +-
 src/help/fr/TimeStampHelp.html                     |    2 +-
 src/help/fr/XMPHelp.html                           |   14 +-
 src/images/absIcon.png                             |  Bin 0 -> 180 bytes
 src/images/add.png                                 |  Bin 0 -> 455 bytes
 src/images/autumn.png                              |  Bin 0 -> 307468 bytes
 src/images/completeItem.png                        |  Bin 0 -> 458 bytes
 src/images/contents.png                            |  Bin 0 -> 1073 bytes
 src/images/crystal_16/Icons.properties             |    4 +-
 src/images/crystal_16/database_connect.png         |  Bin 0 -> 763 bytes
 src/images/crystal_16/database_save.png            |  Bin 0 -> 755 bytes
 src/images/database_connect.png                    |  Bin 0 -> 763 bytes
 src/images/database_save.png                       |  Bin 0 -> 755 bytes
 src/images/document-save-as.png                    |  Bin 0 -> 1337 bytes
 src/images/document-save.png                       |  Bin 0 -> 1255 bytes
 src/images/doismall.png                            |  Bin 0 -> 738 bytes
 src/images/duplicate.png                           |  Bin 0 -> 359 bytes
 src/images/edit-copy.png                           |  Bin 0 -> 979 bytes
 src/images/edit-cut.png                            |  Bin 0 -> 985 bytes
 src/images/edit-delete.png                         |  Bin 0 -> 1339 bytes
 src/images/edit-find.png                           |  Bin 0 -> 1347 bytes
 src/images/edit-paste.png                          |  Bin 0 -> 956 bytes
 src/images/edit-redo.png                           |  Bin 0 -> 909 bytes
 src/images/edit-undo.png                           |  Bin 0 -> 957 bytes
 src/images/editor.png                              |  Bin 0 -> 1196 bytes
 src/images/emacs.png                               |  Bin 0 -> 267 bytes
 src/images/emblem-web-small.png                    |  Bin 0 -> 960 bytes
 src/images/emblem-web.png                          |  Bin 0 -> 1419 bytes
 src/images/fileclose.png                           |  Bin 0 -> 238 bytes
 src/images/fileclose2.png                          |  Bin 0 -> 250 bytes
 src/images/filenew.png                             |  Bin 0 -> 968 bytes
 src/images/fileopen.png                            |  Bin 0 -> 1123 bytes
 src/images/genIcon.png                             |  Bin 0 -> 180 bytes
 src/images/go-down.png                             |  Bin 0 -> 1216 bytes
 src/images/go-next.png                             |  Bin 0 -> 1203 bytes
 src/images/go-previous.png                         |  Bin 0 -> 1157 bytes
 src/images/go-up.png                               |  Bin 0 -> 1092 bytes
 src/images/groupIncluding.png                      |  Bin 0 -> 105 bytes
 src/images/groupRefining.png                       |  Bin 0 -> 160 bytes
 src/images/grouping_morten.png                     |  Bin 0 -> 875 bytes
 src/images/groupsHighlightAll.png                  |  Bin 0 -> 280 bytes
 src/images/groupsHighlightAny.png                  |  Bin 0 -> 276 bytes
 src/images/help-about.png                          |  Bin 0 -> 986 bytes
 src/images/help-browser.png                        |  Bin 0 -> 1541 bytes
 src/images/integrity.png                           |  Bin 0 -> 748 bytes
 src/images/lyx2.png                                |  Bin 0 -> 927 bytes
 src/images/mark.png                                |  Bin 0 -> 928 bytes
 src/images/messageFail.png                         |  Bin 0 -> 937 bytes
 src/images/messageInfo.png                         |  Bin 0 -> 978 bytes
 src/images/messageWarn.png                         |  Bin 0 -> 1014 bytes
 src/images/optIcon.png                             |  Bin 0 -> 200 bytes
 src/images/pdf-new.png                             |  Bin 0 -> 936 bytes
 src/images/pdf.png                                 |  Bin 0 -> 349 bytes
 src/images/postscript.png                          |  Bin 0 -> 233 bytes
 src/images/preamble.png                            |  Bin 0 -> 266 bytes
 src/images/preferences.png                         |  Bin 0 -> 1381 bytes
 src/images/remove.png                              |  Bin 0 -> 288 bytes
 src/images/reqIcon.png                             |  Bin 0 -> 182 bytes
 src/images/search.png                              |  Bin 0 -> 1433 bytes
 src/images/splash-2.1.svg                          |  229 ++++
 src/images/splash-2.1beta.png                      |  Bin 0 -> 179073 bytes
 src/images/splash.png                              |  Bin 172232 -> 173605 bytes
 src/images/splash.svg                              |  229 ++++
 src/images/strings.png                             |  Bin 0 -> 233 bytes
 src/images/unmark.png                              |  Bin 0 -> 1025 bytes
 src/images/user-home.png                           |  Bin 0 -> 1290 bytes
 src/images/view-refresh.png                        |  Bin 0 -> 1591 bytes
 src/images/viewsource.gif                          |  Bin 0 -> 119 bytes
 src/images/winedt.png                              |  Bin 0 -> 1495 bytes
 src/images/wizard.png                              |  Bin 0 -> 238 bytes
 src/images/wrongItem.png                           |  Bin 0 -> 776 bytes
 src/images/wwwciteseer.png                         |  Bin 0 -> 526 bytes
 src/java/Eclipse_formatter.xml                     |  398 +++---
 src/java/gnu/dtools/ritopt/ArrayOption.java        |   87 +-
 src/java/gnu/dtools/ritopt/LongOption.java         |    4 +-
 src/java/gnu/dtools/ritopt/NotifyOption.java       |   10 +-
 src/java/gnu/dtools/ritopt/Option.java             |    3 +-
 src/java/gnu/dtools/ritopt/OptionMenu.java         |    6 +-
 src/java/gnu/dtools/ritopt/OptionModule.java       |  158 ++-
 src/java/gnu/dtools/ritopt/Options.java            |   63 +-
 src/java/gnu/dtools/ritopt/SimpleProcess.java      |   30 +-
 src/java/gnu/dtools/ritopt/StreamPrinter.java      |    6 +-
 src/java/net/sf/ext/BrowserLauncher.java           |   32 +-
 src/java/net/sf/jabref/AdvancedTab.java            |   15 +-
 src/java/net/sf/jabref/AppearancePrefsTab.java     |    8 +-
 src/java/net/sf/jabref/AuthorList.java             |    4 +-
 src/java/net/sf/jabref/BasePanel.java              |  497 +++++---
 src/java/net/sf/jabref/BibtexDatabase.java         |  101 +-
 src/java/net/sf/jabref/BibtexEntry.java            |   75 +-
 src/java/net/sf/jabref/BibtexEntryType.java        |   80 +-
 src/java/net/sf/jabref/BibtexFields.java           |   29 +-
 src/java/net/sf/jabref/BibtexStringComparator.java |    8 +-
 src/java/net/sf/jabref/BrowseAction.java           |   10 +-
 src/java/net/sf/jabref/CheckBoxMessage.java        |    2 +-
 src/java/net/sf/jabref/ClipBoardManager.java       |   21 +-
 src/java/net/sf/jabref/ContentSelectorDialog.java  |   39 +-
 src/java/net/sf/jabref/ContentSelectorDialog2.java |   94 +-
 .../net/sf/jabref/CrossRefEntryComparator.java     |   30 +-
 src/java/net/sf/jabref/CustomEntryType.java        |    9 +-
 src/java/net/sf/jabref/DatabaseSearch.java         |   19 +-
 src/java/net/sf/jabref/DisplayPanel.java           |   29 -
 src/java/net/sf/jabref/DuplicateCheck.java         |  134 ++
 .../net/sf/jabref/DuplicateResolverDialog.java     |   23 +-
 src/java/net/sf/jabref/DuplicateSearch.java        |   43 +-
 src/java/net/sf/jabref/EntryComparator.java        |   30 +-
 .../net/sf/jabref/EntryCustomizationDialog.java    |   25 +-
 src/java/net/sf/jabref/EntryEditor.java            |  159 +--
 src/java/net/sf/jabref/EntryEditorPrefsTab.java    |   15 +-
 src/java/net/sf/jabref/EntryEditorTab.java         |   57 +-
 src/java/net/sf/jabref/EntryEditorTabList.java     |   22 +-
 src/java/net/sf/jabref/EntrySorter.java            |   51 +-
 src/java/net/sf/jabref/EntryTypeDialog.java        |   40 +-
 src/java/net/sf/jabref/ExternalTab.java            |   14 +-
 src/java/net/sf/jabref/FieldComparator.java        |   25 +-
 src/java/net/sf/jabref/FieldComparatorStack.java   |   14 +-
 src/java/net/sf/jabref/FieldContentSelector.java   |   13 +-
 .../net/sf/jabref/FieldEditorFocusListener.java    |    5 +-
 src/java/net/sf/jabref/FieldNameLabel.java         |    9 +-
 src/java/net/sf/jabref/FieldTextArea.java          |    8 +-
 src/java/net/sf/jabref/FieldTextField.java         |    5 -
 src/java/net/sf/jabref/FieldTextMenu.java          |   21 +-
 src/java/net/sf/jabref/FileHistory.java            |   24 +-
 src/java/net/sf/jabref/FileTab.java                |   15 +-
 src/java/net/sf/jabref/FontSelectorDialog.java     |   40 +-
 src/java/net/sf/jabref/GUIGlobals.java             |   55 +-
 src/java/net/sf/jabref/GeneralRenderer.java        |    6 +-
 src/java/net/sf/jabref/GeneralTab.java             |   64 +-
 src/java/net/sf/jabref/GlobalFocusListener.java    |    7 +-
 src/java/net/sf/jabref/Globals.java                |  108 +-
 src/java/net/sf/jabref/HelpContent.java            |   55 +-
 src/java/net/sf/jabref/HelpDialog.java             |    9 +-
 src/java/net/sf/jabref/IconStringRenderer.java     |    2 -
 src/java/net/sf/jabref/IdComparator.java           |    6 +-
 src/java/net/sf/jabref/IncrementalSearcher.java    |   24 +-
 src/java/net/sf/jabref/JabRef.java                 |  526 ++++----
 src/java/net/sf/jabref/JabRefFileChooser.java      |   22 +-
 src/java/net/sf/jabref/JabRefFrame.java            |  568 ++++-----
 src/java/net/sf/jabref/JabRefPreferences.java      |  180 ++-
 src/java/net/sf/jabref/KeyBindingsDialog.java      |   83 +-
 src/java/net/sf/jabref/KeyCollisionException.java  |    2 +-
 src/java/net/sf/jabref/MarkedComparator.java       |   15 +-
 src/java/net/sf/jabref/MergeDialog.java            |    9 +-
 src/java/net/sf/jabref/MetaData.java               |   70 +-
 src/java/net/sf/jabref/MnemonicAwareAction.java    |    6 +-
 src/java/net/sf/jabref/NameCache.java              |   33 -
 src/java/net/sf/jabref/NameFormatterTab.java       |   26 +-
 src/java/net/sf/jabref/OpenFileFilter.java         |    7 +-
 src/java/net/sf/jabref/OutputPrinter.java          |   11 +
 src/java/net/sf/jabref/PrefsDialog2.java           |  153 ---
 src/java/net/sf/jabref/PrefsDialog3.java           |   24 +-
 src/java/net/sf/jabref/PreviewPanel.java           |  324 +++--
 src/java/net/sf/jabref/PreviewPrefsTab.java        |   13 +-
 src/java/net/sf/jabref/RegExpRule.java             |   24 +-
 src/java/net/sf/jabref/ReplaceStringDialog.java    |   18 +-
 src/java/net/sf/jabref/RightClickMenu.java         |   16 +-
 src/java/net/sf/jabref/SearchManager2.java         |  181 ++-
 src/java/net/sf/jabref/SearchRule.java             |    2 +-
 src/java/net/sf/jabref/SearchRuleSet.java          |   12 +-
 src/java/net/sf/jabref/SidePane.java               |   16 +-
 src/java/net/sf/jabref/SidePaneComponent.java      |   11 +-
 src/java/net/sf/jabref/SidePaneHeader.java         |    2 +-
 src/java/net/sf/jabref/SidePaneManager.java        |   26 +-
 src/java/net/sf/jabref/SimpleSearchRule.java       |   13 +-
 src/java/net/sf/jabref/SimpleUrlDragDrop.java      |   27 +-
 src/java/net/sf/jabref/SplashScreen.java           |   14 +-
 src/java/net/sf/jabref/StrictDuplicateSearch.java  |   18 +-
 src/java/net/sf/jabref/StringDialog.java           |   53 +-
 src/java/net/sf/jabref/TabLabelPattern.java        |   50 +-
 src/java/net/sf/jabref/TableColumnsTab.java        |   26 +-
 src/java/net/sf/jabref/TablePrefsTab.java          |   16 +-
 src/java/net/sf/jabref/TitleLabel.java             |    5 +-
 .../net/sf/jabref/TransferableBibtexEntry.java     |   11 +-
 src/java/net/sf/jabref/UnknownEntryType.java       |    4 +-
 src/java/net/sf/jabref/UrlDragDrop.java            |   21 +-
 src/java/net/sf/jabref/Util.java                   |  521 ++++----
 src/java/net/sf/jabref/XmpPrefsTab.java            |   19 +-
 src/java/net/sf/jabref/about/About2.java           |   14 +-
 src/java/net/sf/jabref/about/AboutPanel.java       |   62 +-
 src/java/net/sf/jabref/about/AboutTextLine.java    |    6 +-
 .../net/sf/jabref/about/ExtendedInfoPanel.java     |   19 +-
 src/java/net/sf/jabref/about/HighlightFilter.java  |    4 +-
 src/java/net/sf/jabref/about/NewAboutAction.java   |   65 -
 src/java/net/sf/jabref/about/TextBlock.java        |   15 +-
 src/java/net/sf/jabref/bst/BstLexer.java           |   15 +-
 src/java/net/sf/jabref/bst/BstParser.java          |  276 ++--
 src/java/net/sf/jabref/bst/ChangeCaseFunction.java |    2 +-
 src/java/net/sf/jabref/bst/FormatNameFunction.java |    2 +-
 src/java/net/sf/jabref/bst/PurifyFunction.java     |    4 +-
 src/java/net/sf/jabref/bst/TextPrefixFunction.java |    4 +-
 src/java/net/sf/jabref/bst/VM.java                 |  163 +--
 src/java/net/sf/jabref/bst/WidthFunction.java      |    4 +-
 .../net/sf/jabref/collab/ChangeDisplayDialog.java  |   12 +-
 src/java/net/sf/jabref/collab/ChangeScanner.java   |   92 +-
 src/java/net/sf/jabref/collab/EntryAddChange.java  |   16 +-
 src/java/net/sf/jabref/collab/EntryChange.java     |   52 +-
 .../net/sf/jabref/collab/EntryDeleteChange.java    |    9 +-
 .../net/sf/jabref/collab/FileUpdateMonitor.java    |    6 +-
 src/java/net/sf/jabref/collab/FileUpdatePanel.java |   47 +-
 src/java/net/sf/jabref/collab/GroupChange.java     |   10 +-
 src/java/net/sf/jabref/collab/PreambleChange.java  |   12 +-
 src/java/net/sf/jabref/collab/StringAddChange.java |   14 +-
 src/java/net/sf/jabref/collab/StringChange.java    |    6 +-
 .../net/sf/jabref/collab/StringNameChange.java     |    6 +-
 .../net/sf/jabref/collab/StringRemoveChange.java   |   13 +-
 .../net/sf/jabref/export/CustomExportDialog.java   |   42 +-
 .../net/sf/jabref/export/CustomExportList.java     |  181 ++-
 .../net/sf/jabref/export/ExpandEndnoteFilters.java |   12 +-
 .../net/sf/jabref/export/ExportComparator.java     |   11 +-
 .../jabref/export/ExportCustomizationDialog.java   |   14 +-
 .../net/sf/jabref/export/ExportFileFilter.java     |   25 +-
 src/java/net/sf/jabref/export/ExportFormat.java    |  440 ++++---
 src/java/net/sf/jabref/export/ExportFormats.java   |  120 +-
 .../sf/jabref/export/ExportToClipboardAction.java  |   66 +-
 src/java/net/sf/jabref/export/FileActions.java     |  404 +++---
 src/java/net/sf/jabref/export/IExportFormat.java   |   50 +
 .../sf/jabref/export/IExportFormatProvider.java    |   14 +
 .../net/sf/jabref/export/LatexFieldFormatter.java  |   27 +-
 .../net/sf/jabref/export/MSBibExportFormat.java    |   38 +-
 .../net/sf/jabref/export/ModsExportFormat.java     |    5 +-
 src/java/net/sf/jabref/export/MySQLExport.java     |   45 +
 src/java/net/sf/jabref/export/OOCalcDatabase.java  |   36 +-
 .../jabref/export/OpenDocumentRepresentation.java  |   40 +-
 .../export/OpenDocumentSpreadsheetCreator.java     |   27 +-
 .../jabref/export/OpenOfficeDocumentCreator.java   |   27 +-
 .../sf/jabref/export/PluginBasedExportFormat.java  |   71 ++
 src/java/net/sf/jabref/export/RtfSelection.java    |    7 +-
 src/java/net/sf/jabref/export/SaveAllAction.java   |   15 +-
 .../net/sf/jabref/export/SaveDatabaseAction.java   |   71 +-
 src/java/net/sf/jabref/export/SaveSession.java     |    6 +-
 src/java/net/sf/jabref/export/VerifyingWriter.java |   79 +-
 .../layout/AbstractParamLayoutFormatter.java       |    4 +-
 .../net/sf/jabref/export/layout/EntryLayout.java   |   39 -
 .../net/sf/jabref/export/layout/FieldLayout.java   |   39 -
 .../jabref/export/layout/FieldLayoutFormatter.java |   42 -
 src/java/net/sf/jabref/export/layout/Layout.java   |   79 +-
 .../net/sf/jabref/export/layout/LayoutEntry.java   |  132 +-
 .../net/sf/jabref/export/layout/LayoutHelper.java  |  176 +--
 .../layout/format/AuthorLastFirstAbbreviator.java  |   96 --
 .../export/layout/format/CreateDocBookAuthors.java |   14 +-
 .../export/layout/format/CreateDocBookEditors.java |   17 +-
 .../sf/jabref/export/layout/format/FileLink.java   |   15 +-
 .../export/layout/format/FormatPagesForHTML.java   |    2 +-
 .../export/layout/format/FormatPagesForXML.java    |    2 +-
 .../sf/jabref/export/layout/format/HTMLChars.java  |   16 +-
 .../sf/jabref/export/layout/format/RTFChars.java   |   73 +-
 .../export/layout/format/RemoveLatexCommands.java  |   20 +-
 .../export/layout/format/RemoveWhitespace.java     |   41 +-
 .../sf/jabref/export/layout/format/Replace.java    |    3 -
 .../sf/jabref/export/layout/format/ResolvePDF.java |    4 +-
 .../jabref/export/layout/format/WrapContent.java   |    3 -
 .../sf/jabref/export/layout/format/XMLChars.java   |  142 +--
 .../layout/format/{ => plugin}/NameFormat.java     |    4 +-
 .../sf/jabref/external/AccessLinksForEntries.java  |   33 +-
 .../external/AutoSetExternalFileForEntries.java    |   46 +-
 .../sf/jabref/external/DownloadExternalFile.java   |   69 +-
 .../net/sf/jabref/external/DroppedFileHandler.java |   19 +-
 .../sf/jabref/external/ExternalFileMenuItem.java   |   23 +-
 .../net/sf/jabref/external/ExternalFilePanel.java  |   24 +-
 .../net/sf/jabref/external/ExternalFileType.java   |   10 +-
 .../sf/jabref/external/ExternalFileTypeEditor.java |   24 +-
 .../external/ExternalFileTypeEntryEditor.java      |   29 +-
 .../jabref/external/FileLinksUpgradeWarning.java   |   23 +-
 src/java/net/sf/jabref/external/IconSelection.java |   22 +-
 .../net/sf/jabref/external/MoveFileAction.java     |  152 +++
 .../net/sf/jabref/external/PushToApplication.java  |   31 +-
 .../jabref/external/PushToApplicationAction.java   |   20 +-
 .../jabref/external/PushToApplicationButton.java   |  159 ++-
 src/java/net/sf/jabref/external/PushToEmacs.java   |   39 +-
 .../net/sf/jabref/external/PushToLatexEditor.java  |   57 +-
 src/java/net/sf/jabref/external/PushToLyx.java     |   30 +-
 src/java/net/sf/jabref/external/PushToVim.java     |   53 +-
 src/java/net/sf/jabref/external/PushToWinEdt.java  |   56 +-
 .../sf/jabref/external/SynchronizeFileField.java   |   36 +-
 .../jabref/external/UnknownExternalFileType.java   |    1 -
 .../sf/jabref/external/UpgradeExternalLinks.java   |    4 +-
 .../net/sf/jabref/external/WriteXMPAction.java     |   21 +-
 .../jabref/external/WriteXMPEntryEditorAction.java |    4 +-
 src/java/net/sf/jabref/groups/AbstractGroup.java   |    6 +-
 .../net/sf/jabref/groups/AddToGroupAction.java     |   20 +-
 src/java/net/sf/jabref/groups/AllEntriesGroup.java |    9 +-
 .../net/sf/jabref/groups/AndOrSearchRuleSet.java   |   18 +-
 src/java/net/sf/jabref/groups/AutoGroupDialog.java |   23 +-
 .../jabref/groups/EntryTableTransferHandler.java   |   31 +-
 src/java/net/sf/jabref/groups/ExplicitGroup.java   |   42 +-
 src/java/net/sf/jabref/groups/GroupDialog.java     |   32 +-
 src/java/net/sf/jabref/groups/GroupMatcher.java    |    5 +-
 src/java/net/sf/jabref/groups/GroupSelector.java   |  118 +-
 .../sf/jabref/groups/GroupTreeCellRenderer.java    |   12 +-
 src/java/net/sf/jabref/groups/GroupTreeNode.java   |   49 +-
 src/java/net/sf/jabref/groups/GroupsPrefsTab.java  |    6 +-
 src/java/net/sf/jabref/groups/GroupsTree.java      |   50 +-
 src/java/net/sf/jabref/groups/KeywordGroup.java    |   18 +-
 .../sf/jabref/groups/RemoveFromGroupAction.java    |    4 +-
 src/java/net/sf/jabref/groups/SearchGroup.java     |   14 +-
 .../jabref/groups/TransferableEntrySelection.java  |    8 +-
 .../sf/jabref/groups/UndoableChangeAssignment.java |   31 +-
 .../sf/jabref/groups/UndoableModifySubtree.java    |    3 +-
 src/java/net/sf/jabref/groups/VersionHandling.java |   18 +-
 src/java/net/sf/jabref/gui/AttachFileDialog.java   |   21 +-
 .../net/sf/jabref/gui/AutoCompleteListener.java    |    2 +-
 src/java/net/sf/jabref/gui/AutoCompleter.java      |   10 +-
 src/java/net/sf/jabref/gui/ColorSetupPanel.java    |   14 +-
 .../sf/jabref/gui/DatabasePropertiesDialog.java    |   70 +-
 .../sf/jabref/gui/EntryCustomizationDialog2.java   |  115 +-
 src/java/net/sf/jabref/gui/EntryTypeList.java      |   27 +-
 src/java/net/sf/jabref/gui/FieldSetComponent.java  |   68 +-
 src/java/net/sf/jabref/gui/FieldWeightDialog.java  |   38 +-
 src/java/net/sf/jabref/gui/FileListEditor.java     |  113 +-
 .../net/sf/jabref/gui/FileListEntryEditor.java     |   40 +-
 src/java/net/sf/jabref/gui/FileListTableModel.java |   52 +-
 .../net/sf/jabref/gui/FirstColumnComparator.java   |   40 +-
 .../net/sf/jabref/gui/GenFieldsCustomizer.java     |   25 +-
 src/java/net/sf/jabref/gui/GlazedEntrySorter.java  |   61 +-
 src/java/net/sf/jabref/gui/IconComparator.java     |    8 +-
 .../net/sf/jabref/gui/ImportInspectionDialog.java  |  974 ++++++++------
 src/java/net/sf/jabref/gui/IsMarkedComparator.java |   24 +-
 src/java/net/sf/jabref/gui/MainTable.java          |  118 +-
 src/java/net/sf/jabref/gui/MainTableFormat.java    |   29 +-
 .../sf/jabref/gui/MainTableSelectionListener.java  |  100 +-
 .../net/sf/jabref/gui/SearchResultsDialog.java     |  405 ++++++
 src/java/net/sf/jabref/gui/SortTabsAction.java     |   29 +-
 .../gui/components/JPanelXBoxPreferredHeight.java  |    3 +-
 .../gui/components/JPanelXBoxPreferredSize.java    |    3 +-
 .../net/sf/jabref/gui/components/JPanelYBox.java   |    3 +-
 .../gui/components/JPanelYBoxPreferredSize.java    |    3 +-
 .../net/sf/jabref/gui/date/DatePickerButton.java   |   19 +-
 .../sf/jabref/imports/AppendDatabaseAction.java    |   81 +-
 src/java/net/sf/jabref/imports/AuthorDialog.java   |   28 -
 .../net/sf/jabref/imports/BibTeXMLHandler.java     |   40 +-
 .../net/sf/jabref/imports/BiblioscapeImporter.java |   25 +-
 .../net/sf/jabref/imports/BibteXMLImporter.java    |   15 +-
 src/java/net/sf/jabref/imports/BibtexParser.java   |   43 +-
 .../net/sf/jabref/imports/BiomailImporter.java     |    9 +-
 .../imports/CheckForNewEntryTypesAction.java       |   20 +-
 .../sf/jabref/imports/CiteSeerCitationHandler.java |   15 +-
 .../sf/jabref/imports/CiteSeerEntryFetcher.java    |  121 ++
 .../imports/CiteSeerEntryFetcherHandler.java       |   82 ++
 .../net/sf/jabref/imports/CiteSeerFetcher.java     |   65 +-
 .../sf/jabref/imports/CiteSeerFetcherPanel.java    |  207 ---
 .../net/sf/jabref/imports/CiteSeerUndoHandler.java |   10 +-
 src/java/net/sf/jabref/imports/CopacImporter.java  |   10 +-
 src/java/net/sf/jabref/imports/CsaImporter.java    |   21 +-
 .../net/sf/jabref/imports/CustomImportList.java    |   13 +-
 .../net/sf/jabref/imports/EndnoteImporter.java     |   22 +-
 src/java/net/sf/jabref/imports/EntryFetcher.java   |  111 +-
 src/java/net/sf/jabref/imports/GeneralFetcher.java |   49 +-
 .../net/sf/jabref/imports/IEEEXploreFetcher.java   |  288 +----
 .../jabref/imports/ImportCustomizationDialog.java  |   15 +-
 .../net/sf/jabref/imports/ImportFileFilter.java    |    6 +-
 src/java/net/sf/jabref/imports/ImportFormat.java   |   11 +-
 .../net/sf/jabref/imports/ImportFormatReader.java  |  243 ++--
 src/java/net/sf/jabref/imports/ImportFormats.java  |   46 +-
 .../imports/ImportInspectionCommandLine.java       |   52 +
 .../net/sf/jabref/imports/ImportInspector.java     |   37 +
 src/java/net/sf/jabref/imports/ImportMenuItem.java |  219 ++--
 src/java/net/sf/jabref/imports/InspecImporter.java |    6 +-
 src/java/net/sf/jabref/imports/IsiImporter.java    |   29 +-
 src/java/net/sf/jabref/imports/JSTORFetcher.java   |  224 ++++
 src/java/net/sf/jabref/imports/JstorImporter.java  |    4 +-
 src/java/net/sf/jabref/imports/MedlineFetcher.java |  591 +++------
 src/java/net/sf/jabref/imports/MedlineHandler.java |   77 +-
 .../net/sf/jabref/imports/MedlineImporter.java     |  117 +-
 src/java/net/sf/jabref/imports/MsBibImporter.java  |   20 +-
 src/java/net/sf/jabref/imports/OAI2Fetcher.java    |   89 +-
 src/java/net/sf/jabref/imports/OAI2Handler.java    |    4 +-
 .../net/sf/jabref/imports/OpenDatabaseAction.java  |   67 +-
 src/java/net/sf/jabref/imports/OvidImporter.java   |   16 +-
 src/java/net/sf/jabref/imports/ParserResult.java   |   27 +-
 src/java/net/sf/jabref/imports/PdfXmpImporter.java |    5 +-
 .../net/sf/jabref/imports/RepecNepImporter.java    |   21 +-
 src/java/net/sf/jabref/imports/RisImporter.java    |   16 +-
 .../jabref/imports/SPIRESBibtexFilterReader.java   |   76 ++
 src/java/net/sf/jabref/imports/SPIRESFetcher.java  |  219 ++++
 .../net/sf/jabref/imports/ScifinderImporter.java   |    6 +-
 .../sf/jabref/imports/SilverPlatterImporter.java   |    6 +-
 .../net/sf/jabref/imports/SixpackImporter.java     |    8 +-
 src/java/net/sf/jabref/imports/TextAnalyzer.java   |   55 +-
 src/java/net/sf/jabref/imports/ZipFileChooser.java |   34 +-
 .../sf/jabref/journals/JournalAbbreviations.java   |   48 +-
 .../sf/jabref/journals/ManageJournalsPanel.java    |   82 +-
 src/java/net/sf/jabref/label/ArticleLabelRule.java |    8 +-
 src/java/net/sf/jabref/label/BookLabelRule.java    |   66 +-
 src/java/net/sf/jabref/label/DefaultLabelRule.java |    3 +-
 .../net/sf/jabref/label/IncollectionLabelRule.java |    2 -
 .../sf/jabref/label/InproceedingsLabelRule.java    |   13 +-
 src/java/net/sf/jabref/label/KeyWord.java          |  109 +-
 src/java/net/sf/jabref/label/LabelMaker.java       |   14 +-
 .../net/sf/jabref/labelPattern/LabelPattern.java   |  176 +--
 .../sf/jabref/labelPattern/LabelPatternUtil.java   | 1344 ++++++++++----------
 src/java/net/sf/jabref/mods/MODSDatabase.java      |   44 +-
 src/java/net/sf/jabref/mods/MODSEntry.java         |   92 +-
 src/java/net/sf/jabref/mods/PageNumbers.java       |   19 +-
 src/java/net/sf/jabref/mods/PersonName.java        |   19 +-
 src/java/net/sf/jabref/msbib/MSBibDatabase.java    |   44 +-
 src/java/net/sf/jabref/msbib/MSBibEntry.java       |  139 +-
 src/java/net/sf/jabref/net/URLDownload.java        |    9 +-
 src/java/net/sf/jabref/plugin/PluginCore.java      |  185 +++
 src/java/net/sf/jabref/plugin/SidePanePlugin.java  |   25 +
 .../net/sf/jabref/plugin/core/JabRefPlugin.java    |   43 +
 .../plugin/core/generated/_JabRefPlugin.java       |  355 ++++++
 src/java/net/sf/jabref/remote/RemoteListener.java  |   55 +-
 src/java/net/sf/jabref/search/BasicSearch.java     |   41 +-
 .../net/sf/jabref/search/HitOrMissComparator.java  |   10 +-
 src/java/net/sf/jabref/search/NoSearchMatcher.java |   19 +-
 .../net/sf/jabref/search/SearchExpression.java     |   29 +-
 .../sf/jabref/search/SearchExpressionLexer.java    |   37 +-
 .../sf/jabref/search/SearchExpressionParser.java   |   84 +-
 .../search/SearchExpressionParserTokenTypes.java   |    1 -
 .../jabref/search/SearchExpressionTreeParser.java  |   54 +-
 .../SearchExpressionTreeParserTokenTypes.java      |    3 -
 src/java/net/sf/jabref/search/SearchMatcher.java   |   18 +-
 src/java/net/sf/jabref/sql/DBConnectDialog.java    |  269 ++++
 src/java/net/sf/jabref/sql/DBStrings.java          |  117 ++
 src/java/net/sf/jabref/sql/SQLutil.java            |  911 +++++++++++++
 .../net/sf/jabref/undo/CountingUndoManager.java    |    5 +-
 src/java/net/sf/jabref/undo/NamedCompound.java     |   14 +-
 .../net/sf/jabref/undo/UndoableChangeType.java     |    7 +-
 .../net/sf/jabref/undo/UndoableFieldChange.java    |    7 +-
 .../net/sf/jabref/undo/UndoableInsertEntry.java    |    9 +-
 .../net/sf/jabref/undo/UndoableInsertString.java   |    3 +-
 src/java/net/sf/jabref/undo/UndoableKeyChange.java |    4 +-
 .../net/sf/jabref/undo/UndoablePreambleChange.java |    7 +-
 .../net/sf/jabref/undo/UndoableRemoveEntry.java    |    9 +-
 .../net/sf/jabref/undo/UndoableRemoveString.java   |    3 +-
 .../net/sf/jabref/undo/UndoableStringChange.java   |    7 +-
 src/java/net/sf/jabref/util/CaseChangeMenu.java    |   10 +-
 src/java/net/sf/jabref/util/DocumentPrinter.java   |  348 +++++
 src/java/net/sf/jabref/util/ErrorConsole.java      |   11 +-
 .../net/sf/jabref/util/MassSetFieldAction.java     |   25 +-
 src/java/net/sf/jabref/util/Pair.java              |  370 ++++++
 src/java/net/sf/jabref/util/ResourceExtractor.java |    8 +-
 src/java/net/sf/jabref/util/TBuildInfo.java        |    5 +-
 src/java/net/sf/jabref/util/TXMLReader.java        |   15 +-
 src/java/net/sf/jabref/util/TypeOr.java            |   34 +
 src/java/net/sf/jabref/util/XMPSchemaBibtex.java   |   50 +-
 src/java/net/sf/jabref/util/XMPUtil.java           |  115 +-
 .../sf/jabref/wizard/auximport/AuxCommandLine.java |    9 +-
 .../jabref/wizard/auximport/AuxSubGenerator.java   |   73 +-
 .../jabref/wizard/auximport/gui/FromAuxDialog.java |  114 +-
 .../sf/jabref/wizard/integrity/IntegrityCheck.java |   59 +-
 .../jabref/wizard/integrity/IntegrityMessage.java  |    5 +-
 .../integrity/gui/IntegrityMessagePanel.java       |   32 +-
 .../wizard/integrity/gui/IntegrityWizard.java      |   24 +-
 .../jabref/wizard/text/TagToMarkedTextStore.java   |  117 +-
 .../sf/jabref/wizard/text/gui/HintListModel.java   |   40 +-
 .../sf/jabref/wizard/text/gui/OverlayPanel.java    |   11 +-
 .../sf/jabref/wizard/text/gui/TextInputDialog.java |   48 +-
 src/java/tests/net/sf/jabref/AllTests.java         |    1 +
 .../tests/net/sf/jabref/DuplicateCheckTest.java    |   56 +
 src/java/tests/net/sf/jabref/JabRefTestCase.java   |    7 +-
 src/java/tests/net/sf/jabref/UtilTest.java         |   58 +-
 src/java/tests/net/sf/jabref/bst/TestVM.java       |   86 +-
 .../net/sf/jabref/export/layout/LayoutTest.java    |   11 +-
 .../net/sf/jabref/export/layout/RTFCharsTest.java  |   44 +-
 .../format/AuthorLastFirstAbbreviatorTester.java   |   12 -
 .../format/BibtexNameLayoutFormatterTest.java      |    2 +-
 .../net/sf/jabref/imports/BibtexParserTest.java    |   90 +-
 .../net/sf/jabref/imports/CopacImporterTest.java   |   10 +-
 .../net/sf/jabref/imports/IsiImporterTest.java     |   42 +-
 .../net/sf/jabref/imports/OAI2ImportTest.java      |   70 +-
 .../tests/net/sf/jabref/labelPattern/AllTests.java |   18 +
 .../jabref/labelPattern/LabelPatternUtilTest.java  |  107 ++
 .../net/sf/jabref/search/BasicSearchTest.java      |    4 +-
 .../net/sf/jabref/util/XMPSchemaBibtexTest.java    |  105 +-
 src/java/tests/net/sf/jabref/util/XMPUtilTest.java |  177 ++-
 src/java/wsi/ra/tool/ResourceLoader.java           |  119 +-
 src/java/wsi/ra/tool/WSITools.java                 |   14 +-
 src/plugins/net.sf.jabref.core/plugin.xml          |  180 +++
 src/plugins/net.sf.jabref.export.misq/build.xml    |   29 +
 src/plugins/net.sf.jabref.export.misq/plugin.xml   |   22 +
 .../templates}/misq.article.layout                 |    0
 .../templates}/misq.begin.layout                   |    0
 .../templates}/misq.book.layout                    |    0
 .../templates}/misq.end.layout                     |    0
 .../templates}/misq.layout                         |    0
 .../templates}/readme.txt                          |    0
 src/plugins/readme.txt                             |    9 +
 src/resource/Icons.properties                      |    2 +
 src/resource/JabRef_de.properties                  |  507 ++++----
 ...bRef_de.properties => JabRef_de.properties.bak} |  506 ++++----
 src/resource/JabRef_du.properties                  |  499 ++++----
 ...bRef_du.properties => JabRef_du.properties.bak} |  499 ++++----
 src/resource/JabRef_en.properties                  |  498 ++++----
 ...bRef_en.properties => JabRef_en.properties.bak} |  498 ++++----
 src/resource/JabRef_fr.properties                  |  472 +++----
 ...bRef_fr.properties => JabRef_fr.properties.bak} |  472 +++----
 src/resource/JabRef_it.properties                  |  497 ++++----
 ...bRef_it.properties => JabRef_it.properties.bak} |  496 +++++---
 src/resource/JabRef_no.properties                  |  492 ++++---
 ...bRef_no.properties => JabRef_no.properties.bak} |  491 ++++---
 src/resource/Menu_de.properties                    |    7 +
 src/resource/Menu_du.properties                    |    7 +
 src/resource/Menu_en.properties                    |   11 +-
 src/resource/Menu_es.properties                    |  259 ++--
 src/resource/Menu_fr.properties                    |   11 +-
 src/resource/Menu_it.properties                    |    7 +
 src/resource/Menu_no.properties                    |   12 +-
 src/resource/build.properties                      |    6 +-
 .../net/sf/jabref/imports/CopacImporterTest1.txt   |    0
 .../net/sf/jabref/imports/CopacImporterTest2.txt   |    0
 .../tests/net/sf/jabref/imports/IEEEImport1.txt    |    0
 .../net/sf/jabref/imports/IsiImporterTest1.isi     |    0
 .../sf/jabref/imports/IsiImporterTestInspec.isi    |    0
 .../sf/jabref/imports/IsiImporterTestMedline.isi   |    0
 .../net/sf/jabref/imports/IsiImporterTestWOS.isi   |    0
 .../tests/net/sf/jabref/imports/oai2.xml           |    0
 .../tests/net/sf/jabref/imports/oai22.xml          |    0
 .../tests/net/sf/jabref/imports/oai23.xml          |    0
 src/tests/net/sf/jabref/util/twente.bib            |  159 +++
 src/txt/{README => CHANGELOG}                      |  187 +--
 src/txt/INSTALL                                    |   11 +-
 src/txt/README                                     |  590 +--------
 src/txt/TODO                                       |   43 +
 src/windows/JabRef-Logo.gif                        |  Bin 1150 -> 0 bytes
 src/windows/jabref.jsmooth                         |   36 -
 src/windows/jabref.wxs                             |   39 -
 src/windows/nsis/fileassoc.nsh                     |  119 --
 src/windows/nsis/installer_languages/german.nsh    |    2 +-
 src/windows/nsis/setup.nsi                         |   11 +-
 651 files changed, 20633 insertions(+), 15135 deletions(-)

diff --git a/.classpath b/.classpath
new file mode 100644
index 0000000..c66a907
--- /dev/null
+++ b/.classpath
@@ -0,0 +1,23 @@
+<?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/looks-2.0.4.jar"/>
+	<classpathentry exported="true" kind="lib" path="lib/PDFBox-0.7.3-dev-reduced.jar"/>
+	<classpathentry exported="true" kind="lib" path="lib/antlr.jar"/>
+	<classpathentry exported="true" kind="lib" path="lib/antlr-3.0b5.jar"/>
+	<classpathentry exported="true" kind="lib" path="lib/junit.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.7.0_java15.jar"/>
+	<classpathentry kind="lib" path="lib/JempBox-0.2.0.jar"/>
+	<classpathentry kind="lib" path="lib/forms-1.1.0.jar"/>
+	<classpathentry kind="lib" path="lib/mysql-connector-java-5.0.7-bin.jar"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/3"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/.cvsignore b/.cvsignore
new file mode 100644
index 0000000..37e018c
--- /dev/null
+++ b/.cvsignore
@@ -0,0 +1,17 @@
+bak
+build
+work.jpx
+work.refactor
+.#build.xml.1.38
+.#jabref.log.1.2
+ini
+jabref.log
+jabref.log.lck
+build.number
+classes
+jabref.jpx
+jabref.oif
+build.properties
+.settings
+user.properties
+lib
diff --git a/.project b/.project
new file mode 100644
index 0000000..ca82803
--- /dev/null
+++ b/.project
@@ -0,0 +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>
diff --git a/MEDLINE_FIX.patch b/MEDLINE_FIX.patch
deleted file mode 100644
index 4cbbbe4..0000000
--- a/MEDLINE_FIX.patch
+++ /dev/null
@@ -1,53 +0,0 @@
-Index: JabRefFrame.java
-===================================================================
---- JabRefFrame.java	(revision 2498)
-+++ JabRefFrame.java	(working copy)
-@@ -1513,7 +1513,7 @@
- 
-   /**
-    * This method causes all open BasePanels to set up their tables
--   * anew. When called from PrefsDialog2, this updates to the new
-+   * anew. When called from PrefsDialog3, this updates to the new
-    * settings.
-    */
-   public void setupAllTables() {
-@@ -1947,21 +1947,28 @@
-    * @param openInNew Should the entries be imported into a new database?
-    * @param callBack The callback for the ImportInspectionDialog to use.
-    */
--  public void addImportedEntries(final BasePanel panel, final List<BibtexEntry> entries, String filename, boolean openInNew,
--                                 ImportInspectionDialog.CallBack callBack) {
-+  public void addImportedEntries(final BasePanel panel, final List<BibtexEntry> entries, String filename,
-+                                 final boolean openInNew,
-+                                 final ImportInspectionDialog.CallBack callBack) {
-       // 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))) {
--                ImportInspectionDialog diag = new ImportInspectionDialog(ths, panel,
--                        BibtexFields.DEFAULT_INSPECTION_FIELDS,
--                        Globals.lang("Import"), openInNew);
--                diag.addEntries(entries);
--                diag.addCallBack(callBack);
--                diag.entryListComplete();
--                Util.placeDialog(diag, ths);
--                diag.setVisible(true);
--        diag.toFront();
-+
-+          SwingUtilities.invokeLater(new Runnable() {
-+              public void run() {
-+                  ImportInspectionDialog diag = new ImportInspectionDialog(ths, panel,
-+                          BibtexFields.DEFAULT_INSPECTION_FIELDS,
-+                          Globals.lang("Import"), openInNew);
-+                  diag.addEntries(entries);
-+                  diag.addCallBack(callBack);
-+                  diag.entryListComplete();
-+                  Util.placeDialog(diag, ths);
-+                  diag.setVisible(true);
-+                  diag.toFront();
-+              }
-+          });
-+
-         } else {
-             ths.addBibEntries(entries, filename, openInNew);
-           if ((panel != null) && (entries.size() == 1)) {
diff --git a/build.number b/build.number
index c2d87c6..9e25b86 100644
--- a/build.number
+++ b/build.number
@@ -1,3 +1,3 @@
 #Build Number for ANT. Do not edit!
-#Thu Nov 29 09:31:57 GMT 2007
-build.number=336
+#Wed Mar 12 21:30:18 CET 2008
+build.number=16
diff --git a/build.xml b/build.xml
index 90b4947..3c0e4b1 100644
--- a/build.xml
+++ b/build.xml
@@ -22,8 +22,8 @@
    Compiler: Ant
    Authors:  Joerg K. Wegner, wegnerj at informatik.uni-tuebingen.de
              Morten O. Alver
-   Version:  $Revision: 2460 $
-             $Date: 2007-11-04 16:58:28 +0100 (Sun, 04 Nov 2007) $
+   Version:  $Revision: 2600 $
+             $Date: 2008-03-04 22:06:51 +0100 (Tue, 04 Mar 2008) $
              $Author: mortenalver $
 
    modified:
@@ -42,16 +42,15 @@
 
 <project name="JabRef" default="jars" basedir=".">
 
-	<!-- ==========================================================================================
+	<!--++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
         PROPERTY SETUP
-     ========================================================================================== -->
+     +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-->
 
 	<!-- some version information -->
-	<property name="jabref.version" value="2.3.1" />
+	<property name="jabref.version" value="2.4b" />
 	<property name="jabref.placeholder.version" value="@version@" />
 	<!-- 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" />
@@ -69,10 +68,12 @@
 	<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" />
@@ -84,11 +85,10 @@
 	<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="tests.dir" value="${src.dir}/tests" />
 
-	<!-- Set the properties for library directories -->
-	<property name="library.directory" value="lib" />
-
-<!--    <property name="nsis.executable" value="makensis.exe"/> -->
+	<property name="nsis.executable" value="makensis.exe"/>
 	<property name="nsis.executable.linux" value="makensis"/>
 
 	<!-- Load user dependent properties -->
@@ -99,28 +99,51 @@
 
 	<!-- win.installer can only be build under Windows if the nsis.executable is found -->
 	<condition property="is.windows">
-		<and>
-			<os family="windows" />
-			<isset property="nsis.executable" />
-		</and>
+	  <and>
+	    <isset property="nsis.executable" />
+	    <os family="windows" />
+	  </and>
 	</condition>
 
-	<taskdef name="jarbundler" classpath="${library.directory}/jarbundler-1.4.jar" classname="com.loomcom.ant.tasks.jarbundler.JarBundler" />
-
+	<fileset id="jarsFileset" dir="${lib.dir}">
+		<include name="antlr.jar" />
+		<include name="antlr-3.0b5.jar" />
+		<include name="looks-2.0.4.jar" />
+		<include name="forms-1.1.0.jar" />
+		<include name="spin.jar" />
+		<include name="glazedlists-1.7.0_java15.jar" />
+		<include name="microba.jar" />
+		<include name="PDFBox-0.7.3-dev-reduced.jar" />
+		<include name="JempBox-0.2.0.jar" />
+		<include name="zoom-java.jar" />
+    	<include name="mysql-connector-java-5.0.7-bin.jar" />
+        <!--<include name="substance-4.1.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>
 
 	<!-- Build classpath -->
 	<path id="classpath">
 		<pathelement path="${build.classes}" />
 		<pathelement path="${build.dir}" />
-		<pathelement location="${library.directory}/antlr.jar" />
-		<pathelement location="${library.directory}/antlr-3.0b5.jar" />
-		<pathelement location="${library.directory}/looks-2.0.4.jar" />
-		<pathelement location="${library.directory}/forms-1.1.0.jar" />
-		<pathelement location="${library.directory}/spin.jar" />
-		<pathelement location="${library.directory}/glazedlists-1.7.0_java15.jar" />
-		<pathelement location="${library.directory}/microba.jar" />
-		<pathelement location="${library.directory}/PDFBox-0.7.3-dev-reduced.jar" />
-		<pathelement location="${library.directory}/JempBox-0.1.0-dev.jar" />
+		<fileset refid="jarsFileset" />
+	</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="${lib.dir}/junit.jar" />
 	</path>
 
 	<target name="run" depends="build">
@@ -130,52 +153,52 @@
 	</target>
 
 	<!-- Runs project -->
-	<target name="runFromJar" depends="jars">
-		<java classname="net.sf.jabref.JabRefMain" fork="true">
+	<target name="runFromJar">
+		<java dir="${build.lib}" classname="net.sf.jabref.JabRefMain" fork="true">
 			<classpath>
 				<pathelement location="${build.lib}/${build.jar}" />
 			</classpath>
 		</java>
 	</target>
 
-	<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" />
+	<!-- 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 -->
-	<target name="compile">
+	<!-- Compiles project excluding tests -->
+	<target name="compile" depends="generate">
 		<mkdir dir="${build.classes}" />
-		<javac debug="off" deprecation="on" destdir="${build.classes}" source="1.5" target="1.5">
+		<javac debug="on" deprecation="on" destdir="${build.classes}" source="1.5" target="1.5">
 			<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.4" target="1.4">
-                  <src path="${java.dir}" />
-                  <include name="**/JabRefMain.java" />
-                </javac>
-
+		<javac debug="on" deprecation="on" destdir="${build.classes}" source="1.4" target="1.4">
+			<src path="${java.dir}" />
+			<include name="**/JabRefMain.java" />
+		</javac>
 	</target>
 
-	<!-- Compiles only the tests -->
+	<!-- Compiles project including tests -->
 	<target name="compiletest">
 		<mkdir dir="${build.classes}" />
-		<!--deprecation="on"-->
-		<javac srcdir="${java.dir}/tests" debug="off" destdir="${build.classes}" source="1.5" target="1.5">
-			<classpath refid="classpath" />
+		<javac debug="on" destdir="${build.classes}" source="1.5" target="1.5">
+			<src path="${java.dir}" />
+			<include name="tests/**" />
+			<classpath refid="classpathTest" />
 		</javac>
 	</target>
 
@@ -190,7 +213,7 @@
 	<!-- Copies in the OSXAdapter class, which is compilable only on Mac  -->
 	<target name="non_osx">
 		<mkdir dir="${build.osx}" />
-		<copy file="${library.directory}/OSXAdapter.class" todir="${build.osx}" />
+		<copy file="${lib.dir}/OSXAdapter.class" todir="${build.osx}" />
 	</target>
 
 	<!-- Jars up project -->
@@ -208,7 +231,13 @@
 				<include name="help/no/**" />
 				<include name="resource/**" />
 			</fileset>
-			<fileset dir="${library.directory}">
+
+			<!-- Add Plugins -->
+			<fileset dir="${src.dir}">
+				<include name="plugins/**" />
+			</fileset>
+
+			<fileset dir="${lib.dir}">
 				<include name="EndNote.zip" />
 			</fileset>
 			<fileset dir="${txt.dir}">
@@ -241,19 +270,9 @@
 			</fileset>
 		</copy>
 
-		<!-- the fonts are used by the new about dialog
-		<mkdir dir="${build.fonts}" />
-		<copy todir="${build.fonts}">
-			<fileset dir="${fonts.dir}">
-				<include name="*" />
-			</fileset>
-		</copy> -->
-
 		<mkdir dir="${build.help}" />
 		<copy todir="${build.help}">
-			<fileset dir="${help.dir}">
-				<!--<include name="*" />-->
-			</fileset>
+			<fileset dir="${help.dir}" />
 		</copy>
 
 		<!-- Insert version informations -->
@@ -266,6 +285,17 @@
 
 	</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
@@ -363,15 +393,9 @@ version=${jabref.version}</echo>
 	<!-- Unpacks jar needed jar files from lib directory into temp directory. -->
 	<target name="unjarlib" description="Unpacks jars from library">
 		<mkdir dir="${build.tmp}" />
-		<unjar src="${library.directory}/antlr.jar" dest="${build.tmp}" />
-		<unjar src="${library.directory}/antlr-3.0b5.jar" dest="${build.tmp}" />
-		<unjar src="${library.directory}/looks-2.0.4.jar" dest="${build.tmp}" />
-		<unjar src="${library.directory}/forms-1.1.0.jar" dest="${build.tmp}" />
-		<unjar src="${library.directory}/spin.jar" dest="${build.tmp}" />
-		<unjar src="${library.directory}/glazedlists-1.7.0_java15.jar" dest="${build.tmp}" />
-		<unjar src="${library.directory}/microba.jar" dest="${build.tmp}" />
-		<unjar src="${library.directory}/PDFBox-0.7.3-dev-reduced.jar" dest="${build.tmp}" />
-		<unjar src="${library.directory}/JempBox-0.1.0-dev.jar" dest="${build.tmp}" />
+		<unjar dest="${build.tmp}">
+			<fileset refid="jarsFileset" />
+		</unjar>
 		<delete dir="${build.tmp}/META-INF" />
 		<!-- rename the microba license file -->
 		<move file="${build.tmp}/license.txt" tofile="${build.tmp}/microba-license.txt" />
@@ -379,7 +403,7 @@ version=${jabref.version}</echo>
 
 
 	<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.4+" stubfile="${library.directory}/JavaApplicationStub" />
+		<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.4+" stubfile="${lib.dir}/JavaApplicationStub" />
 	</target>
 
 
@@ -396,18 +420,17 @@ version=${jabref.version}</echo>
 
 	<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"/>
-		
+		<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" />
+		<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}" />
 
-		<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="gpl.txt" />
@@ -418,16 +441,16 @@ version=${jabref.version}</echo>
 
 		<!-- "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" />
+		  <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">
@@ -463,6 +486,34 @@ version=${jabref.version}</echo>
 
 	</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 ?!;-)
     ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-->
@@ -472,7 +523,7 @@ version=${jabref.version}</echo>
 		<taskdef name="pmd" classname="net.sourceforge.pmd.ant.PMDTask">
 			<classpath>
 				<pathelement path="${classpath}" />
-				<fileset dir="${library.directory}">
+				<fileset dir="${lib.dir}">
 					<include name="*.jar" />
 				</fileset>
 			</classpath>
@@ -508,7 +559,7 @@ version=${jabref.version}</echo>
 		<taskdef name="cpd" classname="net.sourceforge.pmd.cpd.CPDTask">
 			<classpath>
 				<pathelement path="${classpath}" />
-				<fileset dir="${library.directory}">
+				<fileset dir="${lib.dir}">
 					<include name="*.jar" />
 				</fileset>
 			</classpath>
@@ -525,7 +576,7 @@ version=${jabref.version}</echo>
 		<taskdef name="javancss" classname="javancss.JavancssAntTask">
 			<classpath>
 				<pathelement path="${classpath}" />
-				<fileset dir="${library.directory}">
+				<fileset dir="${lib.dir}">
 					<include name="*.jar" />
 				</fileset>
 			</classpath>
@@ -548,7 +599,7 @@ Number (CCN)           maintenance
 		<taskdef name="jalopy" classname="de.hunsicker.jalopy.plugin.ant.AntPlugin">
 			<classpath>
 				<pathelement path="${classpath}" />
-				<fileset dir="${library.directory}">
+				<fileset dir="${lib.dir}">
 					<include name="*.jar" />
 				</fileset>
 			</classpath>
@@ -560,16 +611,6 @@ Number (CCN)           maintenance
 		</jalopy>
 	</target>
 
-	<target name="test">
-		<junit printsummary="yes" fork="yes" haltonfailure="no">
-			<batchtest fork="yes" todir="/tmp/testres">
-				<fileset dir="${build.classes}">
-					<include name="**/*Tester.class" />
-					<include name="**/*Test.class" />
-				</fileset>
-			</batchtest>
-			<classpath refid="classpath" />
-		</junit>
-	</target>
+	<taskdef name="jarbundler" classpath="${lib.dir}/jarbundler-1.4.jar" classname="com.loomcom.ant.tasks.jarbundler.JarBundler" />
 
 </project>
diff --git a/changelog_highlights.txt b/changelog_highlights.txt
deleted file mode 100644
index 4baea2d..0000000
--- a/changelog_highlights.txt
+++ /dev/null
@@ -1,27 +0,0 @@
-These are the most important new features and bugfixes in version 2.3.
-
-Features:
-- Added % at start of signature text in BibTeX output. Parser now reads both old and new style.
-- Added MIS Quarterly export format.
-- Added support for COPAC file format.
-- 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.
-- 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.
-- 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 \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 "authorLast" and "editorLast" markers for using last author's last name in BibTeX keys.
-- Numeric fields (year, volume, number, pmid, citeseercitationcount) are now sorted as numbers when possible.
-
-
-
-Important bug fixes:
-- 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.
-- Fixed bug in entry editor: source panel edits were not properly stored when clicking a different entry in the main table.
-- Fixed problem with wrong enable/disable behaviour of Clear search button when switching between tabs.
-
diff --git a/hs_err_pid7783.log b/hs_err_pid7783.log
deleted file mode 100644
index ebdeae5..0000000
--- a/hs_err_pid7783.log
+++ /dev/null
@@ -1,413 +0,0 @@
-#
-# An unexpected error has been detected by Java Runtime Environment:
-#
-#  SIGSEGV (0xb) at pc=0x0634fa37, pid=7783, tid=3084979088
-#
-# Java VM: Java HotSpot(TM) Client VM (1.6.0_03-b05 mixed mode, sharing)
-# Problematic frame:
-# V  [libjvm.so+0x34fa37]
-#
-# If you would like to submit a bug report, please visit:
-#   http://java.sun.com/webapps/bugreport/crash.jsp
-#
-
----------------  T H R E A D  ---------------
-
-Current thread (0x08058800):  JavaThread "main" [_thread_in_vm, id=7784]
-
-siginfo:si_signo=11, si_errno=0, si_code=1, si_addr=0x0101646e
-
-Registers:
-EAX=0x0101646e, EBX=0xb7e0f0f0, ECX=0x00000028, EDX=0x00000000
-ESP=0xb7e0f0b0, EBP=0xb7e0f0b8, ESI=0x080588dc, EDI=0xb7e0f170
-EIP=0x0634fa37, CR2=0x0101646e, EFLAGS=0x00010202
-
-Top of Stack: (sp=0xb7e0f0b0)
-0xb7e0f0b0:   b7e0f0f0 b7e0f0f0 b7e0f0d8 0634fdf0
-0xb7e0f0c0:   b7e0f0f0 00000028 00000000 00000042
-0xb7e0f0d0:   00000000 b7e0f0f0 b7e0f118 061c9d99
-0xb7e0f0e0:   b7e0f0f0 08059100 00000005 94be5768
-0xb7e0f0f0:   064204a8 08059100 00000000 00000000
-0xb7e0f100:   00000063 00000000 00000000 080590fc
-0xb7e0f110:   94c61628 01016464 b7e0f1c8 06200039
-0xb7e0f120:   b7e0f170 08059100 b5d509d4 b5d509d4 
-
-Instructions: (pc=0x0634fa37)
-0x0634fa27:   08 0f be 4d 0c 8b 43 04 8b 53 08 8b 00 83 c0 0a
-0x0634fa37:   0f be 04 02 39 c8 74 1d 51 68 cc 9e 40 06 6a 2c 
-
-Stack: [0xb7dc0000,0xb7e11000),  sp=0xb7e0f0b0,  free space=316k
-Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
-V  [libjvm.so+0x34fa37]
-V  [libjvm.so+0x34fdf0]
-V  [libjvm.so+0x1c9d99]
-V  [libjvm.so+0x200039]
-j  java.awt.datatransfer.SystemFlavorMap$1.run()Ljava/lang/Object;+63
-v  ~StubRoutines::call_stub
-V  [libjvm.so+0x20bc6d]
-V  [libjvm.so+0x30a828]
-V  [libjvm.so+0x20bb00]
-V  [libjvm.so+0x2619bb]
-C  [libjava.so+0xa96d]  Java_java_security_AccessController_doPrivileged__Ljava_security_PrivilegedAction_2+0x3d
-j  java.security.AccessController.doPrivileged(Ljava/security/PrivilegedAction;)Ljava/lang/Object;+0
-j  java.awt.datatransfer.SystemFlavorMap.<init>()V+67
-j  java.awt.datatransfer.SystemFlavorMap.getDefaultFlavorMap()Ljava/awt/datatransfer/FlavorMap;+40
-j  java.awt.dnd.DropTarget.<init>(Ljava/awt/Component;ILjava/awt/dnd/DropTargetListener;ZLjava/awt/datatransfer/FlavorMap;)V+23
-j  java.awt.dnd.DropTarget.<init>(Ljava/awt/Component;ILjava/awt/dnd/DropTargetListener;Z)V+7
-j  java.awt.dnd.DropTarget.<init>(Ljava/awt/Component;ILjava/awt/dnd/DropTargetListener;)V+5
-j  javax.swing.TransferHandler$SwingDropTarget.<init>(Ljava/awt/Component;)V+5
-j  javax.swing.SwingUtilities.installSwingDropTargetAsNecessary(Ljava/awt/Component;Ljavax/swing/TransferHandler;)V+46
-j  javax.swing.JComponent.setTransferHandler(Ljavax/swing/TransferHandler;)V+21
-j  javax.swing.plaf.basic.BasicTextUI.installDefaults2()V+157
-j  javax.swing.plaf.basic.BasicTextUI.installUI(Ljavax/swing/JComponent;)V+20
-j  javax.swing.plaf.basic.BasicEditorPaneUI.installUI(Ljavax/swing/JComponent;)V+2
-j  javax.swing.plaf.basic.BasicTextPaneUI.installUI(Ljavax/swing/JComponent;)V+2
-j  javax.swing.JComponent.setUI(Ljavax/swing/plaf/ComponentUI;)V+135
-j  javax.swing.text.JTextComponent.setUI(Ljavax/swing/plaf/TextUI;)V+2
-j  javax.swing.text.JTextComponent.updateUI()V+8
-j  javax.swing.text.JTextComponent.<init>()V+62
-j  javax.swing.JEditorPane.<init>()V+1
-j  javax.swing.JTextPane.<init>()V+1
-j  net.sf.jabref.HelpContent.<init>(Lnet/sf/jabref/JabRefPreferences;)V+1
-j  net.sf.jabref.HelpDialog.<init>(Lnet/sf/jabref/JabRefFrame;)V+61
-j  net.sf.jabref.JabRefFrame.<init>()V+190
-j  net.sf.jabref.JabRef.openWindow(Ljava/util/Vector;)V+745
-j  net.sf.jabref.JabRef.<init>([Ljava/lang/String;)V+191
-j  net.sf.jabref.JabRef.main([Ljava/lang/String;)V+5
-v  ~StubRoutines::call_stub
-V  [libjvm.so+0x20bc6d]
-V  [libjvm.so+0x30a828]
-V  [libjvm.so+0x20bb00]
-V  [libjvm.so+0x33156f]
-V  [libjvm.so+0x333f6c]
-V  [libjvm.so+0x277c28]
-C  [libjava.so+0x15224]  Java_sun_reflect_NativeMethodAccessorImpl_invoke0+0x34
-j  sun.reflect.NativeMethodAccessorImpl.invoke0(Ljava/lang/reflect/Method;Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;+0
-j  sun.reflect.NativeMethodAccessorImpl.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;+87
-j  sun.reflect.DelegatingMethodAccessorImpl.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;+6
-j  java.lang.reflect.Method.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;+161
-j  net.sf.jabref.JabRefMain.main([Ljava/lang/String;)V+157
-v  ~StubRoutines::call_stub
-V  [libjvm.so+0x20bc6d]
-V  [libjvm.so+0x30a828]
-V  [libjvm.so+0x20bb00]
-V  [libjvm.so+0x234f26]
-V  [libjvm.so+0x2265cb]
-C  [java+0x1b98]  JavaMain+0x2c8
-C  [libpthread.so.0+0x546b]
-
-Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
-j  java.awt.datatransfer.SystemFlavorMap$1.run()Ljava/lang/Object;+63
-v  ~StubRoutines::call_stub
-j  java.security.AccessController.doPrivileged(Ljava/security/PrivilegedAction;)Ljava/lang/Object;+0
-j  java.awt.datatransfer.SystemFlavorMap.<init>()V+67
-j  java.awt.datatransfer.SystemFlavorMap.getDefaultFlavorMap()Ljava/awt/datatransfer/FlavorMap;+40
-j  java.awt.dnd.DropTarget.<init>(Ljava/awt/Component;ILjava/awt/dnd/DropTargetListener;ZLjava/awt/datatransfer/FlavorMap;)V+23
-j  java.awt.dnd.DropTarget.<init>(Ljava/awt/Component;ILjava/awt/dnd/DropTargetListener;Z)V+7
-j  java.awt.dnd.DropTarget.<init>(Ljava/awt/Component;ILjava/awt/dnd/DropTargetListener;)V+5
-j  javax.swing.TransferHandler$SwingDropTarget.<init>(Ljava/awt/Component;)V+5
-j  javax.swing.SwingUtilities.installSwingDropTargetAsNecessary(Ljava/awt/Component;Ljavax/swing/TransferHandler;)V+46
-j  javax.swing.JComponent.setTransferHandler(Ljavax/swing/TransferHandler;)V+21
-j  javax.swing.plaf.basic.BasicTextUI.installDefaults2()V+157
-j  javax.swing.plaf.basic.BasicTextUI.installUI(Ljavax/swing/JComponent;)V+20
-j  javax.swing.plaf.basic.BasicEditorPaneUI.installUI(Ljavax/swing/JComponent;)V+2
-j  javax.swing.plaf.basic.BasicTextPaneUI.installUI(Ljavax/swing/JComponent;)V+2
-j  javax.swing.JComponent.setUI(Ljavax/swing/plaf/ComponentUI;)V+135
-j  javax.swing.text.JTextComponent.setUI(Ljavax/swing/plaf/TextUI;)V+2
-j  javax.swing.text.JTextComponent.updateUI()V+8
-j  javax.swing.text.JTextComponent.<init>()V+62
-j  javax.swing.JEditorPane.<init>()V+1
-j  javax.swing.JTextPane.<init>()V+1
-j  net.sf.jabref.HelpContent.<init>(Lnet/sf/jabref/JabRefPreferences;)V+1
-j  net.sf.jabref.HelpDialog.<init>(Lnet/sf/jabref/JabRefFrame;)V+61
-j  net.sf.jabref.JabRefFrame.<init>()V+190
-j  net.sf.jabref.JabRef.openWindow(Ljava/util/Vector;)V+745
-j  net.sf.jabref.JabRef.<init>([Ljava/lang/String;)V+191
-j  net.sf.jabref.JabRef.main([Ljava/lang/String;)V+5
-v  ~StubRoutines::call_stub
-j  sun.reflect.NativeMethodAccessorImpl.invoke0(Ljava/lang/reflect/Method;Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;+0
-j  sun.reflect.NativeMethodAccessorImpl.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;+87
-j  sun.reflect.DelegatingMethodAccessorImpl.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;+6
-j  java.lang.reflect.Method.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;+161
-j  net.sf.jabref.JabRefMain.main([Ljava/lang/String;)V+157
-v  ~StubRoutines::call_stub
-
----------------  P R O C E S S  ---------------
-
-Java Threads: ( => current thread )
-  0x08374c00 JavaThread "Image Fetcher 2" daemon [_thread_blocked, id=7800]
-  0x0836c800 JavaThread "Image Fetcher 1" daemon [_thread_blocked, id=7799]
-  0x08367400 JavaThread "AWT-EventQueue-0" [_thread_blocked, id=7798]
-  0x08364000 JavaThread "AWT-Shutdown" [_thread_blocked, id=7797]
-  0x08343000 JavaThread "Image Fetcher 0" daemon [_thread_blocked, id=7796]
-  0x0832b000 JavaThread "AWT-XAWT" daemon [_thread_in_native, id=7795]
-  0x082eb000 JavaThread "Java2D Disposer" daemon [_thread_blocked, id=7794]
-  0x082db000 JavaThread "Thread-2" [_thread_blocked, id=7793]
-  0x082a5c00 JavaThread "Timer-0" daemon [_thread_blocked, id=7792]
-  0x0808d800 JavaThread "Low Memory Detector" daemon [_thread_blocked, id=7790]
-  0x0808c000 JavaThread "CompilerThread0" daemon [_thread_blocked, id=7789]
-  0x0808ac00 JavaThread "Signal Dispatcher" daemon [_thread_blocked, id=7788]
-  0x08081c00 JavaThread "Finalizer" daemon [_thread_blocked, id=7787]
-  0x08080800 JavaThread "Reference Handler" daemon [_thread_blocked, id=7786]
-=>0x08058800 JavaThread "main" [_thread_in_vm, id=7784]
-
-Other Threads:
-  0x0807f400 VMThread [id=7785]
-  0x0808f400 WatcherThread [id=7791]
-
-VM state:not at safepoint (normal execution)
-
-VM Mutex/Monitor currently owned by a thread: None
-
-Heap
- def new generation   total 960K, used 536K [0x8c0a0000, 0x8c1a0000, 0x8c580000)
-  eden space 896K,  56% used [0x8c0a0000, 0x8c11d9a8, 0x8c180000)
-  from space 64K,  53% used [0x8c180000, 0x8c1889c8, 0x8c190000)
-  to   space 64K,   0% used [0x8c190000, 0x8c190000, 0x8c1a0000)
- tenured generation   total 4096K, used 2630K [0x8c580000, 0x8c980000, 0x900a0000)
-   the space 4096K,  64% used [0x8c580000, 0x8c811848, 0x8c811a00, 0x8c980000)
- compacting perm gen  total 12288K, used 2751K [0x900a0000, 0x90ca0000, 0x940a0000)
-   the space 12288K,  22% used [0x900a0000, 0x9034fe18, 0x90350000, 0x90ca0000)
-    ro space 8192K,  73% used [0x940a0000, 0x94682560, 0x94682600, 0x948a0000)
-    rw space 12288K,  58% used [0x948a0000, 0x94f97448, 0x94f97600, 0x954a0000)
-
-Dynamic libraries:
-06000000-06417000 r-xp 00000000 08:03 4524503    /usr/lib/jvm/java-6-sun-1.6.0.03/jre/lib/i386/client/libjvm.so
-06417000-06430000 rwxp 00417000 08:03 4524503    /usr/lib/jvm/java-6-sun-1.6.0.03/jre/lib/i386/client/libjvm.so
-06430000-0684f000 rwxp 06430000 00:00 0 
-08048000-08052000 r-xp 00000000 08:03 4524480    /usr/lib/jvm/java-6-sun-1.6.0.03/jre/bin/java
-08052000-08053000 rwxp 00009000 08:03 4524480    /usr/lib/jvm/java-6-sun-1.6.0.03/jre/bin/java
-08053000-083de000 rwxp 08053000 00:00 0          [heap]
-8c0a0000-8c1a0000 rwxp 8c0a0000 00:00 0 
-8c1a0000-8c580000 rwxp 8c1a0000 00:00 0 
-8c580000-8c980000 rwxp 8c580000 00:00 0 
-8c980000-900a0000 rwxp 8c980000 00:00 0 
-900a0000-90ca0000 rwxp 900a0000 00:00 0 
-90ca0000-940a0000 rwxp 90ca0000 00:00 0 
-940a0000-94683000 r-xs 00001000 08:03 576285     /usr/lib/jvm/java-6-sun-1.6.0.03/jre/lib/i386/client/classes.jsa
-94683000-948a0000 rwxp 94683000 00:00 0 
-948a0000-94f98000 rwxp 005e4000 08:03 576285     /usr/lib/jvm/java-6-sun-1.6.0.03/jre/lib/i386/client/classes.jsa
-94f98000-954a0000 rwxp 94f98000 00:00 0 
-954a0000-95579000 rwxp 00cdc000 08:03 576285     /usr/lib/jvm/java-6-sun-1.6.0.03/jre/lib/i386/client/classes.jsa
-95579000-958a0000 rwxp 95579000 00:00 0 
-958a0000-958a4000 r-xs 00db5000 08:03 576285     /usr/lib/jvm/java-6-sun-1.6.0.03/jre/lib/i386/client/classes.jsa
-958a4000-95ca0000 rwxp 958a4000 00:00 0 
-b4f13000-b4f16000 ---p b4f13000 00:00 0 
-b4f16000-b4f64000 rwxp b4f16000 00:00 0 
-b4f64000-b4f67000 ---p b4f64000 00:00 0 
-b4f67000-b4fb5000 rwxp b4f67000 00:00 0 
-b4fb5000-b505e000 rwxs 00000000 00:09 10649610   /SYSV00000000 (deleted)
-b505e000-b5061000 ---p b505e000 00:00 0 
-b5061000-b50af000 rwxp b5061000 00:00 0 
-b50af000-b50b2000 ---p b50af000 00:00 0 
-b50b2000-b5100000 rwxp b50b2000 00:00 0 
-b5100000-b5102000 r-xs 00000000 08:03 4458195    /var/cache/fontconfig/603b2eb47209ddb3c5269b217a306167-x86.cache-2
-b5102000-b5108000 r-xs 00000000 08:03 4458194    /var/cache/fontconfig/945677eb7aeaf62f1d50efc3fb3ec7d8-x86.cache-2
-b5108000-b510b000 r-xs 00000000 08:03 4458192    /var/cache/fontconfig/e383d7ea5fbe662a33d9b44caf393297-x86.cache-2
-b510b000-b510c000 r-xs 00000000 08:03 4458191    /var/cache/fontconfig/fd9505950c048a77dc4b710eb6a628ed-x86.cache-2
-b510c000-b510e000 r-xs 00000000 08:03 4458190    /var/cache/fontconfig/ddc79d3ea06a7c6ffa86ede85f3bb5df-x86.cache-2
-b510e000-b510f000 r-xs 00000000 08:03 4458189    /var/cache/fontconfig/e7071f4a29fa870f4323321c154eba04-x86.cache-2
-b510f000-b5110000 r-xs 00000000 08:03 4458188    /var/cache/fontconfig/a2ab74764b07279e7c36ddb1d302cf26-x86.cache-2
-b5110000-b5114000 r-xs 00000000 08:03 4458177    /var/cache/fontconfig/921a30a17f0be15c70ac14043cb7a739-x86.cache-2
-b5114000-b5115000 r-xs 00000000 08:03 4458160    /var/cache/fontconfig/c69f04ab05004e31a6d5e715764f16d8-x86.cache-2
-b5115000-b5116000 r-xs 00000000 08:03 4458158    /var/cache/fontconfig/4c73fe0c47614734b17d736dbde7580a-x86.cache-2
-b5116000-b5118000 r-xs 00000000 08:03 4458157    /var/cache/fontconfig/646addb8444faa74ee138aa00ab0b6a0-x86.cache-2
-b5118000-b511b000 r-xs 00000000 08:03 4458156    /var/cache/fontconfig/a755afe4a08bf5b97852ceb7400b47bc-x86.cache-2
-b511b000-b511d000 r-xs 00000000 08:03 4458155    /var/cache/fontconfig/20bd79ad97094406f7d1b9654bfbd926-x86.cache-2
-b511d000-b511e000 r-xs 00000000 08:03 4458153    /var/cache/fontconfig/75a2cd575a62c63e802c11411fb87c37-x86.cache-2
-b511e000-b5120000 r-xs 00000000 08:03 4458152    /var/cache/fontconfig/9c0624108b9a2ae8552f664125be8356-x86.cache-2
-b5120000-b5126000 r-xs 00000000 08:03 4458151    /var/cache/fontconfig/6d41288fd70b0be22e8c3a91e032eec0-x86.cache-2
-b5126000-b5128000 r-xs 00000000 08:03 4458150    /var/cache/fontconfig/de156ccd2eddbdc19d37a45b8b2aac9c-x86.cache-2
-b5128000-b512a000 r-xs 00000000 08:03 4458149    /var/cache/fontconfig/da1bd5ca8443ffe22927a23ce431d198-x86.cache-2
-b512a000-b5132000 r-xs 00000000 08:03 4458122    /var/cache/fontconfig/e3de0de479f42330eadf588a55fb5bf4-x86.cache-2
-b5132000-b5138000 r-xs 00000000 08:03 4458027    /var/cache/fontconfig/0f34bcd4b6ee430af32735b75db7f02b-x86.cache-2
-b5138000-b5139000 r-xs 00000000 08:03 4456462    /var/cache/fontconfig/4794a0821666d79190d59a36cb4f44b5-x86.cache-2
-b5139000-b5150000 r-xs 00000000 08:03 4456461    /var/cache/fontconfig/365b55f210c0a22e9a19e35191240f32-x86.cache-2
-b5150000-b5152000 r-xs 00000000 08:03 4456460    /var/cache/fontconfig/de9486f0b47a4d768a594cb4198cb1c6-x86.cache-2
-b5152000-b5158000 r-xs 00000000 08:03 4456459    /var/cache/fontconfig/d52a8644073d54c13679302ca1180695-x86.cache-2
-b5158000-b515b000 r-xs 00000000 08:03 4456458    /var/cache/fontconfig/6386b86020ecc1ef9690bb720a13964f-x86.cache-2
-b515b000-b515f000 r-xs 00000000 08:03 4456457    /var/cache/fontconfig/089dead882dea3570ffc31a9898cfb69-x86.cache-2
-b515f000-b5166000 r-xs 00000000 08:03 4458203    /var/cache/fontconfig/e13b20fdb08344e0e664864cc2ede53d-x86.cache-2
-b5166000-b5167000 r-xs 00000000 08:03 4458218    /var/cache/fontconfig/e9e44584608a73233979f764b5f9dd81-x86.cache-2
-b5167000-b5168000 r-xs 00000000 08:03 4458183    /var/cache/fontconfig/b5a4f3f568a71026ccdc6a3a51afa9b4-x86.cache-2
-b5168000-b5169000 r-xs 00000000 08:03 4458215    /var/cache/fontconfig/bf1f9632594a1fa28e2cf4d7888deffe-x86.cache-2
-b5169000-b516b000 r-xs 00000000 08:03 4458214    /var/cache/fontconfig/b8613a33de00eecd32d5a94c3c617829-x86.cache-2
-b516b000-b516e000 r-xs 00000000 08:03 4458228    /var/cache/fontconfig/b21a91cee725896328b8cee8091cf747-x86.cache-2
-b516e000-b5177000 r-xs 00000000 08:03 4458212    /var/cache/fontconfig/fd9416c4b92f07c6f59a3a8cf496e9dc-x86.cache-2
-b5177000-b517a000 r-xs 00000000 08:03 4458227    /var/cache/fontconfig/059138ec877db160474b4d5de1248d14-x86.cache-2
-b517a000-b517b000 r-xs 00000000 08:03 4458210    /var/cache/fontconfig/f5a93ac943883aa0fd9a7bfe0f6ec3c1-x86.cache-2
-b517b000-b517d000 r-xs 00000000 08:03 4458219    /var/cache/fontconfig/118d8d5311348bbdf5fe3b106d7c13d4-x86.cache-2
-b517d000-b517e000 r-xs 00000000 08:03 4458208    /var/cache/fontconfig/a1131b7be650f9abae4907495aa5815d-x86.cache-2
-b517e000-b5183000 r-xs 00000000 08:03 4458207    /var/cache/fontconfig/8ab5f685cd6d8ba67c37c908faf08172-x86.cache-2
-b5183000-b5187000 r-xs 00000000 08:03 4458222    /var/cache/fontconfig/0f32d3adc6a232110812e17374eaa446-x86.cache-2
-b5187000-b5189000 r-xs 00000000 08:03 4458205    /var/cache/fontconfig/7b4a97c10f6c0166998ddfa1cf7392fb-x86.cache-2
-b5189000-b518c000 r-xs 00000000 08:03 4458187    /var/cache/fontconfig/61c830dfac3fd78a12654da5e9ba3f56-x86.cache-2
-b518c000-b518d000 r-xs 00000000 08:03 4458230    /var/cache/fontconfig/e0f9e95429e756d56293ed4d63866094-x86.cache-2
-b518d000-b518e000 r-xs 00000000 08:03 4458204    /var/cache/fontconfig/892f88ea27b235637f494d515247eddd-x86.cache-2
-b518e000-b5190000 r-xs 00000000 08:03 4458229    /var/cache/fontconfig/4123634e9c08547d899d0aaff05ebe69-x86.cache-2
-b5190000-b5196000 r-xs 00000000 08:03 4458237    /var/cache/fontconfig/142ecfc435bad6f1fbc2648c1119d5eb-x86.cache-2
-b5196000-b519c000 r-xs 00000000 08:03 4458226    /var/cache/fontconfig/102e5142c2e9e50c5e8ece26694a2dad-x86.cache-2
-b519c000-b519d000 r-xs 00000000 08:03 4458202    /var/cache/fontconfig/92a571655fb1c0ec1c4d6f496220600a-x86.cache-2
-b519d000-b51a5000 r-xs 00000000 08:03 4458199    /var/cache/fontconfig/a960c40fc9306f090224a04585f8a963-x86.cache-2
-b51a9000-b51ac000 ---p b51a9000 00:00 0 
-b51ac000-b51fa000 rwxp b51ac000 00:00 0 
-b51fa000-b51fd000 ---p b51fa000 00:00 0 
-b51fd000-b524b000 rwxp b51fd000 00:00 0 
-b524b000-b524f000 r-xp 00000000 08:03 4475528    /usr/lib/libXfixes.so.3.1.0
-b524f000-b5250000 rwxp 00003000 08:03 4475528    /usr/lib/libXfixes.so.3.1.0
-b5250000-b5257000 r-xp 00000000 08:03 4474918    /usr/lib/libXrender.so.1.3.0
-b5257000-b5258000 rwxp 00006000 08:03 4474918    /usr/lib/libXrender.so.1.3.0
-b5258000-b5260000 r-xp 00000000 08:03 4473311    /usr/lib/libXcursor.so.1.0.2
-b5260000-b5261000 rwxp 00007000 08:03 4473311    /usr/lib/libXcursor.so.1.0.2
-b5275000-b5278000 ---p b5275000 00:00 0 
-b5278000-b52c6000 rwxp b5278000 00:00 0 
-b52c6000-b5344000 r-xp 00000000 08:03 4524535    /usr/lib/jvm/java-6-sun-1.6.0.03/jre/lib/i386/libfontmanager.so
-b5344000-b534e000 rwxp 0007e000 08:03 4524535    /usr/lib/jvm/java-6-sun-1.6.0.03/jre/lib/i386/libfontmanager.so
-b534e000-b5353000 rwxp b534e000 00:00 0 
-b5353000-b5357000 r-xp 00000000 08:03 4473410    /usr/lib/libXdmcp.so.6.0.0
-b5357000-b5358000 rwxp 00003000 08:03 4473410    /usr/lib/libXdmcp.so.6.0.0
-b5358000-b535a000 r-xp 00000000 08:03 4473358    /usr/lib/libXau.so.6.0.0
-b535a000-b535b000 rwxp 00001000 08:03 4473358    /usr/lib/libXau.so.6.0.0
-b535b000-b5362000 r-xp 00000000 08:03 4473747    /usr/lib/libXi.so.6.0.0
-b5362000-b5363000 rwxp 00006000 08:03 4473747    /usr/lib/libXi.so.6.0.0
-b5363000-b5367000 r-xp 00000000 08:03 4473927    /usr/lib/libXtst.so.6.1.0
-b5367000-b5368000 rwxp 00004000 08:03 4473927    /usr/lib/libXtst.so.6.1.0
-b5368000-b5455000 r-xp 00000000 08:03 4474866    /usr/lib/libX11.so.6.2.0
-b5455000-b5459000 rwxp 000ed000 08:03 4474866    /usr/lib/libX11.so.6.2.0
-b5459000-b5466000 r-xp 00000000 08:03 4475531    /usr/lib/libXext.so.6.4.0
-b5466000-b5467000 rwxp 0000d000 08:03 4475531    /usr/lib/libXext.so.6.4.0
-b546a000-b546f000 r-xs 00000000 08:03 4458200    /var/cache/fontconfig/9404ff413c67fc2a1526fd14eb4163a8-x86.cache-2
-b546f000-b5473000 r-xs 00000000 08:03 4458217    /var/cache/fontconfig/b3fedf7c409f006ca1a6fceffceb77cf-x86.cache-2
-b5473000-b5478000 r-xs 00000000 08:03 4458198    /var/cache/fontconfig/6330322105e0c4105d7c7a6ea2974107-x86.cache-2
-b5478000-b547b000 r-xs 00000000 08:03 4458236    /var/cache/fontconfig/b67b32625a2bb51b023d3814a918f351-x86.cache-2
-b547b000-b54b9000 r-xp 00000000 08:03 4524530    /usr/lib/jvm/java-6-sun-1.6.0.03/jre/lib/i386/xawt/libmawt.so
-b54b9000-b54bb000 rwxp 0003e000 08:03 4524530    /usr/lib/jvm/java-6-sun-1.6.0.03/jre/lib/i386/xawt/libmawt.so
-b54bb000-b54bc000 rwxp b54bb000 00:00 0 
-b54bc000-b5582000 r-xp 00000000 08:03 4524526    /usr/lib/jvm/java-6-sun-1.6.0.03/jre/lib/i386/libmlib_image.so
-b5582000-b5583000 rwxp 000c5000 08:03 4524526    /usr/lib/jvm/java-6-sun-1.6.0.03/jre/lib/i386/libmlib_image.so
-b5583000-b55fe000 r-xp 00000000 08:03 4524527    /usr/lib/jvm/java-6-sun-1.6.0.03/jre/lib/i386/libawt.so
-b55fe000-b5605000 rwxp 0007b000 08:03 4524527    /usr/lib/jvm/java-6-sun-1.6.0.03/jre/lib/i386/libawt.so
-b5605000-b5629000 rwxp b5605000 00:00 0 
-b5629000-b562c000 ---p b5629000 00:00 0 
-b562c000-b567a000 rwxp b562c000 00:00 0 
-b567a000-b5688000 r-xs 00656000 08:03 4528453    /usr/lib/jvm/java-6-sun-1.6.0.03/jre/lib/charsets.jar
-b5688000-b568b000 ---p b5688000 00:00 0 
-b568b000-b5709000 rwxp b568b000 00:00 0 
-b5709000-b5885000 r-xs 02c8f000 08:03 4525058    /usr/lib/jvm/java-6-sun-1.6.0.03/jre/lib/rt.jar
-b5885000-b58d1000 r-xs 004f5000 08:03 3180064    /home/alver/Desktop/jabref-2.3.1/2.3.1/jabref-2.3.1/build/lib/JabRef-2.3.1.jar
-b58d1000-b591d000 r-xs 004f5000 08:03 3180064    /home/alver/Desktop/jabref-2.3.1/2.3.1/jabref-2.3.1/build/lib/JabRef-2.3.1.jar
-b591d000-b591e000 ---p b591d000 00:00 0 
-b591e000-b599e000 rwxp b591e000 00:00 0 
-b599e000-b59a1000 ---p b599e000 00:00 0 
-b59a1000-b59ef000 rwxp b59a1000 00:00 0 
-b59ef000-b59f2000 ---p b59ef000 00:00 0 
-b59f2000-b5a70000 rwxp b59f2000 00:00 0 
-b5a70000-b5a73000 ---p b5a70000 00:00 0 
-b5a73000-b5ac1000 rwxp b5a73000 00:00 0 
-b5ac1000-b5ac8000 r-xs 00000000 08:03 4492823    /usr/lib/gconv/gconv-modules.cache
-b5ac8000-b5b07000 r-xp 00000000 08:03 4528462    /usr/lib/locale/en_GB.utf8/LC_CTYPE
-b5b07000-b5b0a000 ---p b5b07000 00:00 0 
-b5b0a000-b5b58000 rwxp b5b0a000 00:00 0 
-b5b58000-b5b5b000 ---p b5b58000 00:00 0 
-b5b5b000-b5ba9000 rwxp b5b5b000 00:00 0 
-b5ba9000-b5baa000 ---p b5ba9000 00:00 0 
-b5baa000-b5c3d000 rwxp b5baa000 00:00 0 
-b5c3d000-b5c57000 rwxp b5c3d000 00:00 0 
-b5c57000-b5c5a000 rwxp b5c57000 00:00 0 
-b5c5a000-b5c75000 rwxp b5c5a000 00:00 0 
-b5c75000-b5c76000 rwxp b5c75000 00:00 0 
-b5c76000-b5c77000 rwxp b5c76000 00:00 0 
-b5c77000-b5c7a000 rwxp b5c77000 00:00 0 
-b5c7a000-b5c95000 rwxp b5c7a000 00:00 0 
-b5c95000-b5c9b000 rwxp b5c95000 00:00 0 
-b5c9b000-b5cb5000 rwxp b5c9b000 00:00 0 
-b5cb5000-b5cc5000 rwxp b5cb5000 00:00 0 
-b5cc5000-b5d40000 rwxp b5cc5000 00:00 0 
-b5d40000-b5e60000 rwxp b5d40000 00:00 0 
-b5e60000-b7d40000 rwxp b5e60000 00:00 0 
-b7d40000-b7d4f000 r-xp 00000000 08:03 4524512    /usr/lib/jvm/java-6-sun-1.6.0.03/jre/lib/i386/libzip.so
-b7d4f000-b7d51000 rwxp 0000e000 08:03 4524512    /usr/lib/jvm/java-6-sun-1.6.0.03/jre/lib/i386/libzip.so
-b7d51000-b7d74000 r-xp 00000000 08:03 4524509    /usr/lib/jvm/java-6-sun-1.6.0.03/jre/lib/i386/libjava.so
-b7d74000-b7d76000 rwxp 00023000 08:03 4524509    /usr/lib/jvm/java-6-sun-1.6.0.03/jre/lib/i386/libjava.so
-b7d76000-b7d7f000 r-xp 00000000 08:03 5130028    /lib/tls/i686/cmov/libnss_files-2.6.1.so
-b7d7f000-b7d81000 rwxp 00008000 08:03 5130028    /lib/tls/i686/cmov/libnss_files-2.6.1.so
-b7d81000-b7d89000 r-xp 00000000 08:03 5130030    /lib/tls/i686/cmov/libnss_nis-2.6.1.so
-b7d89000-b7d8b000 rwxp 00007000 08:03 5130030    /lib/tls/i686/cmov/libnss_nis-2.6.1.so
-b7d8b000-b7d9f000 r-xp 00000000 08:03 5130025    /lib/tls/i686/cmov/libnsl-2.6.1.so
-b7d9f000-b7da1000 rwxp 00013000 08:03 5130025    /lib/tls/i686/cmov/libnsl-2.6.1.so
-b7da1000-b7da3000 rwxp b7da1000 00:00 0 
-b7da3000-b7dae000 r-xp 00000000 08:03 4524508    /usr/lib/jvm/java-6-sun-1.6.0.03/jre/lib/i386/libverify.so
-b7dae000-b7daf000 rwxp 0000b000 08:03 4524508    /usr/lib/jvm/java-6-sun-1.6.0.03/jre/lib/i386/libverify.so
-b7daf000-b7db7000 rwxs 00000000 08:03 2654259    /tmp/hsperfdata_alver/7783
-b7db7000-b7dbe000 r-xp 00000000 08:03 5130035    /lib/tls/i686/cmov/librt-2.6.1.so
-b7dbe000-b7dc0000 rwxp 00006000 08:03 5130035    /lib/tls/i686/cmov/librt-2.6.1.so
-b7dc0000-b7dc3000 ---p b7dc0000 00:00 0 
-b7dc3000-b7e11000 rwxp b7dc3000 00:00 0 
-b7e11000-b7e34000 r-xp 00000000 08:03 5130023    /lib/tls/i686/cmov/libm-2.6.1.so
-b7e34000-b7e36000 rwxp 00023000 08:03 5130023    /lib/tls/i686/cmov/libm-2.6.1.so
-b7e36000-b7e37000 rwxp b7e36000 00:00 0 
-b7e37000-b7f7b000 r-xp 00000000 08:03 5130019    /lib/tls/i686/cmov/libc-2.6.1.so
-b7f7b000-b7f7c000 r-xp 00143000 08:03 5130019    /lib/tls/i686/cmov/libc-2.6.1.so
-b7f7c000-b7f7e000 rwxp 00144000 08:03 5130019    /lib/tls/i686/cmov/libc-2.6.1.so
-b7f7e000-b7f81000 rwxp b7f7e000 00:00 0 
-b7f81000-b7f83000 r-xp 00000000 08:03 5130022    /lib/tls/i686/cmov/libdl-2.6.1.so
-b7f83000-b7f85000 rwxp 00001000 08:03 5130022    /lib/tls/i686/cmov/libdl-2.6.1.so
-b7f85000-b7f8c000 r-xp 00000000 08:03 4524511    /usr/lib/jvm/java-6-sun-1.6.0.03/jre/lib/i386/jli/libjli.so
-b7f8c000-b7f8e000 rwxp 00006000 08:03 4524511    /usr/lib/jvm/java-6-sun-1.6.0.03/jre/lib/i386/jli/libjli.so
-b7f8e000-b7f8f000 rwxp b7f8e000 00:00 0 
-b7f8f000-b7fa3000 r-xp 00000000 08:03 5130033    /lib/tls/i686/cmov/libpthread-2.6.1.so
-b7fa3000-b7fa5000 rwxp 00013000 08:03 5130033    /lib/tls/i686/cmov/libpthread-2.6.1.so
-b7fa5000-b7fa7000 rwxp b7fa5000 00:00 0 
-b7fa9000-b7fb0000 r-xp 00000000 08:03 5130026    /lib/tls/i686/cmov/libnss_compat-2.6.1.so
-b7fb0000-b7fb2000 rwxp 00006000 08:03 5130026    /lib/tls/i686/cmov/libnss_compat-2.6.1.so
-b7fb2000-b7fb8000 r-xp 00000000 08:03 4524497    /usr/lib/jvm/java-6-sun-1.6.0.03/jre/lib/i386/native_threads/libhpi.so
-b7fb8000-b7fb9000 rwxp 00006000 08:03 4524497    /usr/lib/jvm/java-6-sun-1.6.0.03/jre/lib/i386/native_threads/libhpi.so
-b7fb9000-b7fba000 rwxp b7fb9000 00:00 0 
-b7fba000-b7fbb000 r-xp b7fba000 00:00 0 
-b7fbb000-b7fbd000 rwxp b7fbb000 00:00 0 
-b7fbd000-b7fd7000 r-xp 00000000 08:03 5095975    /lib/ld-2.6.1.so
-b7fd7000-b7fd9000 rwxp 00019000 08:03 5095975    /lib/ld-2.6.1.so
-bfab1000-bfae8000 rwxp bfab1000 00:00 0          [stack]
-ffffe000-fffff000 r-xp 00000000 00:00 0          [vdso]
-
-VM Arguments:
-java_command: build/lib/JabRef-2.3.1.jar
-Launcher Type: SUN_STANDARD
-
-Environment Variables:
-PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11:/usr/games
-USERNAME=alver
-LD_LIBRARY_PATH=/usr/lib/jvm/java-6-sun-1.6.0.03/jre/lib/i386/client:/usr/lib/jvm/java-6-sun-1.6.0.03/jre/lib/i386:/usr/lib/jvm/java-6-sun-1.6.0.03/jre/../lib/i386
-SHELL=/bin/bash
-DISPLAY=:0.0
-
-Signal Handlers:
-SIGSEGV: [libjvm.so+0x3b29c0], sa_mask[0]=0x7ffbfeff, sa_flags=0x10000004
-SIGBUS: [libjvm.so+0x3b29c0], sa_mask[0]=0x7ffbfeff, sa_flags=0x10000004
-SIGFPE: [libjvm.so+0x309ec0], sa_mask[0]=0x7ffbfeff, sa_flags=0x10000004
-SIGPIPE: [libjvm.so+0x309ec0], sa_mask[0]=0x7ffbfeff, sa_flags=0x10000004
-SIGILL: [libjvm.so+0x309ec0], sa_mask[0]=0x7ffbfeff, sa_flags=0x10000004
-SIGUSR1: SIG_DFL, sa_mask[0]=0x00000000, sa_flags=0x00000000
-SIGUSR2: [libjvm.so+0x30bef0], sa_mask[0]=0x00000000, sa_flags=0x10000004
-SIGHUP: [libjvm.so+0x30b910], sa_mask[0]=0x7ffbfeff, sa_flags=0x10000004
-SIGINT: [libjvm.so+0x30b910], sa_mask[0]=0x7ffbfeff, sa_flags=0x10000004
-SIGQUIT: [libjvm.so+0x30b910], sa_mask[0]=0x7ffbfeff, sa_flags=0x10000004
-SIGTERM: [libjvm.so+0x30b910], sa_mask[0]=0x7ffbfeff, sa_flags=0x10000004
-SIGUSR2: [libjvm.so+0x30bef0], sa_mask[0]=0x00000000, sa_flags=0x10000004
-
-
----------------  S Y S T E M  ---------------
-
-OS:lenny/sid
-
-uname:Linux 2.6.22-14-generic #1 SMP Sun Oct 14 23:05:12 GMT 2007 i686
-libc:glibc 2.6.1 NPTL 2.6.1 
-rlimit: STACK 8192k, CORE 0k, NPROC 8190, NOFILE 1024, AS infinity
-load average:1.57 1.42 1.32
-
-CPU:total 1 (1 cores per cpu, 1 threads per core) family 6 model 13 stepping 8, cmov, cx8, fxsr, mmx, sse, sse2
-
-Memory: 4k page, physical 1035536k(114348k free), swap 1815304k(1780512k free)
-
-vm_info: Java HotSpot(TM) Client VM (1.6.0_03-b05) for linux-x86, built on Sep 24 2007 22:45:46 by "java_re" with gcc 3.2.1-7a (J2SE release)
-
diff --git a/lib/JempBox-0.1.0-dev.jar b/lib/JempBox-0.1.0-dev.jar
deleted file mode 100644
index 9ede3a8..0000000
Binary files a/lib/JempBox-0.1.0-dev.jar and /dev/null differ
diff --git a/lib/JempBox-0.2.0.jar b/lib/JempBox-0.2.0.jar
new file mode 100644
index 0000000..b7de2c8
Binary files /dev/null and b/lib/JempBox-0.2.0.jar differ
diff --git a/lib/mysql-connector-java-5.0.7-bin.jar b/lib/mysql-connector-java-5.0.7-bin.jar
new file mode 100644
index 0000000..412138a
Binary files /dev/null and b/lib/mysql-connector-java-5.0.7-bin.jar differ
diff --git a/lib/plugin/JPFCodeGenerator-rt.jar b/lib/plugin/JPFCodeGenerator-rt.jar
new file mode 100644
index 0000000..569acb1
Binary files /dev/null and b/lib/plugin/JPFCodeGenerator-rt.jar differ
diff --git a/lib/plugin/JPFCodeGenerator.jar b/lib/plugin/JPFCodeGenerator.jar
new file mode 100644
index 0000000..9afcfd3
Binary files /dev/null and b/lib/plugin/JPFCodeGenerator.jar differ
diff --git a/lib/plugin/commons-logging.jar b/lib/plugin/commons-logging.jar
new file mode 100644
index 0000000..b73a80f
Binary files /dev/null and b/lib/plugin/commons-logging.jar differ
diff --git a/lib/plugin/jpf-boot.jar b/lib/plugin/jpf-boot.jar
new file mode 100644
index 0000000..358db3a
Binary files /dev/null and b/lib/plugin/jpf-boot.jar differ
diff --git a/lib/plugin/jpf.jar b/lib/plugin/jpf.jar
new file mode 100644
index 0000000..2578ecb
Binary files /dev/null and b/lib/plugin/jpf.jar differ
diff --git a/lib/plugin/velocity-dep-1.5.jar b/lib/plugin/velocity-dep-1.5.jar
new file mode 100644
index 0000000..be52b9a
Binary files /dev/null and b/lib/plugin/velocity-dep-1.5.jar differ
diff --git a/src/help/About.html b/src/help/About.html
index 89fcb3b..85a8827 100755
--- a/src/help/About.html
+++ b/src/help/About.html
@@ -3,12 +3,12 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <center>
         <h1>JabRef version @version@</h1>
 
-        <p>(c) 2007</p>
+        <p>(c) 2008</p>
 
         <p><img src="/images/JabRef-icon-48.png" /></p>
 
@@ -43,6 +43,7 @@
 
         <p>Michael Beckmann,
         Oliver Beckmann,
+        Fedor Bezrukov,            
         Aaron Chen,
         Fabrice Dessaint,
         Nathan Dunn,
diff --git a/src/help/BaseFrameHelp.html b/src/help/BaseFrameHelp.html
index bc3a37a..951ab80 100755
--- a/src/help/BaseFrameHelp.html
+++ b/src/help/BaseFrameHelp.html
@@ -3,7 +3,7 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>The JabRef main window</h1>
 
@@ -108,8 +108,8 @@
     <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>
+    characters, e.g.:<br />
+      '#jan# 1997',<br />
     which will be interpreted as the string named 'jan' followed by
     ' 1997'.</p>
 
diff --git a/src/help/BibtexHelp.html b/src/help/BibtexHelp.html
index b25bf18..992c991 100755
--- a/src/help/BibtexHelp.html
+++ b/src/help/BibtexHelp.html
@@ -3,7 +3,7 @@
 <body style="color: rgb(39, 88, 86);">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>About <em>bibtex</em></h1>
 
@@ -32,83 +32,83 @@
         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>
+        string.<br />
+        <br /></li>
 
-        <li><strong>address<br></strong> Usually the address of
+        <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
+        <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
+        <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>
+        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>
+        names.<br />
+        <br /></li>
 
-        <li><strong>booktitle<br></strong> Title of a book, part
+        <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
+        <li><strong>chapter<br /></strong> A chapter (or section or
         whatever) number.</li>
 
-        <li><strong>crossref<br></strong> The database key of the
+        <li><strong>crossref<br /></strong> The database key of the
         entry being cross referenced.</li>
 
-        <li><strong>edition<br></strong> The edition of a
+        <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
+        <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
+        <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
+        <li><strong>institution<br /></strong> The sponsoring
         institution of a technical report.</li>
 
-        <li><strong>journal<br></strong> A journal name. The name
+        <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,
+        <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
+        <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
+        <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>
+        <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
@@ -116,10 +116,10 @@
         it a number; and sometimes books are given numbers in a
         named series.</li>
 
-        <li><strong>organization<br></strong> The organization
+        <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
+        <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
@@ -129,38 +129,38 @@
         dash used in TeX to denote number ranges (as in
         <tt>7-33</tt>).</li>
 
-        <li><strong>publisher<br></strong> The publisher's
+        <li><strong>publisher<br /></strong> The publisher's
         name.</li>
 
-        <li><strong>school<br></strong> The name of the school
+        <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
+        <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
+        <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
+        <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
+        <li><strong>volume<br /></strong> The volume of a journal
         or multivolume book.</li>
 
-        <li><strong>year<br></strong> The year of publication or,
+        <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>
+    </ul><br />
 
 
     <h2>Other fields</h2>
@@ -172,91 +172,91 @@
     <ul>
         <li>
         <strong><span style="font-weight: normal; font-style: italic;">
-        affiliation*</span><br></strong> The authors
-        affiliation.<br>
-        <br></li>
+        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>abstract<br /></strong> An abstract of the
+        work.<br />
+        <br /></li>
 
-        <li><strong>doi<br></strong> The Digital Object
+        <li><strong>doi<br /></strong> The Digital Object
         Identifier, a permanent identifier given to
-        documents.<br>
-        <br></li>
+        documents.<br />
+        <br /></li>
 
-        <li><strong>eid<br></strong> The Electronic identifier is
+        <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>
+        <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>
+        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>
+        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>
+        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>
+        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>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>
+        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
+        location*</span><br /></strong> A location associated with
         the entry, such as the city in which a conference took
-        place.<br>
-        <br></li>
+        place.<br />
+        <br /></li>
 
         <li>
         <strong><span style="font-weight: normal; font-style: italic;">
-        LCCN*</span><br></strong> The Library of Congress Call
-        Number. I've also seen this as <tt>lib-congress</tt>.<br>
-        <br></li>
+        LCCN*</span><br /></strong> The Library of Congress Call
+        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>
+        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>
+        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>
+        size*</span><br /></strong> The physical dimensions of a
+        work.<br />
+        <br /></li>
 
-        <li><strong>URL<br></strong> The WWW Universal Resource
+        <li><strong>URL<br /></strong> The WWW Universal 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
@@ -266,10 +266,10 @@
     <h3>JuraBib</h3>
 
     <ul>
-        <li><strong>urldate<br></strong> The date of the last
+        <li><strong>urldate<br /></strong> The date of the last
         page visit.</li>
-    </ul><br>
-     *) not direct supported by JabRef<br>
-     <br>
+    </ul><br />
+     *) not direct supported by JabRef<br />
+     <br />
 </body>
 </html>
\ No newline at end of file
diff --git a/src/help/CiteSeerHelp.html b/src/help/CiteSeerHelp.html
index ff0823f..cd4e720 100644
--- a/src/help/CiteSeerHelp.html
+++ b/src/help/CiteSeerHelp.html
@@ -3,7 +3,7 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>Importing From CiteSeer</h1>
 
@@ -21,8 +21,8 @@
     content page on CiteSeer. The citeseerurl field must be in one
     of the following formats:</p>
 
-    <p>http://citeseer.ist.psu.edu/DDDDDD[.html], or<br>
-    oai:CiteSeerPSU:DDDDDD, or<br>
+    <p>http://citeseer.ist.psu.edu/DDDDDD[.html], or<br />
+    oai:CiteSeerPSU:DDDDDD, or<br />
     DDDDDD</p>
 
     <p>where DDDDD is a sequence of digits. To find the sequence of
diff --git a/src/help/CommandLine.html b/src/help/CommandLine.html
index d7091d8..060d1c9 100644
--- a/src/help/CommandLine.html
+++ b/src/help/CommandLine.html
@@ -3,7 +3,7 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>Command line options</h1>
 
@@ -121,5 +121,14 @@
     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>
\ No newline at end of file
diff --git a/src/help/ContentSelectorHelp.html b/src/help/ContentSelectorHelp.html
index d75661e..2830169 100755
--- a/src/help/ContentSelectorHelp.html
+++ b/src/help/ContentSelectorHelp.html
@@ -3,7 +3,7 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>Field content selector</h1>
 
diff --git a/src/help/Contents.html b/src/help/Contents.html
index 16142bd..1a268a4 100755
--- a/src/help/Contents.html
+++ b/src/help/Contents.html
@@ -3,53 +3,71 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>Help contents</h1>
 
-    <p><a href="HelpHelp.html">About the Help window</a><br>
-     <a href="JabRefHelp.html">General information</a><br></p>
-
+<h2>General</h2>
+     <a href="HelpHelp.html">About the Help window</a><br>
+     <a href="JabRefHelp.html">General information</a><br>
+     <a href="BaseFrameHelp.html">The JabRef main window</a><br>
+     <a href="EntryEditorHelp.html">Entry editor</a><br>
 
+<h2>Fields</h2>
     <p><a href="BibtexHelp.html"><em>Bibtex</em> help</a><br>
-     <a href="CommandLine.html">Command line options</a><br>
-     <a href="CustomExports.html">Custom export filters</a><br>
-     <a href="CustomImports.html">Custom import filters</a><br>
+     <a href="FileLinks.html">External file links</a><br>
+     <a href="ExternalFiles.html">PDF/PS/URL/DOI links in
+    JabRef</a><br>
+     <a href="TimeStampHelp.html">Entry time stamps</a><br>
+     <a href="OwnerHelp.html">The 'owner' field</a><br>
+     <a href="ContentSelectorHelp.html">Field content
+    selector</a><br>
+     <a href="JournalAbbreviations.html">Journal
+    abbreviations</a><br>
+
+<h2>Finding and sorting entries</h2>
+     <a href="GroupsHelp.html">Help on using
+    <em>Groups</em></a><br>
+     <a href="MarkingHelp.html">Marking entries</a><br>
+     <a href="SearchHelp.html">Searching in JabRef</a><br>
+
+<h2>Setup</h2>
+     <a href="StringEditorHelp.html">String editor</a><br>
+     <a href="DatabaseProperties.html">Database properties window</<a><br>
+     <a href="PreviewHelp.html">Entry preview setup</a><br>
      <a href="LabelPatterns.html">Customizing the BibTex key
     generator</a><br>
      <a href="CustomEntriesHelp.html">Customizing entry
     types</a><br>
      <a href="GeneralFields.html">Customizing general
     fields</a><br>
+     <a href="Plugin.html">Extend JabRef using plugins</a><br>
+
+<h2>Import/Export</h2>
+     <a href="CustomExports.html">Custom export filters</a><br>
+     <a href="CustomImports.html">Custom import filters</a><br>
+     <a href="ImportInspectionDialog.html">Import inspection
+    window</a><br>
      <a href="EndNoteFilters.html">The EndNote import/export filter
     set</a><br>
-     <a href="EntryEditorHelp.html">Entry editor</a><br>
-     <a href="FileLinks.html">External file links</a><br>
-     <a href="TimeStampHelp.html">Entry time stamps</a><br>
+     <a href="OpenOfficeHelp.html">Using JabRef bibliographies in
+    OpenOffice.org</a><br>
      <a href="CiteSeerHelp.html">Fetching entries from
     <em>CiteSeer</em></a><br>
-     <a href="MedlineHelp.html">Fetching entries from
-    <em>Medline</em></a><br>
      <a href="IEEEXploreHelp.html">Fetching entries from
     <em>IEEExplore</em></a><br>
-     <a href="ContentSelectorHelp.html">Field content
-    selector</a><br>
-     <a href="GroupsHelp.html">Help on using
-    <em>Groups</em></a><br>
-     <a href="ImportInspectionDialog.html">Import inspection
-    window</a><br>
-     <a href="JournalAbbreviations.html">Journal
-    abbreviations</a><br>
-     <a href="BaseFrameHelp.html">The JabRef main window</a><br>
-     <a href="OwnerHelp.html">The 'owner' field</a><br>
-     <a href="MarkingHelp.html">Marking entries</a><br>
-     <a href="OpenOfficeHelp.html">Using JabRef bibliographies in
-    OpenOffice.org</a><br>
-     <a href="ExternalFiles.html">PDF/PS/URL/DOI links in
-    JabRef</a><br>
-     <a href="SearchHelp.html">Searching in JabRef</a><br>
-     <a href="StringEditorHelp.html">String editor</a><br>
-     <a href="PreviewHelp.html">Entry preview setup</a><br>
-     <a href="XMPHelp.html">XMP metadata support in JabRef</a></p>
+     <a href="MedlineHelp.html">Fetching entries from
+    <em>Medline</em></a><br>
+     <a href="JSTOR.html"><em>JStor</em> search</a><br>
+     <a href="Spires.html"><em>Spires</em> search</a><br>
+     <a href="SQLExport.html">Export to an External SQL Database</a><br>
+     <a href="XMPHelp.html">XMP metadata support in JabRef</a><br>
+     <a href="CommandLine.html">Command line options</a><br>
+     <a href="RemoteHelp.html">Remote operations</a><br>
+     
+     
+<h2>Miscellaneous</h2>
+     <a href="About.html">About JabRef</a><br>
+
 </body>
-</html>
\ No newline at end of file
+</html> 
\ No newline at end of file
diff --git a/src/help/CustomEntriesHelp.html b/src/help/CustomEntriesHelp.html
index 7623c76..fccfb6b 100644
--- a/src/help/CustomEntriesHelp.html
+++ b/src/help/CustomEntriesHelp.html
@@ -3,7 +3,7 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>Customizing entry types</h1>
 
diff --git a/src/help/CustomExports.html b/src/help/CustomExports.html
index 4e239c8..2275bc6 100644
--- a/src/help/CustomExports.html
+++ b/src/help/CustomExports.html
@@ -3,7 +3,7 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>Custom export filters</h1>
 
@@ -57,14 +57,14 @@
     <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>
+    <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>
+    <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>
@@ -304,7 +304,7 @@
     <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>
+    <code><case1>@<range11>@<format>@<range12>@<format>@<range13>...@@<br />
 
      <case2>@<range21>@... and so on.</code>
 
@@ -401,8 +401,8 @@
     by instead using the <code>\begin</code> and <code>\end</code>
     commands:</p>
 
-    <p><code>\begin{editor}<br>
-    \format[HTMLChars,AuthorFirstFirst]{\editor} (Ed.)<br>
+    <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
@@ -428,7 +428,7 @@
     keyword:</p>
 
     <p><code>\begingroup{keywords}New Category:
-    \format[HTMLChars]{\keywords}<br>
+    \format[HTMLChars]{\keywords}<br />
      \endgroup{keywords}</code></p>
 
     <h2>Sharing your work</h2>
@@ -441,5 +441,15 @@
     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.4b1 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>
+
+
 </body>
 </html>
diff --git a/src/help/CustomImports.html b/src/help/CustomImports.html
index bbc815d..d1615f5 100644
--- a/src/help/CustomImports.html
+++ b/src/help/CustomImports.html
@@ -3,7 +3,7 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>Custom import filters</h1>
 
@@ -67,8 +67,8 @@
 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>
+</pre><br />
+    <br />
 
     <p>In your favorite IDE or text editor create a class derived
     from <code>ImportFormat</code> that implements methods
@@ -111,8 +111,8 @@ public class SimpleCsvImporter extends ImportFormat {
         return bibitems;
   }
 }
-</pre><br>
-    <br>
+</pre><br />
+    <br />
 
     <p>Note that the example is in the default package. Suppose you
     have saved it under
@@ -123,8 +123,8 @@ public class SimpleCsvImporter extends ImportFormat {
     <pre>
 javac -classpath JabRef-2.0.jar SimpleCsvImporter.java
 </pre>Now there should be a file
-<code>/mypath/SimpleCsvImporter.class</code>.<br>
-    <br>
+<code>/mypath/SimpleCsvImporter.class</code>.<br />
+    <br />
 
 
     <p>In JabRef, open <b>Options -> Manage custom imports</b>,
diff --git a/src/help/DatabaseProperties.html b/src/help/DatabaseProperties.html
new file mode 100644
index 0000000..dd41298
--- /dev/null
+++ b/src/help/DatabaseProperties.html
@@ -0,0 +1,50 @@
+<html xmlns="http://www.w3.org/1999/xhtml">
+
+<body text="#275856">
+    <basefont size="4"
+          color="#2F4958"
+          face="arial" />
+
+    <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.
+
+
+
+
+</body>
+</html>
\ No newline at end of file
diff --git a/src/help/EndNoteFilters.html b/src/help/EndNoteFilters.html
index eb46097..9314958 100644
--- a/src/help/EndNoteFilters.html
+++ b/src/help/EndNoteFilters.html
@@ -3,7 +3,7 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>EndNote Export Filter</h1>
 
diff --git a/src/help/EntryEditorHelp.html b/src/help/EntryEditorHelp.html
index b997bdc..19c3d63 100755
--- a/src/help/EntryEditorHelp.html
+++ b/src/help/EntryEditorHelp.html
@@ -3,7 +3,7 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>The entry editor</h1>
 
diff --git a/src/help/ExternalFiles.html b/src/help/ExternalFiles.html
index b60a793..70e71b5 100644
--- a/src/help/ExternalFiles.html
+++ b/src/help/ExternalFiles.html
@@ -3,7 +3,7 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>PDF/PS/URL/DOI links in JabRef</h1>
 
diff --git a/src/help/FileLinks.html b/src/help/FileLinks.html
index de2f892..5ff166d 100644
--- a/src/help/FileLinks.html
+++ b/src/help/FileLinks.html
@@ -3,7 +3,7 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>File links in JabRef</h1>
 
diff --git a/src/help/GeneralFields.html b/src/help/GeneralFields.html
index d931b53..28d48fa 100644
--- a/src/help/GeneralFields.html
+++ b/src/help/GeneralFields.html
@@ -3,7 +3,7 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>Customizing general fields</h1>
 
@@ -15,8 +15,8 @@
     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>
+    <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
diff --git a/src/help/GroupsHelp.html b/src/help/GroupsHelp.html
index dfeec0f..c13f017 100644
--- a/src/help/GroupsHelp.html
+++ b/src/help/GroupsHelp.html
@@ -3,7 +3,7 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>Groups</h1>
 
diff --git a/src/help/HelpHelp.html b/src/help/HelpHelp.html
index 847e6e3..4de8bfe 100755
--- a/src/help/HelpHelp.html
+++ b/src/help/HelpHelp.html
@@ -3,7 +3,7 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>The help window</h1>
 
diff --git a/src/help/IEEEXploreHelp.html b/src/help/IEEEXploreHelp.html
index 9a57e35..fc014b8 100644
--- a/src/help/IEEEXploreHelp.html
+++ b/src/help/IEEEXploreHelp.html
@@ -3,7 +3,7 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>Search IEEEXplore</h1>
 
diff --git a/src/help/ImportInspectionDialog.html b/src/help/ImportInspectionDialog.html
index 3c94e9b..13695de 100644
--- a/src/help/ImportInspectionDialog.html
+++ b/src/help/ImportInspectionDialog.html
@@ -3,7 +3,7 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>Import inspection window</h1>
 
diff --git a/src/help/JSTOR.html b/src/help/JSTOR.html
new file mode 100644
index 0000000..decb4c8
--- /dev/null
+++ b/src/help/JSTOR.html
@@ -0,0 +1,37 @@
+<html xmlns="http://www.w3.org/1999/xhtml">
+
+
+<body text="#275856">
+    <basefont size="4"
+          color="#2F4958"
+          face="arial">
+
+<h1>JStor search</h1>
+
+The following help was taken from the JStor website and may change if JStor does:
+
+    <p> * You will be searching the author, title, and full-text of all types of journal 
+  content (articles, book reviews, etc.) by default<br>
+  * Use quotation marks to search for a phrase (e.g., "punctuated equilibrium")<br>
+  * Use ti: to search for an article title, au: to search for an author (e.g., 
+  ti:"two-person cooperative games", au:"john nash")<br>
+  * Use AND, OR, NOT to combine terms (e.g., ti:"two-person cooperative games" 
+  AND au:"john nash")</p>
+<p>JSTOR is a not-for-profit organization with a dual mission to create and maintain 
+  a trusted archive of important scholarly journals, and to provide access to 
+  these journals as widely as possible. JSTOR offers researchers the ability to 
+  retrieve high-resolution, scanned images of journal issues and pages as they 
+  were originally designed, printed, and illustrated. The journals archived in 
+  JSTOR span many disciplines.</p>
+<p>JStor offers access to the following topics:</p>
+<p>art & sciences<br>
+  biology<br>
+  business<br>
+  ecology & botany<br>
+  health & general sciences<br>
+  languages & literature<br>
+  mathematics & statistics<br>
+  music</p>
+<p>The search provides a maximum of 200 results.</p>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/help/JabRefHelp.html b/src/help/JabRefHelp.html
index 63bf0f9..17f8656 100755
--- a/src/help/JabRefHelp.html
+++ b/src/help/JabRefHelp.html
@@ -3,7 +3,7 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>JabRef</h1>
 
diff --git a/src/help/JournalAbbreviations.html b/src/help/JournalAbbreviations.html
index 341ff76..7ba29e7 100644
--- a/src/help/JournalAbbreviations.html
+++ b/src/help/JournalAbbreviations.html
@@ -3,7 +3,7 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>Journal abbreviations</h1>
 
diff --git a/src/help/LabelPatterns.html b/src/help/LabelPatterns.html
index 6fbc77a..38eb3ab 100644
--- a/src/help/LabelPatterns.html
+++ b/src/help/LabelPatterns.html
@@ -3,7 +3,7 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>Customizing the BibTeX key generator</h1>
 
@@ -29,46 +29,46 @@
 
     <ul>
         <li><b>[<code>auth</code>]</b>: The last name of the first
-        author<br></li>
+        author<br /></li>
 
         <li><b>[<code>authors</code>]</b>: The last name of all
-        authors<br></li>
+        authors<br /></li>
 
         <li><b>[<code>authorLast</code>]</b>: The last name of the last
-        author<br></li>
+        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>
+        appended.<br /></li>
 
         <li><b>[<code>authIniN</code>]</b>: The beginning of each
         author's last name, using no more than N
-        characters.<br></li>
+        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>
+        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>
+        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>
+        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>
+        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>
+        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>
+        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)
@@ -83,56 +83,59 @@
 
     <ul>
         <li><b>[<code>edtr</code>]</b>: The last name of the first
-        editor<br></li>
+        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>
+        characters<br /></li>
 
         <li><b>[<code>editors</code>]</b>: The last name of all
-        editors<br></li>
+        editors<br /></li>
 
         <li><b>[<code>editorLast</code>]</b>: The last name of the last
-        editor<br></li>
+        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>
+        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>
+        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>
+        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>
+        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>
+        editors.<br /></li>
 
         <li><b>[<code>firstpage</code>]</b>: The number of the
-        first page of the publication<br></li>
+        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>
+        commas or semicolons.<br /></li>
 
         <li><b>[<code>lastpage</code>]</b>: The number of the last
-        page of the publication<br></li>
+        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>
+        the title<br /></li>
 
         <li><b>[<code>shortyear</code>]</b>: The last 2 digits of
-        the publication year<br></li>
+        the publication year<br /></li>
 
         <li><b>[<code>veryshorttitle</code>]</b>: The first word of
-        the title, discounting 'the', 'a', 'an'.<br></li>
+        the title, discounting 'the', 'a', 'an'.<br /></li>
     </ul>
 
     <p>A field name (or one of the above pseudo-field names) may
@@ -145,12 +148,12 @@
         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>
+        "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>
+        lowercase.<br /></li>
     </ul>
 
     <p>If you haven't defined a key pattern for a certain entry
@@ -166,8 +169,8 @@
     labels might look like:</p>
 
     <blockquote>
-        <code>Yared1998</code><br>
-         <code>Yared1998a</code><br>
+        <code>Yared1998</code><br />
+         <code>Yared1998a</code><br />
         <code>Yared1998b</code>
     </blockquote>
 
diff --git a/src/help/MarkingHelp.html b/src/help/MarkingHelp.html
index ac5329c..1b97321 100644
--- a/src/help/MarkingHelp.html
+++ b/src/help/MarkingHelp.html
@@ -3,7 +3,7 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>Mark entries</h1>
 
diff --git a/src/help/MedlineHelp.html b/src/help/MedlineHelp.html
index 0932df9..626cce2 100644
--- a/src/help/MedlineHelp.html
+++ b/src/help/MedlineHelp.html
@@ -3,7 +3,7 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>Fetching Medline entries</h1>
 
diff --git a/src/help/OpenOfficeHelp.html b/src/help/OpenOfficeHelp.html
index 8f5ce96..4814d16 100644
--- a/src/help/OpenOfficeHelp.html
+++ b/src/help/OpenOfficeHelp.html
@@ -3,7 +3,7 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>Using JabRef bibliographies in OpenOffice.org</h1>
 
diff --git a/src/help/OwnerHelp.html b/src/help/OwnerHelp.html
index 5819e0e..8ce1853 100644
--- a/src/help/OwnerHelp.html
+++ b/src/help/OwnerHelp.html
@@ -3,7 +3,7 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>The 'owner' field</h1>
 
diff --git a/src/help/Plugin.html b/src/help/Plugin.html
new file mode 100644
index 0000000..4753c9a
--- /dev/null
+++ b/src/help/Plugin.html
@@ -0,0 +1,99 @@
+<html xmlns="http://www.w3.org/1999/xhtml">
+
+<body text="#275856">
+    <basefont size="4"
+          color="#2F4958"
+          face="arial" />
+
+    <h1>JabRef Plugin System</h1>
+
+    <p>Starting with 2.4b1, JabRef can be extended using a plugin system which was 
+    build using Java Plugin Framework (JPF).</p>
+
+    <p>To <i>use plugins</i> simply put the jar file of the plugin in a folder called <code>plugins</code> in the
+    folder where the JabRef.jar is located. When starting up, JabRef will print a list of all plugins loaded.</p>
+    
+    <h2>How to write a plugin</h2>
+    
+    <p>JabRef offers the following extension-points for developers:</p>
+    <ul>
+      <li><code>ImportFormat</code> - Add importers to JabRef accessible from the 'Import into ... database'.</li> 
+      <li><code>EntryFetcher</code> - Add access to databases like Citeseer or Medline to the <i>Web Search</i> menu.</li>
+      <li><code>ExportFormatTemplate</code> - Add a template based export like the ones accessible using the <i>Manage Custom Exports</i>.</li>
+      <li><code>ExportFormat</code> - Add an export filter to JabRef's export dialog, that is more complicated than the simple template based one.</li>
+      <li><code>ExportFormatProvider</code> - A more powerful way to add export formats to JabRef.</li> 
+      <li><code>LayoutFormatter</code> - Add formatters that can be used in the layout based exporters.</li>
+      <li><code>SidePanePlugin</code> - Add a side pane component that can do any kinds of operations. The panel is
+        accessed from a <b>Plugins</b> menu in JabRef's main window.</li>
+    </ul>
+    
+    <p>These extension-points are defined in the <code>plugin.xml</code> of the JabRef-core-plugin,
+    which can be found in <code>JabRef/src/plugins/net.sf.jabref.core/</code>.</p>
+    
+    <p>To start developing follow these rough steps:</p>
+    <ol>
+      <li>Checkout the JabRef trunk from subversion (<code>https://jabref.svn.sourceforge.net/svnroot/jabref/trunk</code>).
+    This contains both JabRef itself and plug-ins contributed so far to JabRef (you don't need the htdocs folder), which make great starting points for your own plugins.</li>
+      <li>Compile JabRef using <code>ant jars</code>.</li>
+      <li>Create your own project and define your extension in your own plugin.xml that satisfy the extension points of the core plugin.xml. 
+      In particular make sure that:
+      <ul>
+        <li>...your plugin.xml has a <code>requires</code>-section that imports the core plugin (<code>net.sf.jabref.core</code>).</li>
+        <li>...your plugin.xml has a <code>runtime</code>-section, where you tell JPF, where in your project you have stored your class files and resources.</li>
+      </ul>
+      </li>
+      <li>Create a jar of your project and put it into the <code>plugins</code>-folder of JabRef.</li>
+      <li>Your plugin should be loaded when you run JabRef from the jar.</li>
+    </ol>
+
+	<p>Feel free to ask us questions related to the plugin system on the mailing-list!</p>     
+
+    <h2>How to add an extension point to JabRef</h2>
+    
+    <p>This documentation is intended for JabRef developers who want to add further extensions points.</p>
+    
+    <p>To add a new extension-point, you need to declare this extension-point in the plugin.xml of the core plugin similar to this:</p>
+    
+<code><pre>    
+<extension-point id="PushToApplication">
+	<parameter-def type="string" id="pushToApp"
+		custom-data="<classname of the interface that plugin providers need to implement>" />
+	<!-- optionally other parameters (we currently do not use any of these for anything)
+		<parameter-def type="string" id="name" />
+		<parameter-def type="string" id="description"
+			multiplicity="none-or-one" />
+			-->
+</extension-point>
+</pre></code>
+
+	<p>Then you need to re-run the plugin code generator "<code>ant generate</code>", which will re-create the helper class in 
+	"<code>net.sf.jabref.plugin.core.generated</code>" so that it includes a method <code>getPushToApplicationExtensions()</code> which 
+	returns a list of all PushToTalk extensions registered with the system.</p>
+ 
+    <p>This list then can be used like this (here an example what we do with the entry fetcher extensions):</p>
+
+<code><pre> 
+/*
+ * Load fetchers that are plug-in extensions
+ */
+JabRefPlugin jabrefPlugin = JabRefPlugin.getInstance(PluginCore.getManager());
+if (jabrefPlugin != null){
+	for (EntryFetcherExtension ext : jabrefPlugin.getEntryFetcherExtensions()){
+		EntryFetcher fetcher = ext.getEntryFetcher();
+		if (fetcher != null){
+			fetchers.add(fetcher);
+		}
+	}
+}
+ 
+// and later...
+ 
+for (EntryFetcher fetcher : fetchers){
+  GeneralFetcher generalFetcher = new GeneralFetcher(sidePaneManager, this, fetcher);
+  web.add(generalFetcher.getAction());
+  fetcherActions.add(generalFetcher.getAction());
+}
+</pre></code>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/src/help/PreviewHelp.html b/src/help/PreviewHelp.html
index ef05a96..2b30ccf 100644
--- a/src/help/PreviewHelp.html
+++ b/src/help/PreviewHelp.html
@@ -3,7 +3,7 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>Entry preview setup</h1>
 
diff --git a/src/help/RemoteHelp.html b/src/help/RemoteHelp.html
index d563ff9..d40e3db 100644
--- a/src/help/RemoteHelp.html
+++ b/src/help/RemoteHelp.html
@@ -3,7 +3,7 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>Remote operation</h1>
 
diff --git a/src/help/SQLExport.html b/src/help/SQLExport.html
new file mode 100644
index 0000000..21f6293
--- /dev/null
+++ b/src/help/SQLExport.html
@@ -0,0 +1,37 @@
+<html xmlns="http://www.w3.org/1999/xhtml">
+
+<body text="#275856">
+    <basefont size="4"
+          color="#2F4958"
+          face="arial" />
+
+    <h1>Export to an External SQL Database</h1>
+
+    <p> JabRef is capable of
+        exporting the contents of the BibTeX database, along with groups
+    information, to an external MySQL database.</p>
+
+    <h2>Setup</h2>
+    <ol>
+      <li> Using your favorite MySQL administration tool, create an empty MySQL database.</li>
+      <li> Make sure there is a user for this database that has <em>full privileges</em>.</li>
+    </ol>
+
+    <h2>Export</h2>
+    <ol>
+      <li> Choose <b>File -> Export to external SQL database</b>, or click the corresponding button on the toolbar.</li>
+			<li> Enter the database connection information, and click <b>Connect</b>.</li>
+    </ol>
+
+		<p>
+		JabRef will then connect to the specified database, <b><em>drop the existing tables</em></b>, create new
+		tables, and populate those tables with entries and groups information.  Note that you will
+		not be prompted for the connection information on subsequent exports.  If you would like to
+		export to a different database, you can change the connection information by choosing <b>File ->
+		Connect to external SQL database</b> (or by clicking the associated toolbar button), and then
+		performing an export.
+    </p>
+
+  </body>
+
+</html>
\ No newline at end of file
diff --git a/src/help/SearchHelp.html b/src/help/SearchHelp.html
index cd12436..18a7cca 100644
--- a/src/help/SearchHelp.html
+++ b/src/help/SearchHelp.html
@@ -3,7 +3,7 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>Searching</h1>
 
diff --git a/src/help/ShortAuxImport.html b/src/help/ShortAuxImport.html
index 23024e3..6bc6c0c 100644
--- a/src/help/ShortAuxImport.html
+++ b/src/help/ShortAuxImport.html
@@ -3,7 +3,7 @@
 <body>
     <basefont size="-1"
           color="#2F4958"
-          face="arial"> This feature generates a new database,
+          face="arial" /> This feature generates a new database,
           which contains only the used references of an existing
           TeX project.
 </body>
diff --git a/src/help/ShortIntegrityCheck.html b/src/help/ShortIntegrityCheck.html
index d6eb6dd..8cac5e9 100644
--- a/src/help/ShortIntegrityCheck.html
+++ b/src/help/ShortIntegrityCheck.html
@@ -3,8 +3,8 @@
 <body>
     <basefont size="-1"
           color="#2F4958"
-          face="arial"> Integrity check is a process that checks
+          face="arial" /> Integrity check is a process that checks
           for indications of wrongly filled out bibtex fields.
-          "Scan" is the button that starts the check. <br>
+          "Scan" is the button that starts the check. <br />
 </body>
 </html>
diff --git a/src/help/ShortPlainImport.html b/src/help/ShortPlainImport.html
index 09b8b24..97de394 100644
--- a/src/help/ShortPlainImport.html
+++ b/src/help/ShortPlainImport.html
@@ -3,9 +3,9 @@
 <body>
     <basefont size="-1"
           color="#2F4958"
-          face="arial">This is a simple copy and paste dialog.
+          face="arial" />This is a simple copy and paste dialog.
           First load or paste some text into the text input
           area.  After that, you can mark text and assign it
-          to a bibtex field. <br>
+          to a bibtex field. <br />
 </body>
 </html>
diff --git a/src/help/Spires.html b/src/help/Spires.html
new file mode 100644
index 0000000..797827a
--- /dev/null
+++ b/src/help/Spires.html
@@ -0,0 +1,43 @@
+<html xmlns="http://www.w3.org/1999/xhtml">
+
+
+<body text="#275856">
+    <basefont size="4"
+          color="#2F4958"
+          face="arial">
+
+<h1>Spires search</h1>
+
+<p>The spires search function merely passes your search queries onto the Spires web search, so
+you should build your queries in the same way, except omitting the <em>find</em> or <em>fin</em>
+command. This help page will only give a brief introduction to the search queries. More extensive help on
+searching Spires can be found on the page http://www.slac.stanford.edu/spires/hep/help/index.shtml.</p>
+
+    <p>Your query can be composed of several parts, combined using <em>and</em> and <em>or</em> as
+    logical operators. Each part is composed of a letter or word indicating the type of field to search,
+    followed by a space and the text to search for.</p>
+
+    <p>The following list shows some of the field indicators that can be used:
+    <ul>
+        <li><em>a</em> or <em>author</em>: search author names</li>
+        <li><em>t</em> or <em>title</em>: search in title</li>
+        <li><em>j</em>: journal. Here either the common abbreviation or the 5 letter CODEN abbreviation for
+        a journal can be used. Volume and page can also be included, separated by commas. For instance,
+        <em>j Phys. Rev.,D54,1</em> looks in the journal Phys. Rev., volume D54, page 1.</li>
+        <li><em>k</em>: search in keywords</li>
+    </ul>
+    </p>
+
+<p>Example queries:
+<ul>
+        <li><em>a smith and a jones</em>: search for references with authors "smith" and "jones"</li>
+        <li><em>a smith or a jones</em>: search for references with either author "smith" or author "jones"</li>
+        <li><em>a smith and not t processor</em>: search for author "smith" and omit references with "processor" in the title</li>
+</ul>
+</p>
+
+
+
+
+</body>
+</html>
\ No newline at end of file
diff --git a/src/help/StringEditorHelp.html b/src/help/StringEditorHelp.html
index 1a55efd..af6fa3d 100755
--- a/src/help/StringEditorHelp.html
+++ b/src/help/StringEditorHelp.html
@@ -3,12 +3,12 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>The string editor</h1>
 
     <p><em>Opened from the main window
-    by</em> Edit strings or pressing a button in the toolbar.</p>
+    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
diff --git a/src/help/TimeStampHelp.html b/src/help/TimeStampHelp.html
index f21dc4f..2bd6bef 100644
--- a/src/help/TimeStampHelp.html
+++ b/src/help/TimeStampHelp.html
@@ -3,7 +3,7 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>Entry time stamps</h1>
 
diff --git a/src/help/XMPHelp.html b/src/help/XMPHelp.html
index ae279ff..3531e3f 100644
--- a/src/help/XMPHelp.html
+++ b/src/help/XMPHelp.html
@@ -3,7 +3,7 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>XMP metadata support in JabRef</h1>
 
@@ -86,8 +86,8 @@
 
                     <li>All other fields are saved using their
                     field-name as is.</li>
-                </ul><br>
-                <br>
+                </ul><br />
+                <br />
 
 
                 <p>The following is an example of the mapping</p>
@@ -129,8 +129,8 @@
                 <ul>
                     <li>In RDF attribute-value pairs can also be
                     expressed as nodes and vice versa.</li>
-                </ul><br>
-                <br>
+                </ul><br />
+                <br />
 
 
                 <h2>Related Links:</h2>
@@ -160,8 +160,8 @@
                     <li>
                     <a href="http://partners.adobe.com/public/developer/en/xmp/sdk/xmpspecification.pdf">
                     Adobe XMP Specification</a></li>
-                </ul><br>
-                <br>
+                </ul><br />
+                <br />
 
             </div>
         </li>
diff --git a/src/help/de/About.html b/src/help/de/About.html
index 46ef898..1865d81 100644
--- a/src/help/de/About.html
+++ b/src/help/de/About.html
@@ -4,12 +4,12 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <center>
         <h1>JabRef Version @version@</h1>
 
-        <p>(c) 2007</p>
+        <p>(c) 2008</p>
 
         <p><img src="/images/JabRef-icon-48.png" /></p>
 
@@ -43,6 +43,7 @@
 
         <p>Michael Beckmann,
         Oliver Böckmann,
+        Fedor Bezrukov,            
         Aaron Chen,
         Fabrice Dessaint,
         Nathan Dunn,
diff --git a/src/help/de/BaseFrameHelp.html b/src/help/de/BaseFrameHelp.html
index 89fcbdb..b929276 100644
--- a/src/help/de/BaseFrameHelp.html
+++ b/src/help/de/BaseFrameHelp.html
@@ -3,7 +3,7 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>Das Hauptfenster von JabRef</h1>
 
diff --git a/src/help/de/BibtexHelp.html b/src/help/de/BibtexHelp.html
index 543366e..31da4bc 100644
--- a/src/help/de/BibtexHelp.html
+++ b/src/help/de/BibtexHelp.html
@@ -4,7 +4,7 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>Über <em>BibTeX</em></h1>
 
@@ -34,24 +34,24 @@
 
     <ul>
         <li>
-        <strong style="font-style: italic;">Bibtexkey<br></strong>Eine
+        <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>
+        Groß-/Kleinschreibung).<br />
         </li>
 
-        <li><strong>address<br></strong> Der Ort des
+        <li><strong>address<br /></strong> Der Ort des
         <em>Verlags</em> oder einer anderen Institution.</li>
 
-        <li><strong>annote<br></strong> Eine Anmerkung. Dieses
+        <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
+            <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
@@ -65,18 +65,18 @@
                 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>
+            mittleren und dem Nachnamen zu unterscheiden.<br />
         </li>
 
-        <li><strong>booktitle<br></strong> Der Titel eines
+        <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
+        <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
+        <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,
@@ -84,28 +84,28 @@
         Funktionalität von <tt>crossref</tt> ist jedoch nicht
         in jedem Fall praktikabel.</li>
 
-        <li><strong>edition<br></strong> Die Auflage eines Buch,
+        <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
+        <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
+        <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
+        <li><strong>institution<br /></strong> Die fördernde
         Institutions eines technischen Reports.</li>
 
-        <li><strong>journal<br></strong> Ein Zeitschriftenname.
+        <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
@@ -114,7 +114,7 @@
         <a href="JournalAbbreviations.html">Abkürzung von
         Zeitschriftentiteln</a> verwenden.</li>
 
-        <li><strong>key<br></strong> Dieses Feld wird zur
+        <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
@@ -122,26 +122,26 @@
         <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
+        <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
+        <li><strong>note<br /></strong> Zusätzliche
         Infromationen. Das erste Wort sollte mit einem
         Großbuchstaben beginnen.</li>
 
-        <li><strong>number</strong><br>
+        <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,
+        <li><strong>organization<br /></strong> Die Organisation,
         die einen Konferenzband fördert.</li>
 
-        <li><strong>pages<br></strong> Die Seitenzahl(en) oder
+        <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
@@ -150,20 +150,20 @@
         (<tt>--</tt>) verwandelt, der in TeX den bis-Strich anzeigt
         (also 7–33).</li>
 
-        <li><strong>publisher<br></strong> Der Name des
+        <li><strong>publisher<br /></strong> Der Name des
         Verlags.</li>
 
-        <li><strong>school<br></strong> Der Name einer
+        <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
+        <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
+        <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
@@ -172,16 +172,16 @@
         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
+        <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
+        <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
+        <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
@@ -207,101 +207,101 @@
     <ul>
         <li>
         <strong><span style="font-weight: normal; font-style: italic;">
-        affiliation*</span><br></strong> Die Zugehörigkeit
-        eines Autors.<br>
+        affiliation*</span><br /></strong> Die Zugehörigkeit
+        eines Autors.<br />
         </li>
 
-        <li><strong>abstract<br></strong> Die Zusammenfassung
-        eines Werks.<br>
+        <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>
+        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>
+        copyright*</span><br /></strong>
+        Copyright-Informationen.<br />
         </li>
 
-        <li><strong>doi<br></strong> Der <em>Digital Object
+        <li><strong>doi<br /></strong> Der <em>Digital Object
         Identifier</em> ist eine permanente Kennung von
-        Dokumenten.<br>
+        Dokumenten.<br />
         </li>
 
-        <li><strong>eid<br></strong> Der EID (<em>Electronic
+        <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>
+        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>
+        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>
+        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><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>
+        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
+        location*</span><br /></strong> Der Ort, der mit einem Werk
         in Verbindung steht, z.B. die Stadt, in der eine Konferenz
-        stattgefunden hat.<br>
+        stattgefunden hat.<br />
         </li>
 
         <li>
         <strong><span style="font-weight: normal; font-style: italic;">
-        LCCN*</span><br></strong> Die <em>Library of Congress
+        LCCN*</span><br /></strong> Die <em>Library of Congress
         Call Number</em>. Manchmal heißt das Feld auch
-        <tt>lib-congress</tt>.<br>
+        <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>
+        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 />
+        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>
+        size*</span><br /></strong> Die physische Größe
+        eines Dokuments.<br />
         </li>
 
-        <li><strong>url<br></strong> Der <em>Uniform Resource
+        <li><strong>url<br /></strong> Der <em>Uniform Resource
         Locator</em> (URL, "einheitlicher Quellenanzeiger"), der
-        auf eine Webseite im Internet verweist.<br>
+        auf eine Webseite im Internet verweist.<br />
         </li>
 
-        <li><strong>urldate<br></strong> Das Datum, an dem eine
+        <li><strong>urldate<br /></strong> Das Datum, an dem eine
         Webseite zuletzt besucht wurde.</li>
-    </ul><br>
-     <br>
-     <br>
+    </ul><br />
+     <br />
+     <br />
 </body>
 </html>
\ No newline at end of file
diff --git a/src/help/de/CiteSeerHelp.html b/src/help/de/CiteSeerHelp.html
index 6408a11..4ace49b 100644
--- a/src/help/de/CiteSeerHelp.html
+++ b/src/help/de/CiteSeerHelp.html
@@ -4,7 +4,7 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>CiteSeer-Import</h1>
 
@@ -23,8 +23,8 @@
     <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>
+    <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
@@ -59,7 +59,7 @@
     <p>Wenn Sie einen
     HTTP-Proxy-Server benutzen müssen, übergeben Sie den
     Servernamen und die Portnummer an Java. Diese
-    Umgebungseinstellungen sind dokumentiert unter<br>
+    Umgebungseinstellungen sind dokumentiert unter<br />
 
     <a 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/properties.html</a></p>
 
diff --git a/src/help/de/CommandLine.html b/src/help/de/CommandLine.html
index 2bdb110..f1fa0a5 100644
--- a/src/help/de/CommandLine.html
+++ b/src/help/de/CommandLine.html
@@ -4,7 +4,7 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>Kommandozeilen-Optionen</h1>
 
@@ -138,5 +138,18 @@
     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.
+
 </body>
 </html>
\ No newline at end of file
diff --git a/src/help/de/ContentSelectorHelp.html b/src/help/de/ContentSelectorHelp.html
index 6e4f411..3c7d449 100644
--- a/src/help/de/ContentSelectorHelp.html
+++ b/src/help/de/ContentSelectorHelp.html
@@ -3,7 +3,7 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>Wortauswahl verwalten</h1>
 
diff --git a/src/help/de/Contents.html b/src/help/de/Contents.html
index 5d3e4d8..6ca4952 100644
--- a/src/help/de/Contents.html
+++ b/src/help/de/Contents.html
@@ -4,57 +4,75 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>Hilfe - Inhalt</h1>
 
+<h2>Allgemeines</h2>
     <p><a href="HelpHelp.html">Über die
-    Hilfe</a><br>
-     <a href="JabRefHelp.html">Allgemeines</a></p>
+    Hilfe</a><br />
+     <a href="JabRefHelp.html">Allgemeines</a><br/ >
+     <a href="BaseFrameHelp.html">Das Hauptfenster von
+    JabRef</a><br />
+     <a href="EntryEditorHelp.html">Der Eintrags-Editor</a><br />
+    </p>
+
+<h2>Felder</h2>
+    <p>
+     <a href="BibtexHelp.html"><em>BibTeX</em> Hilfe</a><br />
+     <a href="FileLinks.html">Links zu externen Dateien</a><br />
+     <a href="ExternalFiles.html">Links zu PDF- und PS-Dateien,
+    URLs und DOIs</a><br />
+     <a href="TimeStampHelp.html">Zeitstempel</a><br />
+     <a href="OwnerHelp.html">Das 'Besitzer' (owner) Feld</a><br />
+     <a href="ContentSelectorHelp.html">Wortauswahl
+    verwalten</a><br />
+     <a href="JournalAbbreviations.html">Zeitschriftentitel
+    abkürzen</a><br />
+    </p>
 
-     <p>
+<h2>Einträge finden und sortieren</h2>
+    <p>
+     <a href="GroupsHelp.html">Hilfe zu den
+    <em>Gruppen</em></a><br />
+     <a href="MarkingHelp.html">Einträge markieren</a><br />
+     <a href="SearchHelp.html">Die Suchfunktionen von
+    JabRef</a><br />
+    </p>
+
+<h2>Einstellungen</h2>
+    <p>
+     <a href="CustomEntriesHelp.html">Eintragstypen
+    anpassen</a><br />
      <a href="GeneralFields.html">Allgemeine Felder
-    festlegen</a><br>
+    festlegen</a><br />
      <a href="LabelPatterns.html">Anpassen der automatischen
-    Generierung von BibTeX-keys</a><br>
-     <a href="OwnerHelp.html">Das 'Besitzer' (owner) Feld</a><br>
-     <a href="BibtexHelp.html"><em>BibTeX</em> Hilfe</a><br>
-     <a href="MarkingHelp.html">Einträge markieren</a><br>
+    Generierung von BibTeX-keys</a><br />
+     <a href="PreviewHelp.html">Eintragsvorschau anpassen</a><br />
+     <a href="StringEditorHelp.html">Der String-Editor</a><br />
+     <a href="Plugin.html">Plugins hinzufügen</a><br />
+    </p>
+
+<h2>Import/Export</h2>
+    <p>
      <a href="CiteSeerHelp.html">Einträge von
-    <em>CiteSeer</em> abrufen</a><br>
+    <em>CiteSeer</em> abrufen</a><br />
      <a href="IEEEXploreHelp.html">Einträge von
-    <em>IEEExplore</em> abrufen</a><br>
+    <em>IEEExplore</em> abrufen</a><br />
      <a href="MedlineHelp.html">Einträge von <em>Medline</em>
-    abrufen</a><br>
-     <a href="EntryEditorHelp.html">Der Eintrags-Editor</a><br>
-     <a href="CustomEntriesHelp.html">Eintragstypen
-    anpassen</a><br>
-     <a href="PreviewHelp.html">Eintragsvorschau anpassen</a><br>
-     <a href="CustomExports.html">Exportfilter anpassen</a><br>
-     <a href="RemoteHelp.html">Externer Zugriff</a><br>
+    abrufen</a><br />
+     <a href="JSTOR.html"><em>JStor</em>-Suche</a><br />
+     <a href="CustomExports.html">Exportfilter anpassen</a><br />
+     <a href="CustomImports.html">Importfilter anpassen</a><br />     <a href="SQLExport.html">Export in eine externe SQL-Datenbank</a><br />
+     <a href="RemoteHelp.html">Externer Zugriff</a><br />
      <a href="EndNoteFilters.html">Die Exportfilter und
-    Importfilter für EndNote</a><br>
-     <a href="BaseFrameHelp.html">Das Hauptfenster von
-    JabRef</a><br>
-     <a href="GroupsHelp.html">Hilfe zu den
-    <em>Gruppen</em></a><br>
-     <a href="CustomImports.html">Importfilter anpassen</a><br>
-     <a href="ImportInspectionDialog.html">Import-Kontrollfenster</a><br>
+    Importfilter für EndNote</a><br />
+     <a href="ImportInspectionDialog.html">Import-Kontrollfenster</a><br />
 
      <a href="OpenOfficeHelp.html">JabRef-Bibliographien in
-    OpenOffice.org benutzen</a><br>
-     <a href="CommandLine.html">Kommandozeilen-Optionen</a><br>
-     <a href="FileLinks.html">Links zu externen Dateien</a><br>
-     <a href="ExternalFiles.html">Links zu PDF- und PS-Dateien,
-    URLs und DOIs</a><br>
-     <a href="StringEditorHelp.html">Der String-Editor</a><br>
-     <a href="SearchHelp.html">Die Suchfunktionen von
-    JabRef</a><br>
-     <a href="ContentSelectorHelp.html">Wortauswahl
-    verwalten</a><br>
-     <a href="XMPHelp.html">XMP-Metadaten und JabRef</a><br>
-     <a href="JournalAbbreviations.html">Zeitschriftentitel
-    abkürzen</a><br>
-     <a href="TimeStampHelp.html">Zeitstempel</a><br></p>
+    OpenOffice.org benutzen</a><br />
+     <a href="XMPHelp.html">XMP-Metadaten und JabRef</a><br />
+     <a href="CommandLine.html">Kommandozeilen-Optionen</a><br />
+    </p>
 </body>
 </html>
\ No newline at end of file
diff --git a/src/help/de/CustomEntriesHelp.html b/src/help/de/CustomEntriesHelp.html
index c5c7a82..1fb6bc1 100644
--- a/src/help/de/CustomEntriesHelp.html
+++ b/src/help/de/CustomEntriesHelp.html
@@ -3,7 +3,7 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>Eintragstypen anpassen</h1>
 
diff --git a/src/help/de/CustomExports.html b/src/help/de/CustomExports.html
index 799ba70..1f1e3a2 100644
--- a/src/help/de/CustomExports.html
+++ b/src/help/de/CustomExports.html
@@ -4,7 +4,7 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>Exportfilter anpassen</h1>
 
@@ -65,14 +65,14 @@
     <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>
+    <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>
+    <p><i>html.end.layout</i>:<br />
+    <code></BODY><br />
      </HTML></code></p>
 
     <p>Die Datei <i>html.layout</i> stellt die
@@ -294,7 +294,7 @@
     <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>
+    <code><Fall1>@<Bereich11>@<Format>@<Bereich12>@<Format>@<Bereich13>...@@<br />
 
      <Fall2>@<Bereich21>@... und so weiter.</code></p>
 
@@ -397,8 +397,8 @@
     Kommandos <code>\begin</code> und <code>\end</code>
     verhindern:</p>
 
-    <p><code>\begin{editor}<br>
-    \format[HTMLChars,AuthorFirstFirst]{\editor} (Hrsg.)<br>
+    <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>
@@ -429,7 +429,7 @@
     Kommandos, um nach keyword zu gruppieren:</p>
 
     <p><code>\begingroup{keywords}New Category:
-    \format[HTMLChars]{\keywords}<br>
+    \format[HTMLChars]{\keywords}<br />
      \endgroup{keywords}</code></p>
 
     <h2>Teilen Sie Ihre Arbeit mit anderen</h2>
diff --git a/src/help/de/CustomImports.html b/src/help/de/CustomImports.html
index fd853e5..2bf6485 100644
--- a/src/help/de/CustomImports.html
+++ b/src/help/de/CustomImports.html
@@ -4,7 +4,7 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>Importfilter anpassen</h1>
 
diff --git a/src/help/de/EndNoteFilters.html b/src/help/de/EndNoteFilters.html
index 2585b08..d114cc9 100644
--- a/src/help/de/EndNoteFilters.html
+++ b/src/help/de/EndNoteFilters.html
@@ -4,7 +4,7 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>EndNote Exportfilter</h1>
 
diff --git a/src/help/de/EntryEditorHelp.html b/src/help/de/EntryEditorHelp.html
index de454d7..878690c 100644
--- a/src/help/de/EntryEditorHelp.html
+++ b/src/help/de/EntryEditorHelp.html
@@ -4,7 +4,7 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>Der Eintrags-Editor</h1>
 
diff --git a/src/help/de/ExternalFiles.html b/src/help/de/ExternalFiles.html
index f6a64c5..6cdcae9 100644
--- a/src/help/de/ExternalFiles.html
+++ b/src/help/de/ExternalFiles.html
@@ -4,7 +4,7 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>Links zu PDF- und PS-Dateien, URLs und DOIs in
     JabRef</h1>
diff --git a/src/help/de/FileLinks.html b/src/help/de/FileLinks.html
index d628215..449cac0 100644
--- a/src/help/de/FileLinks.html
+++ b/src/help/de/FileLinks.html
@@ -4,7 +4,7 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>Datei-Links in JabRef</h1>
 
diff --git a/src/help/de/GeneralFields.html b/src/help/de/GeneralFields.html
index 0ae2177..00d1bf8 100644
--- a/src/help/de/GeneralFields.html
+++ b/src/help/de/GeneralFields.html
@@ -4,7 +4,7 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>Allgemeine Felder festlegen</h1>
 
@@ -21,7 +21,7 @@
 
     <p>Das Beispiel</p>
 
-    <p><code>Allgemeine Felder:url;keywords;doi;pdf<br>
+    <p><code>Allgemeine Felder:url;keywords;doi;pdf<br />
      Zusammenfassung:abstract;annote</code></p>
 
     <p>ergibt somit einen Tab mit dem Namen "Allgemeine Felder",
diff --git a/src/help/de/GroupsHelp.html b/src/help/de/GroupsHelp.html
index ecbf516..5de74e5 100644
--- a/src/help/de/GroupsHelp.html
+++ b/src/help/de/GroupsHelp.html
@@ -4,7 +4,7 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>Gruppen</h1>
 
diff --git a/src/help/de/HelpHelp.html b/src/help/de/HelpHelp.html
index 45028dd..e47343c 100644
--- a/src/help/de/HelpHelp.html
+++ b/src/help/de/HelpHelp.html
@@ -4,7 +4,7 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>Das Hilfefenster</h1>
 
diff --git a/src/help/de/IEEEXploreHelp.html b/src/help/de/IEEEXploreHelp.html
index f6c812f..515b906 100644
--- a/src/help/de/IEEEXploreHelp.html
+++ b/src/help/de/IEEEXploreHelp.html
@@ -4,7 +4,7 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>IEEEXplore durchsuchen</h1>
 
diff --git a/src/help/de/ImportInspectionDialog.html b/src/help/de/ImportInspectionDialog.html
index e38e8fc..d71d4b5 100644
--- a/src/help/de/ImportInspectionDialog.html
+++ b/src/help/de/ImportInspectionDialog.html
@@ -4,7 +4,7 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>Import-Kontrollfenster</h1>
 
diff --git a/src/help/de/JSTOR.html b/src/help/de/JSTOR.html
new file mode 100644
index 0000000..5e22b56
--- /dev/null
+++ b/src/help/de/JSTOR.html
@@ -0,0 +1,42 @@
+<html xmlns="http://www.w3.org/1999/xhtml">
+
+
+<body text="#275856">
+<basefont size="4" color="#2F4958" face="arial" />
+
+<h1>JStor durchsuchen</h1>
+
+Folgende Beschreibung stammt von der JStor-Webseite:
+
+<p>* Standardmäßig wird nach Author, Titel und Volltext
+gesucht (articles, book reviews, etc.)<br>
+* Benutze Anführungszeichen, um nach einer Phrase zu suchen (z.B.
+"punctuated equilibrium")<br>
+* Benutze ti: um nach einem Titel zu suchen, au: um nach einem Author zu
+suchen (z.B. ti:"two-person cooperative games", au:"john
+nash")<br>
+* Benutze AND, OR, NOT ,um Bezeichnungen zu kombinieren (z.B.
+ti:"two-person cooperative games" AND au:"john
+nash")</p>
+<p>JSTOR ist eine gemeinnützige Organisation mit einer
+doppelten Mission: Aufbau und Unterhalt eines verlässlichen Archivs
+von wichtigen wissenschaftlichen Zeitschriften und Bereitstellung eines
+möglichst breiten Zugriffs auf diese Zeitschriften. JSTOR bietet
+Forschern die Möglichkeit, hochauflösende gescannte Bilder von
+Zeitschriftenausgaben und Seiten genau so abzurufen, wie sie
+ursprünglich entworfen, gedruckt und illustriert wurden. Die in
+JSTOR gespeicherten Inhalte umfassen zahlreiche Fachgebiete. Listen der
+derzeit verfügbaren Titel und Sammlungen finden Sie unter:<br>
+<a href="http://www.jstor.org/about/collection.list.html">http://www.jstor.org/about/collection.list.html</a></p>
+<p>JStor bietet Zugang zu Literatur in den Bereichen:</p>
+<p>Kunst & Wissenschaft<br>
+Biologie<br>
+Business<br>
+Ökologie & Botanik<br>
+Gesundheit & Allgemeine Wissenschaften <br>
+Sprachen & Literatur<br>
+Mathematik & Statistik<br>
+Musik</p>
+<p>Die Suche liefert max. 200 Ergebnisse.</p>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/help/de/JabRef-UserManual_de.tex b/src/help/de/JabRef-UserManual_de.tex
index 99f25a7..5f8f45b 100644
--- a/src/help/de/JabRef-UserManual_de.tex
+++ b/src/help/de/JabRef-UserManual_de.tex
@@ -1,6 +1,9 @@
 %%%%% To do %%%%%
-% DW 2007-03-23
-% - Bibliographie mit biblatex statt jurabib?
+% DW 2007-12-03
+% - Wiki-Seiten 'Searching with regular expressions' und 'Translating JabRef' �bersetzen und einbinden
+% - [2.4 beta] Plugin.html erg�nzen 
+% - [2.4 beta?] SQLExport.html erg�nzen
+
 \documentclass[10pt,normalheadings,ngerman]{scrartcl}
 \usepackage[T1]{fontenc}
 \usepackage[latin1]{inputenc}
@@ -10,7 +13,7 @@
 \usepackage{xspace}
 
 %%%%% author, version of file %%%%%
-\newcommand{\versiondate}{in Bearb.}%23.\,7.\,2007}
+\newcommand{\versiondate}{in Bearb.}%11.\,12.\,2007
 \def\FileAuthor{Dominik Wa�enhoven}
 \def\FileTitle{\jabrefversion{} Benutzerhandbuch}
 
@@ -89,7 +92,7 @@
 }
 
 %%% version number
-\newcommand{\versionnr}{\texorpdfstring{2.3\,(beta)}{2.3 (beta)}} %
+\newcommand{\versionnr}{\texorpdfstring{2.3.1}{2.3.1}} %
 %%% JabRef logo with version nr
 \newcommand{\jabrefversion}{\jabref~\versionnr}
 %%% BibTeX logo
@@ -106,6 +109,13 @@
   \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}%
@@ -786,7 +796,7 @@ Hierbei sucht das Programm nach allen Vorkommen der W
 
 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 sowie das Ausw�hlen
+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
@@ -844,6 +854,109 @@ die Suche nach \bibtex{}-Keys, z.\,B.:
 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
@@ -1886,7 +1999,7 @@ wird.
 
 
 \subsubsection{Kommandozeilen-Optionen}
-
+\label{kommandozeilenoptionen}
 Im folgenden werden die wichtigsten Optionen und Befehle f�r die Kommandozeile
 vorgestellt.
 
@@ -1979,6 +2092,18 @@ die nur die bekannten und benutzten Eintr
 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}
@@ -2874,6 +2999,11 @@ geworden ist, was es ist. Wer zum Entwicklerteam geh
 %\end{revhist}
 
 \begin{revhist}{\versiondate}%endg�ltiges Datum}
+\item Abschnitte ">\nameref{search-regular-expressions}"< und ">\nameref{kommandozeilenoptionen}"< erg�nzt
+\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}
diff --git a/src/help/de/JabRefHelp.html b/src/help/de/JabRefHelp.html
index 2ccf1a2..b93d48f 100644
--- a/src/help/de/JabRefHelp.html
+++ b/src/help/de/JabRefHelp.html
@@ -4,7 +4,7 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>JabRef</h1>
 
diff --git a/src/help/de/JournalAbbreviations.html b/src/help/de/JournalAbbreviations.html
index f1fb514..34ec6d8 100644
--- a/src/help/de/JournalAbbreviations.html
+++ b/src/help/de/JournalAbbreviations.html
@@ -4,7 +4,7 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>Zeitschriftentitel abkürzen</h1>
 
diff --git a/src/help/de/LabelPatterns.html b/src/help/de/LabelPatterns.html
index d917cfd..63a6956 100644
--- a/src/help/de/LabelPatterns.html
+++ b/src/help/de/LabelPatterns.html
@@ -4,7 +4,7 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>Anpassen der automatischen Erstellung von
     BibTeX-Keys</h1>
@@ -34,35 +34,35 @@
 
     <ul>
         <li><b>[<code>auth</code>]</b>: Der Nachname des ersten
-        Autors.<br></li>
+        Autors.<br /></li>
 
         <li><b>[<code>authors</code>]</b>: Die Nachnamen aller
-        Autoren.<br></li>
+        Autoren.<br /></li>
 
         <li><b>[<code>authorLast</code>]</b>: Der Nachname des
-        letzten Autors<br></li>
+        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>
+        angehängt.<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>
+        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>
+        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>
+        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>
+        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>
+        Autoren sind.<br /></li>
 
         <li><b>[<code>auth.etal</code>]</b>: Der Nachname des
         ersten Autors und der Nachname des zweiten Autors bei zwei
@@ -72,7 +72,7 @@
         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>
+        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
@@ -86,58 +86,58 @@
 
     <ul>
         <li><b>[<code>edtr</code>]</b>: Der Nachname des ersten
-        Herausgebers.<br></li>
+        Herausgebers.<br /></li>
 
         <li><b>[<code>editors</code>]</b>: Die Nachnamen aller
-        Herausgeber.<br></li>
+        Herausgeber.<br /></li>
 
         <li><b>[<code>editorLast</code>]</b>: Der Nachname des letzten
-        Herausgebers.<br></li>
+        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>
+        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>
+        Nachnamen der restlichen Herausgeber.<br /></li>
 
         <li><b>[<code>edtrN</code>]</b>: Die ersten N Buchstaben
-        des Nachnamens des ersten Herausgebers.<br></li>
+        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>
+        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>
+        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>
+        gibt.<br /></li>
 
         <li><b>[<code>firstpage</code>]</b>: Die erste Seitenzahl
-        einer Veröffentlichung (pages).<br></li>
+        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>
+        sind.<br /></li>
 
         <li><b>[<code>lastpage</code>]</b>: Die letzte Seitenzahl
-        einer Veröffentlichung (pages).<br></li>
+        einer Veröffentlichung (pages).<br /></li>
 
         <li><b>[<code>shorttitle</code>]</b>: Die ersten 3 Worte
-        eines Titels (title).<br></li>
+        eines Titels (title).<br /></li>
 
         <li><b>[<code>shortyear</code>]</b>: Die letzten 2 Ziffern
-        des Jahrgangs (year).<br></li>
+        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>
+        ausgelassen werden.<br /></li>
     </ul>
 
     <p>Hinter einem Feldnamen (oder einem der oben
@@ -151,7 +151,7 @@
         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>
+        "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
@@ -174,8 +174,8 @@
     aussehen:</p>
 
     <blockquote>
-        <code>Yared1998</code><br>
-         <code>Yared1998a</code><br>
+        <code>Yared1998</code><br />
+         <code>Yared1998a</code><br />
         <code>Yared1998b</code>
     </blockquote>
 
diff --git a/src/help/de/MarkingHelp.html b/src/help/de/MarkingHelp.html
index f0d8a2d..f09b75f 100644
--- a/src/help/de/MarkingHelp.html
+++ b/src/help/de/MarkingHelp.html
@@ -4,7 +4,7 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>Einträge markieren</h1>
 
diff --git a/src/help/de/MedlineHelp.html b/src/help/de/MedlineHelp.html
index 7edde8f..aeec5a7 100644
--- a/src/help/de/MedlineHelp.html
+++ b/src/help/de/MedlineHelp.html
@@ -4,7 +4,7 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>Einträge von Medline abrufen</h1>
 
@@ -45,7 +45,7 @@
     <p>Wenn Sie einen
     HTTP-Proxy-Server benutzen müssen, übergeben Sie den
     Servernamen und die Portnummer an Java. Diese
-    Umgebungseinstellungen sind dokumentiert unter<br>
+    Umgebungseinstellungen sind dokumentiert unter<br />
 
     <a 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/properties.html</a></p>
 
diff --git a/src/help/de/OpenOfficeHelp.html b/src/help/de/OpenOfficeHelp.html
index 11e9b8a..5315ec9 100644
--- a/src/help/de/OpenOfficeHelp.html
+++ b/src/help/de/OpenOfficeHelp.html
@@ -4,7 +4,7 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>JabRef-Bibliographien in OpenOffice.org benutzen</h1>
 
diff --git a/src/help/de/OwnerHelp.html b/src/help/de/OwnerHelp.html
index 314e4ef..86c088a 100644
--- a/src/help/de/OwnerHelp.html
+++ b/src/help/de/OwnerHelp.html
@@ -4,7 +4,7 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>Das 'Besitzer' (owner) Feld</h1>
 
diff --git a/src/help/de/Plugin.html b/src/help/de/Plugin.html
new file mode 100644
index 0000000..70bfc2c
--- /dev/null
+++ b/src/help/de/Plugin.html
@@ -0,0 +1,107 @@
+<html xmlns="http://www.w3.org/1999/xhtml">
+
+<body text="#275856">
+    <basefont size="4"
+          color="#2F4958"
+          face="arial" />
+
+    <h1>Das Plugin-System von JabRef</h1>
+
+    <p>Ab Version 2.4 beta1 kann man JabRef mit Hilfe eines Plugin-Systems erweitern, dass
+    mit dem Java Plugin Framework (JPF) erstellt wurde.</p>
+
+    <p>Um Plugins zu nutzen, müssen Sie nur die jar-Datei des Plugins in einen Ordner mit dem Namen
+    <code>plugins</code> speichern, wobei der <code>plugins</code>-Ordner in demselben Verzeichnis
+    liegen muss, in dem sich auch die Datei JabRef.jar befindet. Beim Start von JabRef wird eine
+    Liste mit allen geladenen Plugins angezeigt.</p>
+
+    <h2>Schreiben eines Plugins</h2>
+
+    <p>JabRef bietet die folgenden Erweiterungs-Möglichkeiten für Entwickler:</p>
+    <ul>
+      <li><code>ImportFormat</code> - Importformate hinzufügen, die über den Menüpunkt <i>Datei -> Importieren in ... Datenbank</i> aufgerufen werden können.</li>
+      <li><code>EntryFetcher</code> - Zugang zu Datenbanken wie Citeseer oder Medline zum <i>Internet</i>-Menü hinzufügen.</li>
+      <li><code>ExportFormatTemplate</code> - Einen vorlagenbasierten Export wie diejenigen, die unter <i>Optionen -> Verwalte externe Exportfilter</i> verfügbar sind, hinzufügen.</li>
+      <li><code>ExportFormat</code> - Einen Exportfilter zum Exportdialog von JabRef hinzufügen – das ist komplizierter als einen vorlagenbasierten Export zu erstellen.</li>
+      <li><code>ExportFormatProvider</code> - Ein leistungsfähigerer Weg, um Exportformate hinzuzufügen.</li>
+      <li><code>LayoutFormatter</code> - Formatierer hinzufügen, die im Layout-basierten Export benutzt
+      werden können.</li>
+	</ul>
+
+    <p>Diese Erweiterungs-Möglichkeiten sind in <code>plugin.xml</code> des JabRef-core-plugin definiert,
+    das in <code>JabRef/src/plugins/net.sf.jabref.core/</code> zu finden ist.</p>
+
+    <p>Gehen Sie folgendermaßen vor, um ein Plugin zu erstellen:</p>
+    <ol>
+      <li>Machen Sie einen checkout des JabRef 'trunk' mit subversion (<code>https://jabref.svn.sourceforge.net/svnroot/jabref/trunk</code>) – den Ordner 'htdocs' brauchen Sie nicht.
+      Im 'trunk' sind sowohl JabRef selbst als auch die Plugins enthalten, die bislang zu JabRef
+      beigesteuert wurden und die einen guten Startpunkt für Ihre eigenen Plugins bieten.</li>
+      <li>Kompilieren Sie JabRef mit <code>ant jars</code>.</li>
+      <li>Erstellen Sie Ihr eigenes Projekt und definieren Sie Ihr Plugin in Ihrer eigenen plugin.xml,
+      wobei Sie die oben beschriebenen Erweiterungs-Möglichkeiten beachten müssen.
+      Achten Sie besonders darauf, dass
+      <ul>
+        <li>...Ihre plugin.xml einen <code>requires</code>-Bereich enthält, der das <i>core plugin</i> (<code>net.sf.jabref.core</code>) importiert.</li>
+        <li>...Ihre plugin.xml einen <code>runtime</code>-Bereich enthält, in dem Sie JPF mitteilen,
+        wo in Ihrem Projekt die class-Dateien und Ressourcen gespeichert werden.</li>
+      </ul>
+      </li>
+      <li>Erstellen Sie eine jar-Datei Ihres Projektes und speichern es in den <code>plugins</code>-Ordner
+      von JabRef.</li>
+      <li>Ihr Plugin sollte nun beim Start von JabRef.jar geladen werden.</li>
+    </ol>
+
+	<p>Falls Sie noch Fragen zum Plugin-System haben, zögern Sie nicht, sie auf der Mailing-Liste zu stellen.</p>
+
+    <h2>Erstellen einer Erweiterungs-Möglichkeit</h2>
+
+    <p>Dieser Abschnitt ist für JabRef-Entwickler gedacht, die zusätzliche Erweiterungs-Möglichkeiten
+    bereitstellen wollen.</p>
+
+    <p>Um eine neue Erweiterungs-Möglichkeit hinzuzufügen, müssen Sie diese in der plugin.xml des core-plugins
+    deklarieren. Hier ist ein Beispiel:</p>
+
+<code><pre>
+<extension-point id="PushToApplication">
+	<parameter-def type="string" id="pushToApp"
+		custom-data="<classname of the interface that plugin providers need to implement>" />
+	<!-- optionally other parameters (we currently do not use any of these for anything)
+		<parameter-def type="string" id="name" />
+		<parameter-def type="string" id="description"
+			multiplicity="none-or-one" />
+			-->
+</extension-point>
+</pre></code>
+
+	<p>Anschließend müssen Sie den Plugin-Code-Generator "<code>ant generate</code>" aufrufen,
+    der die Klasse "<code>net.sf.jabref.plugin.core.generated</code>" neu erstellt, so dass sie
+    die Methode <code>getPushToApplicationExtensions()</code> enthält; sie gibt eine Liste aller
+    PushToTalk-Erweiterungen aus, die im System registriert sind.</p>
+
+    <p>Diese Liste kann dann folgendermaßen genutzt werden (als Beispiel dient die EntryFetcher-Erweiterung):</p>
+
+<code><pre>
+/*
+ * Load fetchers that are plug-in extensions
+ */
+JabRefPlugin jabrefPlugin = JabRefPlugin.getInstance(PluginCore.getManager());
+if (jabrefPlugin != null){
+	for (EntryFetcherExtension ext : jabrefPlugin.getEntryFetcherExtensions()){
+		EntryFetcher fetcher = ext.getEntryFetcher();
+		if (fetcher != null){
+			fetchers.add(fetcher);
+		}
+	}
+}
+
+// and later...
+
+for (EntryFetcher fetcher : fetchers){
+  GeneralFetcher generalFetcher = new GeneralFetcher(sidePaneManager, this, fetcher);
+  web.add(generalFetcher.getAction());
+  fetcherActions.add(generalFetcher.getAction());
+}
+</pre></code>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/src/help/de/PreviewHelp.html b/src/help/de/PreviewHelp.html
index 2f18c5a..99013e6 100644
--- a/src/help/de/PreviewHelp.html
+++ b/src/help/de/PreviewHelp.html
@@ -4,7 +4,7 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>Eintragsvorschau einstellen</h1>
 
diff --git a/src/help/de/RemoteHelp.html b/src/help/de/RemoteHelp.html
index 2225b74..470fb60 100644
--- a/src/help/de/RemoteHelp.html
+++ b/src/help/de/RemoteHelp.html
@@ -4,7 +4,7 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>Externer Zugriff</h1>
 
diff --git a/src/help/de/SQLExport.html b/src/help/de/SQLExport.html
new file mode 100644
index 0000000..d539203
--- /dev/null
+++ b/src/help/de/SQLExport.html
@@ -0,0 +1,42 @@
+<html xmlns="http://www.w3.org/1999/xhtml">
+
+<body text="#275856">
+    <basefont size="4"
+          color="#2F4958"
+          face="arial" />
+
+    <h1>Export in eine externe SQL-Datenbank</h1>
+
+    <p> JabRef kann Inhalte einer BibTeX-Datei in eine MySQL-Datenbank exportieren.
+    Auch die Informationen zu Gruppen werden dabei berücksichtigt.</p>
+
+    <h2>Einstellungen</h2>
+    <ol>
+      <li> Erstellen Sie mit einem beliebigen MySQL-Administrationsprogramm
+           eine leere MySQL-Datenbank.</li>
+      <li> Vergewissern Sie sich, dass es einen Benutzer ('user') für diese
+           Datenbank gibt, der <em>alle Rechte</em> hat.</li>
+    </ol>
+
+    <h2>Export</h2>
+    <ol>
+      <li> Wählen Sie <b>Datei -> Export in externe SQL-Datenbank</b> oder
+           klicken Sie auf das entsprechende Symbol in der Symbolleiste.</li>
+	  <li> Geben Sie die Informationen zur Datenbank-Verbindung ein und klicken auf <b>Verbinden</b>.</li>
+    </ol>
+
+		<p>
+		JabRef baut dann die Verbindung zu dieser Datenbank auf, <b>löscht
+        existierende Tabellen</b>, erstellt neue Tabellen und fügt in diese
+        den Inhalt der Einträge und Gruppeninformationen ein. Falls Sie ein
+        weiteres Mal eine Verbindung zu dieser Datenbank aufbauen wollen,
+        müssen Sie die Verbindungs-Informationen nicht noch einmal eingeben.
+        Wenn Sie in eine andere Datenbank exportieren wollen, können Sie die
+        Verbindungs-Einstellungen unter <b>Datei -> Mit externer SQL-Datenbank
+        verbinden</b> (oder durch Klicken des entsprechenden Symbols) ändern
+        und anschließend den Export durchführen.
+    </p>
+
+  </body>
+
+</html>
\ No newline at end of file
diff --git a/src/help/de/SearchHelp.html b/src/help/de/SearchHelp.html
index 29e92d1..2f925f8 100644
--- a/src/help/de/SearchHelp.html
+++ b/src/help/de/SearchHelp.html
@@ -4,7 +4,7 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>Suchfunktionen</h1>
 
diff --git a/src/help/de/ShortAuxImport.html b/src/help/de/ShortAuxImport.html
index b953317..3298197 100644
--- a/src/help/de/ShortAuxImport.html
+++ b/src/help/de/ShortAuxImport.html
@@ -4,7 +4,7 @@
 <body>
     <basefont size="-1"
           color="#2F4958"
-          face="arial"> Dieses Modul erstellt eine neue
+          face="arial" /> Dieses Modul erstellt eine neue
           Datenbank, welche nur die im TeX Projekt vorkommenden
           Verweise/Einträge enthält.
 </body>
diff --git a/src/help/de/ShortIntegrityCheck.html b/src/help/de/ShortIntegrityCheck.html
index d5bcafe..9a77178 100644
--- a/src/help/de/ShortIntegrityCheck.html
+++ b/src/help/de/ShortIntegrityCheck.html
@@ -4,7 +4,7 @@
 <body>
     <basefont size="-1"
           color="#2F4958"
-          face="arial"> Die Integritätsprüfung
+          face="arial" /> 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
diff --git a/src/help/de/ShortPlainImport.html b/src/help/de/ShortPlainImport.html
index d83561e..0219660 100644
--- a/src/help/de/ShortPlainImport.html
+++ b/src/help/de/ShortPlainImport.html
@@ -4,7 +4,7 @@
 <body>
     <basefont size="-1"
           color="#2F4958"
-          face="arial"> Dieser Dialog ermöglicht das
+          face="arial" /> Dieser Dialog ermöglicht das
           schnelle Einfügen von Einträgen aus normalen
           Text. Die gewünschten Textstellen werden markiert
           und z.B. durch Doppelklick einem selektierten BibTeX
diff --git a/src/help/de/StringEditorHelp.html b/src/help/de/StringEditorHelp.html
index 3145a76..a5fdf83 100644
--- a/src/help/de/StringEditorHelp.html
+++ b/src/help/de/StringEditorHelp.html
@@ -4,7 +4,7 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>Der String-Editor</h1>
 
diff --git a/src/help/de/TimeStampHelp.html b/src/help/de/TimeStampHelp.html
index 37f521a..77dfa0a 100644
--- a/src/help/de/TimeStampHelp.html
+++ b/src/help/de/TimeStampHelp.html
@@ -4,7 +4,7 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>Zeitstempel</h1>
 
diff --git a/src/help/de/XMPHelp.html b/src/help/de/XMPHelp.html
index 068c48a..fef434b 100644
--- a/src/help/de/XMPHelp.html
+++ b/src/help/de/XMPHelp.html
@@ -4,7 +4,7 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>Unterstützung von XMP-Metadaten in JabRef</h1>
 
@@ -96,8 +96,8 @@
 
         <li>Alle anderen Felder werden unter ihrem Feld-Namen
         gespeichert.</li>
-    </ul><br>
-    <br>
+    </ul><br />
+    <br />
 
 
     <p>Es folgt ein Beispiel:</p>
@@ -139,8 +139,8 @@
     <ul>
         <li>In RDF können Attribut-Wert-Paare auch als Knoten
         wiedergegeben werden und vice versa.</li>
-    </ul><br>
-    <br>
+    </ul><br />
+    <br />
 
 
     <h2>Weiterführende Links</h2>
@@ -169,7 +169,7 @@
         <li>
         <a href="http://partners.adobe.com/public/developer/en/xmp/sdk/xmpspecification.pdf">
         Adobe XMP Spezifikation</a></li>
-    </ul><br>
-    <br>
+    </ul><br />
+    <br />
 </body>
 </html>
\ No newline at end of file
diff --git a/src/help/fr/About.html b/src/help/fr/About.html
index ba268aa..0288e98 100644
--- a/src/help/fr/About.html
+++ b/src/help/fr/About.html
@@ -3,12 +3,12 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <center>
         <h1>JabRef version @version@</h1>
 
-        <p>(c) 2007</p>
+        <p>(c) 2008</p>
 
         <p><img src="/images/JabRef-icon-48.png" /></p>
 
@@ -43,6 +43,7 @@
 
         <p>Michael Beckmann,
         Oliver Beckmann,
+        Fedor Bezrukov,
         Aaron Chen,
         Fabrice Dessaint,
         Nathan Dunn,
@@ -117,19 +118,19 @@
         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ï¿&frac12;que Microba sont
-        utilisï¿&frac12;s. Elle est
-        distribuï¿&frac12;e sous une license de type
+       <p>Certains composants de l'interface graphique de la
+        biblioth&egrave&que Microba sont
+        utilis&eacute&. 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ï¿&frac12; des
-        icï¿&frac12;nes proviennent de l'ensemble
-        d'icï¿&frac12;nes Crystal Clear par Everaldo
+        <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ï¿&frac12;e sous les termes de la
+        distribuée sous les termes de la
         Lesser General Public License.</p>
 
         <p>JabRef utilise les bibliothèques JempBox et
diff --git a/src/help/fr/BaseFrameHelp.html b/src/help/fr/BaseFrameHelp.html
index f6daebc..96383c4 100644
--- a/src/help/fr/BaseFrameHelp.html
+++ b/src/help/fr/BaseFrameHelp.html
@@ -3,7 +3,7 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>La fenêtre principale de
     JabRef</h1>
@@ -138,8 +138,8 @@
     é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>
+    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>
 
diff --git a/src/help/fr/BibtexHelp.html b/src/help/fr/BibtexHelp.html
index 01d5a60..3c33183 100644
--- a/src/help/fr/BibtexHelp.html
+++ b/src/help/fr/BibtexHelp.html
@@ -3,7 +3,7 @@
 <body style="color: rgb(39, 88, 86);">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>A propos de <em>BibTeX</em></h1>
 
@@ -38,9 +38,9 @@
         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>
+        référence.<br /></li>
 
-        <li><strong>address<br></strong> Habituellement l'adresse
+        <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
@@ -49,69 +49,69 @@
         coté, vous pouvez aider le lecteur en donnant
         l'adresse complète.</li>
 
-        <li><strong>annote<br></strong> Une annotation. Ce champ
+        <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
+        <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>
+        é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>
+        de famille [NDT: pas sur de la traduction...].<br />
+        <br /></li>
 
-        <li><strong>booktitle<br></strong> Titre d'un livre, dont
+        <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
+        <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
+        <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
+        <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
+        <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
+        <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
+        <li><strong>institution<br /></strong> L'institution ayant
         promue un rapport technique.</li>
 
-        <li><strong>journal<br></strong> Un nom de journal. Le
+        <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
+        <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
+        <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
@@ -119,11 +119,11 @@
         feb, mar, apr, may, jun, jul, aug, sep, oct, nov,
         dec).</li>
 
-        <li><strong>note<br></strong> Toute information
+        <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>
+        <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
@@ -134,11 +134,11 @@
         numéros lorsqu'ils appartiennent à une
         série nommée.</li>
 
-        <li><strong>organization<br></strong> L'organisation
+        <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
+        <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
@@ -150,33 +150,33 @@
         pour définir une gamme de nombres (comme dans
         <tt>7-33</tt>).</li>
 
-        <li><strong>publisher<br></strong> Le nom de
+        <li><strong>publisher<br /></strong> Le nom de
         l'éditeur commercial.</li>
 
-        <li><strong>school<br></strong> Le nom de l'école
+        <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
+        <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
+        <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
+        <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
+        <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
+        <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
@@ -186,7 +186,7 @@
         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>
+    </ul><br />
 
 
     <h2>Autres champs</h2>
@@ -199,97 +199,97 @@
     <ul>
         <li>
         <strong><span style="font-weight: normal; font-style: italic;">
-        affiliation*</span><br></strong> L'affiliation des
-        auteurs.<br>
-        <br></li>
+        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>abstract<br /></strong> Le résumé
+        d'un travail.<br />
+        <br /></li>
 
-        <li><strong>doi<br></strong> Le Digital Object Identifier
+        <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>
+        numérique.<br />
+        <br /></li>
 
-        <li><strong>eid<br></strong> L'Electronic IDentifier
+        <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>
+        <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>
+        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>
+        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>
+        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
+        ISSN*</span><br /></strong> L'"International Standard
         Serial Number". Utilisé pour identifier un
-        journal.<br>
-        <br></li>
+        journal.<br />
+        <br /></li>
 
-        <li><strong>keywords<br></strong> Mots-clefs
+        <li><strong>keywords<br /></strong> Mots-clefs
         utilisés pour la recherche, ou pour
-        annotation.<br>
-        <br></li>
+        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>
+        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
+        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>
+        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 Call
+        LCCN*</span><br /></strong> Le "Library of Congress Call
         Number". Champ parfois nommé
-        <tt>lib-congress</tt>.<br>
-        <br></li>
+        <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>
+        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>
+        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>
+        size*</span><br /></strong> La taille physique d'un
+        travail.<br />
+        <br /></li>
 
-        <li><strong>URL<br></strong> Le "WWW Universal Resource
+        <li><strong>URL<br /></strong> Le "WWW Universal Resource
         Locator" (adresse URL) qui pointe vers
         l'élément référencé.
         C'est souvent utilisé pour les rapports techniques
@@ -300,10 +300,10 @@
     <h3>JuraBib</h3>
 
     <ul>
-        <li><strong>urldate<br></strong> La date de la
+        <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>
+    </ul><br />
+     *) non supporté directement par JabRef<br />
+     <br />
 </body>
 </html>
\ No newline at end of file
diff --git a/src/help/fr/CiteSeerHelp.html b/src/help/fr/CiteSeerHelp.html
index 5767740..279e769 100644
--- a/src/help/fr/CiteSeerHelp.html
+++ b/src/help/fr/CiteSeerHelp.html
@@ -4,7 +4,7 @@
 <body style="color: rgb(39, 88, 86); direction: ltr;">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>Récupération depuis CiteSeer</h1>
 
@@ -25,8 +25,8 @@
     contenu sur CiteSeer. Le champ citeseerurl doit être
     rempli avec l'un des formats suivants :</p>
 
-    <p>http://citeseer.ist.psu.edu/DDDDDD[.html], ou<br>
-    oai:CiteSeerPSU:DDDDDD, ou<br>
+    <p>http://citeseer.ist.psu.edu/DDDDDD[.html], ou<br />
+    oai:CiteSeerPSU:DDDDDD, ou<br />
     DDDDDD</p>
 
     <p>où DDDDD est une séquence de chiffres. Pour
diff --git a/src/help/fr/CommandLine.html b/src/help/fr/CommandLine.html
index 4b5d5e6..e78b98e 100644
--- a/src/help/fr/CommandLine.html
+++ b/src/help/fr/CommandLine.html
@@ -4,7 +4,7 @@
 <body style="color: rgb(39, 88, 86); direction: ltr;">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>Les options de la ligne de commande</h1>
 
@@ -146,5 +146,17 @@
     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>
\ No newline at end of file
diff --git a/src/help/fr/ContentSelectorHelp.html b/src/help/fr/ContentSelectorHelp.html
index 86a395c..8679d50 100644
--- a/src/help/fr/ContentSelectorHelp.html
+++ b/src/help/fr/ContentSelectorHelp.html
@@ -4,7 +4,7 @@
 <body style="color: rgb(39, 88, 86); direction: ltr;">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>Sélecteur de contenu de champ</h1>
 
diff --git a/src/help/fr/Contents.html b/src/help/fr/Contents.html
index defe785..c45292b 100644
--- a/src/help/fr/Contents.html
+++ b/src/help/fr/Contents.html
@@ -3,66 +3,56 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
-    <h1>Contenu de l'aide</h1>
-
-    <p><a href="HelpHelp.html">A propos de
-    la fenêtre d'aide</a><br>
-     <a href="JabRefHelp.html">Informations
-    générales</a></p>
+<h1>Contenu de l'aide</h1>
 
+<h2>Général</h2>
+     <a href="HelpHelp.html">A propos de la fenêtre d'aide</a><br>
+     <a href="JabRefHelp.html">Informations générales</a><br>
+     <a href="BaseFrameHelp.html">La fenêtre principale de JabRef</a><br>
+     <a href="EntryEditorHelp.html">Éditeur d'entrées</a><br>
 
+<h2>Champs</h2>
     <p><a href="BibtexHelp.html">Aide sur <em>BibTeX</em></a><br>
-     <a href="CommandLine.html">Options de la ligne de
-    commande</a><br>
-     <a href="CustomExports.html">Filtres d'exportation
-    personnalisés</a><br>
-     <a href="CustomImports.html">Filtres d'importation
-    personnalisés</a><br>
-     <a href="LabelPatterns.html">Personnalisation du
-    générateur de clefs BibTeX</a><br>
-     <a href="CustomEntriesHelp.html">Personnalisation des types
-    d'entrées</a><br>
-     <a href="GeneralFields.html">Personnalisation des champs
-    généraux</a><br>
-     <a href="EndNoteFilters.html">Filtres
-    d'importation/exportation d'EndNote</a><br>
-     <a href="EntryEditorHelp.html">Éditeur
-    d'entrées</a><br>
      <a href="FileLinks.html">Liens de fichiers externes</a><br>
-     <a href="TimeStampHelp.html">Horodatage des
-    entrées</a><br>
-     <a href="CiteSeerHelp.html">Récupération des
-    entrées depuis <em>CiteSeer</em></a><br>
-     <a href="MedlineHelp.html">Récupération des
-    entrées depuis <em>Medline</em></a><br>
-     <a href="IEEEXploreHelp.html">Récupération des
-    entrées depuis <em>IEEExplore</em></a><br>
-     <a href="ContentSelectorHelp.html">Sélecteur de contenu
-    de champ</a><br>
-     <a href="GroupsHelp.html">Utilisation des
-    <em>Groupes</em></a><br>
-     <a href="ImportInspectionDialog.html">Fenêtre de
-    vérification des importations</a><br>
-     <a href="JournalAbbreviations.html">Abréviations de
-    journaux</a><br>
-     <a href="BaseFrameHelp.html">La fenêtre principale de
-    JabRef</a><br>
-     <a href="OwnerHelp.html">Le champ 'owner'
-    (propriétaire)</a><br>
-     <a href="MarkingHelp.html">Étiqueter des
-    entrées</a><br>
-     <a href="OpenOfficeHelp.html">Utiliser les bibliographies
-    JabRef dans OpenOffice.org</a><br>
-     <a href="ExternalFiles.html">Liens PDF/PS/URL/DOI dans
-    JabRef</a><br>
+     <a href="ExternalFiles.html">Liens PDF/PS/URL/DOI dans JabRef</a><br>
+     <a href="TimeStampHelp.html">Horodatage des entrées</a><br>
+     <a href="OwnerHelp.html">Le champ 'owner' (propriétaire)</a><br>
+     <a href="ContentSelectorHelp.html">Sélecteur de contenu de champ</a><br>
+     <a href="JournalAbbreviations.html">Abréviations de journaux</a><br>
+
+<h2>Recherche et tri des entrées</h2>
+     <a href="GroupsHelp.html">Utilisation des <em>Groupes</em></a><br>
+     <a href="MarkingHelp.html">Étiqueter des entrées</a><br>
      <a href="SearchHelp.html">Recherche dans JabRef</a><br>
-     <a href="StringEditorHelp.html">Éditeur de
-    chaînes</a><br>
-     <a href="PreviewHelp.html">Configuration de l'aperçu
-    des entrées</a><br>
-     <a href="XMPHelp.html">Support des
-    metadonnées XMP dans JabRef</a></p>
+
+<h2>Configuration</h2>
+     <a href="StringEditorHelp.html">Éditeur de chaînes</a><br>
+     <a href="DatabaseProperties.html">Propriétés de la base de données</<a><br />
+     <a href="PreviewHelp.html">Configuration de l'aperçu des entrées</a><br>
+     <a href="LabelPatterns.html">Personnalisation du générateur de clefs BibTeX</a><br>
+     <a href="CustomEntriesHelp.html">Personnalisation des types d'entrées</a><br>
+     <a href="GeneralFields.html">Personnalisation des champs généraux</a><br>
+     <a href="Plugin.html">Etendre JabRef en utilisant des greffons</a><br>
+
+<h2>Importation/Exportation</h2>
+     <a href="CustomExports.html">Filtres d'exportation personnalisés</a><br>
+     <a href="CustomImports.html">Filtres d'importation personnalisés</a><br>
+     <a href="ImportInspectionDialog.html">Fenêtre de vérification des importations</a><br>
+     <a href="EndNoteFilters.html">Filtres d'importation/exportation d'EndNote</a><br>
+     <a href="OpenOfficeHelp.html">Utiliser les bibliographies JabRef dans OpenOffice.org</a><br>
+     <a href="CiteSeerHelp.html">Récupération des entrées depuis <em>CiteSeer</em></a><br>
+     <a href="IEEEXploreHelp.html">Récupération des entrées depuis <em>IEEExplore</em></a><br>
+     <a href="MedlineHelp.html">Récupération des entrées depuis <em>Medline</em></a><br>
+     <a href="JSTOR.html">Récupération des entrées depuis <em>JStor</em></a><br>
+     <a href="SQLExport.html">Exporter vers une base de données SQL externe</a><br>
+     <a href="XMPHelp.html">Support des métadonnées XMP dans JabRef</a><br>
+     <a href="CommandLine.html">Options de la ligne de commande</a><br>
+     <a href="RemoteHelp.html">Opérations à distance</a><br>
+
+<h2>Divers</h2>
+     <a href="About.html">About JabRef</a><br>
+
 </body>
-</html>
\ No newline at end of file
+</html> 
\ No newline at end of file
diff --git a/src/help/fr/CustomEntriesHelp.html b/src/help/fr/CustomEntriesHelp.html
index f6521f0..37af71c 100644
--- a/src/help/fr/CustomEntriesHelp.html
+++ b/src/help/fr/CustomEntriesHelp.html
@@ -3,7 +3,7 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>Personnaliser les types d'entrées</h1>
 
diff --git a/src/help/fr/CustomExports.html b/src/help/fr/CustomExports.html
index 3cdcc70..165fede 100644
--- a/src/help/fr/CustomExports.html
+++ b/src/help/fr/CustomExports.html
@@ -3,7 +3,7 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>Filtres d'exportation personnalisés</h1>
 
@@ -67,14 +67,14 @@
     <p>Dans notre exemple de fichier d'exportation, cela pourrait
     ressembler à</p>
 
-    <p><i>html.begin.layout</i> :<br>
-    <code><HTML><br>
-     <BODY> text="#275856"><br>
+    <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>
+    <p><i>html.end.layout</i> :<br />
+    <code></BODY><br />
      </HTML></code></p>
 
     <p>Le fichier <i>html.layout</i> fournit le gabarit par
@@ -140,24 +140,24 @@
     <b>HTMLChars</b> sur le résultat. Vous pouvez lister un
     nombre arbitraire de formateurs de cette manière.</p>
 
-    <p>Le paramètre des formateurs, entre les accolades,
-    n'est pas obligatoirement une commande de champ. Vous pouvez y
-    insérer du texte normal, qui sera alors passé
-    comme argument au formateur. Cela peut-être utile avec
-    certains formateurs, par exemple le formateur CurrentDate (voir
+
+    <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 utilse pour
+    certains formateurs, par ex. le formateur CurrentDate (d�crit
     ci-dessous).</p>
 
-  <p>
-    Certains formateurs prennent un argument supplémentaire, donné entre parenthèses
-    immédiatement après le nom du formateur. L'argument peut-être mis
-    entre guillemets, ce qui est nécessaire s'il inclut des caractères parenthèses.
-    Par exemple, <code>\format[Replace("\s,_")]{\journal}</code> lance
-    le formateur <b>Replace</b> avec l'argument <b>\s,_</b> (cela retourne
-    le champ "journal" avec les espaces remplacées par des soulignements).
-    </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 soulignets dans le champ "field").</p>
+
+    <p>JabRef fournit la s�rie suivante de formateurs, certains
+    d�pendant des autres:</p>
 
-    <p>JabRef fournit les formateurs suivants, certains d'entre eux
-    dépendant d'autres formateurs :</p>
 
     <ul>
         <li><code>HTMLChars</code> : remplace les
@@ -212,12 +212,6 @@
         des champs author/editor en mettant le nom de famille en
         premier.</li>
 
-        <li><code>AuthorLastFirstAbbreviator</code> :
-        réduit les prénoms de tous les auteurs
-        à leurs initiales. Ce formateur nécessite
-        d'avoir préalablement utilisé
-        AuthorLastFirst.</li>
-        
         <li><code>AuthorAbbreviator</code> ou <code>AuthorLastFirstAbbreviator</code> :
         abrège les prénoms de tous les auteurs. Ce formateur renvoie les noms avec
         le nom propre en premier. Faire suivre ce formateur d'AuthorFirstFirst pour
@@ -248,9 +242,6 @@
         "prénom nom". Les prénoms sont
         abrégés.</li>
 
-        <li><code>AuthorAbbreviator</code> : A
-        documenter.</li>
-
         <li><code>AuthorNatBib</code> : Formats des noms
         d'auteurs dans le style NatBib, avec les noms propres
         séparés par "and" s'il y a deux auteurs, ou
@@ -288,17 +279,6 @@
          <br> <br>
         La seconde partie est le texte qui remplace tous les correspondances.</li>
 
-       <li><code>Replace(regexp,replacewith)</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> <br>
-        La première partie est l'expression régulière à rechercher. L'expression régulière
-        s'écrit normalement, sans séquence d'échappement supplémentaire pour les anti-slash ("backslashes"). Une description
-        des expressions 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> <br>
-        La seconde partie est le texte qui remplace tous les correspondances.</li>
-
         <li><code>RemoveBrackets</code> : supprime toutes les
         accolades "{" ou "}".</li>
 
@@ -363,7 +343,7 @@
     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>
+    <code><cas1>@<gamme11>@<format>@<gamme12>@<format>@<gamme13>...@@<br />
 
      <cas2>@<gamme21>@... et ainsi de suite.</code>
 
@@ -470,8 +450,8 @@
     effectué en utilisant les commandes <code>\begin</code>
     et <code>\end</code> :</p>
 
-    <p><code>\begin{editor}<br>
-    \format[HTMLChars,AuthorFirstFirst]{\editor} (Ed.)<br>
+    <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>
@@ -502,7 +482,7 @@
     les grouper par mot-clefs :</p>
 
     <p><code>\begingroup{keywords}New Category:
-    \format[HTMLChars]{\keywords}<br>
+    \format[HTMLChars]{\keywords}<br />
      \endgroup{keywords}</code></p>
 
     <h2>Partage de votre travail</h2>
@@ -519,5 +499,16 @@
     collection des fichiers gabarit soumis ou de les ajouter
     à la série des filtres d'exportation standard ou
     des formateurs.</p>
+    
+    <p>A partir de JabRef 2.4b1 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 example, 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>
+
 </body>
-</html>
\ No newline at end of file
+</html>
diff --git a/src/help/fr/CustomImports.html b/src/help/fr/CustomImports.html
index d7d6d60..9760bbf 100644
--- a/src/help/fr/CustomImports.html
+++ b/src/help/fr/CustomImports.html
@@ -3,7 +3,7 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>Filtres d'importation personnalisés</h1>
 
diff --git a/src/help/fr/DatabaseProperties.html b/src/help/fr/DatabaseProperties.html
new file mode 100644
index 0000000..91b839a
--- /dev/null
+++ b/src/help/fr/DatabaseProperties.html
@@ -0,0 +1,48 @@
+<html xmlns="http://www.w3.org/1999/xhtml">
+
+<body text="#275856">
+    <basefont size="4"
+          color="#2F4958"
+          face="arial" />
+
+    <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.
+
+</body>
+</html> 
\ No newline at end of file
diff --git a/src/help/fr/EndNoteFilters.html b/src/help/fr/EndNoteFilters.html
index d05801a..b9f170c 100644
--- a/src/help/fr/EndNoteFilters.html
+++ b/src/help/fr/EndNoteFilters.html
@@ -3,7 +3,7 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>Filtre d'exportation EndNote</h1>
 
diff --git a/src/help/fr/EntryEditorHelp.html b/src/help/fr/EntryEditorHelp.html
index daecb6d..bc9b713 100644
--- a/src/help/fr/EntryEditorHelp.html
+++ b/src/help/fr/EntryEditorHelp.html
@@ -3,7 +3,7 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>L'éditeur d'entrées</h1>
 
diff --git a/src/help/fr/ExternalFiles.html b/src/help/fr/ExternalFiles.html
index d2b5d11..b0949c0 100644
--- a/src/help/fr/ExternalFiles.html
+++ b/src/help/fr/ExternalFiles.html
@@ -3,7 +3,7 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>Les liens PDF/PS/URL/DOI dans JabRef</h1>
 
@@ -69,7 +69,7 @@
 
     <p>JabRef
     permet de lier facilement les fichiers PDF et PS
-    ï¿&frac12; vos entrï¿&frac12;es. Pour
+    à 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
@@ -102,7 +102,7 @@
     n'apparaîtra pas dans le tableau des entrées.</p>
 
     <h2>Les répertoires PDF et PS
-    spï¿&frac12;cifiques à la base de
+    spécifiques à la base de
     données</h2>
 
     <p>Vous pouvez définir des répertoires PDF et PS
diff --git a/src/help/fr/FileLinks.html b/src/help/fr/FileLinks.html
index df8db1e..60a0d52 100644
--- a/src/help/fr/FileLinks.html
+++ b/src/help/fr/FileLinks.html
@@ -3,7 +3,7 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>Liens de fichier dans JabRef</h1>
 
@@ -45,7 +45,7 @@
     <h2>Ajouter des liens externes à une
     entrée</h2>
 
-    <p>Si le champ "fichier" est inclus dans les
+    <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
@@ -101,4 +101,4 @@
     <b>Ctrl-clic</b> sur Max OS X) pour afficher un menu montrant
     tous les liens.</p>
 </body>
-</html>
\ No newline at end of file
+</html> 
\ No newline at end of file
diff --git a/src/help/fr/GeneralFields.html b/src/help/fr/GeneralFields.html
index a069f41..5e46967 100644
--- a/src/help/fr/GeneralFields.html
+++ b/src/help/fr/GeneralFields.html
@@ -4,7 +4,7 @@
 <body style="color: rgb(39, 88, 86); direction: ltr;">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>Personnalisation des champs généraux</h1>
 
@@ -19,7 +19,7 @@
     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>
+    <p>Exemple :</p><code>General:url;keyword;doi;pdf<br />
     Abstract:abstract;annote</code>
 
     <p>produit un onglet appelé "General" contenant les
diff --git a/src/help/fr/GroupsHelp.html b/src/help/fr/GroupsHelp.html
index fdab916..0341fd8 100644
--- a/src/help/fr/GroupsHelp.html
+++ b/src/help/fr/GroupsHelp.html
@@ -3,7 +3,7 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>Les groupes</h1>
 
diff --git a/src/help/fr/HelpHelp.html b/src/help/fr/HelpHelp.html
index 8f93317..91a5a5b 100644
--- a/src/help/fr/HelpHelp.html
+++ b/src/help/fr/HelpHelp.html
@@ -3,7 +3,7 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>La fenêtre d'aide</h1>
 
diff --git a/src/help/fr/IEEEXploreHelp.html b/src/help/fr/IEEEXploreHelp.html
index f68f30f..6fd84a4 100644
--- a/src/help/fr/IEEEXploreHelp.html
+++ b/src/help/fr/IEEEXploreHelp.html
@@ -3,7 +3,7 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>Recherche IEEEXplore</h1>
 
diff --git a/src/help/fr/ImportInspectionDialog.html b/src/help/fr/ImportInspectionDialog.html
index 0f72723..cf0773e 100644
--- a/src/help/fr/ImportInspectionDialog.html
+++ b/src/help/fr/ImportInspectionDialog.html
@@ -3,7 +3,7 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>Fenêtre de vérification des importations</h1>
 
diff --git a/src/help/fr/JSTOR.html b/src/help/fr/JSTOR.html
new file mode 100644
index 0000000..227aec7
--- /dev/null
+++ b/src/help/fr/JSTOR.html
@@ -0,0 +1,35 @@
+<html xmlns="http://www.w3.org/1999/xhtml">
+
+
+<body text="#275856">
+    <basefont size="4"
+          color="#2F4958"
+          face="arial">
+
+<h1>Recherche JStor</h1>
+
+L'aide ci-dessous a �t� copi�e depuis le site web de JStor et pourrait changer avec JSTor :
+
+    <p> * Par d�faut, votre recherche portera sur l'auteur, le titre et le texte complet de tous les types de contenu de p�riodiques (articles, synth�ses de livre, etc.)<br>
+  * Utilisez des guillemets pour rechercher une phrase (e.g., "punctuated equilibrium")<br>
+  * Utilisez ti: pour rechercher le titre d'un article, au: pour rechercher un auteur (e.g.,
+  ti:"two-person cooperative games", au:"john nash")<br>
+  * Utilisez AND, OR, NOT pour combiner les termes (e.g., ti:"two-person cooperative games"
+  AND au:"john nash")</p>
+<p>JSTOR est une organisation � but non lucratif avec une double mission de cr�er et de maintenir
+une archive de journaux savants importants, et de fournir un acc�s aussi large que possible
+� ces journaux. JSTOR offre aux chercheurs la possibilit� de r�cup�rer des images num�ris�es
+de haute r�solution des num�ros et des pages de journaux, tels qu'ils ont �t�
+originellement con�us, imprim�s et illustr�s. Les journaux archiv�s dans JSTOR couvrent beaucoup de disciplines.</p>
+<p>JStor offre l'acc�s aux sujets suivants :</p>
+<p>art & sciences<br>
+  biologie<br>
+  affaire<br>
+  �cologie & botanique<br>
+  sant� & sciences g�n�rales<br>
+  langues & litt�rature<br>
+  math�matiques & statistiques<br>
+  musique</p>
+<p>Une recherche renvoie un maximum de 200 r�sultats.</p>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/help/fr/JabRefHelp.html b/src/help/fr/JabRefHelp.html
index d7e213f..c72d312 100644
--- a/src/help/fr/JabRefHelp.html
+++ b/src/help/fr/JabRefHelp.html
@@ -3,7 +3,7 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>JabRef</h1>
 
diff --git a/src/help/fr/JournalAbbreviations.html b/src/help/fr/JournalAbbreviations.html
index 7dd6a79..20cf0cb 100644
--- a/src/help/fr/JournalAbbreviations.html
+++ b/src/help/fr/JournalAbbreviations.html
@@ -3,7 +3,7 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>Abréviations des journaux</h1>
 
diff --git a/src/help/fr/LabelPatterns.html b/src/help/fr/LabelPatterns.html
index f5bffbe..5a3062f 100644
--- a/src/help/fr/LabelPatterns.html
+++ b/src/help/fr/LabelPatterns.html
@@ -3,7 +3,7 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>Personnalisation du générateur de clefs
     BibTeX</h1>
@@ -36,46 +36,46 @@
 
     <ul>
         <li><b>[<code>auth</code>]</b> : Le nom du premier
-        auteur<br></li>
+        auteur<br /></li>
 
         <li><b>[<code>authors</code>]</b> : Le nom de tous les
-        auteurs<br></li>
+        auteurs<br /></li>
 
         <li><b>[<code>authorLast</code>]</b>: Le nom propre du dernier
-        auteur<br></li>
+        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>
+        ajouté.<br /></li>
 
         <li><b>[<code>authIniN</code>]</b> : Les N
         premières lettres (ou moins) du nom de chacun des
-        auteurs.<br></li>
+        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>
+        initiales du nom des auteurs restants<br /></li>
 
         <li><b>[<code>authN</code>]</b> : Les N
-        premières lettres du premier auteur.<br></li>
+        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>
+        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>
+        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>
+        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>
+        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
@@ -91,60 +91,63 @@
 
     <ul>
         <li><b>[<code>edtr</code>]</b> : Le nom du premier
-        éditeur<br></li>
+        éditeur.<br /></li>
 
         <li><b>[<code>edtrIniN</code>]</b> : Les N
         premières lettres du nom de chaque
-        éditeur<br></li>
+        éditeur.<br /></li>
 
         <li><b>[<code>editors</code>]</b> : Le nom des chacun
-        des éditeurs<br></li>
+        des éditeurs.<br /></li>
 
         <li><b>[<code>editorLast</code>]</b>: Le nom propre du dernier
-        éditeur<br></li>
+        é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>
+        restants.<br /></li>
 
         <li><b>[<code>edtrN</code>]</b> : Les N
         premières lettres du nom du premier
-        éditeur<br></li>
+        éditeur.<br /></li>
 
         <li><b>[<code>edtrN_M</code>]</b> : Les N
         premières lettres du nom des M premiers
-        éditeurs.<br></li>
+        é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>
+        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>
+        caractère plus (+) est ajouté.<br /></li>
 
         <li><b>[<code>firstpage</code>]</b> : Le numéro
-        de la première page de la publication<br></li>
+        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>
+        points-virgules.<br /></li>
 
         <li><b>[<code>lastpage</code>]</b> : Le numéro
-        de la dernière page de la publication<br></li>
+        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>
+        mots du titre.<br /></li>
 
         <li><b>[<code>shortyear</code>]</b> : Les 2 derniers
-        chiffres de l'année de publication<br></li>
+        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>
+        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
@@ -159,7 +162,7 @@
         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>
+        Biology" en "JoFB".<br /></li>
 
         <li><b>:lower</b>, force le texte inséré par
         le marqueur de champ à être en minuscules. Par
@@ -184,8 +187,8 @@
     les étiquettes ressemblent à :</p>
 
     <blockquote>
-        <code>Yared1998</code><br>
-        <code>Yared1998a</code><br>
+        <code>Yared1998</code><br />
+        <code>Yared1998a</code><br />
         <code>Yared1998b</code>
     </blockquote>
 
diff --git a/src/help/fr/MarkingHelp.html b/src/help/fr/MarkingHelp.html
index 3077c28..8e39530 100644
--- a/src/help/fr/MarkingHelp.html
+++ b/src/help/fr/MarkingHelp.html
@@ -3,7 +3,7 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>Etiqueter les entrées</h1>
 
diff --git a/src/help/fr/MedlineHelp.html b/src/help/fr/MedlineHelp.html
index cee8d70..c84874e 100644
--- a/src/help/fr/MedlineHelp.html
+++ b/src/help/fr/MedlineHelp.html
@@ -4,7 +4,7 @@
 <body style="color: rgb(39, 88, 86); direction: ltr;">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>Récupération d'entrées depuis
     Medline</h1>
@@ -57,7 +57,7 @@
     http://java.sun.com/j2se/1.4.2/docs/guide/net/properties.html</p>
 
     <p><code>java -Dhttp.proxyHost="hostname"
-    -Dhttp.proxyPort="portnumber"</code></p><br>
-    <br>
+    -Dhttp.proxyPort="portnumber"</code></p><br />
+    <br />
 </body>
 </html>
\ No newline at end of file
diff --git a/src/help/fr/OpenOfficeHelp.html b/src/help/fr/OpenOfficeHelp.html
index a0d7b51..2d122c0 100644
--- a/src/help/fr/OpenOfficeHelp.html
+++ b/src/help/fr/OpenOfficeHelp.html
@@ -3,7 +3,7 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>Utiliser les bibliographies JabRef dans
     OpenOffice.org</h1>
diff --git a/src/help/fr/OwnerHelp.html b/src/help/fr/OwnerHelp.html
index 393525d..feca15f 100644
--- a/src/help/fr/OwnerHelp.html
+++ b/src/help/fr/OwnerHelp.html
@@ -3,7 +3,7 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>Le champ 'owner' (propriétaire)</h1>
 
diff --git a/src/help/fr/Plugin.html b/src/help/fr/Plugin.html
new file mode 100644
index 0000000..ee70f6d
--- /dev/null
+++ b/src/help/fr/Plugin.html
@@ -0,0 +1,94 @@
+<html xmlns="http://www.w3.org/1999/xhtml">
+ 
+<body text="#275856">
+    <basefont size="4"
+          color="#2F4958"
+          face="arial" />
+
+    <h1>Le Système de greffons de JabRef </h1>
+
+    <p>Depuis la version 2.4b1, JabRef peut être étendu en utilisant un système de greffons construit en utilisant le "Java Plugin Framework" (JPF).</p>
+
+    <p>Pour <i>utiliser des greffons</i>, mettez simplement le fichier jar du greffon dans le répertoire nommé <code>plugins</code> dans le répertoire où se trouve JabRef.jar. Au démarrage, JabRef affichera la liste de tous les greffons chargés.</p>
+
+    <h2>Comment écrire un greffon</h2>
+
+    <p>JabRef offre aux développeurs les points d'extension suivants :</p>
+    <ul>
+      <li><code>ImportFormat</code> - Ajoute à JabRef des importateurs accessibles depuis 'Importer dans ...'.</li>
+      <li><code>EntryFetcher</code> - Ajoute l'accès à des bases de données comme Citeseer ou Medline au menu <i>Recherche internet</i>.</li>
+      <li><code>ExportFormatTemplate</code> - Ajoute un modèle d'exportation comme ceux accessible par <i>Gérer les exportations personnalisées</i>.</li>
+      <li><code>ExportFormat</code> - Ajoute à la fenêtre d'exportation de JabRef un filtre d'exportation (qui est plus sophistiqué que le simple modèle d'exportation).</li>
+      <li><code>ExportFormatProvider</code> - Une façon plus puissante d'ajouter des formats d'exportation à JabRef.</li>
+      <li><code>LayoutFormatter</code> - Ajoute des formateurs qui pourront être utilisés dans la mise en page des exportations.</li>
+      <li><code>SidePanePlugin</code> - Ajoute un composant "panneau latéral" qui peut effectuer tout type d'opérations. Le panneau est accessible à partir du menu <b>Greffons</b>  dans la fenêtre principale de JabRef.</li>
+	</ul>	
+
+    <p>Ces points d'extension sont définis dans <code>plugin.xml</code> du JabRef-core-plugin,
+    qui peut être trouvé dans <code>JabRef/src/plugins/net.sf.jabref.core/</code>.</p>
+
+    <p>Pour commencer un développement, suivez ces principales étapes :</p>
+    <ol>
+      <li>Extrayer le tronc de JabRef en utilisant SubVersion (<code>https://jabref.svn.sourceforge.net/svnroot/jabref/trunk</code>).
+    Il contient JabRef lui-même ainsi que les greffons ajoutés jusqu'à présent à JabRef (vous n'avez pas besoin du répertoire htdocs) et qui peuvent vous servir de point de départ pour vos propres greffons.</li>
+      <li>Compiler JabRef en utilisant <code>ant jars</code>.</li>
+      <li>Créer votre propre projet et définissez votre entension dans votre propre plugin.xml qui doit satisfaire les points d'extension du "core" plugin.xml.
+      En particulier, assurez-vous que :
+      <ul>
+        <li>...votre plugin.xml a une section <code>requires</code> qui importe le "core plugin" (<code>net.sf.jabref.core</code>).</li>
+        <li>...votre plugin.xml a la section <code>runtime</code>, où vous dites à JPF où vous avez stocké vos fichiers de classe et ressources dans votre projet.</li>
+      </ul>
+      </li>
+      <li>Créer un jar de votre projet et mettez-le dans le répertoire <code>plugins</code> de JabRef.</li>
+      <li>Votre greffon devrait être chargé quand vous démarrez JabRef à partir du jar.</li>
+    </ol>
+
+	<p>Ne vous génez pas pour nous poser des questions liées au système de greffons sur la liste de diffusion !</p>
+
+    <h2>Comment ajouter un point d'extension à JabRef</h2>
+
+    <p>Ce document est destiné aux développeurs de JabRef qui veulent ajouter des points d'extension supplémentaires.</p>
+
+    <p>Pour ajouter un nouveau point d'extension, vous devez déclarer ce point d'extension dans le plugin.xml du "core plugin" de façon similaire à ceci :</p>
+
+<code><pre>
+<extension-point id="PushToApplication">
+	<parameter-def type="string" id="pushToApp"
+		custom-data="<classname of the interface that plugin providers need to implement>" />
+	<!-- optionally other parameters (we currently do not use any of these for anything)
+		<parameter-def type="string" id="name" />
+		<parameter-def type="string" id="description"
+			multiplicity="none-or-one" />
+			-->
+</extension-point>
+</pre></code>
+
+	<p>Ensuite, vous devez relancer le générateur de code de greffon "<code>ant generate</code>", qui recréera la classe "helper" dans  "<code>net.sf.jabref.plugin.core.generated</code>" afin qu'il inclut une méthode <code>getPushToApplicationExtensions()</code> qui renvoie une liste de toutes les extensions PushToTalk référencées dans votre système.</p>
+
+    <p>Cette liste peut ensuite être utilisée comme ceci (un exemple de ce que nous faisons avec les extensiosn "entry fetcher") :</p>
+
+<code><pre>
+/*
+ * Load fetchers that are plug-in extensions
+ */
+JabRefPlugin jabrefPlugin = JabRefPlugin.getInstance(PluginCore.getManager());
+if (jabrefPlugin != null){
+	for (EntryFetcherExtension ext : jabrefPlugin.getEntryFetcherExtensions()){
+		EntryFetcher fetcher = ext.getEntryFetcher();
+		if (fetcher != null){
+			fetchers.add(fetcher);
+		}
+	}
+}
+
+// and later...
+
+for (EntryFetcher fetcher : fetchers){
+  GeneralFetcher generalFetcher = new GeneralFetcher(sidePaneManager, this, fetcher);
+  web.add(generalFetcher.getAction());
+  fetcherActions.add(generalFetcher.getAction());
+}
+</pre></code>
+
+</body>
+</html> 
\ No newline at end of file
diff --git a/src/help/fr/PreviewHelp.html b/src/help/fr/PreviewHelp.html
index da22a62..942b7b8 100644
--- a/src/help/fr/PreviewHelp.html
+++ b/src/help/fr/PreviewHelp.html
@@ -3,7 +3,7 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>Configuration de l'aperçu des
     entrées</h1>
diff --git a/src/help/fr/RemoteHelp.html b/src/help/fr/RemoteHelp.html
index 87b13a7..83b7c34 100644
--- a/src/help/fr/RemoteHelp.html
+++ b/src/help/fr/RemoteHelp.html
@@ -3,7 +3,7 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>Accès à distance</h1>
 
diff --git a/src/help/fr/SQLExport.html b/src/help/fr/SQLExport.html
new file mode 100644
index 0000000..de10d30
--- /dev/null
+++ b/src/help/fr/SQLExport.html
@@ -0,0 +1,31 @@
+<html xmlns="http://www.w3.org/1999/xhtml">
+
+<body text="#275856">
+    <basefont size="4"
+          color="#2F4958"
+          face="arial" />
+
+    <h1>Exportation vers une base de données SQL externe</h1>
+
+    <p> JabRef est capable d'exporter le contenu de la base BibTeX, ainsi que les informations sur les groupes, dans une base de données SQL externe.</p>
+
+    <h2>Configuration</h2>
+    <ol>
+      <li> En utilisant votre outil d'administration favori de MySQL, créer une base de données MySQL vide.</li>
+      <li> Assurez-vous qu'un utilisateur de cette base dispose de <em>tous les privilèges</em>.</li>
+    </ol>
+
+    <h2>Exportation</h2>
+    <ol>
+      <li> Choisissez <b>Fichier -> Exporter vers une base SQL externe</b>, ou cliquez sur le bouton correspondant dans la barre d'outils.</li>
+      <li> Entrez les informations de connexion de la base de données, et cliquez sur <b>Connecter</b>.</li>
+    </ol>
+
+		<p>
+		JabRef se connectera alors à la base de données spécifiée, <b><em>effacera les tables existantes</em></b>, creera de nouvelles tables et remplira ces tables avec les informations sur les entrées et sur les groupes. Notez que les informations de connexion ne vous seront pas demandées lors des prochaines exportations.
+		Si vous souhaitez exporter vers une base de données différente, vous pouvez changez les informations de connexion en choisissant <b>Fichier -> Connecter vers une base SQL externe</b> (ou en cliquant sur le bouton correspondant dans le barre d'outils), puis en effectuant une exportation.
+    </p>
+
+  </body>
+
+</html> 
\ No newline at end of file
diff --git a/src/help/fr/SearchHelp.html b/src/help/fr/SearchHelp.html
index 3b54ca1..f440568 100644
--- a/src/help/fr/SearchHelp.html
+++ b/src/help/fr/SearchHelp.html
@@ -3,7 +3,7 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>Recherche</h1>
 
diff --git a/src/help/fr/ShortAuxImport.html b/src/help/fr/ShortAuxImport.html
index 43dbe18..59b3882 100644
--- a/src/help/fr/ShortAuxImport.html
+++ b/src/help/fr/ShortAuxImport.html
@@ -3,7 +3,7 @@
 <body>
     <basefont size="-1"
           color="#2F4958"
-          face="arial"> Cette fonction génère une
+          face="arial" /> Cette fonction génère une
           nouvelle base de données qui contient uniquement
           les références utilisées dans un
           projet TeX existant.
diff --git a/src/help/fr/ShortIntegrityCheck.html b/src/help/fr/ShortIntegrityCheck.html
index 4e87b06..9a873c0 100644
--- a/src/help/fr/ShortIntegrityCheck.html
+++ b/src/help/fr/ShortIntegrityCheck.html
@@ -3,7 +3,7 @@
 <body>
     <basefont size="-1"
           color="#2F4958"
-          face="arial"> La vérification
+          face="arial" /> 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
diff --git a/src/help/fr/ShortPlainImport.html b/src/help/fr/ShortPlainImport.html
index 80a175a..5211c17 100644
--- a/src/help/fr/ShortPlainImport.html
+++ b/src/help/fr/ShortPlainImport.html
@@ -3,7 +3,7 @@
 <body>
     <basefont size="-1"
           color="#2F4958"
-          face="arial"> Ceci est simplement une fenêtre de
+          face="arial" /> Ceci est simplement une fenêtre de
           copier-coller. Commencez par charger ou coller du texte
           dans la zone de saisie de texte. Ensuite, vous pouvez
           sélectionner des portions de texte et les
diff --git a/src/help/fr/StringEditorHelp.html b/src/help/fr/StringEditorHelp.html
index 2329f27..97c86db 100644
--- a/src/help/fr/StringEditorHelp.html
+++ b/src/help/fr/StringEditorHelp.html
@@ -3,15 +3,15 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>L'éditeur de chaîne</h1>
 
     <p><em>On l'ouvre
-    à partir de la fenêtre principale par le menu</em>
-    BibTeX -> Editer les chaînes ou en appuyant sur un des
+    à 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.</p>
+    CTRL-T.</em></p>
 
     <p>Les <em>chaînes</em> sont l'équivalent
     <em>BibTeX</em> des constantes dans un langage de
@@ -63,4 +63,4 @@
     stockée dans le même ordre, excepté quand
     BibTeX aura besoin d'un ordre différent.</p>
 </body>
-</html>
\ No newline at end of file
+</html> 
\ No newline at end of file
diff --git a/src/help/fr/TimeStampHelp.html b/src/help/fr/TimeStampHelp.html
index 9f5e790..49d57bc 100644
--- a/src/help/fr/TimeStampHelp.html
+++ b/src/help/fr/TimeStampHelp.html
@@ -3,7 +3,7 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>Horodatage des entrées</h1>
 
diff --git a/src/help/fr/XMPHelp.html b/src/help/fr/XMPHelp.html
index feb4b02..5bb19b8 100644
--- a/src/help/fr/XMPHelp.html
+++ b/src/help/fr/XMPHelp.html
@@ -3,7 +3,7 @@
 <body text="#275856">
     <basefont size="4"
           color="#2F4958"
-          face="arial">
+          face="arial" />
 
     <h1>Support des metadonnées XMP dans
     JabRef</h1>
@@ -105,8 +105,8 @@
 
         <li>Tous les autres champs sont sauvés en utilisant
         directement le nom de leur champ.</li>
-    </ul><br>
-    <br>
+    </ul><br />
+    <br />
 
 
     <p>Ci-dessous, un exemple de mise en correspondance</p>
@@ -149,8 +149,8 @@
         <li>Selon RDF, les couples attribut-valeur peuvent aussi
         être exprimés comme des noeuds, et
         vice-versa.</li>
-    </ul><br>
-    <br>
+    </ul><br />
+    <br />
 
 
     <h2>Liens :</h2>
@@ -180,7 +180,7 @@
         <li>
         <a href="http://partners.adobe.com/public/developer/en/xmp/sdk/xmpspecification.pdf">
         Adobe XMP Specification</a></li>
-    </ul><br>
-    <br>
+    </ul><br />
+    <br />
 </body>
 </html>
\ No newline at end of file
diff --git a/src/images/absIcon.png b/src/images/absIcon.png
new file mode 100644
index 0000000..f249fda
Binary files /dev/null and b/src/images/absIcon.png differ
diff --git a/src/images/add.png b/src/images/add.png
new file mode 100644
index 0000000..6b636fe
Binary files /dev/null and b/src/images/add.png differ
diff --git a/src/images/autumn.png b/src/images/autumn.png
new file mode 100644
index 0000000..77b7590
Binary files /dev/null and b/src/images/autumn.png differ
diff --git a/src/images/completeItem.png b/src/images/completeItem.png
new file mode 100644
index 0000000..5eeadc7
Binary files /dev/null and b/src/images/completeItem.png differ
diff --git a/src/images/contents.png b/src/images/contents.png
new file mode 100644
index 0000000..6e44fa7
Binary files /dev/null and b/src/images/contents.png differ
diff --git a/src/images/crystal_16/Icons.properties b/src/images/crystal_16/Icons.properties
index cd46611..515d166 100644
--- a/src/images/crystal_16/Icons.properties
+++ b/src/images/crystal_16/Icons.properties
@@ -72,4 +72,6 @@ close2=fileclose2.png
 integrityCheck=integrity.png
 groupIncluding=groupIncluding.png
 groupRefining=groupRefining.png
-unknown=help.png
\ No newline at end of file
+unknown=help.png
+dbConnect=database_connect.png
+dbExport=database_save.png
\ No newline at end of file
diff --git a/src/images/crystal_16/database_connect.png b/src/images/crystal_16/database_connect.png
new file mode 100644
index 0000000..3a11197
Binary files /dev/null and b/src/images/crystal_16/database_connect.png differ
diff --git a/src/images/crystal_16/database_save.png b/src/images/crystal_16/database_save.png
new file mode 100644
index 0000000..44c06dd
Binary files /dev/null and b/src/images/crystal_16/database_save.png differ
diff --git a/src/images/database_connect.png b/src/images/database_connect.png
new file mode 100644
index 0000000..3a11197
Binary files /dev/null and b/src/images/database_connect.png differ
diff --git a/src/images/database_save.png b/src/images/database_save.png
new file mode 100644
index 0000000..44c06dd
Binary files /dev/null and b/src/images/database_save.png differ
diff --git a/src/images/document-save-as.png b/src/images/document-save-as.png
new file mode 100644
index 0000000..7a1591f
Binary files /dev/null and b/src/images/document-save-as.png differ
diff --git a/src/images/document-save.png b/src/images/document-save.png
new file mode 100644
index 0000000..0311e47
Binary files /dev/null and b/src/images/document-save.png differ
diff --git a/src/images/doismall.png b/src/images/doismall.png
new file mode 100644
index 0000000..3c9595b
Binary files /dev/null and b/src/images/doismall.png differ
diff --git a/src/images/duplicate.png b/src/images/duplicate.png
new file mode 100644
index 0000000..5599a18
Binary files /dev/null and b/src/images/duplicate.png differ
diff --git a/src/images/edit-copy.png b/src/images/edit-copy.png
new file mode 100644
index 0000000..efec317
Binary files /dev/null and b/src/images/edit-copy.png differ
diff --git a/src/images/edit-cut.png b/src/images/edit-cut.png
new file mode 100644
index 0000000..7e750c9
Binary files /dev/null and b/src/images/edit-cut.png differ
diff --git a/src/images/edit-delete.png b/src/images/edit-delete.png
new file mode 100644
index 0000000..0ac3589
Binary files /dev/null and b/src/images/edit-delete.png differ
diff --git a/src/images/edit-find.png b/src/images/edit-find.png
new file mode 100644
index 0000000..b98e348
Binary files /dev/null and b/src/images/edit-find.png differ
diff --git a/src/images/edit-paste.png b/src/images/edit-paste.png
new file mode 100644
index 0000000..577e9c2
Binary files /dev/null and b/src/images/edit-paste.png differ
diff --git a/src/images/edit-redo.png b/src/images/edit-redo.png
new file mode 100644
index 0000000..712a8ee
Binary files /dev/null and b/src/images/edit-redo.png differ
diff --git a/src/images/edit-undo.png b/src/images/edit-undo.png
new file mode 100644
index 0000000..4652df0
Binary files /dev/null and b/src/images/edit-undo.png differ
diff --git a/src/images/editor.png b/src/images/editor.png
new file mode 100644
index 0000000..a653bfe
Binary files /dev/null and b/src/images/editor.png differ
diff --git a/src/images/emacs.png b/src/images/emacs.png
new file mode 100644
index 0000000..6b76f52
Binary files /dev/null and b/src/images/emacs.png differ
diff --git a/src/images/emblem-web-small.png b/src/images/emblem-web-small.png
new file mode 100644
index 0000000..3d81a37
Binary files /dev/null and b/src/images/emblem-web-small.png differ
diff --git a/src/images/emblem-web.png b/src/images/emblem-web.png
new file mode 100644
index 0000000..49f7290
Binary files /dev/null and b/src/images/emblem-web.png differ
diff --git a/src/images/fileclose.png b/src/images/fileclose.png
new file mode 100644
index 0000000..033326f
Binary files /dev/null and b/src/images/fileclose.png differ
diff --git a/src/images/fileclose2.png b/src/images/fileclose2.png
new file mode 100644
index 0000000..c1e5f4d
Binary files /dev/null and b/src/images/fileclose2.png differ
diff --git a/src/images/filenew.png b/src/images/filenew.png
new file mode 100644
index 0000000..7274a21
Binary files /dev/null and b/src/images/filenew.png differ
diff --git a/src/images/fileopen.png b/src/images/fileopen.png
new file mode 100644
index 0000000..7c9f7a6
Binary files /dev/null and b/src/images/fileopen.png differ
diff --git a/src/images/genIcon.png b/src/images/genIcon.png
new file mode 100644
index 0000000..5bedaa2
Binary files /dev/null and b/src/images/genIcon.png differ
diff --git a/src/images/go-down.png b/src/images/go-down.png
new file mode 100644
index 0000000..970d43a
Binary files /dev/null and b/src/images/go-down.png differ
diff --git a/src/images/go-next.png b/src/images/go-next.png
new file mode 100644
index 0000000..cfee8f4
Binary files /dev/null and b/src/images/go-next.png differ
diff --git a/src/images/go-previous.png b/src/images/go-previous.png
new file mode 100644
index 0000000..3311c05
Binary files /dev/null and b/src/images/go-previous.png differ
diff --git a/src/images/go-up.png b/src/images/go-up.png
new file mode 100644
index 0000000..4ee50ef
Binary files /dev/null and b/src/images/go-up.png differ
diff --git a/src/images/groupIncluding.png b/src/images/groupIncluding.png
new file mode 100644
index 0000000..6f2bd08
Binary files /dev/null and b/src/images/groupIncluding.png differ
diff --git a/src/images/groupRefining.png b/src/images/groupRefining.png
new file mode 100644
index 0000000..2ba0a26
Binary files /dev/null and b/src/images/groupRefining.png differ
diff --git a/src/images/grouping_morten.png b/src/images/grouping_morten.png
new file mode 100644
index 0000000..9b29f68
Binary files /dev/null and b/src/images/grouping_morten.png differ
diff --git a/src/images/groupsHighlightAll.png b/src/images/groupsHighlightAll.png
new file mode 100644
index 0000000..c6e1a97
Binary files /dev/null and b/src/images/groupsHighlightAll.png differ
diff --git a/src/images/groupsHighlightAny.png b/src/images/groupsHighlightAny.png
new file mode 100644
index 0000000..1bc2e28
Binary files /dev/null and b/src/images/groupsHighlightAny.png differ
diff --git a/src/images/help-about.png b/src/images/help-about.png
new file mode 100644
index 0000000..90ce540
Binary files /dev/null and b/src/images/help-about.png differ
diff --git a/src/images/help-browser.png b/src/images/help-browser.png
new file mode 100644
index 0000000..6de563b
Binary files /dev/null and b/src/images/help-browser.png differ
diff --git a/src/images/integrity.png b/src/images/integrity.png
new file mode 100644
index 0000000..4343947
Binary files /dev/null and b/src/images/integrity.png differ
diff --git a/src/images/lyx2.png b/src/images/lyx2.png
new file mode 100644
index 0000000..84a742f
Binary files /dev/null and b/src/images/lyx2.png differ
diff --git a/src/images/mark.png b/src/images/mark.png
new file mode 100644
index 0000000..6f8ab3a
Binary files /dev/null and b/src/images/mark.png differ
diff --git a/src/images/messageFail.png b/src/images/messageFail.png
new file mode 100644
index 0000000..474f63f
Binary files /dev/null and b/src/images/messageFail.png differ
diff --git a/src/images/messageInfo.png b/src/images/messageInfo.png
new file mode 100644
index 0000000..ecdc991
Binary files /dev/null and b/src/images/messageInfo.png differ
diff --git a/src/images/messageWarn.png b/src/images/messageWarn.png
new file mode 100755
index 0000000..55a6f01
Binary files /dev/null and b/src/images/messageWarn.png differ
diff --git a/src/images/optIcon.png b/src/images/optIcon.png
new file mode 100644
index 0000000..64562b3
Binary files /dev/null and b/src/images/optIcon.png differ
diff --git a/src/images/pdf-new.png b/src/images/pdf-new.png
new file mode 100644
index 0000000..cda12b9
Binary files /dev/null and b/src/images/pdf-new.png differ
diff --git a/src/images/pdf.png b/src/images/pdf.png
new file mode 100644
index 0000000..d5eab07
Binary files /dev/null and b/src/images/pdf.png differ
diff --git a/src/images/postscript.png b/src/images/postscript.png
new file mode 100644
index 0000000..5065c98
Binary files /dev/null and b/src/images/postscript.png differ
diff --git a/src/images/preamble.png b/src/images/preamble.png
new file mode 100644
index 0000000..cf9d89d
Binary files /dev/null and b/src/images/preamble.png differ
diff --git a/src/images/preferences.png b/src/images/preferences.png
new file mode 100644
index 0000000..426460b
Binary files /dev/null and b/src/images/preferences.png differ
diff --git a/src/images/remove.png b/src/images/remove.png
new file mode 100644
index 0000000..0815d3f
Binary files /dev/null and b/src/images/remove.png differ
diff --git a/src/images/reqIcon.png b/src/images/reqIcon.png
new file mode 100644
index 0000000..5d2439c
Binary files /dev/null and b/src/images/reqIcon.png differ
diff --git a/src/images/search.png b/src/images/search.png
new file mode 100644
index 0000000..a555de8
Binary files /dev/null and b/src/images/search.png differ
diff --git a/src/images/splash-2.1.svg b/src/images/splash-2.1.svg
new file mode 100644
index 0000000..1f931f6
--- /dev/null
+++ b/src/images/splash-2.1.svg
@@ -0,0 +1,229 @@
+<?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"
+   inkscape:export-ydpi="90.000000"
+   inkscape:export-xdpi="90.000000"
+   inkscape:export-filename="/home/alver/jabref-2.1b/src/images/splash-2.1beta.png"
+   sodipodi:docname="splash-2.1.svg"
+   sodipodi:docbase="/home/alver/jabref_newcvs/jabref/src/images"
+   inkscape:version="0.44"
+   sodipodi:version="0.32"
+   id="svg2138"
+   height="1052.3622047"
+   width="744.09448819">
+  <defs
+     id="defs2140">
+    <pattern
+       patternTransform="translate(316.0000,1046.362)"
+       id="pattern9054"
+       xlink:href="#pattern9048"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient5361"
+       inkscape:collect="always">
+      <stop
+         id="stop5363"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop5365"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:0;" />
+    </linearGradient>
+    <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>
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       y2="300.91277"
+       x2="491.20592"
+       y1="300.91277"
+       x1="445.01770"
+       id="linearGradient5367"
+       xlink:href="#linearGradient5361"
+       inkscape:collect="always" />
+    <pattern
+       id="pattern9048"
+       patternTransform="translate(231.0000,284.3622)"
+       height="428.00000"
+       width="572.00000"
+       patternUnits="userSpaceOnUse">
+      <image
+         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"
+         xlink:href="behandlet.png"
+         sodipodi:absref="/home/alver/Desktop/bilder/jabref/behandlet.png"
+         width="572.00000"
+         height="428.00000"
+         id="image9050" />
+    </pattern>
+  </defs>
+  <sodipodi:namedview
+     inkscape:window-y="53"
+     inkscape:window-x="15"
+     inkscape:window-height="856"
+     inkscape:window-width="853"
+     inkscape:current-layer="layer1"
+     inkscape:document-units="px"
+     inkscape:cy="698.1925"
+     inkscape:cx="364.52617"
+     inkscape:zoom="1"
+     inkscape:pageshadow="2"
+     inkscape:pageopacity="0.0"
+     borderopacity="1.0"
+     bordercolor="#666666"
+     pagecolor="#ffffff"
+     id="base" />
+  <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" />
+      </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-2.1rc/src/images/splash-2.1.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
+       id="image1821"
+       height="428"
+       width="572"
+       sodipodi:absref="/home/alver/jabref/src/images/splashBackground.png"
+       xlink:href="/home/alver/jabref/src/images/splashBackground.png"
+       x="79"
+       y="172.36218"
+       inkscape:export-filename="/home/alver/jabref-2.1rc/src/images/splash-2.1.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-2.1rc/src/images/splash-2.1.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-2.1b/src/images/splash-2.1beta.png"
+       style="font-size:34.96500015px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:104.16220427%;writing-mode:lr-tb;text-anchor:start;opacity:1;fill:#ffffff;fill-opacity:1;stroke:#5cc757;stroke-width:0.64448702;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:0.64448701 0.64448701 ;stroke-dashoffset:0.45114091;stroke-opacity:1;font-family:FreeSans"
+       transform="matrix(2.869197,-1.415830e-2,2.234317e-2,3.356271,-832.1435,-652.0185)"
+       id="flowRoot2203"
+       xml:space="preserve">
+      <flowRegion
+   style="stroke:url(#linearGradient5367);stroke-width:0.64448702;stroke-miterlimit:4;stroke-dasharray:0.64448701 0.64448701 ;stroke-dashoffset:0.45114091"
+   id="flowRegion2205">
+        <rect
+   style="font-size:34.96500015px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:104.16220427%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:#322b5b;stroke-width:0.64448702;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:0.64448701 0.64448701 ;stroke-dashoffset:0.45114091;stroke-opacity:1;font-family:FreeSans"
+   y="286.45224"
+   x="443.95346"
+   height="119.83134"
+   width="173.972"
+   id="rect2207" />
+      </flowRegion>
+      <flowPara
+   style="font-size:34.96500015px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:104.16220427%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:#322b5b;stroke-width:0.64448702;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:0.64448701 0.64448701 ;stroke-dashoffset:0.45114091;stroke-opacity:1;font-family:FreeSans"
+   id="flowPara2211">2.1</flowPara>
+    </flowRoot>    <flowRoot
+       inkscape:export-ydpi="75.000000"
+       inkscape:export-xdpi="75.000000"
+       inkscape:export-filename="/home/alver/jabref-2.1rc/src/images/splash-2.1.png"
+       transform="matrix(0.972246,0.000000,0.000000,1.325301,6.054966,-126.1181)"
+       style="font-size:11.9999996;font-style:oblique;font-variant:normal;font-weight:bold;font-stretch:normal;fill:#797580;fill-opacity:1.0000000;font-family:Bitstream Vera Sans;text-anchor:middle;writing-mode:lr;text-align:center;line-height:100%"
+       id="flowRoot3076"
+       xml:space="preserve"><flowRegion
+         id="flowRegion3078">
+        <rect
+   style="fill:#797580;fill-opacity:1.0000000;font-family:Bitstream Vera Sans;font-weight:bold;font-style:oblique;font-stretch:normal;font-variant:normal;font-size:11.9999996;text-anchor:middle;text-align:center;writing-mode:lr;line-height:100%"
+   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-2006) 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-2.1rc/src/images/splash-2.1.png"
+       transform="scale(0.853277,1.171952)"
+       sodipodi:linespacing="100%"
+       id="text1393"
+       y="315.20035"
+       x="163.38908"
+       style="font-size:183.29680;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#413b62;fill-opacity:1.0000000;stroke:none;stroke-width:1.0000000px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000;font-family:Nimbus Roman No9 L;text-anchor:start;writing-mode:lr-tb"
+       xml:space="preserve"><tspan
+         y="315.20035"
+         x="163.38908"
+         id="tspan1395"
+         sodipodi:role="line">JabRef</tspan></text>
+    <text
+       inkscape:export-ydpi="75.000000"
+       inkscape:export-xdpi="75.000000"
+       inkscape:export-filename="/home/alver/jabref-2.1rc/src/images/splash-2.1.png"
+       transform="scale(0.853347,1.171856)"
+       sodipodi:linespacing="100%"
+       id="text2179"
+       y="397.84811"
+       x="149.99753"
+       style="font-size:44.00000436;font-style:italic;font-variant:normal;font-weight:bold;font-stretch:normal;fill:#805b41;fill-opacity:1.0000000;stroke:none;stroke-width:1.0000000px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000;font-family:Nimbus Roman No9 L;text-anchor:start;writing-mode:lr;text-align:start;line-height:100%"
+       xml:space="preserve"><tspan
+         y="397.84811"
+         x="149.99753"
+         id="tspan2181"
+         sodipodi:role="line">reference manager</tspan></text>
+  </g>
+</svg>
diff --git a/src/images/splash-2.1beta.png b/src/images/splash-2.1beta.png
new file mode 100644
index 0000000..4304131
Binary files /dev/null and b/src/images/splash-2.1beta.png differ
diff --git a/src/images/splash.png b/src/images/splash.png
index 705eafc..cbd8027 100644
Binary files a/src/images/splash.png and b/src/images/splash.png differ
diff --git a/src/images/splash.svg b/src/images/splash.svg
new file mode 100644
index 0000000..628543b
--- /dev/null
+++ b/src/images/splash.svg
@@ -0,0 +1,229 @@
+<?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://inkscape.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/Desktop/bilder/jabref/splash6.png"
+   sodipodi:docname="splash.svg"
+   sodipodi:docbase="/home/alver/jabref_beta/jabref/src/images"
+   inkscape:version="0.42+0.43pre1"
+   sodipodi:version="0.32"
+   id="svg2138"
+   height="1052.3622047"
+   width="744.09448819">
+  <defs
+     id="defs2140">
+    <pattern
+       patternTransform="translate(316.0000,1046.362)"
+       id="pattern9054"
+       xlink:href="#pattern9048"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient5361"
+       inkscape:collect="always">
+      <stop
+         id="stop5363"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop5365"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:0;" />
+    </linearGradient>
+    <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>
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       y2="300.91277"
+       x2="491.20592"
+       y1="300.91277"
+       x1="445.01770"
+       id="linearGradient5367"
+       xlink:href="#linearGradient5361"
+       inkscape:collect="always" />
+    <pattern
+       id="pattern9048"
+       patternTransform="translate(231.0000,284.3622)"
+       height="428.00000"
+       width="572.00000"
+       patternUnits="userSpaceOnUse">
+      <image
+         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"
+         xlink:href="behandlet.png"
+         sodipodi:absref="/home/alver/Desktop/bilder/jabref/behandlet.png"
+         width="572.00000"
+         height="428.00000"
+         id="image9050" />
+    </pattern>
+  </defs>
+  <sodipodi:namedview
+     inkscape:window-y="80"
+     inkscape:window-x="8"
+     inkscape:window-height="856"
+     inkscape:window-width="750"
+     inkscape:current-layer="layer1"
+     inkscape:document-units="px"
+     inkscape:cy="698.1925"
+     inkscape:cx="364.52617"
+     inkscape:zoom="1"
+     inkscape:pageshadow="2"
+     inkscape:pageopacity="0.0"
+     borderopacity="1.0"
+     bordercolor="#666666"
+     pagecolor="#ffffff"
+     id="base" />
+  <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" />
+      </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_beta/jabref/jabref-2.0-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
+       inkscape:export-ydpi="75.000000"
+       inkscape:export-xdpi="75.000000"
+       inkscape:export-filename="/home/alver/jabref_beta/jabref/jabref-2.0-splash.png"
+       y="172.36218"
+       x="79.000000"
+       id="image1390"
+       height="428.00000"
+       width="572.00000"
+       sodipodi:absref="/home/alver/oldhome/bilder/bilder/jabref/behandlet.png"
+       xlink:href="/home/alver/oldhome/bilder/bilder/jabref/behandlet.png" />
+    <flowRoot
+       inkscape:export-ydpi="75.000000"
+       inkscape:export-xdpi="75.000000"
+       inkscape:export-filename="/home/alver/jabref_beta/jabref/jabref-2.0-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_beta/jabref/jabref-2.0-splash.png"
+       style="font-size:34.96500015px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:104.16220427%;writing-mode:lr-tb;text-anchor:start;opacity:1;fill:#ffffff;fill-opacity:1;stroke:#5cc757;stroke-width:0.64448702;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:0.64448701 0.64448701 ;stroke-dashoffset:0.45114091;stroke-opacity:1;font-family:FreeSans"
+       transform="matrix(2.869197,-1.415830e-2,2.234317e-2,3.356271,-832.1435,-652.0185)"
+       id="flowRoot2203"
+       xml:space="preserve">
+      <flowRegion
+   style="stroke:url(#linearGradient5367);stroke-width:0.64448702;stroke-miterlimit:4;stroke-dasharray:0.64448701 0.64448701 ;stroke-dashoffset:0.45114091"
+   id="flowRegion2205">
+        <rect
+   style="font-size:34.96500015px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:104.16220427%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:#322b5b;stroke-width:0.64448702;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:0.64448701 0.64448701 ;stroke-dashoffset:0.45114091;stroke-opacity:1;font-family:FreeSans"
+   y="286.45224"
+   x="443.95346"
+   height="119.83134"
+   width="173.972"
+   id="rect2207" />
+      </flowRegion>
+      <flowPara
+   style="font-size:34.96500015px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:104.16220427%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:#322b5b;stroke-width:0.64448702;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:0.64448701 0.64448701 ;stroke-dashoffset:0.45114091;stroke-opacity:1;font-family:FreeSans"
+   id="flowPara2211">2.0</flowPara>
+    </flowRoot>    <flowRoot
+       inkscape:export-ydpi="75.000000"
+       inkscape:export-xdpi="75.000000"
+       inkscape:export-filename="/home/alver/jabref_beta/jabref/jabref-2.0-splash.png"
+       transform="matrix(0.972246,0.000000,0.000000,1.325301,6.054966,-126.1181)"
+       style="font-size:11.9999996;font-style:oblique;font-variant:normal;font-weight:bold;font-stretch:normal;fill:#797580;fill-opacity:1.0000000;font-family:Bitstream Vera Sans;text-anchor:middle;writing-mode:lr;text-align:center;line-height:100%"
+       id="flowRoot3076"
+       xml:space="preserve"><flowRegion
+         id="flowRegion3078">
+        <rect
+   style="fill:#797580;fill-opacity:1.0000000;font-family:Bitstream Vera Sans;font-weight:bold;font-style:oblique;font-stretch:normal;font-variant:normal;font-size:11.9999996;text-anchor:middle;text-align:center;writing-mode:lr;line-height:100%"
+   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-2006) 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_beta/jabref/jabref-2.0-splash.png"
+       transform="scale(0.853277,1.171952)"
+       sodipodi:linespacing="100%"
+       id="text1393"
+       y="315.20035"
+       x="163.38908"
+       style="font-size:183.29680;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#413b62;fill-opacity:1.0000000;stroke:none;stroke-width:1.0000000px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000;font-family:Nimbus Roman No9 L;text-anchor:start;writing-mode:lr-tb"
+       xml:space="preserve"><tspan
+         y="315.20035"
+         x="163.38908"
+         id="tspan1395"
+         sodipodi:role="line">JabRef</tspan></text>
+    <text
+       inkscape:export-ydpi="75.000000"
+       inkscape:export-xdpi="75.000000"
+       inkscape:export-filename="/home/alver/jabref_beta/jabref/jabref-2.0-splash.png"
+       transform="scale(0.853347,1.171856)"
+       sodipodi:linespacing="100%"
+       id="text2179"
+       y="397.84811"
+       x="149.99753"
+       style="font-size:45.702374;font-style:italic;font-variant:normal;font-weight:bold;font-stretch:normal;fill:#805b41;fill-opacity:1.0000000;stroke:none;stroke-width:1.0000000px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000;font-family:Times New Roman;text-anchor:start;writing-mode:lr-tb"
+       xml:space="preserve"><tspan
+         y="397.84811"
+         x="149.99753"
+         id="tspan2181"
+         sodipodi:role="line">reference manager</tspan></text>
+  </g>
+</svg>
diff --git a/src/images/strings.png b/src/images/strings.png
new file mode 100644
index 0000000..649899f
Binary files /dev/null and b/src/images/strings.png differ
diff --git a/src/images/unmark.png b/src/images/unmark.png
new file mode 100644
index 0000000..92ac338
Binary files /dev/null and b/src/images/unmark.png differ
diff --git a/src/images/user-home.png b/src/images/user-home.png
new file mode 100644
index 0000000..a3c4765
Binary files /dev/null and b/src/images/user-home.png differ
diff --git a/src/images/view-refresh.png b/src/images/view-refresh.png
new file mode 100644
index 0000000..952b5f7
Binary files /dev/null and b/src/images/view-refresh.png differ
diff --git a/src/images/viewsource.gif b/src/images/viewsource.gif
new file mode 100644
index 0000000..3ef9a2e
Binary files /dev/null and b/src/images/viewsource.gif differ
diff --git a/src/images/winedt.png b/src/images/winedt.png
new file mode 100644
index 0000000..cded1a7
Binary files /dev/null and b/src/images/winedt.png differ
diff --git a/src/images/wizard.png b/src/images/wizard.png
new file mode 100644
index 0000000..b5d81d3
Binary files /dev/null and b/src/images/wizard.png differ
diff --git a/src/images/wrongItem.png b/src/images/wrongItem.png
new file mode 100644
index 0000000..8b2f1eb
Binary files /dev/null and b/src/images/wrongItem.png differ
diff --git a/src/images/wwwciteseer.png b/src/images/wwwciteseer.png
new file mode 100644
index 0000000..1885445
Binary files /dev/null and b/src/images/wwwciteseer.png differ
diff --git a/src/java/Eclipse_formatter.xml b/src/java/Eclipse_formatter.xml
index fc7f74a..1f04105 100644
--- a/src/java/Eclipse_formatter.xml
+++ b/src/java/Eclipse_formatter.xml
@@ -1,186 +1,264 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<profiles version="6">
-<profile name="JabRef" version="6">
-<setting id="comment_clear_blank_lines" value="false"/>
-<setting id="comment_format_comments" value="true"/>
-<setting id="comment_format_header" value="false"/>
-<setting id="comment_format_html" value="true"/>
-<setting id="comment_format_source_code" value="true"/>
-<setting id="comment_indent_parameter_description" value="true"/>
-<setting id="comment_indent_root_tags" value="true"/>
-<setting id="comment_line_length" value="80"/>
-<setting id="comment_new_line_for_parameter" value="true"/>
-<setting id="comment_separate_root_tags" value="true"/>
+<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.alignment_for_arguments_in_allocation_expression" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_binary_expression" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_compact_if" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_conditional_expression" value="80"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_multiple_fields" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration" value="16"/>
-<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_throws_clause_in_method_declaration" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_imports" value="1"/>
-<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_package" value="1"/>
-<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_field" value="1"/>
-<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration" value="1"/>
-<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_imports" value="1"/>
-<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_member_type" value="0"/>
-<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_method" value="1"/>
-<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk" value="1"/>
-<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_package" value="0"/>
+<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.brace_position_for_anonymous_type_declaration" value="end_of_line"/>
-<setting id="org.eclipse.jdt.core.formatter.brace_position_for_array_initializer" value="end_of_line"/>
-<setting id="org.eclipse.jdt.core.formatter.brace_position_for_block" value="end_of_line"/>
-<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_constructor_declaration" value="end_of_line"/>
-<setting id="org.eclipse.jdt.core.formatter.brace_position_for_method_declaration" value="end_of_line"/>
-<setting id="org.eclipse.jdt.core.formatter.brace_position_for_switch" value="end_of_line"/>
-<setting id="org.eclipse.jdt.core.formatter.brace_position_for_type_declaration" value="end_of_line"/>
-<setting id="org.eclipse.jdt.core.formatter.compact_else_if" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.continuation_indentation" value="2"/>
-<setting id="org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer" value="2"/>
-<setting id="org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_block" value="true"/>
+<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.indent_switchstatements_compare_to_cases" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch" value="false"/>
 <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.insert_new_line_before_catch_in_try_statement" 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.insert_new_line_before_else_in_if_statement" value="do not 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.insert_new_line_before_while_in_do_statement" value="do not 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.insert_new_line_in_empty_block" 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_new_line_in_empty_type_declaration" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_binary_operator" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block" value="do not 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_space_after_colon_in_assert" value="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_after_colon_in_conditional" 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_after_comma_in_allocation_expression" value="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_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_comma_in_constructor_declaration_throws" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments" 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_after_comma_in_method_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_after_comma_in_method_invocation_arguments" value="insert"/>
-<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_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_comma_in_superinterfaces" value="insert"/>
-<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_after_opening_bracket_in_array_allocation_expression" 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_after_opening_paren_in_cast" value="do not 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_space_after_opening_paren_in_constructor_declaration" value="do not 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_after_opening_paren_in_if" value="do not insert"/>
-<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_after_opening_paren_in_method_invocation" value="do not insert"/>
-<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.insert_space_after_opening_paren_in_switch" 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.insert_space_after_opening_paren_in_while" value="do not insert"/>
 <setting id="org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator" 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_after_question_in_conditional" value="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_unary_operator" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_binary_operator" value="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.insert_space_before_closing_bracket_in_array_allocation_expression" value="do not insert"/>
-<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_cast" value="do not 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.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_before_closing_paren_in_for" value="do not insert"/>
-<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_before_closing_paren_in_method_declaration" 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_closing_paren_in_parenthesized_expression" 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_paren_in_synchronized" 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_colon_in_assert" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case" 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_colon_in_default" value="do not insert"/>
-<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_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.insert_space_before_comma_in_array_initializer" 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_before_comma_in_constructor_declaration_throws" 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_space_before_comma_in_for_increments" value="do not insert"/>
-<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_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.insert_space_before_comma_in_method_declaration_throws" value="do not 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_comma_in_multiple_field_declarations" 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.insert_space_before_comma_in_superinterfaces" value="do not 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.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_space_before_opening_brace_in_block" value="do not insert"/>
-<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_opening_brace_in_method_declaration" value="insert"/>
-<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_opening_brace_in_type_declaration" 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.insert_space_before_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_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.insert_space_before_opening_paren_in_constructor_declaration" value="do not 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.insert_space_before_opening_paren_in_if" value="insert"/>
-<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_opening_paren_in_method_invocation" 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_switch" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator" value="do not 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_semicolon" value="do not 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_unary_operator" value="do not insert"/>
-<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_between_empty_braces_in_array_initializer" value="do not 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_between_empty_parens_in_constructor_declaration" 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_between_empty_parens_in_method_invocation" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line" value="true"/>
+<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.keep_then_statement_on_same_line" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.lineSplit" value="80"/>
-<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.number_of_empty_lines_to_preserve" value="1"/>
-<setting id="org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line" value="true"/>
+<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.tabulation.size" value="2"/>
+<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/gnu/dtools/ritopt/ArrayOption.java b/src/java/gnu/dtools/ritopt/ArrayOption.java
index 629e479..f93c14e 100644
--- a/src/java/gnu/dtools/ritopt/ArrayOption.java
+++ b/src/java/gnu/dtools/ritopt/ArrayOption.java
@@ -1,82 +1,85 @@
 package gnu.dtools.ritopt;
 
+import java.util.List;
+
 /**
  * ArrayOption.java
  *
  * Version:
- *    $Id: ArrayOption.java 322 2004-05-20 20:45:47Z mortenalver $
+ *    $Id: ArrayOption.java 2268 2007-08-19 23:37:05Z coezbek $
  */
 
 /**
- * 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 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.
- *
+ * 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.
- *
+ * 
+ * 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.
-     */
+	/**
+	 * Builds and initializes ArrayOption class members, and invokes the Option
+	 * constructor.
+	 */
 
-    public ArrayOption() {
-	super();
-    }
+	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.
-     */
+	/**
+	 * 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();
+	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.
-     */
+	/**
+	 * Get a list of objects representing the elements of this array option.
+	 * 
+	 * @return A list of objects representing the option's value.
+	 */
 
-    public java.util.List getObjectList() {
-	return java.util.Arrays.asList( getObjectArray() );
-    }
-} /** ArrayOption */
+	public List<Object> getObjectList() {
+		return java.util.Arrays.asList(getObjectArray());
+	}
 
+}
diff --git a/src/java/gnu/dtools/ritopt/LongOption.java b/src/java/gnu/dtools/ritopt/LongOption.java
index 945c2ba..3150ad4 100644
--- a/src/java/gnu/dtools/ritopt/LongOption.java
+++ b/src/java/gnu/dtools/ritopt/LongOption.java
@@ -4,7 +4,7 @@ package gnu.dtools.ritopt;
  * LongOption.java
  *
  * Version:
- *    $Id: LongOption.java 322 2004-05-20 20:45:47Z mortenalver $
+ *    $Id: LongOption.java 2488 2007-11-14 00:25:31Z coezbek $
  */
 
 /**
@@ -46,7 +46,7 @@ public class LongOption extends Option {
      */
 
     public LongOption() {
-	this( (long)0 );
+	this( 0 );
     }
 
     /**
diff --git a/src/java/gnu/dtools/ritopt/NotifyOption.java b/src/java/gnu/dtools/ritopt/NotifyOption.java
index 6a83fbb..e16f58c 100644
--- a/src/java/gnu/dtools/ritopt/NotifyOption.java
+++ b/src/java/gnu/dtools/ritopt/NotifyOption.java
@@ -94,7 +94,7 @@ public class NotifyOption extends Option implements OptionNotifier {
      * A list of listeners to notify whenever a modification event occurs.
      */
 
-    private java.util.List listeners;
+    private java.util.List<OptionListener> listeners;
 
     /**
      * Construct a NotifyOption with an empty list of listeners. Set the
@@ -152,7 +152,7 @@ public class NotifyOption extends Option implements OptionNotifier {
     public NotifyOption( NotifyOption op ) {
 	super( op );
 	op.value = op.getValue();
-	listeners = new java.util.ArrayList( op.listeners );
+	listeners = new java.util.ArrayList<OptionListener>( op.listeners );
     }
 
     /**
@@ -202,7 +202,7 @@ public class NotifyOption extends Option implements OptionNotifier {
     public NotifyOption( String value, String longOption, char shortOption ) {
 	super( longOption, shortOption );
 	this.value = value;
-	listeners = new java.util.ArrayList();
+	listeners = new java.util.ArrayList<OptionListener>();
     }
 
     /**
@@ -225,10 +225,10 @@ public class NotifyOption extends Option implements OptionNotifier {
 
     public void modify( String value ) throws OptionModificationException {
 	this.value = value;
-	java.util.Iterator iterator = listeners.iterator();
+	java.util.Iterator<OptionListener> iterator = listeners.iterator();
 	OptionEvent event = new OptionEvent( command, value, this );
 	while ( iterator.hasNext() ) {
-	    OptionListener listener = (OptionListener)iterator.next();
+	    OptionListener listener = iterator.next();
 	    listener.optionInvoked( event );
 	}
     }
diff --git a/src/java/gnu/dtools/ritopt/Option.java b/src/java/gnu/dtools/ritopt/Option.java
index 0ca2a98..b890545 100644
--- a/src/java/gnu/dtools/ritopt/Option.java
+++ b/src/java/gnu/dtools/ritopt/Option.java
@@ -4,10 +4,9 @@ package gnu.dtools.ritopt;
  * Option.java
  *
  * Version
- *    $Id: Option.java 1245 2005-08-14 20:42:49Z mortenalver $
+ *    $Id: Option.java 2209 2007-08-01 18:23:38Z coezbek $
  */
 
-import java.util.*;
 
 /**
  * This is the principal base class for all Option classes. It contains
diff --git a/src/java/gnu/dtools/ritopt/OptionMenu.java b/src/java/gnu/dtools/ritopt/OptionMenu.java
index eabc0e0..9d4d541 100644
--- a/src/java/gnu/dtools/ritopt/OptionMenu.java
+++ b/src/java/gnu/dtools/ritopt/OptionMenu.java
@@ -4,10 +4,12 @@ package gnu.dtools.ritopt;
  * OptionMenu.java
  *
  * Version:
- *    $Id: OptionMenu.java 322 2004-05-20 20:45:47Z mortenalver $
+ *    $Id: OptionMenu.java 2209 2007-08-01 18:23:38Z coezbek $
  */
 
-import java.io.*;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
 
 /**
  * This class facilitates the built-in menu feature for ritopt. When the
diff --git a/src/java/gnu/dtools/ritopt/OptionModule.java b/src/java/gnu/dtools/ritopt/OptionModule.java
index e0323fc..803875a 100644
--- a/src/java/gnu/dtools/ritopt/OptionModule.java
+++ b/src/java/gnu/dtools/ritopt/OptionModule.java
@@ -4,11 +4,12 @@ package gnu.dtools.ritopt;
  * OptionModule.java
  *
  * Version:
- *    $Id: OptionModule.java 322 2004-05-20 20:45:47Z mortenalver $
+ *    $Id: OptionModule.java 2268 2007-08-19 23:37:05Z coezbek $
  */
 
-import java.util.*;
-import java.io.*;
+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
@@ -58,7 +59,7 @@ public class OptionModule implements OptionRegistrar {
      * A repository of options registered with this module.
      */
 
-    private java.util.HashMap options;
+    private HashMap<String, Option> options;
 
     /**
      * The name of this module.
@@ -117,7 +118,7 @@ public class OptionModule implements OptionRegistrar {
      */
 
     public OptionModule( String name ) {
-	options = new java.util.HashMap();
+	options = new HashMap<String, Option>();
 	this.name = name;
 	deprecated = false;
     }
@@ -221,17 +222,14 @@ public class OptionModule implements OptionRegistrar {
      *
      * @return A boolean value indicating whether the option passed exists.
      */
-
-    public boolean optionExists( char shortOption ) {
-	Collection col = options.values();
-	Iterator it = col.iterator();
-	while ( it.hasNext() ) {
-	    Option next = (Option)it.next();
-	    char c = next.getShortOption();
-	    if ( c != 0 && c == shortOption ) return true;
+	public boolean optionExists(char shortOption) {
+		for (Option next : options.values()) {
+			char c = next.getShortOption();
+			if (c != 0 && c == shortOption)
+				return true;
+		}
+		return false;
 	}
-	return false;
-    }
 
     /**
      * Returns whether the option referred by a long option exists in this
@@ -241,48 +239,45 @@ public class OptionModule implements OptionRegistrar {
      *
      * @return A boolean value indicating whether the option passed exists.
      */
-
-    public boolean optionExists( String longOption ) {
-	Collection col = options.values();
-	Iterator it = col.iterator();
-	while ( it.hasNext() ) {
-	    Option next = (Option)it.next();
-	    String s = next.getLongOption();
-	    if ( s != null && s.equals( longOption ) ) return true;
+	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 false;
-    }
 
     /**
-     * Return an iterator over the option repository contained in this module.
-     *
-     * @return An iterator over the repository.
-     */
+	 * Return an iterator over the option repository contained in this module.
+	 * 
+	 * @return An iterator over the repository.
+	 */
 
-    public Iterator getOptionIterator() {
-	return options.values().iterator();
-    }
+	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;
-	Collection col = options.values();
-	Iterator it = col.iterator();
-	while ( it.hasNext() ) {
-	    Option next = (Option)it.next();
-	    char c = next.getShortOption();
-	    if ( c != '\0' && c == shortOption ) retval = next;
+	 * 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;
 	}
-	return retval;
-    }
 
     /**
      * Returns the option referred by the long option passed.
@@ -293,17 +288,15 @@ public class OptionModule implements OptionRegistrar {
      *         if it does not exist.
      */
 
-    public Option getOption( String longOption ) {
-	Option retval = null;
-	Collection col = options.values();
-	Iterator it = col.iterator();
-	while ( it.hasNext() ) {
-	    Option next = (Option)it.next();
-	    String s = next.getLongOption();
-	    if ( s != null && s.equals( longOption ) ) retval = next;
+    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;
 	}
-	return retval;
-    }
 
     /**
      * Returns the help information as a String.
@@ -312,37 +305,32 @@ public class OptionModule implements OptionRegistrar {
      */
 
     public String getHelp() {
-	String retval = "";
-	Collection col = options.values();
-	Iterator it = col.iterator();
-	while ( it.hasNext() ) {
-	    Option next = (Option)it.next();
-	    retval += next.getHelp() + "\n";
+		String retval = "";
+		for (Option next : options.values()) {
+			retval += next.getHelp() + "\n";
+		}
+		return retval;
 	}
-	return retval;
-    }
 
     /**
-     * Writes the help information to a print stream.
-     *
-     * @param ps  The print stream to write to.
-     */
-
-    public void writeFileToPrintStream( PrintStream ps ) {
-	Collection col = options.values();
-	Iterator it = col.iterator();
-	ps.println( ":" + name + ":" );
-	while ( it.hasNext() ) {
-	    Option next = (Option)it.next();
-	    ps.println( next.getOptionFileLine() );
+	 * 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.
-     */
+	 * Returns whether this module is deprecated.
+	 * 
+	 * @return A boolean value indicating whether this module is deprecated.
+	 */
 
     public boolean isDeprecated() {
 	return deprecated;
diff --git a/src/java/gnu/dtools/ritopt/Options.java b/src/java/gnu/dtools/ritopt/Options.java
index 88ade80..ed15f39 100644
--- a/src/java/gnu/dtools/ritopt/Options.java
+++ b/src/java/gnu/dtools/ritopt/Options.java
@@ -4,13 +4,15 @@ package gnu.dtools.ritopt;
  * Options.java
  *
  * Version:
- *    $Id: Options.java 2451 2007-10-30 17:28:42Z mortenalver $
+ *    $Id: Options.java 2488 2007-11-14 00:25:31Z coezbek $
 
  */
 
-import java.util.*;
 import java.io.*;
-import net.sf.jabref.*;
+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
@@ -118,12 +120,6 @@ public class Options implements OptionRegistrar, OptionModuleRegistrar,
     public static final String DEFAULT_OPTION_FILENAME = "default.opt";
 
     /**
-     * The current verbosity.
-     */
-
-    private int verbosity;
-
-    /**
      * The program to display in the usage.
      */
 
@@ -175,19 +171,7 @@ public class Options implements OptionRegistrar, OptionModuleRegistrar,
      * A map of option modules.
      */
 
-    private java.util.HashMap modules;
-
-    /**
-     * The help method is invoked when this option is invoked.
-     */
-
-    private NotifyOption helpOption;
-
-    /**
-     * The built-in menu system is invoked when this option is invoked.
-     */
-
-    private NotifyOption menuOption;
+    private java.util.HashMap<String, OptionModule> modules;
 
     /**
      * Version information is displayed when this option is specified.
@@ -196,12 +180,6 @@ public class Options implements OptionRegistrar, OptionModuleRegistrar,
     private NotifyOption versionOption;
 
     /**
-     * An instance of the built-in menu.
-     */
-
-    private OptionMenu menu;
-
-    /**
      * Create an option repository.
      */
 
@@ -216,17 +194,13 @@ public class Options implements OptionRegistrar, OptionModuleRegistrar,
      */
 
     public Options( String programName ) {
-        verbosity = DEFAULT_VERBOSITY;
         displayUsage = DEFAULT_DISPLAY_USAGE;
         useMenu = DEFAULT_USE_MENU;
         defaultOptionFilename = DEFAULT_OPTION_FILENAME;
         usageProgram = programName;
-        modules = new HashMap();
-        menu = new OptionMenu( this );
-        helpOption = new NotifyOption( this, "help", "" );
+        modules = new HashMap<String, OptionModule>();
         versionOption = new NotifyOption( this, "version", "" );
         version = "Version 1.0";
-        menuOption = new NotifyOption( menu, "menu", "" );
         generalModule = new OptionModule( DEFAULT_GENERAL_MODULE_NAME );
         currentModule = generalModule;
 
@@ -250,9 +224,9 @@ public class Options implements OptionRegistrar, OptionModuleRegistrar,
             // Mod. Morten A.
             //"Use --menu to invoke the interactive built-in menu.\n\n" +
             Option.getHelpHeader() + "\n\n" + generalModule.getHelp();
-        Iterator it = modules.values().iterator();
+        Iterator<OptionModule> it = modules.values().iterator();
         while ( it.hasNext() ) {
-            OptionModule module = (OptionModule)it.next();
+            OptionModule module = it.next();
             retval += "\n\nOption Listing for " + module.getName() + "\n";
             retval += module.getHelp() + "\n";
         }
@@ -527,7 +501,7 @@ public class Options implements OptionRegistrar, OptionModuleRegistrar,
      */
 
     public OptionModule getModule( String name ) {
-        return (OptionModule)modules.get( name.toLowerCase() );
+        return modules.get( name.toLowerCase() );
     }
 
     /**
@@ -586,10 +560,10 @@ public class Options implements OptionRegistrar, OptionModuleRegistrar,
 
     public String[] split( String str ) {
         StringBuffer buf = new StringBuffer( str.length() );
-        java.util.List l = new java.util.ArrayList();
+        java.util.List<String> l = new java.util.ArrayList<String>();
         int scnt = Utility.count( str, '"' );
         boolean q = false;
-        if ( ((double)scnt) / 2.0 != (double)(scnt / 2) ) {
+        if ( (scnt) / 2.0 != (scnt / 2) ) {
             throw new OptionProcessingException( "Expecting an end quote." );
         }
         for ( int n = 0; n < str.length(); n++ ) {
@@ -607,11 +581,11 @@ public class Options implements OptionRegistrar, OptionModuleRegistrar,
         if ( buf.length() != 0 ) {
             l.add( buf.toString() );
         }
-        Iterator it = l.iterator();
+        Iterator<String> it = l.iterator();
         String retval[] = new String[ l.size() ];
         int n = 0;
         while ( it.hasNext() ) {
-            retval[ n++ ] = (String)it.next();
+            retval[ n++ ] = it.next();
         }
         return retval;
     }
@@ -624,8 +598,7 @@ public class Options implements OptionRegistrar, OptionModuleRegistrar,
 
     public void writeOptionFile( String filename ) {
         BufferedOutputStream writer = null;
-        String line = null;
-        Iterator it = null;
+        Iterator<OptionModule> it = null;
         currentModule = generalModule;
         try {
             writer =
@@ -634,7 +607,7 @@ public class Options implements OptionRegistrar, OptionModuleRegistrar,
             generalModule.writeFileToPrintStream( ps );
             it = modules.values().iterator();
             while ( it.hasNext() ) {
-                OptionModule module = (OptionModule)it.next();
+                OptionModule module = it.next();
                 module.writeFileToPrintStream( ps );
             }
         }
@@ -786,9 +759,7 @@ public class Options implements OptionRegistrar, OptionModuleRegistrar,
                 }
                 else if ( delim == '\0' ) {
                     String dtext = "+";
-                    char dpeek = '\0';
                     if ( n < args.length - 1 ) {
-                        dpeek = args[ n + 1 ].charAt( 0 );
                         if ( !Utility.contains( args[ n + 1 ].charAt( 0 ),
                                                 "-[@" ) ) {
                             dtext = args[ n + 1 ];
@@ -826,9 +797,7 @@ public class Options implements OptionRegistrar, OptionModuleRegistrar,
                 else {
                     longOption = args[ n ].substring( 2 );
                     String dtext = "+";
-                    char dpeek = '\0';
                     if ( n < args.length - 1 && args[ n + 1 ].length() > 0 ) {
-                        dpeek = args[ n + 1 ].charAt( 0 );
                         if ( !Utility.contains( args[ n + 1 ].charAt( 0 ),
                                                 "-[@" ) ) {
                             dtext = args[ n + 1 ];
diff --git a/src/java/gnu/dtools/ritopt/SimpleProcess.java b/src/java/gnu/dtools/ritopt/SimpleProcess.java
index d3f92e9..83b7f93 100644
--- a/src/java/gnu/dtools/ritopt/SimpleProcess.java
+++ b/src/java/gnu/dtools/ritopt/SimpleProcess.java
@@ -4,10 +4,13 @@ package gnu.dtools.ritopt;
  * SimpleProcess.java
  *
  * Version:
- *   $Id: SimpleProcess.java 322 2004-05-20 20:45:47Z mortenalver $
+ *   $Id: SimpleProcess.java 2275 2007-08-20 22:28:09Z coezbek $
  */
 
-import java.io.*;
+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
@@ -183,18 +186,17 @@ public class SimpleProcess extends Process {
      */
 
     private int waitForImpl() throws InterruptedException {
-	process = process;
-	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();
+		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();
     }
 
     /**
diff --git a/src/java/gnu/dtools/ritopt/StreamPrinter.java b/src/java/gnu/dtools/ritopt/StreamPrinter.java
index 5e63328..4c9ac1d 100644
--- a/src/java/gnu/dtools/ritopt/StreamPrinter.java
+++ b/src/java/gnu/dtools/ritopt/StreamPrinter.java
@@ -4,10 +4,12 @@ package gnu.dtools.ritopt;
  * StreamPrinter.java
  *
  * Version:
- *   $Id: StreamPrinter.java 322 2004-05-20 20:45:47Z mortenalver $
+ *   $Id: StreamPrinter.java 2209 2007-08-01 18:23:38Z coezbek $
  */
 
-import java.io.*;
+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
diff --git a/src/java/net/sf/ext/BrowserLauncher.java b/src/java/net/sf/ext/BrowserLauncher.java
index 650bb15..8dda0bf 100644
--- a/src/java/net/sf/ext/BrowserLauncher.java
+++ b/src/java/net/sf/ext/BrowserLauncher.java
@@ -71,22 +71,22 @@ public class BrowserLauncher {
     private static boolean loadedWithoutErrors;
 
     /** The com.apple.mrj.MRJFileUtils class */
-    private static Class mrjFileUtilsClass;
+    private static Class<?> mrjFileUtilsClass;
 
     /** The com.apple.mrj.MRJOSType class */
-    private static Class mrjOSTypeClass;
+    private static Class<?> mrjOSTypeClass;
 
     /** The com.apple.MacOS.AEDesc class */
-    private static Class aeDescClass;
+    private static Class<?> aeDescClass;
     
     /** The <init>(int) method of com.apple.MacOS.AETarget */
-    private static Constructor aeTargetConstructor;
+    private static Constructor<?> aeTargetConstructor;
     
     /** The <init>(int, int, int) method of com.apple.MacOS.AppleEvent */
-    private static Constructor appleEventConstructor;
+    private static Constructor<?> appleEventConstructor;
     
     /** The <init>(String) method of com.apple.MacOS.AEDesc */
-    private static Constructor aeDescConstructor;
+    private static Constructor<?> aeDescConstructor;
     
     /** The findFolder method of com.apple.mrj.MRJFileUtils */
     private static Method findFolder;
@@ -122,10 +122,12 @@ public class BrowserLauncher {
     private static Integer kAnyTransactionID;
 
     /** The linkage object required for JDirect 3 on Mac OS X. */
-    private static Object linkage;
+    @SuppressWarnings("unused")
+	private static Object linkage;
     
     /** The framework to reference on Mac OS X */
-    private static final String JDirect_MacOSX = "/System/Library/Frameworks/Carbon.framework/Frameworks/HIToolbox.framework/HIToolbox";
+    @SuppressWarnings("unused")
+	private static final String JDirect_MacOSX = "/System/Library/Frameworks/Carbon.framework/Frameworks/HIToolbox.framework/HIToolbox";
 
     /** JVM constant for MRJ 2.0 */
     private static final int MRJ_2_0 = 0;
@@ -259,10 +261,10 @@ public class BrowserLauncher {
         switch (jvm) {
             case MRJ_2_0:
                 try {
-                    Class aeTargetClass = Class.forName("com.apple.MacOS.AETarget");
-                    Class osUtilsClass = Class.forName("com.apple.MacOS.OSUtils");
-                    Class appleEventClass = Class.forName("com.apple.MacOS.AppleEvent");
-                    Class aeClass = Class.forName("com.apple.MacOS.ae");
+                    Class<?> aeTargetClass = Class.forName("com.apple.MacOS.AETarget");
+                    Class<?> osUtilsClass = Class.forName("com.apple.MacOS.OSUtils");
+                    Class<?> appleEventClass = Class.forName("com.apple.MacOS.AppleEvent");
+                    Class<?> aeClass = Class.forName("com.apple.MacOS.ae");
                     aeDescClass = Class.forName("com.apple.MacOS.AEDesc");
 
                     aeTargetConstructor = aeTargetClass.getDeclaredConstructor(new Class [] { int.class });
@@ -321,8 +323,8 @@ public class BrowserLauncher {
                 break;
             case MRJ_3_0:
                 try {
-                    Class linker = Class.forName("com.apple.mrj.jdirect.Linker");
-                    Constructor constructor = linker.getConstructor(new Class[]{ Class.class });
+                    Class<?> linker = Class.forName("com.apple.mrj.jdirect.Linker");
+                    Constructor<?> constructor = linker.getConstructor(new Class[]{ Class.class });
                     linkage = constructor.newInstance(new Object[] { BrowserLauncher.class });
                 } catch (ClassNotFoundException cnfe) {
                     errorMessage = cnfe.getMessage();
@@ -436,7 +438,7 @@ public class BrowserLauncher {
                             }
                         }
                     } catch (IllegalArgumentException iare) {
-                        browser = browser;
+                        // browser = browser;
                         errorMessage = iare.getMessage();
                         return null;
                     } catch (IllegalAccessException iae) {
diff --git a/src/java/net/sf/jabref/AdvancedTab.java b/src/java/net/sf/jabref/AdvancedTab.java
index 5f43a2a..b04d542 100644
--- a/src/java/net/sf/jabref/AdvancedTab.java
+++ b/src/java/net/sf/jabref/AdvancedTab.java
@@ -1,15 +1,16 @@
 package net.sf.jabref;
 
+import java.awt.BorderLayout;
+
 import javax.swing.*;
-import javax.swing.event.ChangeListener;
 import javax.swing.event.ChangeEvent;
-import java.awt.*;
-import java.awt.event.*;
-import com.jgoodies.forms.layout.*;
-import com.jgoodies.forms.factories.*;
-import com.jgoodies.forms.builder.*;
+import javax.swing.event.ChangeListener;
+
 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;
@@ -137,7 +138,7 @@ public class AdvancedTab extends JPanel implements PrefsTab {
         if (useRemoteServer.isSelected() && (JabRef.remoteListener == null)) {
             // Start the listener now.
 
-            JabRef.remoteListener = RemoteListener.openRemoteListener(JabRef.ths);
+            JabRef.remoteListener = RemoteListener.openRemoteListener(JabRef.singleton);
             if (JabRef.remoteListener != null) {
                 JabRef.remoteListener.start();
             }
diff --git a/src/java/net/sf/jabref/AppearancePrefsTab.java b/src/java/net/sf/jabref/AppearancePrefsTab.java
index 8ddc05d..98c946c 100644
--- a/src/java/net/sf/jabref/AppearancePrefsTab.java
+++ b/src/java/net/sf/jabref/AppearancePrefsTab.java
@@ -6,13 +6,7 @@ import java.awt.GridBagLayout;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 
-import javax.swing.BorderFactory;
-import javax.swing.JButton;
-import javax.swing.JCheckBox;
-import javax.swing.JLabel;
-import javax.swing.JOptionPane;
-import javax.swing.JPanel;
-import javax.swing.JTextField;
+import javax.swing.*;
 
 import net.sf.jabref.gui.ColorSetupPanel;
 
diff --git a/src/java/net/sf/jabref/AuthorList.java b/src/java/net/sf/jabref/AuthorList.java
index 27d637b..9bb2a05 100644
--- a/src/java/net/sf/jabref/AuthorList.java
+++ b/src/java/net/sf/jabref/AuthorList.java
@@ -243,7 +243,7 @@ public class AuthorList {
 	 * @return An AuthorList object representing the given authors.
 	 */
 	public static AuthorList getAuthorList(String authors) {
-		AuthorList authorList = (AuthorList) authorCache.get(authors);
+		AuthorList authorList = authorCache.get(authors);
 		if (authorList == null) {
 			authorList = new AuthorList(authors);
 			authorCache.put(authors, authorList);
@@ -587,7 +587,7 @@ public class AuthorList {
 	 * @return the <CODE>Author</CODE> object.
 	 */
 	public Author getAuthor(int i) {
-		return (Author) authors.get(i);
+		return authors.get(i);
 	}
 
 	/**
diff --git a/src/java/net/sf/jabref/BasePanel.java b/src/java/net/sf/jabref/BasePanel.java
index 11292f5..ed82c8c 100644
--- a/src/java/net/sf/jabref/BasePanel.java
+++ b/src/java/net/sf/jabref/BasePanel.java
@@ -28,37 +28,13 @@ http://www.gnu.org/copyleft/gpl.ja.html
 
 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.awt.event.ActionListener;
-import java.io.File;
-import java.io.IOException;
-import java.nio.charset.UnsupportedCharsetException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-import java.util.Vector;
-
-import javax.swing.filechooser.FileFilter;
-import javax.swing.tree.TreePath;
-import javax.swing.undo.CannotRedoException;
-import javax.swing.undo.CannotUndoException;
-
+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;
 import net.sf.jabref.collab.ChangeScanner;
 import net.sf.jabref.collab.FileUpdateListener;
 import net.sf.jabref.collab.FileUpdatePanel;
@@ -69,32 +45,43 @@ 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.search.NoSearchMatcher;
 import net.sf.jabref.search.SearchMatcher;
-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.sql.DBConnectDialog;
+import net.sf.jabref.sql.DBStrings;
+import net.sf.jabref.sql.SQLutil;
+import net.sf.jabref.undo.*;
 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;
 
 import javax.swing.*;
+import javax.swing.tree.TreePath;
+import javax.swing.undo.CannotRedoException;
+import javax.swing.undo.CannotUndoException;
+import java.awt.*;
+import java.awt.datatransfer.*;
+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.nio.charset.UnsupportedCharsetException;
+import java.sql.Connection;
+import java.util.*;
+import java.util.List;
 
 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;
@@ -102,19 +89,12 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
     boolean tmp = true;
 
     private MainTableSelectionListener selectionListener = null;
-    private ListEventListener groupsHighlightListener;
+    private ListEventListener<BibtexEntry> groupsHighlightListener;
     UIFSplitPane contentPane = new UIFSplitPane();
 
     JSplitPane splitPane;
-    //BibtexEntry testE = new BibtexEntry("tt");
-    //boolean previewActive = true;
 
     JabRefFrame frame;
-    BibtexDatabase database;
-    // The database shown in this panel.
-    
-    //  	Moving file to MetaData (Morten, 2006.08.29)
-    // private File fileToOpen = null; 
     
     String fileMonitorHandle = null;
     boolean saving = false, updatedExternally = false;
@@ -123,7 +103,7 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
     GridBagLayout gbl = new GridBagLayout();
     GridBagConstraints con = new GridBagConstraints();
 
-    HashMap autoCompleters = new HashMap();
+    HashMap<String, AutoCompleter> autoCompleters = new HashMap<String, AutoCompleter>();
     // Hashtable that holds as keys the names of the fields where
     // autocomplete is active, and references to the autocompleter objects.
 
@@ -141,13 +121,13 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
     //EntryTableModel tableModel = null;
     //public EntryTable entryTable = null;
     public MainTable mainTable = null;
-    public FilterList searchFilterList = null, groupFilterList = null;
+    public FilterList<BibtexEntry> searchFilterList = null, groupFilterList = null;
 
     public RightClickMenu rcm;
 
     BibtexEntry showing = null;
     // To indicate which entry is currently shown.
-    public HashMap entryEditors = new HashMap();
+    public HashMap<String, EntryEditor> entryEditors = new HashMap<String, EntryEditor>();
     // To contain instantiated entry editors. This is to save time
     // in switching between entries.
 
@@ -179,15 +159,12 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
             sortingByGroup = false,
             sortingByCiteSeerResults = false,
             coloringByGroup = false;
-        //previewEnabled = Globals.prefs.getBoolean("previewEnabled");
+
     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;
-    HashMap fieldExtras = new HashMap();
-    //## keep track of all keys for duplicate key warning and unique key generation
-    //private HashMap allKeys  = new HashMap();	// use a map instead of a set since i need to know how many of each key is inthere
 
     private boolean suppressOutput = false;
 
@@ -211,7 +188,7 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
     }
 
     public BasePanel(JabRefFrame frame, BibtexDatabase db, File file,
-                     HashMap meta, String encoding) {
+                     HashMap<String, String> meta, String encoding) {
 
         this.encoding = encoding;
        // System.out.println(encoding);
@@ -321,6 +298,20 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
         actions.put("test", new BaseAction () {
                 public void action() throws Throwable {
 
+                    SearchResultsDialog diag = new SearchResultsDialog(frame, "Test");
+                    diag.setVisible(true);
+                    List<BibtexEntry> list = new ArrayList<BibtexEntry>();
+                    BibtexEntry[] entries = getSelectedEntries();
+                    for (int i = 0; i < entries.length; i++) {
+                        BibtexEntry entry = entries[i];
+                        list.add(entry);
+                    }
+                    diag.addEntries(list, BasePanel.this);
+
+
+                    // Z3950Connection conn = new Z3950Connection();
+                    // conn.doSearch();
+                    /*
                     ArrayList<BibtexEntry> entries = new ArrayList<BibtexEntry>();
                     BibtexEntry[] sel = getSelectedEntries();
                     for (int i = 0; i < sel.length; i++) {
@@ -360,10 +351,7 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
                     //ExternalFileTypeEditor efte = new ExternalFileTypeEditor(frame);
                     //efte.setVisible(true);
 
-                    /*NamedCompound ce = Util.upgradePdfPsToFile(database,
-                            new String[] {"pdf", "ps"});
-                    undoManager.addEdit(ce);
-                    markBaseChanged();*/
+                    */
                 }
             });
 
@@ -470,9 +458,7 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
 
         actions.put("delete", new BaseAction() {
                 public void action() {
-                  boolean cancelled = false;
                   BibtexEntry[] bes = mainTable.getSelectedEntries();
-                  int row0 = mainTable.getSelectedRow();
                   if ((bes != null) && (bes.length > 0)) {
 
                       boolean goOn = showDeleteConfirmationDialog(bes.length);
@@ -544,52 +530,15 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
                                 ex.printStackTrace();
                             }
                         } else if (content.isDataFlavorSupported(DataFlavor.stringFlavor)) {
-                            // We have determined that no TransferableBibtexEntry is available, but
-                            // there is a string, which we will handle according to context:
-                            int[] rows = mainTable.getSelectedRows();
-                                //cols = entryTable.getSelectedColumns();
-                            //Util.pr(rows.length+" x "+cols.length);
-                            /*if ((cols != null) && (cols.length == 1) && (cols[0] != 0)
-                                && (rows != null) && (rows.length == 1)) {
-                                // A single cell is highlighted, so paste the string straight into it without parsing
-                                try {
-                                    tableModel.setValueAt((String)(content.getTransferData(DataFlavor.stringFlavor)), rows[0], cols[0]);
-                                    refreshTable();
-                                    markBaseChanged();
-                                    output("Pasted cell contents");
-                                } catch (UnsupportedFlavorException ex) {
-                                    ex.printStackTrace();
-                                } catch (IOException ex) {
-                                    ex.printStackTrace();
-                                } catch (IllegalArgumentException ex) {
-                                    output("Can't paste.");
-                                }
-                            } else {*/
-                              // no single cell is selected, so try parsing the clipboard contents as bibtex entries instead
-                              try {
+                           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) {
-                                      Set keySet = db.getKeySet();
-                                      if (keySet != null) {
-                                          // Copy references to the entries into a BibtexEntry array.
-                                          // Could import directly from db, but going via bes allows re-use
-                                          // of the same pasting code as used for TransferableBibtexEntries
-                                          bes = new BibtexEntry[db.getEntryCount()];
-                                          Iterator it = keySet.iterator();
-                                          for (int i=0; it.hasNext();i++) {
-                                              bes[i]=db.getEntryById((String) (it.next()));
-                                          }
-                                      }
-                                  } /*else {
-                                    String cont = (String)(content.getTransferData(DataFlavor.stringFlavor));
-                                    Util.pr("----------------\n"+cont+"\n---------------------");
-                                    TextAnalyzer ta = new TextAnalyzer(cont);
-                                      output(Globals.lang("Unable to parse clipboard text as Bibtex entries."));
-                                      }*/
+                                      bes = db.getEntries().toArray(new BibtexEntry[db.getEntryCount()]);
+                                  }
                               } catch (UnsupportedFlavorException ex) {
                                   ex.printStackTrace();
                               } catch (Throwable ex) {
@@ -687,17 +636,171 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
         });
 
 
+        // action for collecting database strings from user
+        actions.put("dbConnect", new BaseAction() {
+
+            public void action () {
+
+                DBStrings dbs = metaData.getDBStrings();
+
+                // 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);
+
+                // connnect to database to test DBStrings
+                if (dbd.getConnectToDB()) {
+
+                    dbs = dbd.getDBStrings();
+
+                    try {
+
+                        frame.output(Globals.lang("Establishing SQL connection..."));
+                        Connection conn = SQLutil.connectToDB(dbs);
+                        conn.close();
+                        dbs.isConfigValid(true);
+                        frame.output(Globals.lang("SQL connection established."));
+
+                    } catch (Exception ex) {
+
+                        String errorMessage = SQLutil.getExceptionMessage(ex,SQLutil.DBTYPE.MYSQL);
+                        dbs.isConfigValid(false);
+
+                        String preamble = "Could not connect to SQL database for the following reason:";
+                        frame.output(Globals.lang(preamble)
+                                + "  " +  errorMessage);
+
+                        JOptionPane.showMessageDialog(frame, Globals.lang(preamble)
+                            + "\n" + errorMessage, Globals.lang("Connect to SQL database"),
+                            JOptionPane.ERROR_MESSAGE);
+                       
+                    } finally {
+
+                        metaData.setDBStrings(dbs);
+                        dbd.dispose();
+
+                    }
+
+                }
+
+            }
+
+        });
+
+
+        // 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 {
+
+                        frame.output(Globals.lang("Attempting SQL export..."));
+                        SQLutil.exportDatabase(database, metaData, null, dbs);
+                        dbs.isConfigValid(true);
+
+                    } catch (Exception ex) {
+
+                        errorMessage = SQLutil.getExceptionMessage(ex,SQLutil.DBTYPE.MYSQL);
+                        dbs.isConfigValid(false);
+
+                    }
+
+                    metaData.setDBStrings(dbs);
+
+                }
+
+            }
+
+            // run third, on EDT:
+            public void update() {
+
+                String url = SQLutil.createJDBCurl(metaData.getDBStrings());
+
+                // if no error, report success
+                if (errorMessage == null) {
+                    if (connectToDB) {
+                        frame.output(Globals.lang("%0 export successful", url));
+                    }
+                }
+
+                // 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;
+
+                }
+            }
+
+        });
+
         // The action for auto-generating keys.
         actions.put("makeKey", new AbstractWorker() {
         //int[] rows;
-        List entries;
+        List<BibtexEntry> entries;
         int numSelected;
         boolean cancelled = false;
 
         // Run first, in EDT:
         public void init() {
 
-                    entries = new ArrayList(Arrays.asList(getSelectedEntries()));
+                    entries = new ArrayList<BibtexEntry>(Arrays.asList(getSelectedEntries()));
                     //rows = entryTable.getSelectedRows() ;
                     numSelected = entries.size();
 
@@ -716,13 +819,11 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
                 public void run() {
                     BibtexEntry bes = null ;
                     NamedCompound ce = new NamedCompound(Globals.lang("autogenerate keys"));
-                    //BibtexEntry be;
-                    Object oldValue;
-                    boolean hasShownWarning = false;
+
                     // First check if any entries have keys set already. If so, possibly remove
                     // them from consideration, or warn about overwriting keys.
-                    loop: for (Iterator i=entries.iterator(); i.hasNext();) {
-                        bes = (BibtexEntry)i.next();
+                    loop: for (Iterator<BibtexEntry> i=entries.iterator(); i.hasNext();) {
+                        bes = i.next();
                         if (bes.getField(BibtexFields.KEY_FIELD) != null) {
                             if (Globals.prefs.getBoolean("avoidOverwritingKey"))
                                 // Rmove the entry, because its key is already set:
@@ -747,23 +848,23 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
                         }
                     }
 
-                    HashMap oldvals = new HashMap();
+                    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 i=entries.iterator(); i.hasNext();) {
-                        bes = (BibtexEntry)i.next();
+                    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 i=entries.iterator(); i.hasNext();) {
-                        bes = (BibtexEntry)i.next();
+                    for (Iterator<BibtexEntry> i=entries.iterator(); i.hasNext();) {
+                        bes = i.next();
                         bes = LabelPatternUtil.makeLabel(Globals.prefs.getKeyPattern(), database, bes);
                         ce.addEdit(new UndoableKeyChange
                                    (database, bes.getId(), (String)oldvals.get(bes),
-                                    (String)bes.getField(BibtexFields.KEY_FIELD)));
+                                    bes.getField(BibtexFields.KEY_FIELD)));
                     }
                     ce.end();
                     undoManager.addEdit(ce);
@@ -821,7 +922,7 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
                     if ((bes != null) && (bes.length > 0)) {
                         storeCurrentEdit();
                         //String[] keys = new String[bes.length];
-                        Vector keys = new Vector();
+                        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)
@@ -859,7 +960,7 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
                     if ((bes != null) && (bes.length > 0)) {
                         storeCurrentEdit();
                         //String[] keys = new String[bes.length];
-                        Vector keys = new Vector();
+                        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)
@@ -916,20 +1017,20 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
                                 Object key = bes[0].getField(BibtexFields.KEY_FIELD);
                                 if (key != null) {
                                     basefile = key.toString();
-                                    final String[] types = new String[]{"pdf", "ps"};
+                                    final ExternalFileType[] types = Globals.prefs.getExternalFileTypeSelection();
                                     final String sep = System.getProperty("file.separator");
-                                    for (int i = 0; i < types.length; i++) {
-                                        String dir = Globals.prefs.get(types[i] + "Directory");
-                                        if (dir != null) {
-                                            if (dir.endsWith(sep)) {
-                                                dir = dir.substring(0, dir.length() - sep.length());
+                                    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;
                                             }
-                                        } else
-                                            dir = "";
-                                        String found = Util.findPdf(basefile, types[i], dir, new OpenFileFilter("." + types[i]));
-                                        if (found != null) {
-                                            filepath = dir + sep + found;
-                                            break;
                                         }
                                     }
                                 }
@@ -1014,6 +1115,32 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
                       }
               });
 
+        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."));
+            }
+        	});
+
+        
           actions.put("replaceAll", new BaseAction() {
                     public void action() {
                       ReplaceStringDialog rsd = new ReplaceStringDialog(frame);
@@ -1023,9 +1150,9 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
                       int counter = 0;
                       NamedCompound ce = new NamedCompound(Globals.lang("Replace string"));
                       if (!rsd.selOnly()) {
-                          for (Iterator i=database.getKeySet().iterator();
-                               i.hasNext();)
-                              counter += rsd.replace(database.getEntryById((String)i.next()), ce);
+                    	  for (BibtexEntry entry : database.getEntries()){
+                              counter += rsd.replace(entry, ce);
+                    	  }
                       } else {
                           BibtexEntry[] bes = mainTable.getSelectedEntries();
                           for (int i=0; i<bes.length; i++)
@@ -1132,8 +1259,7 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
                   NamedCompound ce = new NamedCompound(Globals.lang("Mark entries"));
                   BibtexEntry[] bes = mainTable.getSelectedEntries();
                   besLength = bes.length;
-          if (bes == null)
-              return;
+
                   for (int i=0; i<bes.length; i++) {
                       Util.markEntry(bes[i], ce);
                   }
@@ -1169,11 +1295,9 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
               actions.put("unmarkAll", new BaseAction() {
                 public void action() {
                   NamedCompound ce = new NamedCompound(Globals.lang("Unmark all"));
-                  Set keySet = database.getKeySet();
-                  for (Iterator i = keySet.iterator(); i.hasNext(); ) {
-                    BibtexEntry be = database.getEntryById( (String) i.next());
+                  
+                  for (BibtexEntry be : database.getEntries()){
                     Util.unmarkEntry(be, database, ce);
-
                   }
                   ce.end();
                   undoManager.addEdit(ce);
@@ -1233,7 +1357,6 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
                       }
                   });
 
-
           actions.put("exportToClipboard", new ExportToClipboardAction(frame, database()));
         
         actions.put("writeXMP", new WriteXMPAction(this));
@@ -1405,7 +1528,7 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
                 database.insertEntry(be);
 
                 // Set owner/timestamp if options are enabled:
-                ArrayList list = new ArrayList();
+                ArrayList<BibtexEntry> list = new ArrayList<BibtexEntry>();
                 list.add(be);
                 Util.setAutomaticFields(list, true, true);
 
@@ -1413,7 +1536,7 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
                 undoManager.addEdit(new UndoableInsertEntry(database, be, BasePanel.this));
                 output(Globals.lang("Added new")+" '"+type.getName().toLowerCase()+"' "
                        +Globals.lang("entry")+".");
-                final int row = mainTable.findEntry(be);
+                mainTable.findEntry(be);
 
                 // 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
@@ -1473,17 +1596,17 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
     public void createMainTable() {
         //Comparator comp = new FieldComparator("author");
 
-        GlazedEntrySorter eventList = new GlazedEntrySorter(database.getEntryMap(), null);
+        GlazedEntrySorter eventList = new GlazedEntrySorter(database.getEntryMap());
         // Must initialize sort columns somehow:
 
         database.addDatabaseChangeListener(eventList);
-        groupFilterList = new FilterList(eventList.getTheList(), NoSearchMatcher.INSTANCE);
-        searchFilterList = new FilterList(groupFilterList, NoSearchMatcher.INSTANCE);
+        groupFilterList = new FilterList<BibtexEntry>(eventList.getTheList(), NoSearchMatcher.INSTANCE);
+        searchFilterList = new FilterList<BibtexEntry>(groupFilterList, NoSearchMatcher.INSTANCE);
         //final SortedList sortedList = new SortedList(searchFilterList, null);
         MainTableFormat tableFormat = new MainTableFormat(this);
         tableFormat.updateTableFormat();
         //EventTableModel tableModel = new EventTableModel(sortedList, tableFormat);
-        mainTable = new MainTable(/*tableModel, */tableFormat, searchFilterList, frame, this);
+        mainTable = new MainTable(tableFormat, searchFilterList, frame, this);
         
         selectionListener = new MainTableSelectionListener(this, mainTable);
         mainTable.updateFont();
@@ -1493,8 +1616,8 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
         mainTable.addFocusListener(selectionListener);
         
         // Add the listener that will take care of highlighting groups as the selection changes:
-        groupsHighlightListener = new ListEventListener() {
-            public void listChanged(ListEvent listEvent) {
+        groupsHighlightListener = new ListEventListener<BibtexEntry>() {
+            public void listChanged(ListEvent<BibtexEntry> listEvent) {
                 if (Globals.prefs.getBoolean("highlightGroupsMatchingAny"))
                     getGroupSelector().showMatchingGroups(
                             mainTable.getSelectedEntries(), false);
@@ -1642,12 +1765,12 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
         repaint();
     }
 
-    public HashMap getAutoCompleters() {
+    public HashMap<String, AutoCompleter> getAutoCompleters() {
         return autoCompleters;
     }
     
     public AutoCompleter getAutoCompleter(String fieldName) {
-        return (AutoCompleter)autoCompleters.get(fieldName);
+        return autoCompleters.get(fieldName);
     }
 
     private void instantiateAutoCompleters() {
@@ -1657,8 +1780,7 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
             String field = completeFields[i];
             autoCompleters.put(field, new AutoCompleter(field));
         }
-        for (Iterator i=database.getKeySet().iterator(); i.hasNext();) {
-            BibtexEntry entry = database.getEntryById((String)i.next());
+        for (BibtexEntry entry : database.getEntries()){
             Util.updateCompletersForEntry(autoCompleters, entry);
         }
     }
@@ -1673,7 +1795,7 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
      *
      * @param meta Metadata to input.
      */
-    public void parseMetaData(HashMap meta) {
+    public void parseMetaData(HashMap<String, String> meta) {
         metaData = new MetaData(meta,database());
 
     }
@@ -1750,18 +1872,6 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
       }
     }
 
-    /**
-     * Ensure that no preview is shown. Called when preview is turned off. Must chech if
-     * a preview is in fact visible before doing anything rash.
-     */
-    public void hidePreview() {
-        Globals.prefs.putBoolean("previewEnabled", false);
-
-      Component c = splitPane.getBottomComponent();
-      if ((c != null) && !(c instanceof EntryEditor))
-        splitPane.setBottomComponent(null);
-    }
-
     public boolean isShowingEditor() {
       return ((splitPane.getBottomComponent() != null)
               && (splitPane.getBottomComponent() instanceof EntryEditor));
@@ -1799,7 +1909,7 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
 
         if (entryEditors.containsKey(be.getType().getName())) {
             // We already have an editor for this entry type.
-            form = (EntryEditor)entryEditors.get
+            form = entryEditors.get
                 ((be.getType().getName()));
             form.switchTo(be);
             if (visName != null)
@@ -1840,8 +1950,9 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
         EntryEditor form;
         if (entryEditors.containsKey(entry.getType().getName())) {
             EntryEditor visibleNow = currentEditor;
+            
             // We already have an editor for this entry type.
-            form = (EntryEditor)entryEditors.get
+            form = entryEditors.get
                 ((entry.getType().getName()));
 
             // If the cached editor is not the same as the currently shown one,
@@ -1901,7 +2012,7 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
     public void showPreview(PreviewPanel preview) {
         mode = SHOWING_PREVIEW;
         currentPreview = preview;
-        splitPane.setBottomComponent(preview.getPane());
+        splitPane.setBottomComponent(preview);
     }
 
     /**
@@ -2012,15 +2123,15 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
      * the Manage dialog.
      */
     public void updateAllContentSelectors() {
-        for (Iterator i=entryEditors.keySet().iterator(); i.hasNext();) {
-            EntryEditor ed = (EntryEditor)entryEditors.get(i.next());
+        for (Iterator<String> i=entryEditors.keySet().iterator(); i.hasNext();) {
+            EntryEditor ed = entryEditors.get(i.next());
             ed.updateAllContentSelectors();
         }
     }
 
     public void rebuildAllEntryEditors() {
-        for (Iterator i=entryEditors.keySet().iterator(); i.hasNext();) {
-            EntryEditor ed = (EntryEditor)entryEditors.get(i.next());
+        for (Iterator<String> i=entryEditors.keySet().iterator(); i.hasNext();) {
+            EntryEditor ed = entryEditors.get(i.next());
             ed.rebuildPanels();
         }
 
@@ -2113,7 +2224,7 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
         showingSearch = true;
     }
 
-    public void setGroupMatcher(Matcher matcher) {
+    public void setGroupMatcher(Matcher<BibtexEntry> matcher) {
         groupFilterList.setMatcher(matcher);
         showingGroup = true;
     }
@@ -2229,16 +2340,15 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
      */
     public void autoGenerateKeysBeforeSaving() {
         if (Globals.prefs.getBoolean("generateKeysBeforeSaving")) {
-            BibtexEntry bes;
             NamedCompound ce = new NamedCompound(Globals.lang("autogenerate keys"));
             boolean any = false;
-            for (Iterator i=database.getKeySet().iterator(); i.hasNext();) {
-                bes = database.getEntryById((String)i.next());
+            
+            for (BibtexEntry bes : database.getEntries()){
                 String oldKey = bes.getCiteKey();
                 if ((oldKey == null) || (oldKey.equals(""))) {
                     LabelPatternUtil.makeLabel(Globals.prefs.getKeyPattern(), database, bes);
                     ce.addEdit(new UndoableKeyChange(database, bes.getId(), null,
-                        (String)bes.getField(BibtexFields.KEY_FIELD)));
+                        bes.getField(BibtexFields.KEY_FIELD)));
                     any = true;
                 }
             }
@@ -2335,7 +2445,7 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
 							    sidePaneManager, getFile(), scanner);
 		  sidePaneManager.register(FileUpdatePanel.NAME, pan);
 		  sidePaneManager.show(FileUpdatePanel.NAME);
-		  setUpdatedExternally(false);
+		  //setUpdatedExternally(false);
 		  //scanner.displayResult();
 	      }
 	  };
@@ -2361,10 +2471,21 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
       }
 
 
-      public void cleanUp() {
+    /**
+     * Perform necessary cleanup when this BasePanel is closed.
+     */
+    public void cleanUp() {
         if (fileMonitorHandle != null)
-          Globals.fileUpdateMonitor.removeUpdateListener(fileMonitorHandle);
-      }
+            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;
@@ -2395,13 +2516,11 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
      * @return A comma-separated list of the keys of the selected entries.
      */
     public String getKeysForSelection() {
-        List entries = mainTable.getSelected();
         StringBuffer result = new StringBuffer();
         String citeKey = "";//, message = "";
         boolean first = true;
-        for (Iterator i = entries.iterator(); i.hasNext();) {
-            BibtexEntry bes = (BibtexEntry) i.next();
-            citeKey = (String) bes.getField(BibtexFields.KEY_FIELD);
+        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;
diff --git a/src/java/net/sf/jabref/BibtexDatabase.java b/src/java/net/sf/jabref/BibtexDatabase.java
index 0503361..8544961 100644
--- a/src/java/net/sf/jabref/BibtexDatabase.java
+++ b/src/java/net/sf/jabref/BibtexDatabase.java
@@ -41,6 +41,7 @@ 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;
@@ -60,7 +61,7 @@ public class BibtexDatabase {
 
 	HashMap<String, BibtexString> _strings = new HashMap<String, BibtexString>();
 
-	Vector _strings_ = new Vector();
+	Vector<String> _strings_ = new Vector<String>();
 
 	Set<DatabaseChangeListener> changeListeners = new HashSet<DatabaseChangeListener>();
 
@@ -89,7 +90,7 @@ public class BibtexDatabase {
                 {
                     // locate the entry under its old key
                     BibtexEntry oldEntry =
-                        _entries.remove((String) pce.getOldValue());
+                        _entries.remove(pce.getOldValue());
 
                     if (oldEntry != pce.getSource())
                     {
@@ -132,7 +133,7 @@ public class BibtexDatabase {
      * Returns a Set containing the keys to all entries.
      * Use getKeySet().iterator() to iterate over all entries.
      */
-    public synchronized Set getKeySet()
+    public synchronized Set<String> getKeySet()
     {
         return _entries.keySet();
     }
@@ -141,7 +142,7 @@ public class BibtexDatabase {
      * Returns an EntrySorter with the sorted entries from this base,
      * sorted by the given Comparator.
      */
-    public synchronized EntrySorter getSorter(java.util.Comparator comp) {
+    public synchronized EntrySorter getSorter(Comparator<BibtexEntry> comp) {
         EntrySorter sorter = new EntrySorter(_entries, comp);
         addDatabaseChangeListener(sorter);
         return sorter;
@@ -151,14 +152,14 @@ public class BibtexDatabase {
      * Just temporary, for testing purposes....
      * @return
      */
-    public Map getEntryMap() { return _entries; }
+    public Map<String, BibtexEntry> getEntryMap() { return _entries; }
 
     /**
      * Returns the entry with the given ID (-> entry_type + hashcode).
      */
     public synchronized BibtexEntry getEntryById(String id)
     {
-        return (BibtexEntry) _entries.get(id);
+        return _entries.get(id);
     }
 
     public synchronized Collection<BibtexEntry> getEntries() {
@@ -174,14 +175,13 @@ public class BibtexDatabase {
 
       int keyHash = key.hashCode() ; // key hash for better performance
 
-      Set keySet = _entries.keySet();
+      Set<String> keySet = _entries.keySet();
       if (keySet != null)
       {
-          Iterator it = keySet.iterator();
-          boolean loop = it.hasNext() ;
-          while(loop)
+          Iterator<String> it = keySet.iterator();
+          while(it.hasNext())
           {
-            String entrieID = (String) it.next() ;
+            String entrieID = it.next() ;
             BibtexEntry entry = getEntryById(entrieID) ;
             if ((entry != null) && (entry.getCiteKey() != null))
             {
@@ -190,11 +190,9 @@ public class BibtexDatabase {
               {
                 if (keyHash == citeKey.hashCode() )
                 {
-                  loop = false ;
                   back = entry ;
                 }
-                else loop = it.hasNext() ;
-              } else loop = it.hasNext() ;
+              }
             }
           }
       }
@@ -238,17 +236,18 @@ public class BibtexDatabase {
 
     /**
      * Removes the entry with the given string.
+     * 
+     * Returns null if not found.
      */
     public synchronized BibtexEntry removeEntry(String id)
     {
-        BibtexEntry oldValue = (BibtexEntry) _entries.remove(id);
+        BibtexEntry oldValue = _entries.remove(id);
+        
+        if (oldValue == null)
+            return null;
+        
         removeKeyFromSet(oldValue.getCiteKey());
-
-        if (oldValue != null)
-        {
-            oldValue.removePropertyChangeListener(listener);
-        }
-
+        oldValue.removePropertyChangeListener(listener);
         fireDatabaseChanged(new DatabaseChangeEvent(this, DatabaseChangeEvent.REMOVED_ENTRY, oldValue));
 
         return oldValue;
@@ -287,9 +286,8 @@ public class BibtexDatabase {
     public synchronized void addString(BibtexString string)
         throws KeyCollisionException
     {
-        for (java.util.Iterator i=_strings.keySet().iterator(); i.hasNext();) {
-            if (((BibtexString)_strings.get(i.next())).getName().equals(string.getName()))
-                throw new KeyCollisionException("A string with this label already exists,");
+    	if (hasStringLabel(string.getName())){
+    		throw new KeyCollisionException("A string with this label already exists,");
         }
 
         if (_strings.containsKey(string.getId()))
@@ -309,15 +307,23 @@ public class BibtexDatabase {
      * Returns a Set of keys to all BibtexString objects in the database.
      * These are in no sorted order.
      */
-    public Set getStringKeySet() {
+    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(Object o) {
-        return (BibtexString)(_strings.get(o));
+    public synchronized BibtexString getString(String o) {
+        return _strings.get(o);
     }
 
     /**
@@ -331,8 +337,8 @@ public class BibtexDatabase {
      * Returns true if a string with the given label already exists.
      */
     public synchronized boolean hasStringLabel(String label) {
-        for (java.util.Iterator i=_strings.keySet().iterator(); i.hasNext();) {
-            if (((BibtexString)_strings.get(i.next())).getName().equals(label))
+    	for (BibtexString value : _strings.values()){
+             if (value.getName().equals(label))
                 return true;
         }
         return false;
@@ -378,7 +384,7 @@ public class BibtexDatabase {
     /**
 	 * Take the given BibtexEntry and resolve any string references.
 	 * 
-	 * @param entriy
+	 * @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.
@@ -412,8 +418,7 @@ public class BibtexDatabase {
     * If the string is undefined, returns null.
     */
     private String resolveString(String label, HashSet<String> usedIds) {
-        for (java.util.Iterator i=_strings.keySet().iterator(); i.hasNext();) {
-            BibtexString string = (BibtexString)_strings.get(i.next());
+    	for (BibtexString string : _strings.values()){
 
                 //Util.pr(label+" : "+string.getName());
             if (string.getName().toLowerCase().equals(label.toLowerCase())) {
@@ -556,7 +561,7 @@ public class BibtexDatabase {
                 if(allKeys.containsKey(key)){
                         // warning
                         exists=true;
-                        allKeys.put( key, new Integer( ((Integer)allKeys.get(key)).intValue() + 1));// incrementInteger( allKeys.get(key)));
+                        allKeys.put( key, new Integer( allKeys.get(key).intValue() + 1));// incrementInteger( allKeys.get(key)));
                 }else
                         allKeys.put( key, new Integer(1));
                 return exists;
@@ -569,19 +574,19 @@ public class BibtexDatabase {
     private void removeKeyFromSet(String key){
                 if((key == null) || key.equals("")) return;
                 if(allKeys.containsKey(key)){
-                        Integer tI = (Integer)allKeys.get(key); // if(allKeys.get(key) instanceof Integer)
+                        Integer tI = allKeys.get(key); // if(allKeys.get(key) instanceof Integer)
                         if(tI.intValue()==1)
                                 allKeys.remove( key);
                         else
-                                allKeys.put( key, new Integer( ((Integer)tI).intValue() - 1));//decrementInteger( tI ));
+                                allKeys.put( key, new Integer( (tI).intValue() - 1));//decrementInteger( tI ));
                 }
     }
 
 
 
     public void fireDatabaseChanged(DatabaseChangeEvent e) {
-        for (Iterator i=changeListeners.iterator(); i.hasNext();) {
-            ((DatabaseChangeListener)i.next()).databaseChanged(e);
+    	for (DatabaseChangeListener listener : changeListeners){
+    		listener.databaseChanged(e);
         }
     }
 
@@ -599,6 +604,8 @@ public class BibtexDatabase {
 	 * 
 	 * 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.
@@ -613,8 +620,24 @@ public class BibtexDatabase {
 	
 		if (field.equals("bibtextype"))
 			return bibtex.getType().getName();
-	
-		return getText((String)bibtex.getField(field), database);
+
+        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:
+        if ((o == null) && (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);
 	}
 
 	/**
diff --git a/src/java/net/sf/jabref/BibtexEntry.java b/src/java/net/sf/jabref/BibtexEntry.java
index b0fa8a8..806ab50 100644
--- a/src/java/net/sf/jabref/BibtexEntry.java
+++ b/src/java/net/sf/jabref/BibtexEntry.java
@@ -30,14 +30,18 @@ Modified for use in JabRef.
 
 package net.sf.jabref;
 
-import net.sf.jabref.export.FieldFormatter;
 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.HashMap;
+import java.util.Map;
+import java.util.Set;
+import java.util.TreeSet;
 
-import java.util.*;
-import java.io.*;
+import net.sf.jabref.export.FieldFormatter;
 
 
 public class BibtexEntry
@@ -45,7 +49,7 @@ public class BibtexEntry
     public final static String ID_FIELD = "id";
     private String _id;
     private BibtexEntryType _type;
-    private Map _fields = new HashMap();
+    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:
@@ -95,11 +99,11 @@ public class BibtexEntry
     }
 
     /**
-     * Returns an array containing the names of all fields that are
+     * Returns an set containing the names of all fields that are
      * set for this particular entry.
      */
-    public Object[] getAllFields() {
-        return _fields.keySet().toArray();
+    public Set<String> getAllFields() {
+        return new TreeSet<String>(_fields.keySet());
     }
 
     /**
@@ -114,9 +118,9 @@ public class BibtexEntry
      * Returns true if this entry contains the fields it needs to be
      * complete.
      */
-    public boolean hasAllRequiredFields()
+    public boolean hasAllRequiredFields(BibtexDatabase database)
     {
-        return _type.hasAllRequiredFields(this);
+        return _type.hasAllRequiredFields(this, database);
     }
 
     /**
@@ -147,7 +151,7 @@ public class BibtexEntry
             _type = type;
             firePropertyChangedEvent(GUIGlobals.TYPE_HEADER,
                     oldType != null ? oldType.getName() : null,
-                    type != null ? type.getName() : null);
+                    type.getName());
         } catch (PropertyVetoException pve) {
             pve.printStackTrace();
         }
@@ -209,13 +213,13 @@ public class BibtexEntry
     /**
      * Returns the contents of the given field, or null if it is not set.
      */
-    public Object getField(String name) {
+    public String getField(String name) {
         return _fields.get(name);
     }
 
     public String getCiteKey() {
         return (_fields.containsKey(BibtexFields.KEY_FIELD) ?
-                (String)_fields.get(BibtexFields.KEY_FIELD) : null);
+                _fields.get(BibtexFields.KEY_FIELD) : null);
     }
 
     /**
@@ -225,7 +229,7 @@ public class BibtexEntry
      * 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 fields){
+    public void setField(Map<String, String> fields){
         _fields.putAll(fields);
     }
 
@@ -235,15 +239,14 @@ public class BibtexEntry
      * @param name The field to set.
      * @param value The value to set.
      */
-    public void setField(String name, Object value) {
+    public void setField(String name, String value) {
 
         if (ID_FIELD.equals(name)) {
             throw new IllegalArgumentException("The field name '" + name +
                                                "' is reserved");
         }
 
-        Object oldValue = _fields.get(name);
-
+        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
@@ -282,9 +285,19 @@ public class BibtexEntry
 
     }
 
-    protected boolean allFieldsPresent(String[] fields) {
+    /**
+     * 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 (getField(fields[i]) == null) {
+            if (BibtexDatabase.getResolvedField(fields[i], this, database) == null) {
                 return false;
             }
         }
@@ -328,9 +341,9 @@ public class BibtexEntry
         // Write header with type and bibtex-key.
         out.write("@"+_type.getName().toUpperCase()+"{");
 
-        String str = Util.shaveString((String)getField(BibtexFields.KEY_FIELD));
+        String str = Util.shaveString(getField(BibtexFields.KEY_FIELD));
         out.write(((str == null) ? "" : str)+","+Globals.NEWLINE);
-        HashMap written = new HashMap();
+        HashMap<String, String> written = new HashMap<String, String>();
         written.put(BibtexFields.KEY_FIELD, null);
         boolean hasWritten = false;
         // Write required fields first.
@@ -349,17 +362,15 @@ public class BibtexEntry
             }
         }
         // Then write remaining fields in alphabetic order.
-        TreeSet remainingFields = new TreeSet();
-        for (Iterator i = _fields.keySet().iterator(); i.hasNext(); ) {
-            String key = (String)i.next();
+        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 (Iterator i = remainingFields.iterator(); i.hasNext(); )
-            hasWritten = hasWritten | writeField((String)i.next(), out, ff, hasWritten);
-            //writeField((String)i.next(),out,ff);
+        for (String field: remainingFields)
+            hasWritten = hasWritten | writeField(field, out, ff, hasWritten);
 
         // Finally, end the entry.
         out.write((hasWritten ? Globals.NEWLINE : "")+"}"+Globals.NEWLINE);
@@ -378,7 +389,7 @@ public class BibtexEntry
      */
     private boolean writeField(String name, Writer out,
                             FieldFormatter ff, boolean isFirst) throws IOException {
-        Object o = getField(name);
+        String o = getField(name);
         if (o != null) {
             if (isFirst)
                 out.write(","+Globals.NEWLINE);
@@ -391,8 +402,6 @@ public class BibtexEntry
                     (Globals.lang("Error in field")+" '"+name+"': "+ex.getMessage());
             }
             return true;
-            //Util.writeField(name, o, out);
-            //out.write(","+Globals.NEWLINE);
         } else
             return false;
     }
@@ -402,7 +411,7 @@ public class BibtexEntry
      */
     public Object clone() {
         BibtexEntry clone = new BibtexEntry(_id, _type);
-        clone._fields = (Map)((HashMap)_fields).clone();
+        clone._fields = new HashMap<String, String>(_fields); 
         return clone;
     }
 
@@ -434,9 +443,9 @@ public class BibtexEntry
      */
     public String getAuthorTitleYear(int maxCharacters) {
         String[] s = new String[] {
-                (String) getField("author"),
-                (String) getField("title"),
-                (String) getField("year")};
+                getField("author"),
+                getField("title"),
+                getField("year")};
         for (int i = 0; i < s.length; ++i)
             if (s[i] == null)
                 s[i] = "N/A";
diff --git a/src/java/net/sf/jabref/BibtexEntryType.java b/src/java/net/sf/jabref/BibtexEntryType.java
index 4ad27d5..5d29b70 100644
--- a/src/java/net/sf/jabref/BibtexEntryType.java
+++ b/src/java/net/sf/jabref/BibtexEntryType.java
@@ -29,10 +29,10 @@ Modified for use in JabRef.
 */
 package net.sf.jabref;
 
-import java.io.*;
-import java.util.*;
+import java.util.Iterator;
+import java.util.TreeMap;
 
-public abstract class BibtexEntryType implements Comparable
+public abstract class BibtexEntryType implements Comparable<BibtexEntryType>
 {
 
     public static final BibtexEntryType OTHER =
@@ -59,7 +59,7 @@ public abstract class BibtexEntryType implements Comparable
                 return "";
             }
 
-            public boolean hasAllRequiredFields(BibtexEntry entry)
+            public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database)
             {
                 return true;
             }
@@ -95,12 +95,12 @@ public abstract class BibtexEntryType implements Comparable
                 return "AUTHOR, TITLE, JOURNAL and YEAR";
             }
 
-            public boolean hasAllRequiredFields(BibtexEntry entry)
+            public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database)
             {
                 return entry.allFieldsPresent(new String[]
                     {
                         "author", "title", "journal", "year", "bibtexkey", "volume", "pages"
-                    });
+                    }, database);
             }
         };
 
@@ -133,12 +133,12 @@ public abstract class BibtexEntryType implements Comparable
                 return "TITLE";
             }
 
-            public boolean hasAllRequiredFields(BibtexEntry entry)
+            public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database)
             {
                 return entry.allFieldsPresent(new String[]
                     {
                         "title", "bibtexkey"
-                    });
+                    }, database);
             }
         };
 
@@ -175,12 +175,12 @@ public abstract class BibtexEntryType implements Comparable
 		    +"EDITOR and/or AUTHOR";
             }
 
-            public boolean hasAllRequiredFields(BibtexEntry entry)
+            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) ||
@@ -218,12 +218,12 @@ public abstract class BibtexEntryType implements Comparable
                 return "TITLE, PUBLISHER, YEAR, and an EDITOR and/or AUTHOR";
             }
 
-            public boolean hasAllRequiredFields(BibtexEntry entry)
+            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));
             }
@@ -260,14 +260,14 @@ public abstract class BibtexEntryType implements Comparable
                 return "AUTHOR, TITLE, BOOKTITLE, PUBLISHER and YEAR";
             }
 
-            public boolean hasAllRequiredFields(BibtexEntry entry)
+            public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database)
             {
                 return entry.allFieldsPresent(new String[]
                     {
 			"author", "title", "booktitle", "publisher", "year",
 			"bibtexkey"
 
-                    });
+                    }, database);
             }
         };
 
@@ -301,12 +301,12 @@ public abstract class BibtexEntryType implements Comparable
                 return "AUTHOR, TITLE, BOOKTITLE and YEAR";
             }
 
-            public boolean hasAllRequiredFields(BibtexEntry entry)
+            public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database)
             {
                 return entry.allFieldsPresent(new String[]
                     {
 			"author", "title", "booktitle", "year" , "bibtexkey"
-                    });
+                    }, database);
             }
         };
 
@@ -340,12 +340,12 @@ public abstract class BibtexEntryType implements Comparable
                 return "AUTHOR, TITLE, BOOKTITLE and YEAR";
             }
 
-            public boolean hasAllRequiredFields(BibtexEntry entry)
+            public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database)
             {
                 return entry.allFieldsPresent(new String[]
                     {
 			"author", "title", "booktitle", "year" , "bibtexkey"
-                    });
+                    }, database);
             }
         };
 
@@ -379,12 +379,12 @@ public abstract class BibtexEntryType implements Comparable
                 return "TITLE and YEAR";
             }
 
-            public boolean hasAllRequiredFields(BibtexEntry entry)
+            public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database)
             {
                 return entry.allFieldsPresent(new String[]
                     {
 			"title", "year", "bibtexkey"
-                    });
+                    }, database);
             }
         };
 
@@ -419,12 +419,12 @@ public abstract class BibtexEntryType implements Comparable
                 return "TITLE";
             }
 
-            public boolean hasAllRequiredFields(BibtexEntry entry)
+            public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database)
             {
                 return entry.allFieldsPresent(new String[]
                     {
                         "title", "bibtexkey"
-                    });
+                    }, database);
             }
         };
 
@@ -457,13 +457,13 @@ public abstract class BibtexEntryType implements Comparable
                 return "AUTHOR, TITLE, INSTITUTION and YEAR";
             }
 
-            public boolean hasAllRequiredFields(BibtexEntry entry)
+            public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database)
             {
                 return entry.allFieldsPresent(new String[]
                     {
 			"author", "title", "institution", "year",
 			"bibtexkey"
-                    });
+                    }, database);
             }
         };
 
@@ -497,12 +497,12 @@ public abstract class BibtexEntryType implements Comparable
                 return "AUTHOR, TITLE, SCHOOL and YEAR";
             }
 
-            public boolean hasAllRequiredFields(BibtexEntry entry)
+            public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database)
             {
                 return entry.allFieldsPresent(new String[]
                     {
                         "author", "title", "school", "year", "bibtexkey"
-                    });
+                    }, database);
             }
         };
 
@@ -536,12 +536,12 @@ public abstract class BibtexEntryType implements Comparable
                 return "AUTHOR, TITLE, SCHOOL and YEAR";
             }
 
-            public boolean hasAllRequiredFields(BibtexEntry entry)
+            public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database)
             {
                 return entry.allFieldsPresent(new String[]
                     {
                         "author", "title", "school", "year", "bibtexkey"
-                    });
+                    }, database);
             }
         };
 
@@ -574,12 +574,12 @@ public abstract class BibtexEntryType implements Comparable
                 return "AUTHOR, TITLE and NOTE";
             }
 
-            public boolean hasAllRequiredFields(BibtexEntry entry)
+            public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database)
             {
                 return entry.allFieldsPresent(new String[]
                     {
 			"author", "title", "note", "bibtexkey"
-                    });
+                    }, database);
             }
         };
 
@@ -610,12 +610,12 @@ public abstract class BibtexEntryType implements Comparable
                 return "None";
             }
 
-            public boolean hasAllRequiredFields(BibtexEntry entry)
+            public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database)
             {
 		return entry.allFieldsPresent(new String[]
                     {
 			"bibtexkey"
-                    });
+                    }, database);
             }
         };
 
@@ -646,7 +646,7 @@ public abstract class BibtexEntryType implements Comparable
                 return "None";
             }
 
-            public boolean hasAllRequiredFields(BibtexEntry entry)
+            public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database)
             {
 		return false;
            }
@@ -655,8 +655,8 @@ public abstract class BibtexEntryType implements Comparable
 
     public abstract String getName();
 
-    public int compareTo(Object o) {
-	return getName().compareTo(((BibtexEntryType)o).getName());
+    public int compareTo(BibtexEntryType o) {
+	return getName().compareTo(o.getName());
     }
 
     public abstract String[] getOptionalFields();
@@ -671,7 +671,7 @@ public abstract class BibtexEntryType implements Comparable
 
     public abstract String describeRequiredFields();
 
-    public abstract boolean hasAllRequiredFields(BibtexEntry entry);
+    public abstract boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database);
 
 
     public String[] getUtilityFields(){
@@ -695,8 +695,8 @@ public abstract class BibtexEntryType implements Comparable
 	return false;
     }
 
-    public static TreeMap ALL_TYPES = new TreeMap();
-    public static TreeMap STANDARD_TYPES = new TreeMap();
+    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.
 	ALL_TYPES.put("article", ARTICLE);
@@ -717,7 +717,7 @@ public abstract class BibtexEntryType implements Comparable
 
 	// 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 = (TreeMap)ALL_TYPES.clone();
+	STANDARD_TYPES = new TreeMap<String, BibtexEntryType>(ALL_TYPES);
     }
 
     /**
@@ -783,7 +783,7 @@ public abstract class BibtexEntryType implements Comparable
      * JabRefFrame when the program closes.
      */
     public static void saveCustomEntryTypes(JabRefPreferences prefs) {
-	Iterator i=ALL_TYPES.keySet().iterator();
+	Iterator<String> i=ALL_TYPES.keySet().iterator();
 	int number = 0;
 	//Vector customTypes = new Vector(10, 10);
 	while (i.hasNext()) {
diff --git a/src/java/net/sf/jabref/BibtexFields.java b/src/java/net/sf/jabref/BibtexFields.java
index 660c872..3787174 100644
--- a/src/java/net/sf/jabref/BibtexFields.java
+++ b/src/java/net/sf/jabref/BibtexFields.java
@@ -45,8 +45,11 @@
 
 package net.sf.jabref ;
 
-import java.util.* ;
-import net.sf.jabref.util.*;
+import java.util.HashMap;
+import java.util.Vector;
+
+import net.sf.jabref.util.TXMLReader;
+
 import org.w3c.dom.Element;
 import org.w3c.dom.NodeList;
 
@@ -75,14 +78,14 @@ public class BibtexFields
   private static final BibtexFields runtime = new BibtexFields() ;
 
   // contains all bibtex-field objects (BibtexSingleField)
-  private HashMap fieldSet = null ;
+  private HashMap<String, BibtexSingleField> fieldSet;
 
   // contains all known (and public) bibtex fieldnames
-  private Object[] PUBLIC_FIELDS = null ;
+  private String[] PUBLIC_FIELDS = null ;
 
   private BibtexFields()
   {
-    fieldSet = new HashMap() ;
+    fieldSet = new HashMap<String, BibtexSingleField>();
     BibtexSingleField dummy = null ;
 
     // FIRST: all standard fields
@@ -215,10 +218,8 @@ public class BibtexFields
     readXML( Globals.additionalFields ) ;
 
     // collect all public fields for the PUBLIC_FIELDS array
-    Vector pFields = new Vector( fieldSet.size()) ;
-    for(Iterator iter = fieldSet.values().iterator(); iter.hasNext() ; )
-    {
-      BibtexSingleField sField = (BibtexSingleField) iter.next() ;
+    Vector<String> pFields = new Vector<String>( fieldSet.size()) ;
+    for (BibtexSingleField sField : fieldSet.values()){
       if (sField.isPublic() )
       {
         pFields.add( sField.getFieldName() );
@@ -227,7 +228,7 @@ public class BibtexFields
       }
     }
 
-    PUBLIC_FIELDS = pFields.toArray() ;
+    PUBLIC_FIELDS = pFields.toArray(new String[pFields.size()]);
     // sort the entries
     java.util.Arrays.sort( PUBLIC_FIELDS );
   }
@@ -258,7 +259,7 @@ public class BibtexFields
         if (fName != null)  // something found ?
         {
           fName = fName.toLowerCase() ;
-          BibtexSingleField dummy = (BibtexSingleField) fieldSet.get( fName ) ;
+          BibtexSingleField dummy = fieldSet.get( fName ) ;
           if (dummy == null)  // unknown field
           {
             dummy = new BibtexSingleField(reader, entry) ;
@@ -276,7 +277,7 @@ public class BibtexFields
   {
     if (name != null)
     {
-      return (BibtexSingleField) runtime.fieldSet.get(name.toLowerCase()) ;
+      return runtime.fieldSet.get(name.toLowerCase()) ;
     }
 
     return null ;
@@ -388,7 +389,7 @@ public class BibtexFields
     }
 
   /** returns an string-array with all fieldnames */
-  public static Object[] getAllFieldNames()
+  public static String[] getAllFieldNames()
   {
     return runtime.PUBLIC_FIELDS ;
   }
@@ -396,7 +397,7 @@ public class BibtexFields
   /** returns the fieldname of the entry at index t */
   public static String getFieldName( int t )
   {
-    return  (String) runtime.PUBLIC_FIELDS[t] ;
+    return  runtime.PUBLIC_FIELDS[t] ;
   }
 
   /** returns the number of available fields */
diff --git a/src/java/net/sf/jabref/BibtexStringComparator.java b/src/java/net/sf/jabref/BibtexStringComparator.java
index 8147c44..83d9e03 100644
--- a/src/java/net/sf/jabref/BibtexStringComparator.java
+++ b/src/java/net/sf/jabref/BibtexStringComparator.java
@@ -28,10 +28,8 @@ http://www.gnu.org/copyleft/gpl.ja.html
 package net.sf.jabref;
 
 import java.util.Comparator;
-import java.util.regex.Pattern;
-import java.util.regex.Matcher;
 
-public class BibtexStringComparator implements Comparator {
+public class BibtexStringComparator implements Comparator<BibtexString> {
 
     protected boolean considerRefs;
     private static final String MARKER = "__MARKER__";
@@ -46,9 +44,7 @@ public class BibtexStringComparator implements Comparator {
         this.considerRefs = considerRefs;
     }
 
-    public int compare(Object one, Object two) {
-        BibtexString s1 = (BibtexString) one;
-        BibtexString s2 = (BibtexString) two;
+    public int compare(BibtexString s1, BibtexString s2) {
 
         /*
          If crossreferences are to be considered, the following block sorts by the number of string
diff --git a/src/java/net/sf/jabref/BrowseAction.java b/src/java/net/sf/jabref/BrowseAction.java
index 95261b0..1c79ca1 100644
--- a/src/java/net/sf/jabref/BrowseAction.java
+++ b/src/java/net/sf/jabref/BrowseAction.java
@@ -1,16 +1,22 @@
 package net.sf.jabref;
 
-import javax.swing.*;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 import java.io.File;
 
+import javax.swing.AbstractAction;
+import javax.swing.JFileChooser;
+import javax.swing.JFrame;
+import javax.swing.JTextField;
+
 /**
  * Action used to produce a "Browse" button for one of the text fields.
  */
 public class BrowseAction extends AbstractAction implements ActionListener {
 
-    JFrame frame=null;
+	private static final long serialVersionUID = 3007593430933681310L;
+
+	JFrame frame=null;
     //JDialog dialog=null;
     JTextField comp;
     boolean dir;
diff --git a/src/java/net/sf/jabref/CheckBoxMessage.java b/src/java/net/sf/jabref/CheckBoxMessage.java
index 23e33bd..ee146b1 100644
--- a/src/java/net/sf/jabref/CheckBoxMessage.java
+++ b/src/java/net/sf/jabref/CheckBoxMessage.java
@@ -20,7 +20,7 @@ public class CheckBoxMessage extends JPanel {
     setLayout(gbl);
     con.gridwidth = GridBagConstraints.REMAINDER;
 
-    JLabel lab = new JLabel(message+"\n"), empt = new JLabel("");
+    JLabel lab = new JLabel(message+"\n");
     cb.setHorizontalAlignment(JLabel.LEFT);
     gbl.setConstraints(lab, con);
     add(lab);
diff --git a/src/java/net/sf/jabref/ClipBoardManager.java b/src/java/net/sf/jabref/ClipBoardManager.java
index 70dbf91..f7c0596 100644
--- a/src/java/net/sf/jabref/ClipBoardManager.java
+++ b/src/java/net/sf/jabref/ClipBoardManager.java
@@ -11,14 +11,14 @@
 
 package net.sf.jabref ;
 
-import java.awt.datatransfer.Clipboard ;
-import java.awt.datatransfer.ClipboardOwner ;
-import java.awt.datatransfer.Transferable ;
-import java.awt.datatransfer.StringSelection ;
-import java.awt.datatransfer.DataFlavor ;
-import java.awt.datatransfer.UnsupportedFlavorException ;
-import java.awt.Toolkit ;
-import java.io.* ;
+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
 {
@@ -55,9 +55,8 @@ public class ClipBoardManager implements ClipboardOwner
     Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard() ;
     //odd: the Object param of getContents is not currently used
     Transferable contents = clipboard.getContents( null ) ;
-    boolean hasTransferableText = ( contents != null ) &&
-        contents.isDataFlavorSupported( DataFlavor.stringFlavor ) ;
-    if ( hasTransferableText )
+    if ( ( contents != null ) &&
+        contents.isDataFlavorSupported( DataFlavor.stringFlavor ) )
     {
       try
       {
diff --git a/src/java/net/sf/jabref/ContentSelectorDialog.java b/src/java/net/sf/jabref/ContentSelectorDialog.java
index 733df9b..22a69c9 100644
--- a/src/java/net/sf/jabref/ContentSelectorDialog.java
+++ b/src/java/net/sf/jabref/ContentSelectorDialog.java
@@ -1,12 +1,13 @@
 package net.sf.jabref;
 
 import java.awt.*;
-import javax.swing.*;
-import javax.swing.border.*;
-import java.awt.event.*;
-import java.util.Iterator;
-import java.util.Vector;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
 import java.util.TreeSet;
+import java.util.Vector;
+
+import javax.swing.*;
+import javax.swing.border.TitledBorder;
 
 public class ContentSelectorDialog extends JDialog {
     JPanel panel1 = new JPanel();
@@ -45,7 +46,7 @@ public class ContentSelectorDialog extends JDialog {
 	FIELD_FIRST_LINE = Globals.lang("<field name>");
     MetaData metaData;
     String currentField = null;
-    TreeSet fieldSet, wordSet;
+    TreeSet<String> fieldSet, wordSet;
     JabRefFrame frame;
 
     public ContentSelectorDialog(JabRefFrame frame, boolean modal, MetaData metaData) {
@@ -90,8 +91,7 @@ public class ContentSelectorDialog extends JDialog {
     private void setupFieldSelector() {
 	fieldSelector.removeAllItems();
 	fieldSelector.addItem(FIELD_FIRST_LINE);
-	for (Iterator i=metaData.iterator(); i.hasNext();) {
-	    String s = (String)i.next();
+	for (String s : metaData){
 	    if (s.startsWith(Globals.SELECTOR_META_PREFIX))
 		fieldSelector.addItem(s.substring(Globals.SELECTOR_META_PREFIX.length()));
 	}
@@ -112,15 +112,16 @@ public class ContentSelectorDialog extends JDialog {
     }
 
     private void fillWordSelector() {
-	wordSelector.removeAllItems();
-	wordSelector.addItem(WORD_FIRSTLINE_TEXT);
-	Vector items = metaData.getData(Globals.SELECTOR_META_PREFIX+currentField);
-	if ((items != null)) { // && (items.size() > 0)) {
-	    wordSet = new TreeSet(items);
-	    for (Iterator i=wordSet.iterator(); i.hasNext();)
-		wordSelector.addItem(i.next());
+		wordSelector.removeAllItems();
+		wordSelector.addItem(WORD_FIRSTLINE_TEXT);
+		Vector<String> items = metaData.getData(Globals.SELECTOR_META_PREFIX
+			+ currentField);
+		if ((items != null)) { // && (items.size() > 0)) {
+			wordSet = new TreeSet<String>(items);
+			for (String word : wordSet)
+				wordSelector.addItem(word);
+		}
 	}
-    }
 
     private void addWord() {
 	if (currentField == null)
@@ -132,7 +133,7 @@ public class ContentSelectorDialog extends JDialog {
 	    wordSet.add(word);
 	    // Create a new Vector for this word list, and update the MetaData.
 	    metaData.putData(Globals.SELECTOR_META_PREFIX+currentField,
-			     new Vector(wordSet));
+			     new Vector<String>(wordSet));
 	    fillWordSelector();
 	    frame.basePanel().markNonUndoableBaseChanged();
 	    //wordTf.selectAll();
@@ -145,7 +146,7 @@ public class ContentSelectorDialog extends JDialog {
 	currentField = fieldTf.getText().trim().toLowerCase();
 	if (metaData.getData(Globals.SELECTOR_META_PREFIX+currentField) == null) {
 	    metaData.putData(Globals.SELECTOR_META_PREFIX+currentField,
-			     new Vector());
+			     new Vector<String>());
 	    frame.basePanel().markNonUndoableBaseChanged();
 	    setupFieldSelector();
 	    updateWordPanel();
@@ -158,7 +159,7 @@ public class ContentSelectorDialog extends JDialog {
 	    wordSet.remove(word);
 	    // Create a new Vector for this word list, and update the MetaData.
 	    metaData.putData(Globals.SELECTOR_META_PREFIX+currentField,
-			     new Vector(wordSet));
+			     new Vector<String>(wordSet));
 	    fillWordSelector();
 	    frame.basePanel().markNonUndoableBaseChanged();
 	    //wordTf.selectAll();
diff --git a/src/java/net/sf/jabref/ContentSelectorDialog2.java b/src/java/net/sf/jabref/ContentSelectorDialog2.java
index 06c1005..27869d4 100644
--- a/src/java/net/sf/jabref/ContentSelectorDialog2.java
+++ b/src/java/net/sf/jabref/ContentSelectorDialog2.java
@@ -1,18 +1,17 @@
 package net.sf.jabref;
 
-import com.jgoodies.forms.builder.ButtonStackBuilder;
-import com.jgoodies.forms.builder.ButtonBarBuilder;
-
 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.border.*;
-import javax.swing.event.*;
-import java.awt.event.*;
-import java.util.Iterator;
-import java.util.Vector;
-import java.util.HashMap;
-import java.util.TreeSet;
-import java.util.ArrayList;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+
+import com.jgoodies.forms.builder.ButtonBarBuilder;
 
 public class ContentSelectorDialog2 extends JDialog {
 
@@ -31,7 +30,7 @@ public class ContentSelectorDialog2 extends JDialog {
 	FIELD_FIRST_LINE = Globals.lang("<field name>");
     MetaData metaData;
     String currentField = null;
-    TreeSet fieldSet, wordSet;
+    TreeSet<String> fieldSet, wordSet;
     JabRefFrame frame;
     BasePanel panel;
     JButton help = new JButton(Globals.lang("Help")),
@@ -51,8 +50,8 @@ public class ContentSelectorDialog2 extends JDialog {
     JScrollPane fPane = new JScrollPane(fieldList),
 	wPane = new JScrollPane(wordList);
 
-    HashMap wordListModels = new HashMap();
-    ArrayList removedFields = new ArrayList();
+    HashMap<String, DefaultListModel> wordListModels = new HashMap<String, DefaultListModel>();
+    ArrayList<String> removedFields = new ArrayList<String>();
 
     public ContentSelectorDialog2(Frame owner, JabRefFrame frame, BasePanel panel, boolean modal, MetaData metaData,
               String fieldName) {
@@ -249,29 +248,29 @@ public class ContentSelectorDialog2 extends JDialog {
 	// 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 i=removedFields.iterator(); i.hasNext();) {
-	    String fieldName = (String)i.next();
+	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 i=wordListModels.keySet().iterator(); i.hasNext();) {
+	loop: for (Iterator<String> i=wordListModels.keySet().iterator(); i.hasNext();) {
 	    // For each field name, store the values:
-	    String fieldName = (String)i.next();
+	    String fieldName = i.next();
 	    if ((fieldName == null) || FIELD_FIRST_LINE.equals(fieldName))
 		continue loop;
-	    DefaultListModel lm = (DefaultListModel)wordListModels.get(fieldName);
+	    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()) && ((String)lm.get(start)).equals(WORD_FIRSTLINE_TEXT))
 		    start++;
-	    Vector data = metaData.getData(Globals.SELECTOR_META_PREFIX+fieldName);
+	    Vector<String> data = metaData.getData(Globals.SELECTOR_META_PREFIX+fieldName);
 	    boolean newField = false;
 	    if (data == null) {
 		newField = true;
-		data = new Vector();
+		data = new Vector<String>();
 		changedFieldSet = true;
 
 	    } else
@@ -300,41 +299,38 @@ public class ContentSelectorDialog2 extends JDialog {
      *
      */
     private void setupFieldSelector() {
-	fieldListModel.clear();
-	//fieldListModel.addElement(FIELD_FIRST_LINE);
-	for (Iterator i=metaData.iterator(); i.hasNext();) {
-	    String s = (String)i.next();
-	    if (s.startsWith(Globals.SELECTOR_META_PREFIX))
-		fieldListModel.addElement(s.substring(Globals.SELECTOR_META_PREFIX.length()));
-	}
-
+		fieldListModel.clear();
+		for (String s : metaData){
+		    if (s.startsWith(Globals.SELECTOR_META_PREFIX))
+		    	fieldListModel.addElement(s.substring(Globals.SELECTOR_META_PREFIX.length()));
+		}
     }
 
 
     private void setupWordSelector() {
 
-	// Have we already created a listmodel for this field?
-	Object o = wordListModels.get(currentField);
-	if (o != null) {
-	    wordListModel = (DefaultListModel)o;
-	    wordList.setModel(wordListModel);
-	} else {
-	    wordListModel = new DefaultListModel();
-	    wordList.setModel(wordListModel);
-	    wordListModels.put(currentField, wordListModel);
-	    wordListModel.clear();
-	    //wordListModel.addElement(WORD_FIRSTLINE_TEXT);
-	    Vector items = metaData.getData(Globals.SELECTOR_META_PREFIX+currentField);
-	    if ((items != null)) { // && (items.size() > 0)) {
-		wordSet = new TreeSet(items);
-		for (Iterator i=wordSet.iterator(); i.hasNext();) {
-		    String s = (String)i.next();
-		    int index = findPos(wordListModel, s);
-		    wordListModel.add(index, s);
+		// Have we already created a listmodel for this field?
+		Object o = wordListModels.get(currentField);
+		if (o != null) {
+			wordListModel = (DefaultListModel) o;
+			wordList.setModel(wordListModel);
+		} else {
+			wordListModel = new DefaultListModel();
+			wordList.setModel(wordListModel);
+			wordListModels.put(currentField, wordListModel);
+			wordListModel.clear();
+			// wordListModel.addElement(WORD_FIRSTLINE_TEXT);
+			Vector<String> items = metaData
+				.getData(Globals.SELECTOR_META_PREFIX + currentField);
+			if ((items != null)) { // && (items.size() > 0)) {
+				wordSet = new TreeSet<String>(items);
+				for (String s : wordSet){
+					int index = findPos(wordListModel, s);
+					wordListModel.add(index, s);
+				}
+			}
 		}
-	    }
 	}
-    }
 
     private int findPos(DefaultListModel lm, String item) {
 	for (int i=0; i<lm.size(); i++) {
diff --git a/src/java/net/sf/jabref/CrossRefEntryComparator.java b/src/java/net/sf/jabref/CrossRefEntryComparator.java
index ca7e142..e400cd2 100644
--- a/src/java/net/sf/jabref/CrossRefEntryComparator.java
+++ b/src/java/net/sf/jabref/CrossRefEntryComparator.java
@@ -23,7 +23,7 @@ USA
 Further information about the GNU GPL is available at:
 http://www.gnu.org/copyleft/gpl.ja.html
 
-*/
+ */
 
 package net.sf.jabref;
 
@@ -35,23 +35,23 @@ import java.util.Comparator;
  * 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 {
+public class CrossRefEntryComparator implements Comparator<BibtexEntry> {
 
-    private String crossRefField = "crossref";
+	private String crossRefField = "crossref";
 
-    public int compare(Object o1, Object o2) throws ClassCastException {
-	if (!(o1 instanceof BibtexEntry) || !(o2 instanceof BibtexEntry))
-	   throw new ClassCastException("Trouble comparing objects. This shouldn't happen.");
-	BibtexEntry e1 = (BibtexEntry)o1,
-	    e2 = (BibtexEntry)o2;
+	public int compare(BibtexEntry e1, BibtexEntry e2)
+		throws ClassCastException {
 
-	Object f1 = e1.getField(crossRefField),
-	    f2 = e2.getField(crossRefField);
+		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;
-    }
+		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 5a866dc..e064da9 100644
--- a/src/java/net/sf/jabref/CustomEntryType.java
+++ b/src/java/net/sf/jabref/CustomEntryType.java
@@ -1,6 +1,7 @@
 package net.sf.jabref;
 
-import java.io.*;
+import java.io.IOException;
+import java.io.Writer;
 
 /**
  * This class is used to represent customized entry types.
@@ -60,10 +61,10 @@ public class CustomEntryType extends BibtexEntryType {
 	return sb.toString();
     }
 
-    public boolean hasAllRequiredFields(BibtexEntry entry) {
+    public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) {
 	for (int i=0; i<req.length; i++)
-	    if (entry.getField(req[i]) == null) return false;
-	return true;
+        if (BibtexDatabase.getResolvedField(req[i], entry, database) == null) return false;
+    	return true;
     }
 
     public void save(Writer out) throws IOException {
diff --git a/src/java/net/sf/jabref/DatabaseSearch.java b/src/java/net/sf/jabref/DatabaseSearch.java
index 385a53c..f19ce43 100644
--- a/src/java/net/sf/jabref/DatabaseSearch.java
+++ b/src/java/net/sf/jabref/DatabaseSearch.java
@@ -26,7 +26,10 @@
  */
 package net.sf.jabref;
 
-import java.util.*;
+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;
@@ -35,13 +38,13 @@ public class DatabaseSearch extends Thread {
 	BasePanel panel = null;
 	BibtexDatabase thisDatabase = null;
 	SearchRuleSet thisRuleSet = null;
-	Hashtable thisSearchOptions = null;
+	Map<String, String> thisSearchOptions = null;
 	String searchValueField = null;
 	boolean reorder, select, grayOut;
 	ErrorMessageDisplay errorDisplay;
-	Set matches = new HashSet();
+	Set<BibtexEntry> matches = new HashSet<BibtexEntry>();
 	public DatabaseSearch(ErrorMessageDisplay errorDisplay,
-			Hashtable searchOptions, SearchRuleSet searchRules,
+			Map<String, String> searchOptions, SearchRuleSet searchRules,
 			BasePanel panel, String searchValueField, boolean reorder,
 			boolean grayOut, boolean select) {
 		this.panel = panel;
@@ -61,10 +64,10 @@ public class DatabaseSearch extends Thread {
 		BibtexEntry bes = null;
 		int hits = 0;
 
-		for (Iterator i = thisDatabase.getKeySet().iterator(); i.hasNext();) {
-			// 1. search all required fields using searchString
+		for (String id : thisDatabase.getKeySet()){
 
-			bes = thisDatabase.getEntryById((String) i.next());
+			// 1. search all required fields using searchString
+			bes = thisDatabase.getEntryById(id);
 			if (bes == null)
 				continue;
 			// (thisTableModel.getNameFromNumber(row));
@@ -101,7 +104,7 @@ public class DatabaseSearch extends Thread {
 		});
 	}
 	
-	public Iterator matches() {
+	public Iterator<BibtexEntry> matches() {
 		return matches.iterator();
 	}
 }
diff --git a/src/java/net/sf/jabref/DisplayPanel.java b/src/java/net/sf/jabref/DisplayPanel.java
deleted file mode 100644
index 2192363..0000000
--- a/src/java/net/sf/jabref/DisplayPanel.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package net.sf.jabref;
-
-import javax.swing.*;
-import java.awt.*;
-
-/**
- * Created by IntelliJ IDEA.
- * User: alver
- * Date: 12.mar.2005
- * Time: 14:58:21
- * To change this template use File | Settings | File Templates.
- */
-public class DisplayPanel {
-
-    private JPanel panel = new JPanel();
-    private BibtexEntry activeEntry = null;
-
-    public DisplayPanel() {
-        panel.setLayout(new BorderLayout());
-    }
-
-    public void setEntry(BibtexEntry entry) {
-        activeEntry = entry;
-    }
-
-    public JPanel getPanel() {
-        return panel;
-    }
-}
diff --git a/src/java/net/sf/jabref/DuplicateCheck.java b/src/java/net/sf/jabref/DuplicateCheck.java
new file mode 100644
index 0000000..ad4148d
--- /dev/null
+++ b/src/java/net/sf/jabref/DuplicateCheck.java
@@ -0,0 +1,134 @@
+package net.sf.jabref;
+
+import java.util.HashSet;
+import java.util.Iterator;
+
+/**
+ * This class contains utility method for duplicate checking of entries.
+ */
+public class DuplicateCheck {
+
+
+    /**
+     * 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();
+
+        float req;
+        if (fields == null)
+            req = 1;
+        else
+            req = compareFieldSet(fields, one, two);
+        fields = one.getType().getOptionalFields();
+
+        if (fields != null) {
+            float opt = compareFieldSet(fields, one, two);
+            return (2 * req + opt) / 3 >= Globals.duplicateThreshold;
+        } else {
+            return (req >= Globals.duplicateThreshold);
+        }
+    }
+
+    private static float compareFieldSet(String[] fields, BibtexEntry one, BibtexEntry two) {
+        int res = 0, empty = 0;
+        for (int i = 0; i < fields.length; i++) {
+            // Util.pr(":"+compareSingleField(fields[i], one, two));
+            int result = compareSingleField(fields[i], one, two);
+            if (result == Util.EQUAL) {
+                res++;
+                // Util.pr(fields[i]);
+            }
+            else if (result == Util.EMPTY_IN_BOTH)
+                empty++;
+        }
+        if (fields.length > empty)
+            return ((float) res) / ((float) (fields.length - empty));
+        else // no fields present. This points to a possible duplicate?
+            return 0.5f;
+    }
+
+    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;
+        s1 = s1.toLowerCase();
+        s2 = s2.toLowerCase();
+        // Util.pr(field+": '"+s1+"' vs '"+s2+"'");
+        if (field.equals("author") || field.equals("editor")) {
+            // Specific for name fields.
+            // Harmonise case:
+            String[] aus1 = AuthorList.fixAuthor_lastNameFirst(s1).split(" and "), aus2 = AuthorList
+                    .fixAuthor_lastNameFirst(s2).split(" and "), au1 = aus1[0].split(","), au2 = aus2[0]
+                    .split(",");
+
+            // Can check number of authors, all authors or only the first.
+            if ((aus1.length > 0) && (aus1.length == aus2.length)
+                    && au1[0].trim().equals(au2[0].trim()))
+                return Util.EQUAL;
+            else
+                return Util.NOT_EQUAL;
+        } else {
+            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.
+	}
+}
diff --git a/src/java/net/sf/jabref/DuplicateResolverDialog.java b/src/java/net/sf/jabref/DuplicateResolverDialog.java
index e0cce17..178bd6b 100644
--- a/src/java/net/sf/jabref/DuplicateResolverDialog.java
+++ b/src/java/net/sf/jabref/DuplicateResolverDialog.java
@@ -1,17 +1,14 @@
 package net.sf.jabref;
 
-import javax.swing.JDialog;
-import java.awt.HeadlessException;
-import java.awt.GridBagLayout;
-import java.awt.GridBagConstraints;
-import javax.swing.*;
-import java.awt.Insets;
-import java.awt.BorderLayout;
-import java.awt.event.ActionListener;
-import java.awt.event.ActionEvent;
-import java.io.*;
-import net.sf.jabref.export.*;
 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 : ?
@@ -90,8 +87,8 @@ public class DuplicateResolverDialog extends JDialog {
       }
 
     String layout = Globals.prefs.get("preview0");
-    p1 = new PreviewPanel(one, new MetaData(), layout);
-    p2 = new PreviewPanel(two, new MetaData(), layout);
+    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);
diff --git a/src/java/net/sf/jabref/DuplicateSearch.java b/src/java/net/sf/jabref/DuplicateSearch.java
index d120179..bf4e016 100644
--- a/src/java/net/sf/jabref/DuplicateSearch.java
+++ b/src/java/net/sf/jabref/DuplicateSearch.java
@@ -33,10 +33,11 @@ http://www.gnu.org/copyleft/gpl.ja.html
 
 package net.sf.jabref;
 
-import java.util.Vector;
 import java.util.ArrayList;
 import java.util.Iterator;
-import javax.swing.*;
+import java.util.Vector;
+
+import javax.swing.SwingUtilities;
 
 import net.sf.jabref.undo.NamedCompound;
 import net.sf.jabref.undo.UndoableRemoveEntry;
@@ -46,7 +47,7 @@ public class DuplicateSearch extends Thread {
 
   BasePanel panel;
   BibtexEntry[] bes;
-  final Vector duplicates = new Vector();
+  final Vector<BibtexEntry[]> duplicates = new Vector<BibtexEntry[]>();
   boolean autoRemoveExactDuplicates = false;
   
   public DuplicateSearch(BasePanel bp) {
@@ -70,24 +71,8 @@ public void run() {
   st.setPriority(Thread.MIN_PRIORITY);
   st.start();
   int current = 0;
-  DuplicateResolverDialog drd = null;
-
-/*
-  loop: while (!st.finished() || (current < duplicates.size()))
-  {
-    if ( current >= duplicates.size() )
-    {
-      // No more duplicates to resolve, but search is still in progress. Sleep a little.
-       try
-       {
-         sleep(10);
-       } catch (InterruptedException ex) {}
-       continue loop;
-    }
-  }
-*/
 
-   final ArrayList toRemove = new ArrayList();
+   final ArrayList<BibtexEntry> toRemove = new ArrayList<BibtexEntry>();
   while (!st.finished() || (current < duplicates.size()))
   {
 
@@ -107,12 +92,12 @@ public void run() {
     {
 
 
-        BibtexEntry[] be = (BibtexEntry[]) duplicates.get(current);
+        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 (Util.compareEntriesStrictly(be[0], be[1]) > 1) {
+            if (DuplicateCheck.compareEntriesStrictly(be[0], be[1]) > 1) {
                 if (autoRemoveExactDuplicates) {
                     toRemove.add(be[1]);
                     duplicateCounter++;
@@ -145,15 +130,13 @@ public void run() {
     }
   }
 
-  if (drd != null)
-    drd.dispose();
     final int dupliC = duplicateCounter;
     SwingUtilities.invokeLater(new Runnable() {
         public void run() {
             // Now, do the actual removal:
             if (toRemove.size() > 0) {
-                for (Iterator iterator = toRemove.iterator(); iterator.hasNext();) {
-                    BibtexEntry entry = (BibtexEntry) iterator.next();
+                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));
                 }
@@ -162,11 +145,9 @@ public void run() {
             panel.output(Globals.lang("Duplicate pairs found") + ": " + duplicates.size()
                        +" " +Globals.lang("pairs processed") +": " +dupliC );
 
-            if (ce != null)
-            {
+
                 ce.end();
                 panel.undoManager.addEdit(ce);
-            }
 
         }
 
@@ -183,8 +164,8 @@ class SearcherThread extends Thread {
   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 = Util.isDuplicate(bes[i], bes[j],
-                                      Globals.duplicateThreshold);
+        boolean eq = DuplicateCheck.isDuplicate(bes[i], bes[j]
+        );
 
         // If (suspected) duplicates, add them to the duplicates vector.
         if (eq)
diff --git a/src/java/net/sf/jabref/EntryComparator.java b/src/java/net/sf/jabref/EntryComparator.java
index 3d790c4..bdb671e 100644
--- a/src/java/net/sf/jabref/EntryComparator.java
+++ b/src/java/net/sf/jabref/EntryComparator.java
@@ -38,13 +38,13 @@ import java.util.Comparator;
  * decide the ordering. Consequently, this comparator can never return 0 unless the entries are the same
  * object.
  */
-public class EntryComparator implements Comparator {
+public class EntryComparator implements Comparator<BibtexEntry> {
 
     String sortField;
     boolean descending, binary=false, numeric;
-    Comparator next;
+    Comparator<BibtexEntry> next;
 
-    public EntryComparator(boolean binary, boolean desc, String field, Comparator next) {
+    public EntryComparator(boolean binary, boolean desc, String field, Comparator<BibtexEntry> next) {
         this.binary = binary;
         this.sortField = field;
         this.descending = desc;
@@ -61,19 +61,7 @@ public class EntryComparator implements Comparator {
     }
 
 
-    public int compare(Object o1, Object o2) throws ClassCastException {
-      //if (o1 == null) Util.pr("o1 == null");
-     //if (o2 == null) Util.pr("o2 == null");
-
-    /*  The explicit instanceof test is unnecessary, since the
-         explicit casts below will throw ClassCastException anyway
-         if there is trouble.
-
-     if (!(o1 instanceof BibtexEntry) || !(o2 instanceof BibtexEntry))
-       throw new ClassCastException("Trouble comparing objects: "+o1.toString()+"\n\n"+o2.toString());*/
-
-    BibtexEntry e1 = (BibtexEntry)o1,
-        e2 = (BibtexEntry)o2;
+    public int compare(BibtexEntry e1, BibtexEntry e2) throws ClassCastException {
 
     if (e1 == e2)
         return 0;
@@ -86,9 +74,9 @@ public class EntryComparator implements Comparator {
         // We just separate on set and unset fields:
         if (f1 != null)
             return (f2 == null) ? -1 :
-                    (next != null ? next.compare(o1, o2) : idCompare(e1, e2));
+                    (next != null ? next.compare(e1, e2) : idCompare(e1, e2));
         else
-            return (f2 == null) ? (next != null ? next.compare(o1, o2) : idCompare(e1, e2))
+            return (f2 == null) ? (next != null ? next.compare(e1, e2) : idCompare(e1, e2))
                     : 1;
     }
 
@@ -120,7 +108,7 @@ public class EntryComparator implements Comparator {
         }
     }
 
-    if ((f1 == null) && (f2 == null)) return (next != null ? next.compare(o1, o2) : idCompare(e1, e2));
+    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;
 
@@ -145,7 +133,7 @@ public class EntryComparator implements Comparator {
 	if (result != 0)
 	    return (descending ? result : -result); // Primary sort.
 	if (next != null)
-	    return next.compare(o1, o2); // Secondary sort if existent.
+	    return next.compare(e1, e2); // Secondary sort if existent.
 	else {
 
         return idCompare(e1, e2); // If still equal, we use the unique IDs.
@@ -153,7 +141,7 @@ public class EntryComparator implements Comparator {
     }
 
     private int idCompare(BibtexEntry b1, BibtexEntry b2) {
-    return ((String)(b1.getId())).compareTo((String)(b2.getId()));
+    return ((b1.getId())).compareTo((b2.getId()));
     }
 
 }
diff --git a/src/java/net/sf/jabref/EntryCustomizationDialog.java b/src/java/net/sf/jabref/EntryCustomizationDialog.java
index dcaaf90..0584f9a 100644
--- a/src/java/net/sf/jabref/EntryCustomizationDialog.java
+++ b/src/java/net/sf/jabref/EntryCustomizationDialog.java
@@ -25,11 +25,15 @@ http://www.gnu.org/copyleft/gpl.ja.html
 */
 package net.sf.jabref;
 
-import java.util.*;
+import java.awt.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
 import java.io.*;
+import java.util.Iterator;
+
 import javax.swing.*;
-import java.awt.event.*;
-import java.awt.*;
 
 class EntryCustomizationDialog extends JDialog implements ItemListener
 {
@@ -214,11 +218,11 @@ class EntryCustomizationDialog extends JDialog implements ItemListener
     private void setTypeSelection() {
 	types_cb.removeAllItems();
 	types_cb.addItem("<new>");
-	Iterator i = BibtexEntryType.ALL_TYPES.keySet().iterator();
+	Iterator<String> i = BibtexEntryType.ALL_TYPES.keySet().iterator();
 	BibtexEntryType type;
 	String toSet;
 	while (i.hasNext()) {
-	    type = BibtexEntryType.getType((String)i.next());
+	    type = BibtexEntryType.getType(i.next());
 	    toSet = Util.nCase(type.getName());
 	    if (type instanceof CustomEntryType)
 		toSet = toSet + " *";
@@ -308,7 +312,7 @@ class EntryCustomizationDialog extends JDialog implements ItemListener
 
 			try {
 			    FileWriter out = new FileWriter(file);
-			    Iterator i=BibtexEntryType.ALL_TYPES.keySet().iterator();
+			    Iterator<String> i=BibtexEntryType.ALL_TYPES.keySet().iterator();
 			    while (i.hasNext()) {
 				Object o=BibtexEntryType.ALL_TYPES.get(i.next());
 				if (o instanceof CustomEntryType) {
@@ -383,17 +387,16 @@ class EntryCustomizationDialog extends JDialog implements ItemListener
 	    return;
 	messageLabel.setText(Globals.lang("Updating entries..."));
 	BibtexDatabase base;
-	Iterator iter;
+	
 	for (int i=0; i<parent.tabbedPane.getTabCount(); i++) {
 	    BasePanel bp = (BasePanel)parent.tabbedPane.getComponentAt(i);
 	    boolean anyChanges = false;
 	    bp.entryEditors.remove(typeName);
 	    //bp.rcm.populateTypeMenu(); // Update type menu for change type.
 	    base = bp.database;
-	    iter = base.getKeySet().iterator();
-	    while (iter.hasNext()) {
-		anyChanges = anyChanges |
-		    !(base.getEntryById((String)iter.next())).updateType();
+	   for (BibtexEntry e : base.getEntries()){
+		   anyChanges = anyChanges |
+		    !e.updateType();
 	    }
 	    if (anyChanges) {
 		bp.markBaseChanged();
diff --git a/src/java/net/sf/jabref/EntryEditor.java b/src/java/net/sf/jabref/EntryEditor.java
index 27227a1..05000a5 100644
--- a/src/java/net/sf/jabref/EntryEditor.java
+++ b/src/java/net/sf/jabref/EntryEditor.java
@@ -26,34 +26,47 @@ package net.sf.jabref;
 
 import java.awt.*;
 import java.awt.datatransfer.StringSelection;
-import java.awt.dnd.*;
+import java.awt.dnd.DnDConstants;
+import java.awt.dnd.DropTarget;
 import java.awt.event.*;
-import java.beans.*;
-import java.io.*;
-import java.util.*;
+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.*;
-import javax.swing.event.*;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
 import javax.swing.text.JTextComponent;
 
 import net.sf.jabref.export.LatexFieldFormatter;
-import net.sf.jabref.groups.*;
-import net.sf.jabref.imports.BibtexParser;
-import net.sf.jabref.labelPattern.LabelPatternUtil;
-import net.sf.jabref.undo.*;
 import net.sf.jabref.external.ExternalFilePanel;
 import net.sf.jabref.external.WriteXMPEntryEditorAction;
 import net.sf.jabref.journals.JournalAbbreviations;
-import net.sf.jabref.gui.date.*;
 import net.sf.jabref.gui.AutoCompleter;
+import net.sf.jabref.gui.date.DatePickerButton;
+import net.sf.jabref.imports.BibtexParser;
+import net.sf.jabref.labelPattern.LabelPatternUtil;
+import net.sf.jabref.undo.NamedCompound;
+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. 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.
+ * 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 {
 
@@ -118,14 +131,14 @@ public class EntryEditor extends JPanel implements VetoableChangeListener {
 
     EntryEditor ths = this;
 
-    HashSet contentSelectors = new HashSet();
+    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
 
-    List tabs = new ArrayList();
+    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.
@@ -187,7 +200,7 @@ public class EntryEditor extends JPanel implements VetoableChangeListener {
         tabs.clear();
         String[] fields = entry.getRequiredFields();
 
-        List fieldList = null;
+        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"));
@@ -236,12 +249,10 @@ public class EntryEditor extends JPanel implements VetoableChangeListener {
     private void setupToolBar() {
         tlb = new JToolBar(JToolBar.VERTICAL);
 
-        // tlb.setMargin(new Insets(2,2,2,2));
         tlb.setMargin(new Insets(0, 0, 0, 2));
 
         // The toolbar carries all the key bindings that are valid for the whole
         // window.
-        // tlb.setBackground(GUIGlobals.lightGray);//Color.white);
         ActionMap am = tlb.getActionMap();
         InputMap im = tlb.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
 
@@ -251,13 +262,6 @@ public class EntryEditor extends JPanel implements VetoableChangeListener {
         am.put("store", storeFieldAction);
         im.put(prefs.getKey("Autogenerate BibTeX keys"), "generateKey");
         am.put("generateKey", generateKeyAction);
-        /*
-         * 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("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 entry"), "prev");
         am.put("prev", prevEntryAction);
         im.put(prefs.getKey("Entry editor, next entry"), "next");
@@ -270,25 +274,29 @@ public class EntryEditor extends JPanel implements VetoableChangeListener {
         am.put("help", helpAction);
 
         tlb.setFloatable(false);
+
+        // Create type-label
+        typeLabel = new TypeLabel(entry.getType().getName());
+        
+        // Add actions (and thus buttons)
         tlb.add(closeAction);
 
-        setLabel();
         tlb.add(typeLabel);
 
-        // tlb.addSeparator();
-        // tlb.add(copyKeyAction);
         tlb.addSeparator();
+        
         tlb.add(generateKeyAction);
+
         tlb.add(writeXmp);
+
         tlb.addSeparator();
 
-        // tlb.add(undoAction);
-        // tlb.add(redoAction);
         tlb.add(deleteAction);
         tlb.add(prevEntryAction);
-
         tlb.add(nextEntryAction);
+        
         tlb.addSeparator();
+        
         tlb.add(helpAction);
 
         Component[] comps = tlb.getComponents();
@@ -299,10 +307,6 @@ public class EntryEditor extends JPanel implements VetoableChangeListener {
         add(tlb, BorderLayout.WEST);
     }
 
-    private void setLabel() {
-        typeLabel = new TypeLabel(entry.getType().getName());
-    }
-
     /**
      * Rebuild the field tabs. This is called e.g. when a new content selector
      * has been added.
@@ -542,12 +546,12 @@ public class EntryEditor extends JPanel implements VetoableChangeListener {
         im.put(Globals.prefs.getKey("Previous tab"), "prevtab");
         am.put("prevtab", frame.prevTab);
         try {
-            HashSet keys = new HashSet(ta
+            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(ta
+            keys = new HashSet<AWTKeyStroke>(ta
                 .getFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS));
             keys.clear();
             keys.add(KeyStroke.getKeyStroke("shift pressed TAB"));
@@ -584,7 +588,7 @@ public class EntryEditor extends JPanel implements VetoableChangeListener {
      * Sets the enabled status of all text fields of the entry editor.
      */
     public void setEnabled(boolean enabled) {
-        for (Iterator i = tabs.iterator(); i.hasNext();) {
+        for (Iterator<Object> i = tabs.iterator(); i.hasNext();) {
             Object o = i.next();
             if (o instanceof EntryEditorTab) {
                 ((EntryEditorTab) o).setEnabled(enabled);
@@ -707,7 +711,7 @@ public class EntryEditor extends JPanel implements VetoableChangeListener {
                 throw new Exception("No entries found.");
 
             NamedCompound compound = new NamedCompound(Globals.lang("source edit"));
-            BibtexEntry nu = db.getEntryById((String) db.getKeySet().iterator().next());
+            BibtexEntry nu = db.getEntryById(db.getKeySet().iterator().next());
             String id = entry.getId();
             String
             // oldKey = entry.getCiteKey(),
@@ -722,32 +726,28 @@ public class EntryEditor extends JPanel implements VetoableChangeListener {
                 // First, remove fields that the user have removed.
             }
 
-            Object[] fields = entry.getAllFields();
-
-            for (int i = 0; i < fields.length; i++) {
-                if (BibtexFields.isDisplayableField(fields[i].toString())) {
-                    if (nu.getField(fields[i].toString()) == null) {
-                        compound.addEdit(new UndoableFieldChange(entry, fields[i].toString(), entry
-                            .getField(fields[i].toString()), (Object) null));
-                        entry.clearField(fields[i].toString());
+            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.
-            fields = nu.getAllFields();
-
-            for (int i = 0; i < fields.length; i++) {
-                if (entry.getField(fields[i].toString()) != nu.getField(fields[i].toString())) {
-                    String toSet = (String) nu.getField(fields[i].toString());
+            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, fields[i].toString());
+                    (new LatexFieldFormatter()).format(toSet, field.toString());
 
-                    compound.addEdit(new UndoableFieldChange(entry, fields[i].toString(), entry
-                        .getField(fields[i].toString()), toSet));
-                    entry.setField(fields[i].toString(), toSet);
+                    compound.addEdit(new UndoableFieldChange(entry, field.toString(), entry
+                        .getField(field.toString()), toSet));
+                    entry.setField(field.toString(), toSet);
                     anyChanged = true;
                 }
             }
@@ -813,7 +813,7 @@ public class EntryEditor extends JPanel implements VetoableChangeListener {
 
     public void setField(String fieldName, String newFieldData) {
 
-        for (Iterator i = tabs.iterator(); i.hasNext();) {
+        for (Iterator<Object> i = tabs.iterator(); i.hasNext();) {
             Object o = i.next();
             if (o instanceof EntryEditorTab) {
                 ((EntryEditorTab) o).updateField(fieldName, newFieldData);
@@ -826,7 +826,7 @@ public class EntryEditor extends JPanel implements VetoableChangeListener {
      * Sets all the text areas according to the shown entry.
      */
     public void updateAllFields() {
-        for (Iterator i = tabs.iterator(); i.hasNext();) {
+        for (Iterator<Object> i = tabs.iterator(); i.hasNext();) {
             Object o = i.next();
             if (o instanceof EntryEditorTab) {
                 ((EntryEditorTab) o).setEntry(entry);
@@ -838,7 +838,7 @@ public class EntryEditor extends JPanel implements VetoableChangeListener {
      * Removes the "invalid field" color from all text areas.
      */
     public void validateAllFields() {
-        for (Iterator i = tabs.iterator(); i.hasNext();) {
+        for (Iterator<Object> i = tabs.iterator(); i.hasNext();) {
             Object o = i.next();
             if (o instanceof EntryEditorTab) {
                 ((EntryEditorTab) o).validateAllFields();
@@ -848,8 +848,8 @@ public class EntryEditor extends JPanel implements VetoableChangeListener {
 
     public void updateAllContentSelectors() {
         if (contentSelectors.size() > 0) {
-            for (Iterator i = contentSelectors.iterator(); i.hasNext();)
-                ((FieldContentSelector) i.next()).rebuildComboBox();
+            for (Iterator<FieldContentSelector> i = contentSelectors.iterator(); i.hasNext();)
+                i.next().rebuildComboBox();
         }
     }
 
@@ -869,9 +869,9 @@ public class EntryEditor extends JPanel implements VetoableChangeListener {
         storeFieldAction.actionPerformed(new ActionEvent(source, 0, ""));
     }
 
+
     private class TypeLabel extends JPanel {
         private String label;
-
         public TypeLabel(String type) {
             label = type;
             addMouseListener(new MouseAdapter() {
@@ -883,10 +883,8 @@ public class EntryEditor extends JPanel implements VetoableChangeListener {
                         JPopupMenu typeMenu = new JPopupMenu();
 
                         // typeMenu.addSeparator();
-                        for (Iterator i = BibtexEntryType.ALL_TYPES.keySet().iterator(); i
-                            .hasNext();)
-                            typeMenu.add(new ChangeTypeAction(BibtexEntryType.getType((String) i
-                                .next()), panel));
+                        for (String s: BibtexEntryType.ALL_TYPES.keySet())
+                            typeMenu.add(new ChangeTypeAction(BibtexEntryType.getType(s), panel));
 
                         typeMenu.show(ths, e.getX(), e.getY());
                     }
@@ -898,10 +896,9 @@ public class EntryEditor extends JPanel implements VetoableChangeListener {
             Graphics2D g2 = (Graphics2D) g;
             g2.setColor(GUIGlobals.validFieldColor);
             g2.setFont(GUIGlobals.typeNameFont);
-
             FontMetrics fm = g2.getFontMetrics();
             int width = fm.stringWidth(label);
-            g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
+            //g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
             g2.rotate(-Math.PI / 2, 0, 0);
             g2.drawString(label, -width - 7, 28);
         }
@@ -992,7 +989,7 @@ public class EntryEditor extends JPanel implements VetoableChangeListener {
         }
 
         public void actionPerformed(ActionEvent e) {
-            String s = (String) (entry.getField(BibtexFields.KEY_FIELD));
+            String s = (entry.getField(BibtexFields.KEY_FIELD));
             StringSelection ss = new StringSelection(s);
 
             if (s != null)
@@ -1097,7 +1094,7 @@ public class EntryEditor extends JPanel implements VetoableChangeListener {
                         if (toSet != null)
                             (new LatexFieldFormatter()).format(toSet, fe.getFieldName());
 
-                        Object oldValue = entry.getField(fe.getFieldName());
+                        String oldValue = entry.getField(fe.getFieldName());
 
                         if (toSet != null)
                             entry.setField(fe.getFieldName(), toSet);
@@ -1264,10 +1261,10 @@ public class EntryEditor extends JPanel implements VetoableChangeListener {
 
                 // Store undo information:
                 panel.undoManager.addEdit(new UndoableKeyChange(panel.database, entry.getId(),
-                    (String) oldValue, (String) entry.getField(BibtexFields.KEY_FIELD)));
+                    (String) oldValue, entry.getField(BibtexFields.KEY_FIELD)));
 
                 // here we update the field
-                String bibtexKeyData = (String) entry.getField(BibtexFields.KEY_FIELD);
+                String bibtexKeyData = entry.getField(BibtexFields.KEY_FIELD);
 
                 // set the field named for "bibtexkey"
                 setField(BibtexFields.KEY_FIELD, bibtexKeyData);
@@ -1367,22 +1364,6 @@ public class EntryEditor extends JPanel implements VetoableChangeListener {
         }
     }
 
-    /**
-     * Scans all groups.
-     * 
-     * @return true if the specified entry is contained in any ExplicitGroup,
-     *         false otherwise.
-     */
-    private boolean containedInExplicitGroup(BibtexEntry entry) {
-        AbstractGroup[] matchingGroups = panel.getGroupSelector().getGroupTreeRoot()
-            .getMatchingGroups(entry);
-        for (int i = 0; i < matchingGroups.length; ++i) {
-            if (matchingGroups[i] instanceof ExplicitGroup)
-                return true;
-        }
-        return false;
-    }
-
     private void warnDuplicateBibtexkey() {
         panel.output(Globals.lang("Warning") + ": " + Globals.lang("Duplicate BibTeX key."));
 
diff --git a/src/java/net/sf/jabref/EntryEditorPrefsTab.java b/src/java/net/sf/jabref/EntryEditorPrefsTab.java
index 5eb7da0..58afa8c 100644
--- a/src/java/net/sf/jabref/EntryEditorPrefsTab.java
+++ b/src/java/net/sf/jabref/EntryEditorPrefsTab.java
@@ -1,15 +1,15 @@
 package net.sf.jabref;
 
-import com.jgoodies.forms.layout.FormLayout;
-import com.jgoodies.forms.layout.CellConstraints;
-import com.jgoodies.forms.builder.DefaultFormBuilder;
+import java.awt.BorderLayout;
+import java.awt.Insets;
 
 import javax.swing.*;
-import javax.swing.event.ChangeListener;
 import javax.swing.event.ChangeEvent;
-import java.awt.*;
-import java.util.Iterator;
-import java.text.SimpleDateFormat;
+import javax.swing.event.ChangeListener;
+
+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 {
 
@@ -32,7 +32,6 @@ public class EntryEditorPrefsTab extends JPanel implements PrefsTab {
         disableOnMultiple = new JCheckBox(Globals.lang("Disable entry editor when multiple entries are selected"));
         autoComplete = new JCheckBox(Globals.lang("Enable word/name autocompletion"));
         autoCompFields = new JTextField(40);
-        JPanel general = new JPanel();
         Insets marg = new Insets(0,12,3,0);
         editSource.setMargin(marg);
         defSource.setMargin(marg);
diff --git a/src/java/net/sf/jabref/EntryEditorTab.java b/src/java/net/sf/jabref/EntryEditorTab.java
index c87b923..54bfd94 100644
--- a/src/java/net/sf/jabref/EntryEditorTab.java
+++ b/src/java/net/sf/jabref/EntryEditorTab.java
@@ -24,11 +24,7 @@
  */
 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.*;
 import java.awt.event.FocusEvent;
 import java.awt.event.FocusListener;
 import java.util.HashMap;
@@ -36,26 +32,23 @@ 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.KeyStroke;
+import javax.swing.*;
 import javax.swing.event.DocumentEvent;
 import javax.swing.event.DocumentListener;
 import javax.swing.text.JTextComponent;
 
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-import com.jgoodies.forms.layout.FormLayout;
-import net.sf.jabref.gui.AutoCompleter;
 import net.sf.jabref.gui.AutoCompleteListener;
+import net.sf.jabref.gui.AutoCompleter;
 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.
  * 
- * @author $Author: mortenalver $
- * @version $Revision: 2421 $ ($Date: 2007-10-09 10:27:21 +0200 (Tue, 09 Oct 2007) $)
+ * @author $Author: coezbek $
+ * @version $Revision: 2488 $ ($Date: 2007-11-14 01:25:31 +0100 (Wed, 14 Nov 2007) $)
  * 
  */
 public class EntryEditorTab {
@@ -66,16 +59,14 @@ public class EntryEditorTab {
 
 	private EntryEditor parent;
 
-	private HashMap editors = new HashMap();
+	private HashMap<String, FieldEditor> editors = new HashMap<String, FieldEditor>();
 
 	private FieldEditor activeField = null;
 
-	private Component firstComponent;
-
-	public EntryEditorTab(JabRefFrame frame, BasePanel panel, List fields, EntryEditor parent,
+	public EntryEditorTab(JabRefFrame frame, BasePanel panel, List<String> fields, EntryEditor parent,
                           boolean addKeyField, String name) {
 		if (fields != null)
-			this.fields = (String[]) fields.toArray(new String[0]);
+			this.fields = fields.toArray(new String[0]);
 		else
 			this.fields = new String[] {};
 
@@ -176,7 +167,7 @@ public class EntryEditorTab {
 
         // Add the edit field for Bibtex-key.
 		if (addKeyField) {
-			final FieldTextField tf = new FieldTextField(BibtexFields.KEY_FIELD, (String) parent
+			final FieldTextField tf = new FieldTextField(BibtexFields.KEY_FIELD, parent
 				.getEntry().getField(BibtexFields.KEY_FIELD), true);
 			setupJTextComponent(tf);
 
@@ -238,7 +229,7 @@ public class EntryEditorTab {
 		return activeField;
 	}
 
-	public List getFields() {
+	public List<String> getFields() {
 		return java.util.Arrays.asList(fields);
 	}
 
@@ -264,9 +255,9 @@ public class EntryEditorTab {
 	public void setEntry(BibtexEntry entry) {
 		try {
 			updating = true;
-			Iterator i = editors.values().iterator();
+			Iterator<FieldEditor> i = editors.values().iterator();
 			while (i.hasNext()) {
-				FieldEditor editor = (FieldEditor) i.next();
+				FieldEditor editor = i.next();
 				Object content = entry.getField(editor.getFieldName());
 				editor.setText((content == null) ? "" : content.toString());
 			}
@@ -279,15 +270,15 @@ public class EntryEditorTab {
 	public boolean updateField(String field, String content) {
 		if (!editors.containsKey(field))
 			return false;
-		FieldEditor ed = (FieldEditor) editors.get(field);
+		FieldEditor ed = editors.get(field);
 		ed.setText(content);
 		return true;
 	}
 
 	public void validateAllFields() {
-		for (Iterator i = editors.keySet().iterator(); i.hasNext();) {
-			String field = (String) i.next();
-			FieldEditor ed = (FieldEditor) editors.get(field);
+		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.setBackground(GUIGlobals.activeEditor);
@@ -297,9 +288,9 @@ public class EntryEditorTab {
 	}
 
 	public void setEnabled(boolean enabled) {
-		Iterator i = editors.values().iterator();
+		Iterator<FieldEditor> i = editors.values().iterator();
 		while (i.hasNext()) {
-			FieldEditor editor = (FieldEditor) i.next();
+			FieldEditor editor = i.next();
 			editor.setEnabled(enabled);
 		}
 	}
@@ -343,12 +334,12 @@ public class EntryEditorTab {
 		am.put("prevtab", parent.frame.prevTab);
 
 		try {
-			HashSet keys = new HashSet(component
+			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(component
+			keys = new HashSet<AWTKeyStroke>(component
 				.getFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS));
 			keys.clear();
 			keys.add(KeyStroke.getKeyStroke("shift pressed TAB"));
@@ -424,7 +415,7 @@ public class EntryEditorTab {
 				}
 			}
 			if (!e.isTemporary())
-				parent.updateField((FieldEditor) e.getSource());
+				parent.updateField(e.getSource());
 		}
 	};
 }
diff --git a/src/java/net/sf/jabref/EntryEditorTabList.java b/src/java/net/sf/jabref/EntryEditorTabList.java
index 92191ba..976dafa 100644
--- a/src/java/net/sf/jabref/EntryEditorTabList.java
+++ b/src/java/net/sf/jabref/EntryEditorTabList.java
@@ -1,22 +1,24 @@
 package net.sf.jabref;
 
-import java.util.*;
+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 = null;
-    private List names = null;
+    private List<List<String>> list = null;
+    private List<String> names = null;
 
     public EntryEditorTabList() {
         init();
     }
 
     private void init() {
-        list = new ArrayList();
-        names = new ArrayList();
+        list = new ArrayList<List<String>>();
+        names = new ArrayList<String>();
         int i = 0;
         String name;
         String[] fields;
@@ -25,7 +27,7 @@ public final class EntryEditorTabList {
             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 entry = Arrays.asList(fields);
+                List<String> entry = Arrays.asList(fields);
                 names.add(name);
                 list.add(entry);
                 i++;
@@ -35,7 +37,7 @@ public final class EntryEditorTabList {
             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 entry = Arrays.asList(fields);
+                List<String> entry = Arrays.asList(fields);
                 names.add(name);
                 list.add(entry);
                 i++;
@@ -48,10 +50,10 @@ public final class EntryEditorTabList {
     }
 
     public String getTabName(int tab) {
-        return (String) names.get(tab);
+        return names.get(tab);
     }
 
-    public List getTabFields(int tab) {
-        return (List) list.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 1810a9b..f2e398c 100644
--- a/src/java/net/sf/jabref/EntrySorter.java
+++ b/src/java/net/sf/jabref/EntrySorter.java
@@ -32,21 +32,21 @@ import java.util.*;
 public class EntrySorter implements DatabaseChangeListener {
 
     //TreeSet set;
-    final ArrayList set;
-    Comparator comp;
+    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 entries, Comparator comp) {
+    public EntrySorter(Map<String, BibtexEntry> entries, Comparator<BibtexEntry> comp) {
 	    //set = new TreeSet(comp);
-        set = new ArrayList();
+        set = new ArrayList<BibtexEntry>();
         this.comp = comp;
-        Set keySet = entries.keySet();
+        Set<String> keySet = entries.keySet();
 	    if (keySet != null) {
-    	    Iterator i = keySet.iterator();
+    	    Iterator<String> i = keySet.iterator();
     	    while (i.hasNext()) {
     		    set.add(entries.get(i.next()));
             }
@@ -85,9 +85,9 @@ public class EntrySorter implements DatabaseChangeListener {
             idArray = new String[count];
             entryArray = new BibtexEntry[count];
 	        int piv = 0;
-	        for (Iterator i=set.iterator(); i.hasNext();) {
+	        for (Iterator<BibtexEntry> i=set.iterator(); i.hasNext();) {
 	            //        for (int i=0; i<idArray.length; i++) {
-    	        BibtexEntry entry = (BibtexEntry)i.next();
+    	        BibtexEntry entry = i.next();
     	        idArray[piv] = entry.getId();
     	        entryArray[piv] = entry;
     	        piv++;
@@ -150,39 +150,4 @@ public class EntrySorter implements DatabaseChangeListener {
     	}
 
     }
-
-    /** Add an entry to the sorted set, making sure it is put in the right position
-     *
-     * @param entry The entry to add
-     */
-    private void addEntry(BibtexEntry entry) {
-        int pos = -Collections.binarySearch(set, entry, comp) - 1;
-        set.add(pos, entry);
-    }
-
-/* Old version, from when set was a TreeSet.
-
-    public void databaseChanged(DatabaseChangeEvent e) {
-    synchronized(set) {
-        if (e.getType() == DatabaseChangeEvent.ADDED_ENTRY) {
-            set.add(e.getEntry());
-        }
-        else if (e.getType() == DatabaseChangeEvent.REMOVED_ENTRY) {
-            set.remove(e.getEntry());
-        }
-        else if (e.getType() == DatabaseChangeEvent.CHANGING_ENTRY) {
-            set.remove(e.getEntry());
-            changing = true;
-        }
-        else if (e.getType() == DatabaseChangeEvent.CHANGED_ENTRY) {
-            // Remove and re-add the entry, to make sure it is in the
-            // correct sort position.
-            set.add(e.getEntry());
-            changing = false;
-        }
-
-    }
-
-}
-*/
 }
diff --git a/src/java/net/sf/jabref/EntryTypeDialog.java b/src/java/net/sf/jabref/EntryTypeDialog.java
index a5ea89f..4397126 100644
--- a/src/java/net/sf/jabref/EntryTypeDialog.java
+++ b/src/java/net/sf/jabref/EntryTypeDialog.java
@@ -27,12 +27,18 @@ http://www.gnu.org/copyleft/gpl.ja.html
 
 package net.sf.jabref;
 
-import com.jgoodies.forms.builder.ButtonBarBuilder;
+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 java.awt.event.*;
-import java.awt.*;
-import java.util.*;
+
+import com.jgoodies.forms.builder.ButtonBarBuilder;
 
 public class EntryTypeDialog extends JDialog implements ActionListener {
 
@@ -45,18 +51,18 @@ public class EntryTypeDialog extends JDialog implements ActionListener {
     CancelAction cancelAction = new CancelAction();
     private final int COLNUM = 3;
 
-    class TypeButton extends JButton implements Comparable {
-	BibtexEntryType type;
-	public TypeButton(String label, BibtexEntryType type_) {
-	    super(label);
-	    type = type_;
-	}
-	public int compareTo(Object o) {
-	    if (! (o instanceof TypeButton))
-		throw new ClassCastException();
-	    return type.getName().compareTo(((TypeButton)o).type.getName());
+    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.
@@ -100,9 +106,7 @@ public class EntryTypeDialog extends JDialog implements ActionListener {
 	con.insets = new Insets(4, 4, 4, 4);
 	int col = 0;
 
-	Iterator iter = BibtexEntryType.ALL_TYPES.keySet().iterator();
-	while (iter.hasNext()) {
-	    BibtexEntryType tp = BibtexEntryType.getType((String)iter.next());
+	for (BibtexEntryType tp : BibtexEntryType.ALL_TYPES.values()){
             //System.out.println(tp.getName()+"\n"+tp);
 	    TypeButton b = new TypeButton(Util.nCase(tp.getName()), tp);
 	    b.setAlignmentX(SwingConstants.LEFT);
diff --git a/src/java/net/sf/jabref/ExternalTab.java b/src/java/net/sf/jabref/ExternalTab.java
index 10c97ca..a544ad5 100644
--- a/src/java/net/sf/jabref/ExternalTab.java
+++ b/src/java/net/sf/jabref/ExternalTab.java
@@ -3,14 +3,13 @@ package net.sf.jabref;
 import java.awt.BorderLayout;
 import java.awt.event.ItemEvent;
 import java.awt.event.ItemListener;
-import java.awt.event.ActionListener;
-import java.awt.event.ActionEvent;
 
 import javax.swing.*;
 
+import net.sf.jabref.external.ExternalFileTypeEditor;
+
 import com.jgoodies.forms.builder.DefaultFormBuilder;
 import com.jgoodies.forms.layout.FormLayout;
-import net.sf.jabref.external.ExternalFileTypeEditor;
 
 public class ExternalTab extends JPanel implements PrefsTab {
 
@@ -82,7 +81,14 @@ public class ExternalTab extends JPanel implements PrefsTab {
 		builder.appendSeparator(Globals.lang("External file links"));
 		JPanel pan = new JPanel();
 		builder.append(pan);
-		JLabel lab = new JLabel(Globals.lang("Main %0 directory", GUIGlobals.FILE_FIELD) + ":");
+		/**
+		 * 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);
diff --git a/src/java/net/sf/jabref/FieldComparator.java b/src/java/net/sf/jabref/FieldComparator.java
index 6491432..c976b9c 100644
--- a/src/java/net/sf/jabref/FieldComparator.java
+++ b/src/java/net/sf/jabref/FieldComparator.java
@@ -13,13 +13,13 @@ import java.util.Comparator;
  * 
  * Current Version:
  * 
- * @author $Author: mortenalver $
- * @version $Revision: 2375 $ ($Date: 2007-09-19 21:40:38 +0200 (Wed, 19 Sep 2007) $)
+ * @author $Author: coezbek $
+ * @version $Revision: 2488 $ ($Date: 2007-11-14 01:25:31 +0100 (Wed, 14 Nov 2007) $)
  * 
  * TODO: Testcases
  * 
  */
-public class FieldComparator implements Comparator {
+public class FieldComparator implements Comparator<BibtexEntry> {
 
 	String field;
 
@@ -42,9 +42,7 @@ public class FieldComparator implements Comparator {
         isNumeric = BibtexFields.isNumeric(field);
     }
 
-	public int compare(Object o1, Object o2) {
-		BibtexEntry e1 = (BibtexEntry) o1, e2 = (BibtexEntry) o2;
-
+	public int compare(BibtexEntry e1, BibtexEntry e2) {
 		Object f1, f2;
 
 		if (isTypeHeader) {
@@ -77,10 +75,8 @@ public class FieldComparator implements Comparator {
 
 		// Now we now that both f1 and f2 are != null
 		if (isNameField) {
-			if (f1 != null)
-				f1 = AuthorList.fixAuthorForAlphabetization((String) f1);
-			if (f2 != null)
-				f2 = AuthorList.fixAuthorForAlphabetization((String) f2);
+			f1 = AuthorList.fixAuthorForAlphabetization((String) f1);
+			f2 = AuthorList.fixAuthorForAlphabetization((String) f2);
 		} else if (isYearField) {
 			/*
 			 * [ 1285977 ] Impossible to properly sort a numeric field
@@ -100,32 +96,29 @@ public class FieldComparator implements Comparator {
 		}
 
         if (isNumeric) {
-            boolean numeric1 = false, numeric2 = false;
             Integer i1 = null, i2 = null;
             try {
                 i1 = Integer.parseInt((String)f1);
-                numeric1 = true;
             } catch (NumberFormatException ex) {
                 // Parsing failed.
             }
 
             try {
                 i2 = Integer.parseInt((String)f2);
-                numeric2 = true;
             } catch (NumberFormatException ex) {
                 // Parsing failed.
             }
 
-            if (numeric1 && numeric2) {
+            if (i2 != null && i1 != null) {
                 // Ok, parsing was successful. Update f1 and f2:
                 f1 = i1;
                 f2 = i2;
-            } else if (numeric1) {
+            } 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 (numeric2) {
+            } else if (i2 != null) {
                 // The second one was parseable, but not the first one.
                 // This means we consider one > two
                 f2 = i2;
diff --git a/src/java/net/sf/jabref/FieldComparatorStack.java b/src/java/net/sf/jabref/FieldComparatorStack.java
index ec4d3ef..deb3572 100644
--- a/src/java/net/sf/jabref/FieldComparatorStack.java
+++ b/src/java/net/sf/jabref/FieldComparatorStack.java
@@ -2,28 +2,26 @@ package net.sf.jabref;
 
 import java.util.Comparator;
 import java.util.List;
-import java.util.Iterator;
 
 /**
  * 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 implements Comparator {
+public class FieldComparatorStack<T> implements Comparator<T> {
 
-    List comparators;
+    List<? extends Comparator<? super T>> comparators;
 
-    public FieldComparatorStack(List comparators) {
+    public FieldComparatorStack(List<? extends Comparator<? super T>> comparators) {
         this.comparators = comparators;
     }
 
-    public int compare(Object o1, Object o2) {
-        for (Iterator i=comparators.iterator(); i.hasNext();) {
-            int res = ((Comparator)i.next()).compare(o1, o2);
+    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 a2892a2..497df03 100644
--- a/src/java/net/sf/jabref/FieldContentSelector.java
+++ b/src/java/net/sf/jabref/FieldContentSelector.java
@@ -26,12 +26,7 @@
  */
 package net.sf.jabref;
 
-import java.awt.Dialog;
-import java.awt.Dimension;
-import java.awt.Frame;
-import java.awt.GridBagConstraints;
-import java.awt.GridBagLayout;
-import java.awt.Window;
+import java.awt.*;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 import java.util.Iterator;
@@ -49,7 +44,7 @@ import com.jgoodies.looks.Options;
  * Used to manage keywords and authors for instance.
  * 
  * @author $Author: mortenalver $
- * @version $Revision: 2166 $ ($Date: 2007-07-08 19:03:50 +0200 (Sun, 08 Jul 2007) $)
+ * @version $Revision: 2291 $ ($Date: 2007-08-23 23:18:12 +0200 (Thu, 23 Aug 2007) $)
  * 
  */
 public class FieldContentSelector extends JComponent {
@@ -223,9 +218,9 @@ public class FieldContentSelector extends JComponent {
 
 		// TODO: CO - What for?
 		comboBox.addItem("");
-		Vector items = metaData.getData(Globals.SELECTOR_META_PREFIX + editor.getFieldName());
+		Vector<String> items = metaData.getData(Globals.SELECTOR_META_PREFIX + editor.getFieldName());
 		if (items != null) {
-			Iterator i = items.iterator();
+			Iterator<String> i = items.iterator();
 			while (i.hasNext())
 				comboBox.addItem(i.next());
 		}
diff --git a/src/java/net/sf/jabref/FieldEditorFocusListener.java b/src/java/net/sf/jabref/FieldEditorFocusListener.java
index 9b92dd4..d8e3e3b 100644
--- a/src/java/net/sf/jabref/FieldEditorFocusListener.java
+++ b/src/java/net/sf/jabref/FieldEditorFocusListener.java
@@ -1,8 +1,9 @@
 package net.sf.jabref;
 
-import java.awt.event.FocusListener;
+import java.awt.Color;
+import java.awt.Component;
 import java.awt.event.FocusEvent;
-import java.awt.*;
+import java.awt.event.FocusListener;
 
 
 /**
diff --git a/src/java/net/sf/jabref/FieldNameLabel.java b/src/java/net/sf/jabref/FieldNameLabel.java
index 7d46b43..d969261 100644
--- a/src/java/net/sf/jabref/FieldNameLabel.java
+++ b/src/java/net/sf/jabref/FieldNameLabel.java
@@ -1,9 +1,12 @@
 package net.sf.jabref;
 
-import javax.swing.JLabel;
-import javax.swing.Icon;
-import java.awt.*;
+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 {
 
diff --git a/src/java/net/sf/jabref/FieldTextArea.java b/src/java/net/sf/jabref/FieldTextArea.java
index 0228a40..dfae138 100644
--- a/src/java/net/sf/jabref/FieldTextArea.java
+++ b/src/java/net/sf/jabref/FieldTextArea.java
@@ -26,11 +26,7 @@
  */
 package net.sf.jabref;
 
-import java.awt.Color;
-import java.awt.Dimension;
-import java.awt.Graphics;
-import java.awt.Graphics2D;
-import java.awt.RenderingHints;
+import java.awt.*;
 import java.util.regex.Pattern;
 
 import javax.swing.JComponent;
@@ -43,7 +39,7 @@ import javax.swing.JTextArea;
  * multi-line input.
  * 
  * @author $Author: mortenalver $
- * @version $Revision: 2173 $ ($Date: 2007-07-10 11:20:11 +0200 (Tue, 10 Jul 2007) $)
+ * @version $Revision: 2291 $ ($Date: 2007-08-23 23:18:12 +0200 (Thu, 23 Aug 2007) $)
  * 
  */
 public class FieldTextArea extends JTextArea implements FieldEditor {
diff --git a/src/java/net/sf/jabref/FieldTextField.java b/src/java/net/sf/jabref/FieldTextField.java
index 9f23645..93d1fa7 100644
--- a/src/java/net/sf/jabref/FieldTextField.java
+++ b/src/java/net/sf/jabref/FieldTextField.java
@@ -27,9 +27,6 @@
 package net.sf.jabref;
 
 import java.awt.Color;
-import java.awt.Graphics;
-import java.awt.Graphics2D;
-import java.awt.RenderingHints;
 
 import javax.swing.JComponent;
 import javax.swing.JLabel;
@@ -41,8 +38,6 @@ public class FieldTextField extends JTextField implements FieldEditor {
 
 	protected JLabel label;
 
-	private boolean antialias = Globals.prefs.getBoolean("antialias");
-
 	public FieldTextField(String fieldName_, String content, boolean changeColorOnFocus) {
 		super(content);
 
diff --git a/src/java/net/sf/jabref/FieldTextMenu.java b/src/java/net/sf/jabref/FieldTextMenu.java
index 60f6f79..b08ab33 100644
--- a/src/java/net/sf/jabref/FieldTextMenu.java
+++ b/src/java/net/sf/jabref/FieldTextMenu.java
@@ -35,13 +35,18 @@
 
 package net.sf.jabref ;
 
-import java.awt.* ;
-import java.awt.event.*;
-import javax.swing.*;
+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 java.net.*;
-import java.awt.datatransfer.*;
-import net.sf.jabref.util.*;
+
+import net.sf.jabref.util.CaseChangeMenu;
 
 public class FieldTextMenu implements MouseListener
 {
@@ -160,12 +165,8 @@ public class FieldTextMenu implements MouseListener
 
     public void actionPerformed(ActionEvent e)
     {
-      Clipboard systemClip = Toolkit.getDefaultToolkit().getSystemClipboard();
-
       try
       {
-//        String data = ( String ) systemClip.getContents( null ).getTransferData(
-//            DataFlavor.stringFlavor ) ;
         String data = ClipBoardManager.clipBoard.getClipboardContents() ;
         if (data != null)
           if (data.length() > 0)
diff --git a/src/java/net/sf/jabref/FileHistory.java b/src/java/net/sf/jabref/FileHistory.java
index 00ef600..51b6ced 100644
--- a/src/java/net/sf/jabref/FileHistory.java
+++ b/src/java/net/sf/jabref/FileHistory.java
@@ -1,15 +1,19 @@
 package net.sf.jabref;
 
-import java.awt.event.*;
-import javax.swing.*;
-import java.util.LinkedList;
-import java.util.Iterator;
+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 history = new LinkedList();
+    LinkedList<String> history = new LinkedList<String>();
     JabRefFrame frame;
 
     public FileHistory(JabRefPreferences prefs, JabRefFrame frame) {
@@ -43,7 +47,7 @@ public class FileHistory extends JMenu implements ActionListener {
     public void newFile(String filename) {
         int i = 0;
         while (i < history.size()) {
-            if (((String) history.get(i)).equals(filename))
+            if (history.get(i).equals(filename))
                 history.remove(i--);
             i++;
         }
@@ -58,10 +62,10 @@ public class FileHistory extends JMenu implements ActionListener {
 
     private void setItems() {
         removeAll();
-        Iterator i = history.iterator();
+        Iterator<String> i = history.iterator();
         int count = 1;
         while (i.hasNext()) {
-            addItem((String) i.next(), count++);
+            addItem(i.next(), count++);
         }
     }
 
@@ -78,7 +82,7 @@ public class FileHistory extends JMenu implements ActionListener {
     private void removeItem(String filename) {
         int i=0;
         while (i < history.size()) {
-            if (((String) history.get(i)).equals(filename)) {
+            if (history.get(i).equals(filename)) {
                 history.remove(i);
                 setItems();
                 return;
@@ -91,7 +95,7 @@ public class FileHistory extends JMenu implements ActionListener {
         if (history.size() > 0) {
             String[] names = new String[history.size()];
             for (int i = 0; i < names.length; i++)
-                names[i] = (String) history.get(i);
+                names[i] = history.get(i);
             prefs.putStringArray("recentFiles", names);
         }
     }
diff --git a/src/java/net/sf/jabref/FileTab.java b/src/java/net/sf/jabref/FileTab.java
index f661e84..0b83e34 100644
--- a/src/java/net/sf/jabref/FileTab.java
+++ b/src/java/net/sf/jabref/FileTab.java
@@ -1,13 +1,18 @@
 package net.sf.jabref;
 
+import java.awt.BorderLayout;
+
+import javax.swing.BorderFactory;
+import javax.swing.ButtonGroup;
+import javax.swing.JCheckBox;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JRadioButton;
+import javax.swing.JTextField;
+
 import com.jgoodies.forms.builder.DefaultFormBuilder;
-import com.jgoodies.forms.layout.CellConstraints;
 import com.jgoodies.forms.layout.FormLayout;
 
-import javax.swing.*;
-import java.text.SimpleDateFormat;
-import java.awt.*;
-
 /**
  * Preferences tab for file options. These options were moved out from GeneralTab to
  * resolve the space issue.
diff --git a/src/java/net/sf/jabref/FontSelectorDialog.java b/src/java/net/sf/jabref/FontSelectorDialog.java
index 0dfd861..c46cf57 100644
--- a/src/java/net/sf/jabref/FontSelectorDialog.java
+++ b/src/java/net/sf/jabref/FontSelectorDialog.java
@@ -33,20 +33,27 @@ modified slightly by nizar batada for JabRef
  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  */
 
-import java.awt.event.*;
 import java.awt.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
 import java.util.Vector;
-import javax.swing.border.*;
-import javax.swing.event.*;
+
 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: FontSelectorDialog.java 1529 2006-04-26 08:48:34Z kiar $
+ * @version $Id: FontSelectorDialog.java 2268 2007-08-19 23:37:05Z coezbek $
  * <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
  *
@@ -83,7 +90,9 @@ import javax.swing.*;
 
 class FontSelector extends JButton {
 
-        static final String PLAIN="plain";
+	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";
@@ -150,15 +159,11 @@ class FontSelector extends JButton {
 
 ///////////////////////////////////////////////////////////////////////////////
 
-/**
- *
- */
 public class FontSelectorDialog extends JDialog {
 
-        /**
-         *
-         */
-            static final String PLAIN="plain";
+	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";
@@ -217,7 +222,8 @@ public class FontSelectorDialog extends JDialog {
                    |  working on introducing this in the table view.      |
                    -------------------------------------------------------- */
                 preview = new JLabel(Globals.lang("Font Preview")) {
-                        public void paint(Graphics g) {
+					private static final long serialVersionUID = -4191591634265068189L;
+						public void paint(Graphics g) {
                             Graphics2D g2 = (Graphics2D)g;
                             g2.setRenderingHint
                                 (RenderingHints.KEY_ANTIALIASING,
@@ -310,11 +316,11 @@ public class FontSelectorDialog extends JDialog {
         // GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames()
         private String[] getFontList(){
                 try{
-                        Class GEClass = Class.forName("java.awt.GraphicsEnvironment");
-                        Object GEInstance = GEClass.getMethod("getLocalGraphicsEnvironment", null).invoke(null, null);
+                        Class<?> GEClass = Class.forName("java.awt.GraphicsEnvironment");
+                        Object GEInstance = GEClass.getMethod("getLocalGraphicsEnvironment").invoke(null);
 
-                        String[] nameArray = (String[])GEClass.getMethod("getAvailableFontFamilyNames", null).invoke(GEInstance, null);
-                        Vector nameVector = new Vector(nameArray.length);
+                        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++){
diff --git a/src/java/net/sf/jabref/GUIGlobals.java b/src/java/net/sf/jabref/GUIGlobals.java
index c5ab999..ccbbac9 100644
--- a/src/java/net/sf/jabref/GUIGlobals.java
+++ b/src/java/net/sf/jabref/GUIGlobals.java
@@ -30,15 +30,20 @@
 
 package net.sf.jabref;
 
-import java.awt.*;
-import java.util.*;
-//import java.util.List;
-import java.net.URL;
-import java.net.MalformedURLException;
-import javax.swing.*;
-import java.io.InputStream;
-import java.io.IOException;
+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.HashMap;
+import java.util.Map;
+import java.util.Collections;
+
+import javax.swing.ImageIcon;
+import javax.swing.JLabel;
 
 /**
  * Static variables for graphics files and keyboard shortcuts.
@@ -48,7 +53,6 @@ public class GUIGlobals {
 	// Frame titles.
 	public static String
 	frameTitle = "JabRef",
-//	version = "1.8b",
 	version = Globals.VERSION,
 	stringsTitle = "Strings for database",
 	//untitledStringsTitle = stringsTitle + Globals.lang("untitled"),
@@ -58,10 +62,12 @@ public class GUIGlobals {
 	NUMBER_COL = "#",
 	encPrefix = "Encoding: ", // Part of the signature in written bib files.
 	linuxDefaultLookAndFeel = "com.jgoodies.looks.plastic.Plastic3DLookAndFeel",
-	//"com.shfarr.ui.plaf.fh.FhLookAndFeel",
-//	"net.sourceforge.mlf.metouia.MetouiaLookAndFeel",
-//	"org.compiere.plaf.CompiereLookAndFeel",
-	windowsDefaultLookAndFeel = "com.jgoodies.looks.windows.WindowsLookAndFeel";
+
+    //linuxDefaultLookAndFeel = "com.sun.java.swing.plaf.gtk.GTKLookAndFeel",
+    //linuxDefaultLookAndFeel = "org.jvnet.substance.skin.SubstanceCremeCoffeeLookAndFeel",
+    //linuxDefaultLookAndFeel = "org.jvnet.substance.skin.SubstanceNebulaLookAndFeel",
+    //linuxDefaultLookAndFeel = "org.jvnet.substance.skin.SubstanceBusinessLookAndFeel",
+    windowsDefaultLookAndFeel = "com.jgoodies.looks.windows.WindowsLookAndFeel";
 
 	public static Font CURRENTFONT,
 	typeNameFont,
@@ -110,11 +116,11 @@ public class GUIGlobals {
 	helpPre = "/help/",
 	fontPath = "/images/font/";
 
-	static HashMap tableIcons = new HashMap(); // Contains table icon mappings. Set up
+	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 iconMap;
+	static HashMap<String, String> iconMap;
 
 	public static JLabel getTableIcon(String fieldType) {
 		Object o = tableIcons.get(fieldType);
@@ -144,7 +150,6 @@ public class GUIGlobals {
 	medlineHelp = "MedlineHelp.html",
 	citeSeerHelp = "CiteSeerHelp.html",
 	generalFieldsHelp = "GeneralFields.html",
-//	searchHelp = "SearchHelp.html",
 	aboutPage = "About.html",
 	shortPlainImport="ShortPlainImport.html",
 	importInspectionHelp = "ImportInspectionDialog.html",
@@ -224,10 +229,10 @@ public class GUIGlobals {
 	IMPORT_DIALOG_COL_2_WIDTH = 200,
 	IMPORT_DIALOG_COL_3_WIDTH = 200;
 
-	public static final Map LANGUAGES;
+	public static final Map<String, String> LANGUAGES;
 
 	static {
-		LANGUAGES = new HashMap();
+		LANGUAGES = new HashMap<String, String>();
 		// LANGUAGES contains mappings for supported languages.
 		LANGUAGES.put("English", "en");
 		LANGUAGES.put("Deutsch", "de");
@@ -235,7 +240,8 @@ public class GUIGlobals {
 		LANGUAGES.put("Italiano", "it");
         LANGUAGES.put("Nederlands", "du");
         LANGUAGES.put("Norsk", "no");
-        //LANGUAGES.put("Español", "es");
+        LANGUAGES.put("Español", "es");
+        LANGUAGES.put("Polski", "pl");
 	}
 
 	/**
@@ -286,14 +292,13 @@ public class GUIGlobals {
 	 */
 	public static URL getIconUrl(String name) {
         if (iconMap.containsKey(name)) {
-			String path = (String)iconMap.get(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) {
-					url = null;
 				}
 				if (url == null)
 					System.err.println(Globals.lang("Could not find image file")+" '"+path+"'");
@@ -317,10 +322,10 @@ public class GUIGlobals {
      * Get a Map of all application icons mapped from their keys.
      * @return A Map containing all icons used in the application.
      */
-    public static Map getAllIcons() {
+    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.
@@ -331,8 +336,8 @@ public class GUIGlobals {
 	 * @return A HashMap containing all key-value pairs found.
 	 * @throws IOException
 	 */
-	private static HashMap readIconThemeFile(URL file, String prefix) throws IOException {
-		HashMap map = new HashMap();
+	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();
diff --git a/src/java/net/sf/jabref/GeneralRenderer.java b/src/java/net/sf/jabref/GeneralRenderer.java
index bc8ab02..6c7ebe8 100644
--- a/src/java/net/sf/jabref/GeneralRenderer.java
+++ b/src/java/net/sf/jabref/GeneralRenderer.java
@@ -1,8 +1,10 @@
 package net.sf.jabref;
 
+import java.awt.Color;
+
+import javax.swing.Icon;
+import javax.swing.JLabel;
 import javax.swing.table.DefaultTableCellRenderer;
-import javax.swing.*;
-import java.awt.*;
 
 /**
  * Renderer for table cells, which supports both Icons, JLabels and plain text.
diff --git a/src/java/net/sf/jabref/GeneralTab.java b/src/java/net/sf/jabref/GeneralTab.java
index 6adc82e..6e1b7b0 100644
--- a/src/java/net/sf/jabref/GeneralTab.java
+++ b/src/java/net/sf/jabref/GeneralTab.java
@@ -1,21 +1,30 @@
 package net.sf.jabref;
 
-import javax.swing.*;
-import javax.swing.event.ChangeListener;
-import javax.swing.event.ChangeEvent;
-import java.awt.*;
-import java.util.Iterator;
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.Insets;
 import java.text.SimpleDateFormat;
 
-import com.jgoodies.forms.layout.*;
-import com.jgoodies.forms.builder.*;
+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,
-    confirmDelete, allowEditing, /*preserveFormatting, */useImportInspector,
+    confirmDelete, allowEditing, memoryStick, useImportInspector,
     useImportInspectorForSingle, inspectionWarnDupli, useTimeStamp, overwriteTimeStamp;
 
     private JTextField defOwnerField, timeStampFormat, timeStampField;
@@ -33,6 +42,7 @@ public class GeneralTab extends JPanel implements PrefsTab {
 
         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") + ":");
@@ -50,7 +60,6 @@ public class GeneralTab extends JPanel implements PrefsTab {
 
         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.")); 
-        JPanel general = new JPanel();
         defOwnerField = new JTextField();
         timeStampFormat = new JTextField();
         timeStampField = new JTextField();
@@ -64,6 +73,7 @@ public class GeneralTab extends JPanel implements PrefsTab {
         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() {
@@ -71,13 +81,14 @@ public class GeneralTab extends JPanel implements PrefsTab {
                 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);
@@ -96,14 +107,14 @@ public class GeneralTab extends JPanel implements PrefsTab {
         builder.nextLine();
         builder.append(keyEmptyWarningDialog, 13);
         builder.nextLine();
+        builder.append(memoryStick, 13);
+        
         // Create a new panel with its own FormLayout for the last items:
-        FormLayout layout2 = new FormLayout
-                ("left:pref, 8dlu, fill:50dlu, 4dlu, left:pref, 4dlu, left:pref, 4dlu, fill:50dlu, 4dlu, fill:pref", "");
-        DefaultFormBuilder builder2 = new DefaultFormBuilder(layout2);
         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));
@@ -115,6 +126,7 @@ public class GeneralTab extends JPanel implements PrefsTab {
         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));
@@ -129,9 +141,6 @@ public class GeneralTab extends JPanel implements PrefsTab {
         builder.append(lab, 3);
         builder.append(encodings);
 
-        //builder.add(builder2.getPanel(), cc.xyw(2, 15, 3));
-
-
         JPanel pan = builder.getPanel();
         pan.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
         add(pan, BorderLayout.CENTER);
@@ -148,6 +157,7 @@ public class GeneralTab extends JPanel implements PrefsTab {
         overwriteTimeStamp.setSelected(_prefs.getBoolean("overwriteTimeStamp"));
         keyDuplicateWarningDialog.setSelected(_prefs.getBoolean("dialogWarningForDuplicateKey"));
         keyEmptyWarningDialog.setSelected(_prefs.getBoolean("dialogWarningForEmptyKey"));
+        memoryStick.setSelected(_prefs.getBoolean("memoryStickMode"));
         confirmDelete.setSelected(_prefs.getBoolean("confirmDelete"));
         defOwnerField.setText(_prefs.get("defaultOwner"));
         timeStampFormat.setText(_prefs.get("timeStampFormat"));
@@ -159,18 +169,18 @@ public class GeneralTab extends JPanel implements PrefsTab {
         inspectionWarnDupli.setEnabled(useImportInspector.isSelected());
 
         String enc = _prefs.get("defaultEncoding");
-        outer: for (int i = 0; i < Globals.ENCODINGS.length; i++) {
+        for (int i = 0; i < Globals.ENCODINGS.length; i++) {
             if (Globals.ENCODINGS[i].equalsIgnoreCase(enc)) {
                 encodings.setSelectedIndex(i);
-                break outer;
+                break;
             }
         }
         String oldLan = _prefs.get("language");
 
         // Language choice
         int ilk = 0;
-        for (Iterator i = GUIGlobals.LANGUAGES.keySet().iterator(); i.hasNext();) {
-            if (GUIGlobals.LANGUAGES.get(i.next()).equals(oldLan)) {
+        for (String lan : GUIGlobals.LANGUAGES.values()){
+            if (lan.equals(oldLan)) {
                 language.setSelectedIndex(ilk);
             }
             ilk++;
@@ -185,6 +195,13 @@ public class GeneralTab extends JPanel implements PrefsTab {
         _prefs.putBoolean("overwriteTimeStamp", overwriteTimeStamp.isSelected());
         _prefs.putBoolean("dialogWarningForDuplicateKey", keyDuplicateWarningDialog.isSelected());
         _prefs.putBoolean("dialogWarningForEmptyKey", keyEmptyWarningDialog.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());
@@ -207,15 +224,12 @@ public class GeneralTab extends JPanel implements PrefsTab {
                     + "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:
-            SimpleDateFormat sdf = new SimpleDateFormat(timeStampFormat.getText());
+            new SimpleDateFormat(timeStampFormat.getText());
 
         } catch (IllegalArgumentException ex2) {
             JOptionPane.showMessageDialog
diff --git a/src/java/net/sf/jabref/GlobalFocusListener.java b/src/java/net/sf/jabref/GlobalFocusListener.java
index eb32a82..d2144a5 100644
--- a/src/java/net/sf/jabref/GlobalFocusListener.java
+++ b/src/java/net/sf/jabref/GlobalFocusListener.java
@@ -1,9 +1,10 @@
 package net.sf.jabref;
 
-import java.awt.event.FocusListener;
+import java.awt.Component;
 import java.awt.event.FocusEvent;
-import java.awt.*;
-import javax.swing.*;
+import java.awt.event.FocusListener;
+
+import javax.swing.JComponent;
 
 public class GlobalFocusListener implements FocusListener {
   Component focused = null;
diff --git a/src/java/net/sf/jabref/Globals.java b/src/java/net/sf/jabref/Globals.java
index 82b437b..541731a 100644
--- a/src/java/net/sf/jabref/Globals.java
+++ b/src/java/net/sf/jabref/Globals.java
@@ -25,20 +25,34 @@
  */
 package net.sf.jabref;
 
-import java.io.*;
+import java.awt.FileDialog;
+import java.awt.Toolkit;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FilenameFilter;
 import java.nio.charset.Charset;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
-import java.util.logging.*;
+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.Handler;
+import java.util.logging.LogRecord;
+import java.util.logging.Logger;
 
-import java.awt.*;
-import javax.swing.*;
+import javax.swing.JComponent;
+import javax.swing.JFileChooser;
+import javax.swing.JFrame;
 
-import net.sf.jabref.collab.*;
-import net.sf.jabref.imports.*;
-import net.sf.jabref.util.*;
+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;
 
 public class Globals {
 
@@ -81,12 +95,11 @@ public class Globals {
 		errorConsole = ErrorConsole.getInstance();
 	}
 
-	// public static ResourceBundle preferences =
-	// ResourceBundle.getBundle("resource/defaultPrefs");
 	public static Locale locale;
 
 	public static final String FILETYPE_PREFS_EXT = "_dir", SELECTOR_META_PREFIX = "selector_",
-		LAYOUT_PREFIX = "/resource/layout/", MAC = "Mac OS X",
+        PROTECTED_FLAG_META = "protectedFlag",
+        LAYOUT_PREFIX = "/resource/layout/", MAC = "Mac OS X",
 		DOI_LOOKUP_PREFIX = "http://dx.doi.org/", NONE = "_non__",
 		FORMATTER_PACKAGE = "net.sf.jabref.export.layout.format.";
 
@@ -133,7 +146,6 @@ public class Globals {
 			}
 		}
 		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");
@@ -185,16 +197,18 @@ public class Globals {
     // TODO: Doesn't work in Java 5:
     // private static Logger logger = Logger.getLogger(Logger.GLOBAL_LOGGER_NAME);
     private static Logger logger = Logger.global;
+
     /**
 	 * 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";
 
-	// "Fieldname" to indicate that a field should be treated as a bibtex
-	// string. Used when writing database to file.
-
 	public static void logger(String s) {
 		logger.info(s);
 	}
@@ -203,21 +217,20 @@ public class Globals {
 		logger.setLevel(java.util.logging.Level.SEVERE);
 	}
 
-	// should be only called once
+	/**
+	 * Should be only called once
+	 */
 	public static void turnOnConsoleLogging() {
 		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();
-		/*
-		 * try { handler = new FileHandler(logfile); // this will overwrite }
-		 * catch (IOException e) { //can't open log file so use console
-		 * e.printStackTrace(); }
-		 */
 		logger.addHandler(handler);
 
 		handler.setFilter(new Filter() { // select what gets logged
@@ -313,10 +326,6 @@ public class Globals {
 			}
 		} 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.replaceAll("_", " ");
@@ -365,40 +374,6 @@ public class Globals {
 	}
 
 	/**
-	 * This method provides the correct opening brace to use when writing a
-	 * field to BibTeX format.
-	 * 
-	 * @return A String containing the braces to use.
-	 */
-	public static String getOpeningBrace() {
-		return "{";
-		/*
-		 * As of version 2.0, storing all fields with double braces is no longer
-		 * supported, because it causes problems with e.g. the author field.
-		 * 
-		 * if (prefs.getBoolean("autoDoubleBraces")) return "{{"; else return
-		 * "{";
-		 */
-	}
-
-	/**
-	 * This method provides the correct closing brace to use when writing a
-	 * field to BibTeX format.
-	 * 
-	 * @return A String containing the braces to use.
-	 */
-	public static String getClosingBrace() {
-		return "}";
-		/*
-		 * As of version 2.0, storing all fields with double braces is no longer
-		 * supported, because it causes problems with e.g. the author field.
-		 * 
-		 * if (prefs.getBoolean("autoDoubleBraces")) return "}}"; else
-		 */
-
-	}
-
-	/**
 	 * Will return the names of multiple files selected in the given directory
 	 * and the given extensions.
 	 * 
@@ -493,9 +468,9 @@ public class Globals {
 
 		JFileChooser fc;
 		try {
-			fc = new JabRefFileChooser(directory);
-                        if (accessory != null)
-                            fc.setAccessory(accessory);
+			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
@@ -1173,8 +1148,9 @@ public class Globals {
 		// codepage
 		RTFCHARS.put("'Y", "\\u221Y"); // "Yacute"
 		RTFCHARS.put("TH", "{\\uc2\\u222TH}"); // "THORN"
-		RTFCHARS.put("ss", "{\\uc2\\u223ss"); // "szlig"
-		// RTFCHARS.put("`a", "\\u224"); // "agrave" exists in standard
+		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
@@ -1358,7 +1334,7 @@ public class Globals {
 	}
 
 	public static void initializeJournalNames() {
-		journalAbbrev = new JournalAbbreviations();// "/resource/journalList.txt");
+		journalAbbrev = new JournalAbbreviations("/resource/IEEEJournalList.txt");
 
 		// Read external lists, if any (in reverse order, so the upper lists
 		// override the lower):
diff --git a/src/java/net/sf/jabref/HelpContent.java b/src/java/net/sf/jabref/HelpContent.java
index dd1bf87..5828eb2 100644
--- a/src/java/net/sf/jabref/HelpContent.java
+++ b/src/java/net/sf/jabref/HelpContent.java
@@ -26,23 +26,14 @@
  */
 package net.sf.jabref;
 
-import java.awt.Graphics;
-import java.awt.Graphics2D;
 import java.awt.Point;
-import java.awt.RenderingHints;
 import java.awt.event.ActionEvent;
 import java.io.File;
 import java.io.IOException;
-import java.net.MalformedURLException;
 import java.net.URL;
 import java.util.Stack;
 
-import javax.swing.Action;
-import javax.swing.JComponent;
-import javax.swing.JScrollPane;
-import javax.swing.JTextPane;
-import javax.swing.JViewport;
-import javax.swing.SwingConstants;
+import javax.swing.*;
 import javax.swing.event.HyperlinkEvent;
 import javax.swing.event.HyperlinkListener;
 import javax.swing.text.DefaultEditorKit;
@@ -50,11 +41,16 @@ 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 history, forw;
+	private Stack<URL> history, forw;
 
 	JabRefPreferences prefs;
 
@@ -64,8 +60,8 @@ public class HelpContent extends JTextPane {
 			JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
 		pane.setDoubleBuffered(true);
 		prefs = prefs_;
-		history = new Stack();
-		forw = new Stack();
+		history = new Stack<URL>();
+		forw = new Stack<URL>();
 		setEditorKitForContentType("text/html", new MyEditorKit());
 		setContentType("text/html");
 		setText("");
@@ -84,7 +80,7 @@ public class HelpContent extends JTextPane {
 
 	public boolean back() {
 		if (!history.empty()) {
-			URL prev = (URL) (history.pop());
+			URL prev = (history.pop());
 			forw.push(getPage());
 			setPageOnly(prev);
 		}
@@ -93,7 +89,7 @@ public class HelpContent extends JTextPane {
 
 	public boolean forward() {
 		if (!forw.empty()) {
-			URL next = (URL) (forw.pop());
+			URL next = (forw.pop());
 			history.push(getPage());
 			setPageOnly(next);
 		}
@@ -126,25 +122,24 @@ public class HelpContent extends JTextPane {
 		
 		URL old = getPage();
 		try {
-            URL resource = JabRef.class.getResource(GUIGlobals.helpPre + middle + file);
-            // Because of the call to toString(), we must test for null, or the fallback
-            // to english won't work if the page is missing in the selected langugage:
-            if (resource != null) {
-                super.setPage(new URL(resource.toString() + "#" + reference));
+			// First check in specified language
+			URL resource = JabRef.class.getResource(GUIGlobals.helpPre + middle + file);
+            
+			// If not available fallback to english
+			if (resource == null) {
+            	resource = JabRef.class.getResource(GUIGlobals.helpPre + file);
             }
-            else {
-                setPageOnly(new URL(HelpContent.class.getResource(GUIGlobals.helpPre + file) + "#" + reference));
+			
+			// 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();
-            // The fallback below shouldn't bee needed any more, because of the null
-            // check above.
-            /*
-            try {
-				setPageOnly(new URL(HelpContent.class.getResource(GUIGlobals.helpPre + file) + "#" + reference));
-			} catch (MalformedURLException e) {
-				setPageOnly(HelpContent.class.getResource(GUIGlobals.helpPre + file));
-			}*/
 		}
 
 		forw.removeAllElements();
diff --git a/src/java/net/sf/jabref/HelpDialog.java b/src/java/net/sf/jabref/HelpDialog.java
index b48d7c7..81328de 100644
--- a/src/java/net/sf/jabref/HelpDialog.java
+++ b/src/java/net/sf/jabref/HelpDialog.java
@@ -29,12 +29,7 @@ package net.sf.jabref;
 import java.awt.BorderLayout;
 import java.awt.event.ActionEvent;
 
-import javax.swing.AbstractAction;
-import javax.swing.ActionMap;
-import javax.swing.InputMap;
-import javax.swing.JComponent;
-import javax.swing.JDialog;
-import javax.swing.JToolBar;
+import javax.swing.*;
 import javax.swing.event.HyperlinkEvent;
 import javax.swing.event.HyperlinkListener;
 
@@ -43,7 +38,7 @@ import javax.swing.event.HyperlinkListener;
  * This is a non-modal help Dialog. The contents of the help is specified by
  * calling showPage().
  * 
- * @version $Revision: 1726 $ ($Date: 2006-08-26 23:24:39 +0200 (Sat, 26 Aug 2006) $)
+ * @version $Revision: 2209 $ ($Date: 2007-08-01 20:23:38 +0200 (Wed, 01 Aug 2007) $)
  * 
  */
 public class HelpDialog extends JDialog implements HyperlinkListener {
diff --git a/src/java/net/sf/jabref/IconStringRenderer.java b/src/java/net/sf/jabref/IconStringRenderer.java
index 03cbafb..579f858 100644
--- a/src/java/net/sf/jabref/IconStringRenderer.java
+++ b/src/java/net/sf/jabref/IconStringRenderer.java
@@ -6,10 +6,8 @@ package net.sf.jabref;
 
 import java.awt.Component;
 
-import javax.swing.ImageIcon;
 import javax.swing.JLabel;
 import javax.swing.JTable;
-import javax.swing.UIManager;
 import javax.swing.table.DefaultTableCellRenderer;
 
 /**
diff --git a/src/java/net/sf/jabref/IdComparator.java b/src/java/net/sf/jabref/IdComparator.java
index 5a238b2..0191c0a 100644
--- a/src/java/net/sf/jabref/IdComparator.java
+++ b/src/java/net/sf/jabref/IdComparator.java
@@ -7,11 +7,9 @@ import java.util.Comparator;
  * 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 {
+public class IdComparator implements Comparator<BibtexEntry> {
 
-    public int compare(Object o1, Object o2) {
-        BibtexEntry one = (BibtexEntry)o1,
-                two = (BibtexEntry)o2;
+    public int compare(BibtexEntry one, BibtexEntry two) {
         return one.getId().compareTo(two.getId());
     }
 }
diff --git a/src/java/net/sf/jabref/IncrementalSearcher.java b/src/java/net/sf/jabref/IncrementalSearcher.java
index 5d9872b..c02a912 100644
--- a/src/java/net/sf/jabref/IncrementalSearcher.java
+++ b/src/java/net/sf/jabref/IncrementalSearcher.java
@@ -1,6 +1,7 @@
 package net.sf.jabref;
 
-import java.util.regex.Pattern;
+import java.util.Set;
+
 
 public class IncrementalSearcher {
 
@@ -17,38 +18,33 @@ public class IncrementalSearcher {
 
     public boolean search(String pattern, BibtexEntry bibtexEntry) {
 	    hitInField = null;
-	    //if (!prefs.getBoolean("caseSensitiveSearch"))
-	    //    flags = Pattern.CASE_INSENSITIVE;
-	    //Pattern pattern = Pattern.compile(searchString, flags);
-	
-	    Object[] fields = bibtexEntry.getAllFields();
-	    return searchFields(fields, bibtexEntry, pattern);
-
+	    return searchFields(bibtexEntry.getAllFields(), bibtexEntry, pattern);
     }
 
-	protected boolean searchFields(Object[] fields, BibtexEntry bibtexEntry, 
+	protected boolean searchFields(Set<String> fields, BibtexEntry bibtexEntry, 
 				       String searchString) {
 	    boolean found = false;
 	    if (fields != null) {
-		for(int i = 0 ; i < fields.length ; i++){
+	    	
+	    	for (String field : fields){
 		    try {
 			/*Globals.logger("Searching field '"+fields[i].toString()
 				       +"' for '"
 				       +pattern.toString()+"'.");*/
-			if (bibtexEntry.getField(fields[i].toString()) != null) {
+			if (bibtexEntry.getField(field.toString()) != null) {
 			    if (prefs.getBoolean("caseSensitiveSearch")) {
-				if (bibtexEntry.getField(fields[i].toString())
+				if (bibtexEntry.getField(field.toString())
 				    .toString().indexOf(searchString) > -1)
 				    found = true;
 			    } else {
-				if (bibtexEntry.getField(fields[i].toString())
+				if (bibtexEntry.getField(field.toString())
 				    .toString().toLowerCase()
 				    .indexOf(searchString.toLowerCase()) > -1)
 				    found = true;
 			    }
 			    
 			    if (found) {
-				hitInField = fields[i].toString();
+				hitInField = field.toString();
 				return true;
 			    }
 			}
diff --git a/src/java/net/sf/jabref/JabRef.java b/src/java/net/sf/jabref/JabRef.java
index cc57d18..de40261 100644
--- a/src/java/net/sf/jabref/JabRef.java
+++ b/src/java/net/sf/jabref/JabRef.java
@@ -24,39 +24,61 @@
  */
 package net.sf.jabref;
 
-import net.sf.jabref.export.*;
-import net.sf.jabref.imports.*;
-import net.sf.jabref.wizard.auximport.*;
-import net.sf.jabref.remote.RemoteListener;
+import gnu.dtools.ritopt.BooleanOption;
+import gnu.dtools.ritopt.Options;
+import gnu.dtools.ritopt.StringOption;
 
-import gnu.dtools.ritopt.*;
-import java.awt.*;
+import java.awt.Dimension;
+import java.awt.Font;
+import java.awt.Frame;
 import java.awt.event.KeyEvent;
-
-import java.io.*;
 import java.io.File;
-
-import java.util.*;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.util.Collection;
 import java.util.List;
-import java.lang.reflect.Method;
-import java.lang.reflect.InvocationTargetException;
-
-import javax.swing.*;
+import java.util.Vector;
+
+import javax.swing.InputMap;
+import javax.swing.JOptionPane;
+import javax.swing.KeyStroke;
+import javax.swing.LookAndFeel;
+import javax.swing.UIDefaults;
+import javax.swing.UIManager;
 import javax.swing.plaf.metal.MetalLookAndFeel;
 
-import com.jgoodies.looks.plastic.Plastic3DLookAndFeel;
-import com.jgoodies.looks.plastic.PlasticLookAndFeel;
-import com.jgoodies.looks.windows.WindowsLookAndFeel;
+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.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.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;
+
+import com.jgoodies.looks.FontPolicies;
+import com.jgoodies.looks.FontPolicy;
 import com.jgoodies.looks.FontSet;
 import com.jgoodies.looks.FontSets;
-import com.jgoodies.looks.FontPolicy;
-import com.jgoodies.looks.FontPolicies;
+import com.jgoodies.looks.plastic.Plastic3DLookAndFeel;
+import com.jgoodies.looks.windows.WindowsLookAndFeel;
 
-//import javax.swing.UIManager;
-//import javax.swing.UIDefaults;
-//import javax.swing.UnsupportedLookAndFeelException;
+/**
+ * JabRef Main Class - The application gets started here.
+ *
+ */
 public class JabRef {
-    public static JabRef ths;
+    
+	public static JabRef singleton;
     public static RemoteListener remoteListener = null;
     public JabRefFrame jrf;
     public Options options;
@@ -64,85 +86,93 @@ public class JabRef {
 
     boolean graphicFailure = false;
 
-    StringOption importFile, exportFile, exportPrefs, importPrefs, auxImExport, importToOpenBase;
+    StringOption importFile, exportFile, exportPrefs, importPrefs, auxImExport, importToOpenBase, fetcherEngine;
     BooleanOption helpO, disableGui, blank, loadSess, showVersion, disableSplash;
-    /*
-    * class StringArrayOption extends ArrayOption { public public void
-    * modify(String value) { } public void modify(String[] value) { } public
-    * Object[] getObjectArray() { return null; } public String getTypeName() {
-    * return "Strings"; } public String getStringValue() { return ""; } public
-    * Object getObject() { return null; } }
-    */
+    
     public static void main(String[] args) {
         new JabRef(args);
     }
 
-    public JabRef(String[] args) {
-
-        ths = this;
-	// Activate antialiasing on Java 5:
-	System.getProperties().put( "swing.aatext", "true" );
-        // 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();
-        Globals.prefs = prefs;
-        Globals.setLanguage(prefs.get("language"), "");
-                
-        Globals.importFormatReader.resetImportFormats();
-        BibtexEntryType.loadCustomEntryTypes(prefs);
-        // Build the list of available export formats:
-        ExportFormats.initAllExports();
-
-        // Read list(s) of journal names and abbreviations:
-        //Globals.turnOnFileLogging();
-
-        Globals.initializeJournalNames();
-
-        if (Globals.prefs.getBoolean("useRemoteServer")) {
-            remoteListener = RemoteListener.openRemoteListener(this);
-            if (remoteListener != null) {
-                remoteListener.start();
-            }
-
-        // Unless we are alone, try to contact already running JabRef:
-	    if (remoteListener == null) {
-		    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);
-            }
-        }
+    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();
+		Globals.prefs = prefs;
+		Globals.setLanguage(prefs.get("language"), "");
+
+		/*
+		 * 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.
+		 */
+		
+		/* 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));
 	}
 
-      /**
-       * 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();
-          }
-      }
-
-        
-        //System.setProperty("sun.awt.noerasebackground", "true");
-        
-        //System.out.println(java.awt.Toolkit.getDefaultToolkit().getDesktopProperty("awt.dynamicLayoutSupported"));
-        // Make sure of a proper cleanup when quitting (e.g. deleting temporary
-        // files).
-        System.runFinalizersOnExit(true);
-
-        Vector loaded = processArguments(args, true);
-        openWindow(loaded);
-        //System.out.println("1");
-    }
-
     private void setupOptions() {
 
         importFile = new StringOption("");
@@ -157,6 +187,7 @@ public class JabRef {
         importPrefs = new StringOption("jabref_prefs.xml");
         auxImExport = new StringOption("");
         importToOpenBase = new StringOption("");
+        fetcherEngine = new StringOption("");
 
         options = new Options("JabRef "); // Create an options repository.
         options.setVersion(GUIGlobals.version);
@@ -188,18 +219,16 @@ public class JabRef {
 
         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.setUseMenu(false);
     }
 
-    public Vector processArguments(String[] args, boolean initialStartup) {
+    public Vector<ParserResult> processArguments(String[] args, boolean initialStartup) {
 
         setupOptions();
         String[] leftOver = options.process(args);
 
-
-
-        //Util.pr(": Options processed");
-
         if (initialStartup && showVersion.isInvoked()) {
             options.displayVersion();
             disableGui.setInvoked(true);
@@ -218,16 +247,16 @@ public class JabRef {
                 + ".");
             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 && !disableGui.isInvoked() && !disableSplash.isInvoked()) {
+        if (initialStartup && !commandmode && !disableSplash.isInvoked()) {
             try {
-
                 splashScreen = SplashScreen.splash();
-
             } catch (Throwable ex) {
                 graphicFailure = true;
                 System.err.println(Globals.lang("Unable to create graphical interface")
@@ -235,10 +264,9 @@ public class JabRef {
             }
         }
 
-        //Util.pr("JabRef "+GUIGlobals.version);
         // Vector to put imported/loaded database(s) in.
-        Vector loaded = new Vector();
-        Vector toImport = new Vector();
+        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
@@ -270,68 +298,15 @@ public class JabRef {
             }
         }
 
-        //Util.pr(": Checked blank");
-
         if (!blank.isInvoked() && importFile.isInvoked()) {
             toImport.add(importFile.getStringValue());
         }
 
-        if (toImport.size() > 0) for (int i = 0; i < toImport.size(); i++) {
-            String[] data = ((String) toImport.elementAt(i)).split(",");
-
-            try {
-
-                if ((data.length > 1) && !"*".equals(data[1])) {
-                    System.out.println(Globals.lang("Importing") + ": " + data[0]);
-                    List entries =
-                            Globals.importFormatReader.importFromFile(data[1],
-                                    data[0].replaceAll("~", System.getProperty("user.home")));
-                    BibtexDatabase base = ImportFormatReader.createDatabase(entries);
-                    ParserResult pr = new ParserResult(base, null, new HashMap());
-                    loaded.add(pr);
-
-                } else {
-                    // * means "guess the format":
-                    System.out.println(Globals.lang("Importing in unknown format")
-                            + ": " + data[0]);
-
-                    Object[] o =
-                            Globals.importFormatReader.importUnknownFormat(data[0]
-                                    .replaceAll("~", System.getProperty("user.home")));
-                    String formatName = (String) o[0];
-
-                    if (formatName == null) {
-                        System.err.println(Globals.lang("Error opening file") + " '" + data[0] + "'");
-                    } else if (formatName.equals(ImportFormatReader.BIBTEX_FORMAT)) {
-                        ParserResult pr = (ParserResult) o[1];
-                        loaded.add(pr);
-
-                    } else {
-                        List entries = (java.util.List) o[1];
-                        if (entries != null)
-                            System.out.println(Globals.lang("Format used") + ": "
-                                    + formatName);
-                        else
-                            System.out.println(Globals.lang(
-                                    "Could not find a suitable import format."));
-
-                        if (entries != null) {
-                            BibtexDatabase base = ImportFormatReader.createDatabase(entries);
-                            ParserResult pr = new ParserResult(base, null, new HashMap());
-
-                            //pr.setFile(new File(data[0]));
-                            loaded.add(pr);
-                        }
-                    }
-                }
-            } catch (IOException ex) {
-                System.err.println(Globals.lang("Error opening file") + " '"
-                        + data[0] + "': " + ex.getMessage());
-            }
-
-
-        }
-
+        for (String filenameString : toImport) {
+			ParserResult pr = importFile(filenameString);
+			if (pr != null)
+				loaded.add(pr);
+		}
 
         if (!blank.isInvoked() && importToOpenBase.isInvoked()) {
             ParserResult res = importToOpenBase(importToOpenBase.getStringValue());
@@ -339,6 +314,12 @@ public class JabRef {
                 loaded.add(res);
         }
 
+        if (!blank.isInvoked() && fetcherEngine.isInvoked()) {
+            ParserResult res = fetch(fetcherEngine.getStringValue());
+            if (res != null)
+                loaded.add(res);
+        }
+
         if (exportFile.isInvoked()) {
             if (loaded.size() > 0) {
                 String[] data = exportFile.getStringValue().split(",");
@@ -348,7 +329,7 @@ public class JabRef {
                     // format to the given file.
                     if (loaded.size() > 0) {
                         ParserResult pr =
-                            (ParserResult) loaded.elementAt(loaded.size() - 1);
+                            loaded.elementAt(loaded.size() - 1);
 
                         try {
                             System.out.println(Globals.lang("Saving") + ": " + data[0]);
@@ -371,7 +352,7 @@ public class JabRef {
                 } else if (data.length == 2) {
                     // This signals that the latest import should be stored in the given
                     // format to the given file.
-                    ParserResult pr = (ParserResult) loaded.elementAt(loaded.size() - 1);
+                    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.
@@ -380,11 +361,13 @@ public class JabRef {
                     metaData.setFile(pr.getFile());
                     Globals.prefs.fileDirForDatabase = metaData.getFileDirectory(GUIGlobals.FILE_FIELD);
                     System.out.println(Globals.lang("Exporting") + ": " + data[0]);
-                    ExportFormat format = ExportFormats.getExportFormat(data[1]);
+                    IExportFormat format = ExportFormats.getExportFormat(data[1]);
                     if (format != null) {
                         // We have an ExportFormat instance:
                         try {
-                            format.performExport(pr.getDatabase(), data[0], pr.getEncoding(), null);
+                            format.performExport(pr.getDatabase(), 
+                                    new MetaData(pr.getMetaData(), pr.getDatabase()),
+                                    data[0], pr.getEncoding(), null);
                         } catch (Exception ex) {
                             System.err.println(Globals.lang("Could not export file")
                                 + " '" + data[0] + "': " + ex.getMessage());
@@ -429,7 +412,7 @@ public class JabRef {
                 String[] data = auxImExport.getStringValue().split(",");
 
                 if (data.length == 2) {
-                    ParserResult pr = (ParserResult) loaded.firstElement();
+                    ParserResult pr = loaded.firstElement();
                     AuxCommandLine acl = new AuxCommandLine(data[0], pr.getDatabase());
                     BibtexDatabase newBase = acl.perform();
 
@@ -479,38 +462,66 @@ public class JabRef {
         return loaded;
     }
 
-    ParserResult importFiletypeUnknown(String fname) {
-        Object[] o =
-                Globals.importFormatReader.importUnknownFormat(fname
-                        .replaceAll("~", System.getProperty("user.home")));
-        String formatName = (String) o[0];
+    /**
+     * 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:"));
+            for (EntryFetcherExtension e : JabRefPlugin.getInstance(PluginCore.getManager())
+                .getEntryFetcherExtensions()) {
+                System.out.println("  " + e.getId().replaceAll("Fetcher", "").toLowerCase());
+            }
+            return null;
+        }
+
+        String engine = fetchCommand.split(":")[0];
+        String query = fetchCommand.split(":")[1];
 
-        if (formatName == null) {
-            System.err.println(Globals.lang("Error opening file") + " '" + fname + "'");
-        } else if (formatName.equals(ImportFormatReader.BIBTEX_FORMAT)) {
-            ParserResult pr = (ParserResult) o[1];
-            return pr;
-        } else {
-            List entries = (java.util.List) o[1];
-            if (entries != null)
-                System.out.println(Globals.lang("Format used") + ": "
-                        + formatName);
-            else
-                System.out.println(Globals.lang(
-                        "Could not find a suitable import format."));
-
-            if (entries != null) {
-                BibtexDatabase base = ImportFormatReader.createDatabase(entries);
-                ParserResult pr = new ParserResult(base, null, new HashMap());
-                return pr;
+        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;
         }
-        
-        // not reached
-        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);
     }
 
-    public void openWindow(Vector loaded) {
+	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
@@ -668,7 +679,7 @@ lastEdLoop:
                     File fileToOpen = new File(names[i]);
 
                     for (int j = 0; j < loaded.size(); j++) {
-                        ParserResult pr = (ParserResult) loaded.elementAt(j);
+                        ParserResult pr = loaded.elementAt(j);
 
                         if ((pr.getFile() != null) &&pr.getFile().equals(fileToOpen))
                             continue lastEdLoop;
@@ -701,9 +712,8 @@ lastEdLoop:
             // Add all loaded databases to the frame:
 	    boolean first = true;
             if (loaded.size() > 0) {
-                for (Iterator i=loaded.iterator(); i.hasNext();) {
-                    ParserResult pr = (ParserResult)i.next();
-		            BasePanel panel = jrf.addTab(pr.getDatabase(), pr.getFile(),
+                for (ParserResult pr : loaded){
+		            jrf.addTab(pr.getDatabase(), pr.getFile(),
                             pr.getMetaData(), pr.getEncoding(), first);
                     first = false;
                 }
@@ -726,10 +736,10 @@ lastEdLoop:
             jrf.setVisible(true);
 
             // TEST TEST TEST TEST TEST TEST
-            startOOPlugin(jrf);
+            startSidePanePlugins(jrf);
 
             for (int i = 0; i < loaded.size(); i++) {
-                ParserResult pr = (ParserResult) loaded.elementAt(i);
+                ParserResult pr = loaded.elementAt(i);
                 if (Globals.prefs.getBoolean("displayKeyWarningDialogAtStartup") && pr.hasWarnings()) {
                     String[] wrns = pr.warnings();
                     StringBuffer wrn = new StringBuffer();
@@ -750,7 +760,7 @@ lastEdLoop:
             // 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 = (ParserResult) loaded.elementAt(i);
+                ParserResult pr = loaded.elementAt(i);
                 BasePanel panel = jrf.baseAt(i);
                 OpenDatabaseAction.performPostOpenActions(panel, pr, true);
             }
@@ -766,31 +776,22 @@ lastEdLoop:
     }
 
     /**
-     * Morten Alver (sept. 06): I'm adding this to run the functionality for
-     * OpenOffice integration. I'm not sure yet how to handle deployment issues,
-     * because the OO stuff requires several OO jars on the classpath, which we
-     * shouldn't distribute because OO installations already have them.
-     *
-     * To avoid introducing dependencies on these jars for the time being,
-     * I'm keeping OO "plugin" files separate, only invoking them through reflection.
+     * Go through all registered instances of SidePanePlugin, and register them
+     * in the SidePaneManager.
      *
      * @param jrf The JabRefFrame.
      */
-    private void startOOPlugin(JabRefFrame jrf) {
-
-
-        try {
-            Class c = Class.forName("net.sf.jabref.oo.OOTestPanel");
-            Method m = c.getDeclaredMethod("open",
-                    new Class[] {JabRefFrame.class});
-            Object i = c.newInstance();
-            Object r = m.invoke(i, new Object[] {jrf});
-        } catch (Exception e) {
-            // Do nothing.
-            //System.out.println("OO plugin not found.");
-            //e.printStackTrace();
+    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) {
@@ -820,61 +821,52 @@ lastEdLoop:
         return null;
     }
 
-    public static ParserResult importToOpenBase(String argument) {
-        String[] data = argument.split(",");
+    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]);
-                List entries =
-                    Globals.importFormatReader.importFromFile(data[1],
-                        data[0].replaceAll("~", System.getProperty("user.home")));
-                BibtexDatabase base = ImportFormatReader.createDatabase(entries);
-                ParserResult pr = new ParserResult(base, null, new HashMap());
-                pr.setToOpenTab(true);
-                //loaded.add(pr);
-                return pr;
+                List<BibtexEntry> entries =
+                        Globals.importFormatReader.importFromFile(data[1],
+                                data[0].replaceAll("~", System.getProperty("user.home")));
+                return new ParserResult(entries);
             } else {
                 // * means "guess the format":
                 System.out.println(Globals.lang("Importing in unknown format")
-                    + ": " + data[0]);
-
-                Object[] o =
+                        + ": " + data[0]);
+                
+            	Pair<String, ParserResult> importResult = 
                     Globals.importFormatReader.importUnknownFormat(data[0]
-                        .replaceAll("~", System.getProperty("user.home")));
-                String formatName = (String) o[0];
-
-                if (formatName.equals(ImportFormatReader.BIBTEX_FORMAT)) {
-                    ParserResult pr = (ParserResult)o[1];
-                    pr.setToOpenTab(true);
-                    //loaded.add(pr);
-                    return pr;
-                }
-                else {
-                    List entries = (java.util.List) o[1];
-                    if (entries != null)
-                        System.out.println(Globals.lang("Format used") + ": "
-                            + formatName);
-                    else
-                        System.out.println(Globals.lang(
+                            .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."));
-
-                    if (entries != null) {
-                        BibtexDatabase base = ImportFormatReader.createDatabase(entries);
-                        ParserResult pr = new ParserResult(base, null, new HashMap());
-
-                        //pr.setFile(new File(data[0]));
-                        pr.setToOpenTab(true);
-                        //loaded.add(pr);
-                        return pr;
-                    }
                 }
-
             }
         } catch (IOException ex) {
             System.err.println(Globals.lang("Error opening file") + " '"
-                + data[0] + "': " + ex.getMessage());
+                    + 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 5fc74ab..30e3fe1 100644
--- a/src/java/net/sf/jabref/JabRefFileChooser.java
+++ b/src/java/net/sf/jabref/JabRefFileChooser.java
@@ -25,13 +25,15 @@ http://www.gnu.org/copyleft/gpl.ja.html
 
 */
 package net.sf.jabref;
-import java.awt.*;
-import java.io.*;
-import javax.swing.*;
-import javax.swing.plaf.*;
-import java.awt.event.*;
-import javax.swing.plaf.basic.*;
-import javax.swing.plaf.metal.*;
+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:
@@ -40,13 +42,9 @@ import javax.swing.plaf.metal.*;
 public class JabRefFileChooser extends JFileChooser
 {
 
-    // Remember size at previous use, so the user doesn't need to resize every time:
-    private static Dimension lastSize = null;
-
     public JabRefFileChooser()
     {
         super();
-        
     }
 
     public JabRefFileChooser(File file){
@@ -91,7 +89,7 @@ public class JabRefFileChooser extends JFileChooser
         JabRefFileChooser fc = new JabRefFileChooser();
         int returnVal = fc.showOpenDialog(null);
         if (returnVal == JFileChooser.APPROVE_OPTION) {
-            File file = fc.getSelectedFile();
+            fc.getSelectedFile();
         }
     }
 }
diff --git a/src/java/net/sf/jabref/JabRefFrame.java b/src/java/net/sf/jabref/JabRefFrame.java
index 7a5d654..db68724 100644
--- a/src/java/net/sf/jabref/JabRefFrame.java
+++ b/src/java/net/sf/jabref/JabRefFrame.java
@@ -27,47 +27,48 @@
 
 package net.sf.jabref;
 
+import com.jgoodies.looks.HeaderStyle;
+import com.jgoodies.looks.Options;
+import com.jgoodies.uif_lite.component.UIFSplitPane;
+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.label.*;
 import net.sf.jabref.imports.*;
-import net.sf.jabref.wizard.auximport.gui.*;
+import net.sf.jabref.journals.ManageJournalsAction;
+import net.sf.jabref.label.*;
+import net.sf.jabref.plugin.PluginCore;
+import net.sf.jabref.plugin.core.JabRefPlugin;
+import net.sf.jabref.plugin.core.generated._JabRefPlugin.EntryFetcherExtension;
+import net.sf.jabref.undo.NamedCompound;
+import net.sf.jabref.undo.UndoableInsertEntry;
+import net.sf.jabref.undo.UndoableRemoveEntry;
+import net.sf.jabref.util.MassSetFieldAction;
+import net.sf.jabref.wizard.auximport.gui.FromAuxDialog;
+import net.sf.jabref.wizard.integrity.gui.IntegrityWizard;
 
 import javax.swing.*;
-
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
 import java.awt.*;
 import java.awt.event.*;
+import java.io.File;
+import java.io.IOException;
+import java.lang.reflect.Method;
+import java.net.URL;
 import java.util.*;
 import java.util.List;
-import java.io.*;
-import java.net.URL;
-import net.sf.jabref.undo.NamedCompound;
-import net.sf.jabref.undo.UndoableInsertEntry;
-import net.sf.jabref.undo.UndoableRemoveEntry;
-import net.sf.jabref.export.*;
-
-import java.lang.reflect.*;
-import javax.swing.event.*;
-import net.sf.jabref.wizard.integrity.gui.*;
-import net.sf.jabref.groups.GroupSelector;
-import net.sf.jabref.groups.EntryTableTransferHandler;
-import net.sf.jabref.journals.ManageJournalsAction;
-import net.sf.jabref.external.*;
-import net.sf.jabref.util.MassSetFieldAction;
-import com.jgoodies.uif_lite.component.UIFSplitPane;
-import com.jgoodies.looks.Options;
-import com.jgoodies.looks.HeaderStyle;
-
 
 /**
  * The main window of the application.
  */
-public class JabRefFrame extends JFrame {
+public class JabRefFrame extends JFrame implements OutputPrinter {
 
-   // CO: Code Smells...
-    JabRefFrame ths = this;
     UIFSplitPane contentPane = new UIFSplitPane();
 
-    JabRefPreferences prefs = Globals.prefs; //new JabRefPreferences();
+    JabRefPreferences prefs = Globals.prefs; 
     PrefsDialog3 prefsDialog = null;
     
     private int lastTabbedPanelSelectionIndex = -1 ;
@@ -91,6 +92,7 @@ public class JabRefFrame extends JFrame {
     ToolBar tlb = new ToolBar();
 
     JMenuBar mb = new JMenuBar();
+    JMenu pluginMenu = subMenu("Plugins");
 
     GridBagLayout gbl = new GridBagLayout();
 
@@ -101,8 +103,6 @@ public class JabRefFrame extends JFrame {
         + ":", SwingConstants.LEFT);
     JProgressBar progressBar = new JProgressBar();
 
-    // SearchManager searchManager = new SearchManager(ths, prefs);
-
     private FileHistory fileHistory = new FileHistory(prefs, this);
 
     LabelMaker labelMaker;
@@ -148,7 +148,7 @@ public class JabRefFrame extends JFrame {
       saveAs = new GeneralAction("saveAs", "Save database as ...",
                                  Globals.lang("Save database as ..."),
                                  prefs.getKey("Save database as ...")),
-      saveAll = new SaveAllAction(ths),
+      saveAll = new SaveAllAction(JabRefFrame.this),
       saveSelectedAs = new GeneralAction("saveSelectedAs",
                                          "Save selected as ...",
                                          Globals.lang("Save selected as ..."),
@@ -194,9 +194,6 @@ public class JabRefFrame extends JFrame {
 
       fetchCiteSeer = new FetchCiteSeerAction(),
       importCiteSeer = new ImportCiteSeerAction(),
-      fetchMedline = new FetchMedlineAction(),
-      citeSeerPanelAction = new CiteSeerPanelAction(),
-      //fetchAuthorMedline = new FetchAuthorMedlineAction(),
       copyKey = new GeneralAction("copyKey", "Copy BibTeX key"),
       //"Put a BibTeX reference to the selected entries on the clipboard",
       copyCiteKey = new GeneralAction("copyCiteKey", "Copy \\cite{BibTeX key}",
@@ -256,6 +253,9 @@ public class JabRefFrame extends JFrame {
       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")),
       dupliCheck = new GeneralAction("dupliCheck", "Find duplicates"),
       //strictDupliCheck = new GeneralAction("strictDupliCheck", "Find and remove exact duplicates"),
       plainTextImport = new GeneralAction("plainTextImport",
@@ -287,21 +287,23 @@ public class JabRefFrame extends JFrame {
     upgradeExternalLinks = new GeneralAction("upgradeLinks", "Upgrade external links",
             Globals.lang("Upgrade external PDF/PS links to use the '%0' field.", GUIGlobals.FILE_FIELD)),
       errorConsole = Globals.errorConsole.getAction(this),
-    test = new GeneralAction("test", "Test");
+    test = new GeneralAction("test", "Test"),
 
-    PushToApplicationButton pushExternalButton;
-  /*setupSelector = new GeneralAction("setupSelector", "", "",
-          GUIGlobals.pasteIconFile,
-          prefs.getKey(")),*/
+    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") );
 
+    PushToApplicationButton pushExternalButton;
 
-    MedlineFetcher medlineFetcher;
     CiteSeerFetcher citeSeerFetcher;
-    CiteSeerFetcherPanel citeSeerFetcherPanel;
-    IEEEXploreFetcher ieeexplorerFetcher;
-    GeneralFetcher ieex;
-    OAI2Fetcher arxivFetcher;
-    GeneralFetcher arxiv;
+    
+    List<EntryFetcher> fetchers = new LinkedList<EntryFetcher>();
+    List<Action> fetcherActions = new LinkedList<Action>();
+
     SearchManager2 searchManager;
     public GroupSelector groupSelector;
 
@@ -368,8 +370,46 @@ public class JabRefFrame extends JFrame {
         initActions();
         
         if (Globals.prefs.getBoolean("rememberWindowLocation")) {
-            setSize(new Dimension(prefs.getInt("sizeX"), prefs.getInt("sizeY")));
-            setLocation(new Point(prefs.getInt("posX"), prefs.getInt("posY")));
+            
+            int sizeX = prefs.getInt("sizeX");
+            int sizeY = prefs.getInt("sizeY");
+            int posX = prefs.getInt("posX");
+            int posY = prefs.getInt("posY");
+            
+            // 
+            // 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){
+            
+                Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
+
+                int height = (int) dim.getHeight();
+                int width = (int) dim.getWidth();
+
+                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);
@@ -408,18 +448,24 @@ public class JabRefFrame extends JFrame {
         Globals.sidePaneManager = this.sidePaneManager;
         Globals.helpDiag = this.helpDiag;
 
-        ieeexplorerFetcher = new IEEEXploreFetcher();
-        arxivFetcher = new OAI2Fetcher();
-        medlineFetcher = new MedlineFetcher(sidePaneManager);
+        /*
+         * Load fetchers that are plug-in extensions
+         */
+        JabRefPlugin jabrefPlugin = JabRefPlugin.getInstance(PluginCore.getManager());
+    	if (jabrefPlugin != null){
+    		for (EntryFetcherExtension ext : jabrefPlugin.getEntryFetcherExtensions()){
+    			EntryFetcher fetcher = ext.getEntryFetcher();
+    			if (fetcher != null){
+    				fetchers.add(fetcher);
+    			}
+    		}
+    	}
+        
         citeSeerFetcher = new CiteSeerFetcher(sidePaneManager);
-        citeSeerFetcherPanel = new CiteSeerFetcherPanel(sidePaneManager,
-            (CiteSeerFetcher) citeSeerFetcher);
         groupSelector = new GroupSelector(this, sidePaneManager);
         searchManager = new SearchManager2(this, sidePaneManager);
 
-        sidePaneManager.register("fetchMedline", medlineFetcher);
         sidePaneManager.register("CiteSeerProgress", citeSeerFetcher);
-        sidePaneManager.register("CiteSeerPanel", citeSeerFetcherPanel);
         sidePaneManager.register("groups", groupSelector);
         sidePaneManager.register("search", searchManager);
 
@@ -446,7 +492,7 @@ AboutAction aboutAction = new AboutAction();
   // General info dialog.  The OSXAdapter calls this method when "About OSXAdapter"
   // is selected from the application menu.
   public void about() {
-    JDialog about = new JDialog(ths, Globals.lang("About JabRef"),
+    JDialog about = new JDialog(JabRefFrame.this, Globals.lang("About JabRef"),
                                 true);
     JEditorPane jp = new JEditorPane();
     JScrollPane sp = new JScrollPane
@@ -470,12 +516,12 @@ AboutAction aboutAction = new AboutAction();
       });
       about.getContentPane().add(sp);
       about.setSize(GUIGlobals.aboutSize);
-      Util.placeDialog(about, ths);
+      Util.placeDialog(about, JabRefFrame.this);
       about.setVisible(true);
     }
     catch (IOException ex) {
       ex.printStackTrace();
-      JOptionPane.showMessageDialog(ths, "Could not load file 'About.html'",
+      JOptionPane.showMessageDialog(JabRefFrame.this, "Could not load file 'About.html'",
                                     "Error", JOptionPane.ERROR_MESSAGE);
     }
 
@@ -484,7 +530,7 @@ AboutAction aboutAction = new AboutAction();
   // General preferences dialog.  The OSXAdapter calls this method when "Preferences..."
   // is selected from the application menu.
   public void preferences() {
-    //PrefsDialog.showPrefsDialog(ths, prefs);
+    //PrefsDialog.showPrefsDialog(JabRefFrame.this, prefs);
       AbstractWorker worker = new AbstractWorker() {
               public void run() {
                   output(Globals.lang("Opening preferences..."));
@@ -515,13 +561,13 @@ public JabRefPreferences prefs() {
     // Ask here if the user really wants to close, if the base
     // has not been saved since last save.
     boolean close = true;
-    Vector filenames = new Vector();
+    Vector<String> filenames = new Vector<String>();
     if (tabbedPane.getTabCount() > 0) {
-      loop: for (int i = 0; i < tabbedPane.getTabCount(); i++) {
+      for (int i = 0; i < tabbedPane.getTabCount(); i++) {
         if (baseAt(i).baseChanged) {
           tabbedPane.setSelectedIndex(i);
           int answer = JOptionPane.showConfirmDialog
-              (ths, Globals.lang
+              (JabRefFrame.this, Globals.lang
                ("Database has changed. Do you "
                 + "want to save before closing?"),
                Globals.lang("Save before closing"),
@@ -541,6 +587,7 @@ public JabRefPreferences prefs() {
                 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) {
@@ -559,10 +606,10 @@ public JabRefPreferences prefs() {
     if (close) {
       dispose();
 
-      prefs.putInt("posX", ths.getLocation().x);
-      prefs.putInt("posY", ths.getLocation().y);
-      prefs.putInt("sizeX", ths.getSize().width);
-      prefs.putInt("sizeY", ths.getSize().height);
+      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("searchPanelVisible", sidePaneManager.isComponentVisible("search"));
       // Store divider location for side pane:
       int width = contentPane.getDividerLocation();
@@ -578,7 +625,7 @@ public JabRefPreferences prefs() {
         else {
           String[] names = new String[filenames.size()];
           for (int i = 0; i < filenames.size(); i++) {
-            names[i] = (String) filenames.elementAt(i);
+            names[i] = filenames.elementAt(i);
 
           }
           prefs.putStringArray("lastEdited", names);
@@ -594,9 +641,11 @@ public JabRefPreferences prefs() {
       // Let the search interface store changes to prefs.
       // But which one? Let's use the one that is visible.
       if (basePanel() != null) {
-        ((SearchManager2)searchManager).updatePrefs();
-
+        (searchManager).updatePrefs();
       }
+      
+      prefs.flush();
+      
       System.exit(0); // End program.
     }
   }
@@ -606,9 +655,9 @@ public JabRefPreferences prefs() {
   private void macOSXRegistration() {
     if (Globals.osName.equals(Globals.MAC)) {
       try {
-        Class osxAdapter = Class.forName("osxadapter.OSXAdapter");
+        Class<?> osxAdapter = Class.forName("osxadapter.OSXAdapter");
 
-        Class[] defArgs = {
+        Class<?>[] defArgs = {
             JabRefFrame.class};
         Method registerMethod = osxAdapter.getDeclaredMethod(
             "registerMacOSXApplication", defArgs);
@@ -766,6 +815,10 @@ public JabRefPreferences prefs() {
       tabbedPane.setSelectedIndex(i);
   }
 
+    public void showBasePanel(BasePanel bp) {
+        tabbedPane.setSelectedComponent(bp);
+    }
+
   /**
    * Returns the currently viewed BasePanel.
    */
@@ -947,8 +1000,8 @@ public JabRefPreferences prefs() {
     public void actionPerformed(ActionEvent e) {
       String thisType = type;
       if (thisType == null) {
-        EntryTypeDialog etd = new EntryTypeDialog(ths);
-        Util.placeDialog(etd, ths);
+        EntryTypeDialog etd = new EntryTypeDialog(JabRefFrame.this);
+        Util.placeDialog(etd, JabRefFrame.this);
         etd.setVisible(true);
         BibtexEntryType tp = etd.getChoice();
         if (tp == null) {
@@ -1026,6 +1079,8 @@ public JabRefPreferences prefs() {
       file.add(importCurrent);
       file.add(exportAll);
       file.add(exportSelected);
+      file.add(dbConnect);
+      file.add(dbExport);
 
       file.addSeparator();
       file.add(databaseProperties);
@@ -1041,7 +1096,7 @@ public JabRefPreferences prefs() {
       file.add(close);
       file.add(quit);
       mb.add(file);
-      //edit.add(test);
+      edit.add(test);
       edit.add(undo);
       edit.add(redo);
       edit.addSeparator();
@@ -1109,15 +1164,11 @@ public JabRefPreferences prefs() {
       tools.add(pushExternalButton.getMenuAction());
       tools.add(writeXmpAction);
 
-      //tools.add(emacsPushAction);
-      //tools.add(lyxPushAction);
-      //tools.add(winEdtPushAction);
-      //tools.add(latexEditorPushAction);
-      //tools.add(fetchAuthorMedline);
       tools.addSeparator();
       tools.add(openFile);
       tools.add(openPdf);
       tools.add(openUrl);
+      //tools.add(openSpires);
       tools.addSeparator();
       tools.add(newSubDatabaseAction);
 
@@ -1128,17 +1179,20 @@ public JabRefPreferences prefs() {
 
       // TODO: Temporary for 2.2 release: we should perhaps find a better solution:
       tools.addSeparator();
-      tools.add(new ExpandEndnoteFilters(ths));
+      tools.add(new ExpandEndnoteFilters(JabRefFrame.this));
       
       mb.add(tools);
 
-      web.add(fetchMedline);
-      web.add(citeSeerPanelAction);
       web.add(fetchCiteSeer);
-      ieex = new GeneralFetcher(sidePaneManager, this, ieeexplorerFetcher);
-      arxiv = new GeneralFetcher(sidePaneManager, this, arxivFetcher);
-      web.add(ieex.getAction());
-      web.add(arxiv.getAction());
+      
+      /*
+       * Add all entryFetchers
+       */
+      for (EntryFetcher fetcher : fetchers){
+    	  GeneralFetcher generalFetcher = new GeneralFetcher(sidePaneManager, this, fetcher);
+    	  web.add(generalFetcher.getAction());
+    	  fetcherActions.add(generalFetcher.getAction());
+      }
 
       mb.add(web);
 
@@ -1154,9 +1208,9 @@ public JabRefPreferences prefs() {
 
       /*options.add(new AbstractAction("Font") {
       public void actionPerformed(ActionEvent e) {
-          // JDialog dl = new EntryCustomizationDialog(ths);
+          // JDialog dl = new EntryCustomizationDialog(JabRefFrame.this);
           Font f=new FontSelectorDialog
-        (ths, GUIGlobals.CURRENTFONT).getSelectedFont();
+        (JabRefFrame.this, GUIGlobals.CURRENTFONT).getSelectedFont();
        if(f==null)
         return;
        else
@@ -1174,6 +1228,10 @@ public JabRefPreferences prefs() {
       }
       });*/
 
+      pluginMenu.setEnabled(false);
+      mb.add(pluginMenu);
+
+
       //options.add(selectKeys);
       mb.add(options);
 
@@ -1201,6 +1259,12 @@ public JabRefPreferences prefs() {
         return res;
     }
 
+
+    public void addPluginMenuItem(JMenuItem item) {
+        pluginMenu.add(item);
+        pluginMenu.setEnabled(true);
+    }
+
   private void createToolBar() {
     tlb.putClientProperty(Options.HEADER_STYLE_KEY, HeaderStyle.BOTH);
     tlb.setBorder(null);
@@ -1214,6 +1278,8 @@ public JabRefPreferences prefs() {
     tlb.addAction(open);
     tlb.addAction(save);
     tlb.addAction(saveAll);
+    //tlb.addAction(dbConnect);
+    //tlb.addAction(dbExport);
     
     tlb.addSeparator();
     tlb.addAction(cut);
@@ -1292,61 +1358,7 @@ public JabRefPreferences prefs() {
 
   }
 
-  private class JabRefLabel
-      extends JPanel {
-    private String label;
-    public JabRefLabel(String name) {
-      label = name;
-    }
-
-    public void paint(Graphics g) {
-      Graphics2D g2 = (Graphics2D) g;
-      g2.setColor(GUIGlobals.nullFieldColor);
-      g2.setFont(GUIGlobals.jabRefFont);
-      FontMetrics fm = g2.getFontMetrics();
-      int width = fm.stringWidth(label);
-      g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
-                          RenderingHints.VALUE_ANTIALIAS_ON);
-      g2.drawString(label, getWidth() - width - 7, getHeight() - 10);
-
-
-    }
-  }
-
-  private JMenuItem mItem(AbstractAction a, KeyStroke ks) {
-    // Set up a menu item with action and accelerator key.
-    JMenuItem mi = new JMenuItem();
-    mi.setAction(a);
-    if (ks != null) {
-      mi.setAccelerator(ks);
-    }
-    return mi;
-  }
-
-  //private void setupMainPanel() {
-
-
-  /*public Completer getAutoCompleter(String field) {
-    return (Completer)autoCompleters.get(field);
-    }
-
-
-       public void assignAutoCompleters() {
-    // Set up which fields should have autocompletion. This should
-    // probably be made customizable. Existing Completer objects are
-    // forgotten. The completers must be updated towards the database.
-    byte[] fields = prefs.getByteArray("autoCompFields");
-    autoCompleters = new Hashtable();
-    for (int i=0; i<fields.length; i++) {
-   autoCompleters.put(GUIGlobals.ALL_FIELDS[fields[i]], new Completer());
-    }
-
-       }
-
-       public void updateAutoCompleters() {
-    if (database != null)
-   database.setCompleters(autoCompleters);
-   }*/
+  
 
  public void output(final String s) {
 
@@ -1364,29 +1376,31 @@ public JabRefPreferences prefs() {
     }
   }
 
-  protected List openDatabaseOnlyActions = new LinkedList();
-  protected List severalDatabasesOnlyActions = new LinkedList();
+  protected List<Object> openDatabaseOnlyActions = new LinkedList<Object>();
+  protected List<Object> severalDatabasesOnlyActions = new LinkedList<Object>();
   
     protected void initActions() {
-        openDatabaseOnlyActions = new LinkedList();
+        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, importCiteSeer,
             selectAll, copyKey, copyCiteKey, editPreamble, editStrings, toggleGroups, toggleSearch,
             makeKeyAction, normalSearch,
-            incrementalSearch, replaceAll, importMenu, exportMenu, fetchMedline, fetchCiteSeer,
-                openPdf, openUrl, togglePreview, dupliCheck, /*strictDupliCheck,*/ highlightAll,
-            highlightAny, citeSeerPanelAction, newEntryAction, plainTextImport,
+            incrementalSearch, replaceAll, importMenu, exportMenu, fetchCiteSeer,
+                openPdf, openUrl, openFile, openSpires, togglePreview, dupliCheck, /*strictDupliCheck,*/ highlightAll,
+            highlightAny, newEntryAction, plainTextImport,
             closeDatabaseAction, switchPreview, integrityCheckAction, autoSetPdf, autoSetPs,
             toggleHighlightAny, toggleHighlightAll, databaseProperties, abbreviateIso,
-            abbreviateMedline, unabbreviate, ieex.getAction(), arxiv.getAction(), exportAll, exportSelected,
-            importCurrent, saveAll}));
+            abbreviateMedline, unabbreviate, exportAll, exportSelected,
+            importCurrent, saveAll, dbConnect, dbExport}));
+        
+        openDatabaseOnlyActions.addAll(fetcherActions);
 
         openDatabaseOnlyActions.addAll(Arrays.asList(newSpecificEntryAction));
 
-        severalDatabasesOnlyActions = new LinkedList();
+        severalDatabasesOnlyActions = new LinkedList<Object>();
         severalDatabasesOnlyActions.addAll(Arrays
-            .asList(new Object[] { nextTab, prevTab, sortTabs }));
+            .asList(new Action[] { nextTab, prevTab, sortTabs }));
 
         tabbedPane.addChangeListener(new ChangeListener() {
             public void stateChanged(ChangeEvent event) {
@@ -1398,10 +1412,13 @@ public JabRefPreferences prefs() {
 
     }
 
-    public static void setEnabled(List l, boolean enabled) {
-        Iterator i = l.iterator();
-        while (i.hasNext()) {
-            Object o = i.next();
+    /**
+     * 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)
@@ -1427,7 +1444,7 @@ public JabRefPreferences prefs() {
 
   /**
    * This method causes all open BasePanels to set up their tables
-   * anew. When called from PrefsDialog2, this updates to the new
+   * anew. When called from PrefsDialog3, this updates to the new
    * settings.
    */
   public void setupAllTables() {
@@ -1449,8 +1466,8 @@ public JabRefPreferences prefs() {
     }
   }
 
-  public BasePanel addTab(BibtexDatabase db, File file, HashMap meta, String encoding, boolean raisePanel) {
-      BasePanel bp = new BasePanel(ths, db, file, meta, encoding);
+  public BasePanel addTab(BibtexDatabase db, File file, HashMap<String, String> meta, String encoding, boolean raisePanel) {
+      BasePanel bp = new BasePanel(JabRefFrame.this, db, file, meta, encoding);
       addTab(bp, file, raisePanel);
       return bp;
   }
@@ -1473,16 +1490,16 @@ public JabRefPreferences prefs() {
 
     public void actionPerformed(ActionEvent e) {
       KeyBindingsDialog d = new KeyBindingsDialog
-          ( (HashMap) prefs.getKeyBindings().clone(),
+          ( new HashMap<String, String>(prefs.getKeyBindings()),
            prefs.getDefaultKeys());
       d.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       d.pack(); //setSize(300,500);
-      Util.placeDialog(d, ths);
+      Util.placeDialog(d, JabRefFrame.this);
       d.setVisible(true);
       if (d.getAction()) {
         prefs.setNewKeyBindings(d.getNewKeyBindings());
         JOptionPane.showMessageDialog
-            (ths,
+            (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."),
@@ -1531,7 +1548,7 @@ public JabRefPreferences prefs() {
             }
 
             if (basePanel().baseChanged) {
-                int answer = JOptionPane.showConfirmDialog(ths, Globals
+                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)) {
@@ -1605,8 +1622,6 @@ class ImportCiteSeerAction
                         (new Thread() {
 
                                 BasePanel currentBp;
-                                BibtexEntry toShow;
-                                //String id;
                                 int[] clickedOn = null;
 
                                 class UpdateComponent implements Runnable {
@@ -1640,7 +1655,6 @@ class ImportCiteSeerAction
                                                 Globals.lang("CiteSeer Import Error"),
                                                 JOptionPane.WARNING_MESSAGE);
                                         }
-                                        toShow = (BibtexEntry)currentBp.mainTable.getSelected().get(0);
                                         if (clickedOn != null) {
                                                 citeSeerFetcher.beginImportCiteSeerProgress();
                                                 NamedCompound citeseerNamedCompound =
@@ -1708,7 +1722,7 @@ class FetchCiteSeerAction
 
                                   public void run() {
                                         try {
-                                                newBp = new BasePanel(ths);
+                                                newBp = new BasePanel(JabRefFrame.this);
                                                 int errorCode;
                                                 targetBp = (BasePanel) tabbedPane.getSelectedComponent();
                                                 newDatabase = newBp.getDatabase();
@@ -1754,14 +1768,14 @@ class FetchCiteSeerAction
       {
         // Create a new, empty, database.
 
-        FromAuxDialog dialog = new FromAuxDialog(ths, "", true, ths.tabbedPane) ;
+        FromAuxDialog dialog = new FromAuxDialog(JabRefFrame.this, "", true, JabRefFrame.this.tabbedPane) ;
 
-        Util.placeDialog(dialog, ths);
+        Util.placeDialog(dialog, JabRefFrame.this);
         dialog.setVisible(true) ;
 
         if (dialog.okPressed())
         {
-          BasePanel bp = new BasePanel( ths,
+          BasePanel bp = new BasePanel( JabRefFrame.this,
                                         dialog.getGenerateDB(),   // database
                                         null,                     // file
                                         null, Globals.prefs.get("defaultEncoding"));                     // meta data
@@ -1793,8 +1807,8 @@ class FetchCiteSeerAction
          BibtexDatabase refBase = bp.getDatabase() ;
          if (refBase != null)
          {
-             IntegrityWizard wizard = new IntegrityWizard(ths, basePanel()) ;
-             Util.placeDialog(wizard, ths);
+             IntegrityWizard wizard = new IntegrityWizard(JabRefFrame.this, basePanel()) ;
+             Util.placeDialog(wizard, JabRefFrame.this);
              wizard.setVisible(true) ;
 
          }
@@ -1802,42 +1816,6 @@ class FetchCiteSeerAction
       }
     }
 
-  class FetchMedlineAction extends MnemonicAwareAction {
-        public FetchMedlineAction() {
-            super(GUIGlobals.getImage("medline"));
-            putValue(NAME, "Fetch Medline");
-            putValue(ACCELERATOR_KEY, prefs.getKey("Fetch Medline"));
-            putValue(SHORT_DESCRIPTION, Globals.lang("Fetch Medline by ID"));
-        }
-
-        public void actionPerformed(ActionEvent e) {
-            if (tabbedPane.getTabCount() > 0) {
-                sidePaneManager.toggle("fetchMedline");
-                if (sidePaneManager.isComponentVisible("fetchMedline")) {
-                    new FocusRequester(medlineFetcher.getTextField());
-                }
-            }
-        }
-    }
-
-  class CiteSeerPanelAction extends MnemonicAwareAction {
-        public CiteSeerPanelAction() {
-            super(GUIGlobals.getImage("medline"));
-            putValue(NAME, "Fetch CiteSeer");
-            putValue(ACCELERATOR_KEY, prefs.getKey("Fetch CiteSeer"));
-            putValue(SHORT_DESCRIPTION, Globals.lang("Fetch CiteSeer by ID"));
-        }
-
-        public void actionPerformed(ActionEvent e) {
-            if (tabbedPane.getTabCount() > 0) {
-                sidePaneManager.toggle("CiteSeerPanel");
-                if (sidePaneManager.isComponentVisible("CiteSeerPanel")) {
-                    new FocusRequester(citeSeerFetcherPanel.getTextField());
-                }
-            }
-        }
-    }
-
   // The action for opening the preferences dialog.
   AbstractAction showPrefs = new ShowPrefsAction();
 
@@ -1855,49 +1833,56 @@ class FetchCiteSeerAction
   }
 
   /**
-   * 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?
-   * @param callBack The callback for the ImportInspectionDialog to use.
-   */
-  public void addImportedEntries(final BasePanel panel, final List entries, String filename, final boolean openInNew,
-                                 final ImportInspectionDialog.CallBack callBack) {
-      // 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(ths, panel,
-                          BibtexFields.DEFAULT_INSPECTION_FIELDS,
-                          Globals.lang("Import"), openInNew);
-                  diag.addEntries(entries);
-                  diag.addCallBack(callBack);
-                  diag.entryListComplete();
-                  Util.placeDialog(diag, ths);
-                  diag.setVisible(true);
-                  diag.toFront();
-              }
-          });
-                
-        } else {
-            ths.addBibEntries(entries, filename, openInNew);
-          if ((panel != null) && (entries.size() == 1)) {
-              SwingUtilities.invokeLater(new Runnable() {
-                  public void run() {
-                      panel.highlightEntry((BibtexEntry)entries.get(0));
-                  }
-              });
-
+     * 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?
+     * @param callBack
+     *            The callback for the ImportInspectionDialog to use.
+     */
+    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.
@@ -1907,12 +1892,12 @@ class FetchCiteSeerAction
      * @param intoNew Determines if the entries will be put in a new database or in the current
      * one.
      */
-  public int addBibEntries(java.util.List bibentries, String filename,
+  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(ths, Globals.lang("No entries found. Please make sure you are "
+      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;
@@ -1927,10 +1912,7 @@ class FetchCiteSeerAction
     if (intoNew || (tabbedPane.getTabCount() == 0)) {
       // Import into new database.
       BibtexDatabase database = new BibtexDatabase();
-      Iterator it = bibentries.iterator();
-      while (it.hasNext()) {
-        BibtexEntry entry = (BibtexEntry) it.next();
-
+      for (BibtexEntry entry : bibentries){
         try {
           entry.setId(Util.createNeutralId());
           database.insertEntry(entry);
@@ -1940,10 +1922,10 @@ class FetchCiteSeerAction
           System.err.println("KeyCollisionException [ addBibEntries(...) ]");
         }
       }
-      HashMap meta = new HashMap();
+      HashMap<String, String> meta = new HashMap<String, String>();
       // Metadata are only put in bibtex files, so we will not find it
       // in imported files. Instead we pass an empty HashMap.
-      BasePanel bp = new BasePanel(ths, database, null, meta, Globals.prefs.get("defaultEncoding"));
+      BasePanel bp = new BasePanel(JabRefFrame.this, database, null, meta, Globals.prefs.get("defaultEncoding"));
       /*
             if (prefs.getBoolean("autoComplete")) {
             db.setCompleters(autoCompleters);
@@ -1966,20 +1948,19 @@ class FetchCiteSeerAction
       BibtexDatabase database = basePanel.database;
       int oldCount = database.getEntryCount();
       NamedCompound ce = new NamedCompound(Globals.lang("Import entries"));
-      Iterator it = bibentries.iterator();
 
-      mainLoop: while (it.hasNext()) {
-        BibtexEntry entry = (BibtexEntry) it.next();
+      mainLoop: 
+      for (BibtexEntry entry : bibentries){
         boolean dupli = false;
         // Check for duplicates among the current entries:
         if (checkForDuplicates) {
-            loop: for (Iterator i2=database.getKeySet().iterator();
+            loop: for (Iterator<String> i2=database.getKeySet().iterator();
                        i2.hasNext();) {
-                BibtexEntry existingEntry = database.getEntryById((String)i2.next());
-                if (Util.isDuplicate(entry, existingEntry,
-                                     Globals.duplicateThreshold)) {
+                BibtexEntry existingEntry = database.getEntryById(i2.next());
+                if (DuplicateCheck.isDuplicate(entry, existingEntry
+                )) {
                     DuplicateResolverDialog drd = new DuplicateResolverDialog
-                        (ths, existingEntry, entry, DuplicateResolverDialog.IMPORT_CHECK);
+                        (JabRefFrame.this, existingEntry, entry, DuplicateResolverDialog.IMPORT_CHECK);
                     drd.setVisible(true);
                     int res = drd.getSelected();
                     if (res == DuplicateResolverDialog.KEEP_LOWER)   {
@@ -2032,35 +2013,31 @@ class FetchCiteSeerAction
       importMenu.removeAll();
 
       // Add a menu item for autodetecting import format:
-      importMenu.add(new ImportMenuItem(ths, intoNew));
+      importMenu.add(new ImportMenuItem(JabRefFrame.this, intoNew));
 
       // Add custom importers
       importMenu.addSeparator();
 
-      SortedSet customImporters = Globals.importFormatReader.getCustomImportFormats();
+      SortedSet<ImportFormat> customImporters = Globals.importFormatReader.getCustomImportFormats();
       JMenu submenu = new JMenu(Globals.lang("Custom importers"));
       submenu.setMnemonic(KeyEvent.VK_S);
-      /*if (customImporters.size() == 0) {
-        submenu.setEnabled(false);
-        submenu.setToolTipText(Globals.lang("No custom imports registered yet."));
-      } else {*/
-        // Put in all formatters registered in ImportFormatReader:
-        for (Iterator i=customImporters.iterator(); i.hasNext();) {
-            ImportFormat imFo = (ImportFormat)i.next();
-            submenu.add(new ImportMenuItem(ths, intoNew, imFo));
+      
+      // 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 (Iterator i=Globals.importFormatReader.getBuiltInInputFormats().iterator(); i.hasNext();) {
-          ImportFormat imFo = (ImportFormat)i.next();
-          importMenu.add(new ImportMenuItem(ths, intoNew, imFo));
+      for (ImportFormat imFo : Globals.importFormatReader.getBuiltInInputFormats()){
+          importMenu.add(new ImportMenuItem(JabRefFrame.this, intoNew, imFo));
       }
   }
 
@@ -2093,7 +2070,6 @@ class FetchCiteSeerAction
      */
     public void block() {
         getGlassPane().setVisible(true);
-        //getGlassPane().setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
     }
 
     /**
@@ -2102,10 +2078,8 @@ class FetchCiteSeerAction
      */
     public void unblock() {
         getGlassPane().setVisible(false);
-        //  getGlassPane().setCursor(Cursor.WAIT_CURSOR);
     }
 
-
     /** Set the visibility of the progress bar in the right end of the
       * status line at the bottom of the frame.
       *
@@ -2190,13 +2164,13 @@ class SaveSessionAction
       // Here we store the names of allcurrent filea. If
       // there is no current file, we remove any
       // previously stored file name.
-      Vector filenames = new Vector();
+      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
-                (ths, Globals.lang
+                (JabRefFrame.this, Globals.lang
                  ("This untitled database must be saved first to be "
                   + "included in the saved session. Save now?"),
                  Globals.lang("Save database"),
@@ -2222,7 +2196,7 @@ class SaveSessionAction
       else {
         String[] names = new String[filenames.size()];
         for (int i = 0; i < filenames.size(); i++) {
-          names[i] = (String) filenames.elementAt(i);
+          names[i] = filenames.elementAt(i);
         }
         prefs.putStringArray("savedSession", names);
         output(Globals.lang("Saved session") + ".");
@@ -2251,7 +2225,7 @@ class SaveSessionAction
       output(Globals.lang("Loading session..."));
       (new Thread() {
         public void run() {
-          HashSet currentFiles = new HashSet();
+          HashSet<String> currentFiles = new HashSet<String>();
           if (tabbedPane.getTabCount() > 0) {
             for (int i = 0; i < tabbedPane.getTabCount(); i++) {
                 if (baseAt(i).getFile() != null)
@@ -2341,7 +2315,7 @@ class SaveSessionAction
     }
 
     public void actionPerformed(ActionEvent e) {
-      ExportCustomizationDialog ecd = new ExportCustomizationDialog(ths);
+      ExportCustomizationDialog ecd = new ExportCustomizationDialog(JabRefFrame.this);
       ecd.setVisible(true);
     }
   }
@@ -2352,7 +2326,7 @@ class SaveSessionAction
     }
 
     public void actionPerformed(ActionEvent e) {
-      ImportCustomizationDialog ecd = new ImportCustomizationDialog(ths);
+      ImportCustomizationDialog ecd = new ImportCustomizationDialog(JabRefFrame.this);
       ecd.setVisible(true);
     }
   }
@@ -2363,8 +2337,8 @@ class SaveSessionAction
             putValue(NAME, "Customize entry types");
         }
         public void actionPerformed(ActionEvent e) {
-            JDialog dl = new EntryCustomizationDialog2(ths);
-            Util.placeDialog(dl, ths);
+            JDialog dl = new EntryCustomizationDialog2(JabRefFrame.this);
+            Util.placeDialog(dl, JabRefFrame.this);
             dl.setVisible(true);
         }
     }
@@ -2374,8 +2348,8 @@ class SaveSessionAction
             putValue(NAME, "Set up general fields");
         }
         public void actionPerformed(ActionEvent e) {
-            GenFieldsCustomizer gf = new GenFieldsCustomizer(ths);
-            Util.placeDialog(gf, ths);
+            GenFieldsCustomizer gf = new GenFieldsCustomizer(JabRefFrame.this);
+            Util.placeDialog(gf, JabRefFrame.this);
             gf.setVisible(true);
 
         }
@@ -2425,4 +2399,16 @@ class SaveSessionAction
       // 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);
+  }
 }
diff --git a/src/java/net/sf/jabref/JabRefPreferences.java b/src/java/net/sf/jabref/JabRefPreferences.java
index d48efc9..39f3944 100644
--- a/src/java/net/sf/jabref/JabRefPreferences.java
+++ b/src/java/net/sf/jabref/JabRefPreferences.java
@@ -27,21 +27,37 @@ http://www.gnu.org/copyleft/gpl.ja.html
 
 package net.sf.jabref;
 
-import java.io.*;
-import javax.swing.*;
+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 javax.swing.JTable;
+import javax.swing.KeyStroke;
 
-import net.sf.jabref.labelPattern.DefaultLabelPatterns;
-import net.sf.jabref.labelPattern.LabelPattern;
 import net.sf.jabref.export.CustomExportList;
-import net.sf.jabref.imports.CustomImportList;
-import java.awt.*;
-import java.util.prefs.*;
-import java.util.*;
-import java.util.List;
-import java.awt.event.*;
 import net.sf.jabref.export.ExportComparator;
 import net.sf.jabref.external.ExternalFileType;
 import net.sf.jabref.external.UnknownExternalFileType;
+import net.sf.jabref.imports.CustomImportList;
+import net.sf.jabref.labelPattern.DefaultLabelPatterns;
+import net.sf.jabref.labelPattern.LabelPattern;
 
 public class JabRefPreferences {
 
@@ -59,11 +75,12 @@ public class JabRefPreferences {
     public String WRAPPED_USERNAME;
 
     Preferences prefs;
-    public HashMap defaults = new HashMap(),
-        keyBinds = new HashMap(),
-        defKeyBinds = new HashMap();
-    private HashSet putBracesAroundCapitalsFields = new HashSet(4);
-    private HashSet nonWrappableFields = new HashSet(4);
+    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>(4);
     private static final LabelPattern KEY_PATTERN = new DefaultLabelPatterns();
     private static LabelPattern keyPattern;
 
@@ -77,7 +94,7 @@ public class JabRefPreferences {
     private EntryEditorTabList tabList = null;
 
     // Map containing all registered external file types:
-    private TreeSet externalFileTypes = new TreeSet();
+    private TreeSet<ExternalFileType> externalFileTypes = new TreeSet<ExternalFileType>();
 
     // 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
@@ -98,8 +115,15 @@ public class JabRefPreferences {
     // 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);
-        //Util.pr(prefs.toString());
         
         if (Globals.osName.equals(Globals.MAC)) {
 			defaults.put("pdfviewer", "/Applications/Preview.app");
@@ -201,6 +225,9 @@ public class JabRefPreferences {
         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;citeseerurl;"+
                      "pdf;comment;owner");
@@ -260,6 +287,8 @@ public class JabRefPreferences {
         defaults.put("warnBeforeOverwritingKey", Boolean.TRUE);
         defaults.put("confirmDelete", Boolean.TRUE);
         defaults.put("grayOutNonHits", Boolean.TRUE);
+        defaults.put("showSearchInDialog", Boolean.FALSE);
+        defaults.put("searchAllBases", Boolean.FALSE);
         defaults.put("defaultLabelPattern", "[auth][year]");
         defaults.put("previewEnabled", Boolean.TRUE);
         defaults.put("preview0", "<font face=\"arial\">"
@@ -297,13 +326,15 @@ public class JabRefPreferences {
                      +"\\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>");
+        // 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");
         defaults.put("useImportInspectionDialog", Boolean.TRUE);
-        defaults.put("useImportInspectionDialogForSingle", Boolean.FALSE);
+        defaults.put("useImportInspectionDialogForSingle", Boolean.TRUE);
         defaults.put("generateKeysAfterInspection", Boolean.TRUE);
         defaults.put("warnAboutDuplicatesInInspection", Boolean.TRUE);
         defaults.put("useTimeStamp", Boolean.TRUE);
@@ -318,7 +349,11 @@ public class JabRefPreferences {
 
         defaults.put("personalJournalList", null);
         defaults.put("externalJournalLists", null);
-        defaults.put("citeCommand", "cite");
+        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);
@@ -328,6 +363,8 @@ public class JabRefPreferences {
 
         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);
 
@@ -371,14 +408,14 @@ public class JabRefPreferences {
         if (fieldString.length() > 0) {
             String[] fields = fieldString.split(";");
             for (int i=0; i<fields.length; i++)
-                putBracesAroundCapitalsFields.add(fields[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]);
+                nonWrappableFields.add(fields[i].trim());
         }
 
     }
@@ -401,21 +438,37 @@ public class JabRefPreferences {
     }
 
     public boolean getBoolean(String key) {
-        return prefs.getBoolean(key, ((Boolean)defaults.get(key)).booleanValue());
+        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, ((Double)defaults.get(key)).doubleValue());
+        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, ((Integer)defaults.get(key)).intValue());
+        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, (byte[])defaults.get(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);
     }
@@ -473,7 +526,7 @@ public class JabRefPreferences {
             return null;
 
         StringReader rd = new StringReader(names);
-        Vector arr = new Vector();
+        Vector<String> arr = new Vector<String>();
         String rs;
         try {
             while ((rs = getNextUnit(rd)) != null) {
@@ -482,7 +535,7 @@ public class JabRefPreferences {
         } catch (IOException ex) {}
         String[] res = new String[arr.size()];
         for (int i=0; i<res.length; i++)
-            res[i] = (String)arr.elementAt(i);
+            res[i] = arr.elementAt(i);
 
         return res;
     }
@@ -505,6 +558,16 @@ public class JabRefPreferences {
     }
 
     /**
+     * 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.
@@ -539,13 +602,13 @@ public class JabRefPreferences {
      */
     public KeyStroke getKey(String bindName) {
 
-        String s = (String)keyBinds.get(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 = (String)defKeyBinds.get(bindName);
+            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.
@@ -553,7 +616,6 @@ public class JabRefPreferences {
         }
         if (s == null) {
           Globals.logger("Could not get key binding for \"" + bindName + "\"");
-          //throw new RuntimeException("");
         }
 
         if (Globals.ON_MAC)
@@ -584,39 +646,49 @@ public class JabRefPreferences {
     /**
      * Returns the HashMap containing all key bindings.
      */
-    public HashMap getKeyBindings() {
+    public HashMap<String, String> getKeyBindings() {
         return keyBinds;
     }
 
     /**
      * Returns the HashMap containing default key bindings.
      */
-    public HashMap getDefaultKeys() {
+    public HashMap<String, String> getDefaultKeys() {
         return defKeyBinds;
     }
 
+    /**
+     * Calling this method will write all preferences into the preference store.
+     */
     public void flush() {
-    try {
-        prefs.flush();
-    } catch (BackingStoreException ex) {
-        ex.printStackTrace();
-    }
+        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 newBindings) {
+    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 i=newBindings.keySet().iterator();
+            for (Iterator<String> i=newBindings.keySet().iterator();
                  i.hasNext();) {
-                String nm = (String)i.next();
-                String bnd = (String)newBindings.get(nm);
+                String nm = i.next();
+                String bnd = newBindings.get(nm);
                 bindNames[index] = nm;
                 bindings[index] = bnd;
                 index++;
@@ -664,9 +736,7 @@ public class JabRefPreferences {
                 Globals.logger("BackingStoreException in JabRefPreferences.putKeyPattern");
             }
 
-            Iterator i = pattern.keySet().iterator();
-            while (i.hasNext()) {
-                String s = (String)i.next();
+            for (String s: pattern.keySet()){
                 if (!(pattern.get(s)).equals(parent.get(s)))
                     pre.put(s, pattern.getValue(s).get(0).toString());
             }
@@ -757,6 +827,7 @@ public class JabRefPreferences {
         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");
@@ -775,9 +846,14 @@ public class JabRefPreferences {
         defKeyBinds.put("Unabbreviate", "ctrl alt shift A");
         defKeyBinds.put("Search IEEEXplore", "F8");
         defKeyBinds.put("Fetch ArXiv.org", "shift F8");
+        defKeyBinds.put("Search JSTOR", "shift F9");
+        defKeyBinds.put("Fetch SPIRES", "ctrl F8");
         defKeyBinds.put("Write XMP", "ctrl F4");
         defKeyBinds.put("New file link", "ctrl N");
-        //defKeyBinds.put("Select value", "ctrl B");
+        defKeyBinds.put("Fetch SPIRES", "ctrl F8");
+
+        defKeyBinds.put("Import into current database", "ctrl I");
+        defKeyBinds.put("Import into new database", "ctrl shift I");
     }
 
     private String getNextUnit(Reader data) throws IOException {
@@ -877,9 +953,9 @@ public class JabRefPreferences {
         ExternalFileType tp = new ExternalFileType("URL", "html", "firefox", "www");
         list.add(tp);
 
-        // Under Windows/Mac we initialize all file types with an empty viewer app, to
+        // Under Windows we initialize all file types with an empty viewer app, to
         // rely on the default app instead:
-        if (Globals.ON_WIN || Globals.ON_MAC) {
+        if (Globals.ON_WIN) {
             for (Iterator<ExternalFileType> iterator = list.iterator(); iterator.hasNext();) {
                 ExternalFileType type = iterator.next();
                 type.setOpenWith("");
@@ -890,7 +966,7 @@ public class JabRefPreferences {
     }
 
     public ExternalFileType[] getExternalFileTypeSelection() {
-        return (ExternalFileType[])externalFileTypes.toArray
+        return externalFileTypes.toArray
                 (new ExternalFileType[externalFileTypes.size()]);
     }
 
@@ -900,8 +976,8 @@ public class JabRefPreferences {
      * @return The ExternalFileType registered, or null if none.
      */
     public ExternalFileType getExternalFileTypeByName(String name) {
-        for (Iterator iterator = externalFileTypes.iterator(); iterator.hasNext();) {
-            ExternalFileType type = (ExternalFileType) iterator.next();
+        for (Iterator<ExternalFileType> iterator = externalFileTypes.iterator(); iterator.hasNext();) {
+            ExternalFileType type = iterator.next();
             if (type.getName().equals(name))
                 return type;
         }
@@ -915,8 +991,8 @@ public class JabRefPreferences {
      * @return The ExternalFileType registered, or null if none.
      */
     public ExternalFileType getExternalFileTypeByExt(String extension) {
-        for (Iterator iterator = externalFileTypes.iterator(); iterator.hasNext();) {
-            ExternalFileType type = (ExternalFileType) iterator.next();
+        for (Iterator<ExternalFileType> iterator = externalFileTypes.iterator(); iterator.hasNext();) {
+            ExternalFileType type = iterator.next();
             if (type.getExtension().equals(extension))
                 return type;
         }
diff --git a/src/java/net/sf/jabref/KeyBindingsDialog.java b/src/java/net/sf/jabref/KeyBindingsDialog.java
index 2d3da7c..390db4f 100644
--- a/src/java/net/sf/jabref/KeyBindingsDialog.java
+++ b/src/java/net/sf/jabref/KeyBindingsDialog.java
@@ -27,12 +27,17 @@
 
 package net.sf.jabref;
 
-import java.util.*;
+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 java.awt.*;
-import java.awt.event.*;
-import javax.swing.event.*;
 import javax.swing.table.TableColumnModel;
 
 //
@@ -43,18 +48,18 @@ class KeyBindingsDialog
   //JList list = new JList();
   JTextField keyTF = new JTextField();
   JButton ok, cancel, grabB, defB;
-  HashMap bindHM, defBinds;
+  HashMap<String, String> bindHM, defBinds;
   boolean clickedSave = false;
   int selectedRow = -1;
   boolean getAction() {
     return clickedSave;
   }
 
-  HashMap getNewKeyBindings() {
+  HashMap<String, String> getNewKeyBindings() {
     return bindHM;
   }
 
-  public KeyBindingsDialog(HashMap name2binding, HashMap defBinds) {
+  public KeyBindingsDialog(HashMap<String, String> name2binding, HashMap<String, String> defBinds) {
     super();
     this.defBinds = defBinds;
     setTitle(Globals.lang("Key bindings"));
@@ -157,7 +162,7 @@ class KeyBindingsDialog
       }
       keyTF.setText(newKey);
       //find which key is selected and set its value int the bindHM
-      String selectedFunction = (String) table.getOriginalName(selRow);
+      String selectedFunction = table.getOriginalName(selRow);
       table.setValueAt(newKey, selRow, 1);
       table.revalidate();
       table.repaint();
@@ -188,71 +193,29 @@ class KeyBindingsDialog
         // Iterate all selected items
         for (int i = 0; i < selected.length; i++) {
           Object sel = selected[i];
-          keyTF.setText( (String) bindHM.get(sel));
+          keyTF.setText( bindHM.get(sel));
         }
       }
     }
   }
 
-  class MyListDataListener
-      implements ListDataListener {
-    // This method is called when new items have been added to the list
-    public void intervalAdded(ListDataEvent evt) {
-      DefaultListModel model = (DefaultListModel) evt.getSource();
-
-      // Get range of new  items
-      int start = evt.getIndex0();
-      int end = evt.getIndex1();
-      int count = end - start + 1;
-
-      // Get new items
-      for (int i = start; i <= end; i++) {
-        Object item = model.getElementAt(i);
-      }
-    }
-
-    // This method is called when items have been removed from the list
-    public void intervalRemoved(ListDataEvent evt) {
-      // Get range of removed items
-      int start = evt.getIndex0();
-      int end = evt.getIndex1();
-      int count = end - start + 1;
-
-      // The removed items are not available
-    }
-
-    // This method is called when items in the list are replaced
-    public void contentsChanged(ListDataEvent evt) {
-      DefaultListModel model = (DefaultListModel) evt.getSource();
-
-      // Get range of changed items
-      int start = evt.getIndex0();
-      int end = evt.getIndex1();
-      int count = end - start + 1;
-
-      // Get changed items
-      for (int i = start; i <= end; i++) {
-        Object item = model.getElementAt(i);
-      }
-    }
-  }
+  
 
   //setup so that clicking on list will display the current binding
   void setList() {
 
-    DefaultListModel listModel = new DefaultListModel();
-    Iterator it = bindHM.keySet().iterator();
+    Iterator<String> it = bindHM.keySet().iterator();
     String[][] tableData = new String[bindHM.size()][3];
     int i=0;
     while (it.hasNext()) {
-      String s = (String) it.next();
+      String s = it.next();
       tableData[i][2] = s;
-      tableData[i][1] = (String) bindHM.get(s);
+      tableData[i][1] = bindHM.get(s);
       tableData[i][0] = Globals.lang(s);
       i++;
       //listModel.addElement(s + " (" + bindHM.get(s) + ")");
    }
-   TreeMap sorted = new TreeMap();
+   TreeMap<String, String[]> sorted = new TreeMap<String, String[]>();
    for (i=0; i<tableData.length; i++)
      sorted.put(tableData[i][0], tableData[i]);
 
@@ -279,12 +242,12 @@ class KeyBindingsDialog
     class KeystrokeTableModel extends AbstractTableModel {
       String[][] data;
       //String[] trData;
-      public KeystrokeTableModel(TreeMap sorted) {
+      public KeystrokeTableModel(TreeMap<String, String[]> sorted) {
         data = new String[sorted.size()][3];
-        Iterator i = sorted.keySet().iterator();
+        Iterator<String> i = sorted.keySet().iterator();
         int row = 0;
         while (i.hasNext()) {
-          data[row++] = ((String[])sorted.get(i.next()));
+          data[row++] = sorted.get(i.next());
         }
         //for (int i=0; i<trData.length; i++)
         //  trData[i] = Globals.lang(data[i][0]);
@@ -341,7 +304,7 @@ class KeyBindingsDialog
   }
 
   String setToDefault(String name) {
-    String defKey = (String) defBinds.get(name);
+    String defKey = defBinds.get(name);
     bindHM.put(name, defKey);
     return defKey;
   }
diff --git a/src/java/net/sf/jabref/KeyCollisionException.java b/src/java/net/sf/jabref/KeyCollisionException.java
index 3c2717f..0d82844 100644
--- a/src/java/net/sf/jabref/KeyCollisionException.java
+++ b/src/java/net/sf/jabref/KeyCollisionException.java
@@ -25,7 +25,7 @@ http://www.gnu.org/copyleft/gpl.ja.html
 */
 package net.sf.jabref;
 
-public class KeyCollisionException extends Exception
+public class KeyCollisionException extends RuntimeException
 {
     public KeyCollisionException()
     {
diff --git a/src/java/net/sf/jabref/MarkedComparator.java b/src/java/net/sf/jabref/MarkedComparator.java
index 48ae85d..6cad04b 100644
--- a/src/java/net/sf/jabref/MarkedComparator.java
+++ b/src/java/net/sf/jabref/MarkedComparator.java
@@ -9,17 +9,14 @@ import java.util.Comparator;
  * Time: 11:35:02 PM
  * To change this template use File | Settings | File Templates.
  */
-public class MarkedComparator implements Comparator {
+public class MarkedComparator implements Comparator<BibtexEntry> {
 
-    Comparator next;
+    Comparator<BibtexEntry> next;
 
-    public MarkedComparator(Comparator next) {
+    public MarkedComparator(Comparator<BibtexEntry> next) {
         this.next = next;
     }
-    public int compare(Object o1, Object o2) {
-
-        BibtexEntry e1 = (BibtexEntry)o1,
-            e2 = (BibtexEntry)o2;
+    public int compare(BibtexEntry e1, BibtexEntry e2) {
 
         if (e1 == e2)
             return 0;
@@ -28,7 +25,7 @@ public class MarkedComparator implements Comparator {
                 mrk2 = Util.isMarked(e2);
 
         if (mrk1 == mrk2)
-            return (next != null ? next.compare(o1, o2) : idCompare(e1, e2));
+            return (next != null ? next.compare(e1, e2) : idCompare(e1, e2));
 
         else if (mrk2)
             return 1;
@@ -36,6 +33,6 @@ public class MarkedComparator implements Comparator {
     }
 
     private int idCompare(BibtexEntry b1, BibtexEntry b2) {
-	    return ((String)(b1.getId())).compareTo((String)(b2.getId()));
+	    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 0d56060..4af106b 100644
--- a/src/java/net/sf/jabref/MergeDialog.java
+++ b/src/java/net/sf/jabref/MergeDialog.java
@@ -1,9 +1,12 @@
 package net.sf.jabref;
 
-import java.awt.*;
+import java.awt.BorderLayout;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.awt.event.ActionEvent;
+
 import javax.swing.*;
-import javax.swing.border.*;
-import java.awt.event.*;
 
 /**
  * <p>Title: MergeDialog</p>
diff --git a/src/java/net/sf/jabref/MetaData.java b/src/java/net/sf/jabref/MetaData.java
index 8af7832..25b9285 100644
--- a/src/java/net/sf/jabref/MetaData.java
+++ b/src/java/net/sf/jabref/MetaData.java
@@ -27,35 +27,43 @@
 package net.sf.jabref;
 
 import java.io.*;
-import java.util.*;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.StringTokenizer;
+import java.util.Vector;
 
-import net.sf.jabref.groups.*;
+import net.sf.jabref.groups.GroupTreeNode;
+import net.sf.jabref.groups.VersionHandling;
 
-public class MetaData {
-    private HashMap metaData = new HashMap();
+import net.sf.jabref.sql.DBStrings;
+
+public class MetaData implements Iterable<String> {
+    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 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 inData, BibtexDatabase db) {
+    public MetaData(HashMap<String, String> inData, BibtexDatabase db) {
         boolean groupsTreePresent = false;
-        Vector flatGroupsData = null;
-        Vector treeGroupsData = null;
+        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 (Iterator i = inData.keySet().iterator(); i.hasNext();) {
-            String key = (String) i.next();
-            data = new StringReader((String) inData.get(key));
+        if (inData != null) 
+        	for (String key : inData.keySet()){
+            data = new StringReader(inData.get(key));
             String unit;
-            Vector orderedData = new Vector();
+            Vector<String> orderedData = new Vector<String>();
             // We must allow for ; and \ in escape sequences.
             try {
                 while ((unit = getNextUnit(data)) != null) {
@@ -99,18 +107,18 @@ public class MetaData {
      * Add default metadata for new database:
      */
     public void initializeNewDatabase() {
-        metaData.put(Globals.SELECTOR_META_PREFIX + "keywords", new Vector());
-        metaData.put(Globals.SELECTOR_META_PREFIX + "author", new Vector());
-        metaData.put(Globals.SELECTOR_META_PREFIX + "journal", new Vector());
-        metaData.put(Globals.SELECTOR_META_PREFIX + "publisher", new Vector());
+        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>());
     }
 
-    public Iterator iterator() {
+    public Iterator<String> iterator() {
         return metaData.keySet().iterator();
     }
 
-    public Vector getData(String key) {
-        return (Vector) metaData.get(key);
+    public Vector<String> getData(String key) {
+        return metaData.get(key);
     }
 
     public void remove(String key) {
@@ -123,7 +131,7 @@ public class MetaData {
      * reconstructed from their textual (String) representation if they are of
      * type String, and stored as an actual instance.
      */
-    public void putData(String key, Vector orderedData) {
+    public void putData(String key, Vector<String> orderedData) {
         metaData.put(key, orderedData);
     }
 
@@ -139,9 +147,9 @@ public class MetaData {
         // metadata directory takes precedence if defined.
         String key = fieldName + "Directory";
         String dir;
-        Vector vec = getData(key);
+        Vector<String> vec = getData(key);
         if ((vec != null) && (vec.size() > 0)) {
-            dir = (String)vec.get(0);
+            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)) {
@@ -160,7 +168,7 @@ public class MetaData {
         return dir;
     }
 
-    private void putGroups(Vector orderedData, BibtexDatabase db, int version) {
+    private void putGroups(Vector<String> orderedData, BibtexDatabase db, int version) {
         try {
             groupsRoot = VersionHandling.importGroups(orderedData, db, 
                     version);
@@ -188,14 +196,14 @@ public class MetaData {
      */
     public void writeMetaData(Writer out) throws IOException {
         // write all meta data except groups
-        for (Iterator i = metaData.keySet().iterator(); i.hasNext();) {
-            String key = (String) i.next();
+        for (Iterator<String> i = metaData.keySet().iterator(); i.hasNext();) {
+            String key = i.next();
             StringBuffer sb = new StringBuffer();
-            Vector orderedData = (Vector) metaData.get(key);
+            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((String) orderedData.elementAt(j), ";", '\\')).append(";");
+                    sb.append(Util.quote(orderedData.elementAt(j), ";", '\\')).append(";");
                 }
                 sb.append("}");
                 sb.append(Globals.NEWLINE);
@@ -273,4 +281,12 @@ public class MetaData {
     public void setFile(File file) {
         this.file = file;
     }
+
+    public DBStrings getDBStrings() {
+        return dbStrings;
+    }
+
+    public void setDBStrings(DBStrings dbStrings) {
+        this.dbStrings = dbStrings;
+    }
 }
diff --git a/src/java/net/sf/jabref/MnemonicAwareAction.java b/src/java/net/sf/jabref/MnemonicAwareAction.java
index cdf7c58..c225bcc 100644
--- a/src/java/net/sf/jabref/MnemonicAwareAction.java
+++ b/src/java/net/sf/jabref/MnemonicAwareAction.java
@@ -28,7 +28,9 @@ http://www.gnu.org/copyleft/gpl.ja.html
 package net.sf.jabref;
 
 
-import javax.swing.*;
+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
@@ -54,7 +56,7 @@ public abstract class MnemonicAwareAction extends AbstractAction {
 	    int i = name.indexOf('&');
 	    if (i >= 0) {
 		char mnemonic = Character.toUpperCase(name.charAt(i+1));
-		putValue(Action.MNEMONIC_KEY, new Integer((int) mnemonic));
+		putValue(Action.MNEMONIC_KEY, new Integer(mnemonic));
 		value = name.substring(0, i) + name.substring(i+1);
 	    } else
                 value = name;
diff --git a/src/java/net/sf/jabref/NameCache.java b/src/java/net/sf/jabref/NameCache.java
deleted file mode 100644
index 8d1d1d0..0000000
--- a/src/java/net/sf/jabref/NameCache.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package net.sf.jabref;
-
-import java.util.HashMap;
-
-/**
- * HashMap that empties itself upon reaching a maximum entry count. Used to cache
- * name transformations for better performance. By doing this, we accomplish removing
- * old entries that may never be used again.
- * @author Morten O. Alver
- */
-public class NameCache extends HashMap {
-
-  int max, toAdd;
-
-  public NameCache(int max_) {
-    max = max_;
-    toAdd = max_;
-  }
-
-  public Object put(Object key, Object o) {
-    super.put(key, o);
-    if (size() > max) {
-
-      // We have reached the maximum entry count. Thus we remove all entries, and increase the
-      // max value.
-      clear();
-      max += toAdd;
-      super.put(key, o);
-    }
-
-    return o;
-  }
-}
diff --git a/src/java/net/sf/jabref/NameFormatterTab.java b/src/java/net/sf/jabref/NameFormatterTab.java
index 82fd516..42c85d0 100644
--- a/src/java/net/sf/jabref/NameFormatterTab.java
+++ b/src/java/net/sf/jabref/NameFormatterTab.java
@@ -7,18 +7,12 @@ import java.util.HashMap;
 import java.util.Map;
 import java.util.Vector;
 
-import javax.swing.AbstractAction;
-import javax.swing.BorderFactory;
-import javax.swing.JPanel;
-import javax.swing.JScrollPane;
-import javax.swing.JTable;
-import javax.swing.JToolBar;
-import javax.swing.SwingConstants;
+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.NameFormat;
+import net.sf.jabref.export.layout.format.plugin.NameFormat;
 
 import com.jgoodies.forms.builder.DefaultFormBuilder;
 import com.jgoodies.forms.layout.FormLayout;
@@ -29,9 +23,9 @@ public class NameFormatterTab extends JPanel implements PrefsTab {
 
 	public static final String NAME_FORMATER_KEY = "nameFormatterNames";
 
-	public static Map getNameFormatters(){
+	public static Map<String, String> getNameFormatters(){
 		
-		Map result = new HashMap();
+		Map<String, String> result = new HashMap<String, String>();
 
 		String[] names = Globals.prefs.getStringArray(NAME_FORMATER_KEY);
 		String[] formats = Globals.prefs.getStringArray(NAME_FORMATTER_VALUE);
@@ -59,7 +53,7 @@ public class NameFormatterTab extends JPanel implements PrefsTab {
 
 	private int rowCount = -1;
 
-	private Vector tableRows = new Vector(10);
+	private Vector<TableRow> tableRows = new Vector<TableRow>(10);
 
 	class TableRow {
 		String name;
@@ -99,7 +93,7 @@ public class NameFormatterTab extends JPanel implements PrefsTab {
 			public Object getValueAt(int row, int column) {
 				if (row >= tableRows.size())
 					return "";
-				TableRow tr = (TableRow) tableRows.elementAt(row);
+				TableRow tr = tableRows.elementAt(row);
 				if (tr == null)
 					return "";
 				switch (column) {
@@ -115,7 +109,7 @@ public class NameFormatterTab extends JPanel implements PrefsTab {
 				return (col == 0 ? Globals.lang("Formatter Name") : Globals.lang("Format String"));
 			}
 
-			public Class getColumnClass(int column) {
+			public Class<String> getColumnClass(int column) {
 				if (column == 0)
 					return String.class;
 				else
@@ -133,7 +127,7 @@ public class NameFormatterTab extends JPanel implements PrefsTab {
 				while (row >= tableRows.size())
 					tableRows.add(new TableRow());
 
-				TableRow rowContent = (TableRow) tableRows.elementAt(row);
+				TableRow rowContent = tableRows.elementAt(row);
 
 				if (col == 0)
 					rowContent.name = value.toString();
@@ -281,7 +275,7 @@ public class NameFormatterTab extends JPanel implements PrefsTab {
 			// First we remove all rows with empty names.
 			int i = 0;
 			while (i < tableRows.size()) {
-				if (((TableRow) tableRows.elementAt(i)).name.equals(""))
+				if (tableRows.elementAt(i).name.equals(""))
 					tableRows.removeElementAt(i);
 				else
 					i++;
@@ -290,7 +284,7 @@ public class NameFormatterTab extends JPanel implements PrefsTab {
 			String[] names = new String[tableRows.size()], formats = new String[tableRows.size()];
 
 			for (i = 0; i < tableRows.size(); i++) {
-				TableRow tr = (TableRow) tableRows.elementAt(i);
+				TableRow tr = tableRows.elementAt(i);
 				names[i] = tr.name;
 				formats[i] = tr.format;
 			}
diff --git a/src/java/net/sf/jabref/OpenFileFilter.java b/src/java/net/sf/jabref/OpenFileFilter.java
index 35584e2..5669763 100644
--- a/src/java/net/sf/jabref/OpenFileFilter.java
+++ b/src/java/net/sf/jabref/OpenFileFilter.java
@@ -1,11 +1,12 @@
 package net.sf.jabref;
 
-import java.util.*;
-import java.io.*;
+import java.io.File;
+import java.io.FilenameFilter;
+import java.util.HashSet;
 
 public class OpenFileFilter extends javax.swing.filechooser.FileFilter implements FilenameFilter {
 
-  HashSet extSet = new HashSet();
+  HashSet<String> extSet = new HashSet<String>();
   String desc;
 
   public OpenFileFilter(String[] extensions) {
diff --git a/src/java/net/sf/jabref/OutputPrinter.java b/src/java/net/sf/jabref/OutputPrinter.java
new file mode 100644
index 0000000..8882e8e
--- /dev/null
+++ b/src/java/net/sf/jabref/OutputPrinter.java
@@ -0,0 +1,11 @@
+package net.sf.jabref;
+
+public interface OutputPrinter {
+
+    void setStatus(String s);
+
+    void showMessage(Object message, String title, int msgType);
+
+    void showMessage(String string);
+
+}
diff --git a/src/java/net/sf/jabref/PrefsDialog2.java b/src/java/net/sf/jabref/PrefsDialog2.java
deleted file mode 100644
index d829a24..0000000
--- a/src/java/net/sf/jabref/PrefsDialog2.java
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
-Copyright (C) 2003 JabRef project
-
-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.*;
-import java.awt.event.*;
-import javax.swing.*;
-
-
-/**
- * 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.
- *
- * @deprecated Use PrefsDialog3 instead!
- *
- */
-public class PrefsDialog2 extends JDialog {
-
-    private JabRefPreferences _prefs;
-    JPanel upper = new JPanel(),
-        lower = new JPanel();
-    GridBagLayout gbl = new GridBagLayout();
-    GridBagConstraints con = new GridBagConstraints();
-    JTabbedPane tabbed = new JTabbedPane();
-    JabRefFrame frame;
-
-    public PrefsDialog2(JabRefFrame parent, JabRefPreferences prefs) {
-        super(parent, Globals.lang("JabRef preferences"), false);
-        _prefs = prefs;
-        frame = parent;
-        getContentPane().setLayout(gbl);
-        con.weighty = 1;
-        con.weightx = 1;
-        con.fill = GridBagConstraints.BOTH;
-        con.gridwidth = GridBagConstraints.REMAINDER;
-        con.insets = new Insets(5, 5, 0, 5);
-        gbl.setConstraints(tabbed, con);
-        getContentPane().add(tabbed);
-        con.weighty = 0;
-        con.gridheight = GridBagConstraints.REMAINDER;
-        gbl.setConstraints(lower, con);
-        //lower.setBackground(GUIGlobals.lightGray);
-        //getContentPane().setBackground(GUIGlobals.lightGray);
-        getContentPane().add(lower);
-
-        // ----------------------------------------------------------------
-        // Add new tabs to be displayed in the preferences here. 
-        // Remember, tabs must implement PrefsTab.
-        // ----------------------------------------------------------------
-        tabbed.addTab(Globals.lang("General"), new GeneralTab(frame, _prefs));
-        tabbed.addTab(Globals.lang("Appearance"), new TablePrefsTab(_prefs, parent));
-        //tabbed.addTab(Globals.lang("External programs"), new ExternalProgramsTab(_prefs));
-        tabbed.addTab(Globals.lang("Key pattern"), new TabLabelPattern(_prefs, parent.helpDiag));
-        tabbed.addTab(Globals.lang("Entry preview"), new PreviewPrefsTab(_prefs));
-        
-	if (!Globals.ON_MAC)
-	    tabbed.addTab(Globals.lang("Advanced"), new AdvancedTab(_prefs, parent.helpDiag));
-        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.add(ok);
-        lower.add(cancel);
-
-        // Key bindings:
-        ActionMap am = tabbed.getActionMap();
-        InputMap im = tabbed.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
-        im.put(frame.prefs().getKey("Close dialog"), "close");
-        am.put("close", cancelAction);
-
-        pack(); //setSize(440, 500);
-    }
-
-    class OkAction extends AbstractAction {
-        public OkAction() {
-            super("Ok");
-        }
-        public void actionPerformed(ActionEvent e) {
-
-	    AbstractWorker worker = new AbstractWorker() {
-		    public void run() {
-			// First check that all tabs are ready to close:
-			for (int i = 0; i < tabbed.getTabCount(); i++) {
-			    if (!((PrefsTab)tabbed.getComponentAt(i)).readyToClose())
-				return; // If not, break off.
-			}			
-			// Then store settings and close:
-			for (int i = 0; i < tabbed.getTabCount(); i++) {
-			    ( (PrefsTab) tabbed.getComponentAt(i)).storeSettings();
-			}
-
-			//try { Thread.sleep(3000); } catch (InterruptedException ex) {}
-		    }
-		    public void update() {
-			dispose();
-			frame.setupAllTables();
-			frame.output(Globals.lang("Preferences recorded."));
-		    }
-		};
-            worker.getWorker().run();
-            worker.getCallBack().update();
-            
-        }
-    }
-
-    class CancelAction extends AbstractAction {
-        public CancelAction() {
-            super("Cancel");
-
-        }
-        public void actionPerformed(ActionEvent e) {
-	    dispose();
-            // Just close dialog without recording changes.
-            /*(new Thread() {
-              public void run() {
-
-              }
-	      }).start();*/
-        }
-    }
-
-}
diff --git a/src/java/net/sf/jabref/PrefsDialog3.java b/src/java/net/sf/jabref/PrefsDialog3.java
index 671de67..ee718c3 100644
--- a/src/java/net/sf/jabref/PrefsDialog3.java
+++ b/src/java/net/sf/jabref/PrefsDialog3.java
@@ -27,13 +27,19 @@
 
 package net.sf.jabref;
 
-import java.awt.*;
-import java.awt.event.*;
-import java.io.*;
-import java.util.*;
+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.*;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
 
 import net.sf.jabref.groups.GroupsPrefsTab;
 import net.sf.jabref.gui.MainTable;
@@ -79,7 +85,7 @@ public class PrefsDialog3 extends JDialog {
 		// ----------------------------------------------------------------
 		// Add tabs to tabbed here. Remember, tabs must implement PrefsTab.
 		// ----------------------------------------------------------------
-		ArrayList tabs = new ArrayList();
+		ArrayList<PrefsTab> tabs = new ArrayList<PrefsTab>();
 		tabs.add(new GeneralTab(frame, prefs));
         tabs.add(new FileTab(frame, prefs));
         tabs.add(new EntryEditorPrefsTab(frame, prefs));
@@ -94,12 +100,12 @@ public class PrefsDialog3 extends JDialog {
 		tabs.add(new XmpPrefsTab());
         tabs.add(new AdvancedTab(prefs, parent.helpDiag));
 		
-		Iterator it = tabs.iterator();
+		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 = (PrefsTab) it.next();
+			PrefsTab tab = it.next();
 			names[i++] = tab.getTabName(); 
 			main.add((Component) tab, tab.getTabName());
             //comps.add((Component)tab); // for debug only
@@ -244,8 +250,6 @@ public class PrefsDialog3 extends JDialog {
 						((PrefsTab) comps[i]).storeSettings();
 					}
 					Globals.prefs.flush();
-					// try { Thread.sleep(3000); } catch (InterruptedException
-					// ex) {}
 				}
 
 				public void update() {
diff --git a/src/java/net/sf/jabref/PreviewPanel.java b/src/java/net/sf/jabref/PreviewPanel.java
index 52e734d..49501fb 100644
--- a/src/java/net/sf/jabref/PreviewPanel.java
+++ b/src/java/net/sf/jabref/PreviewPanel.java
@@ -1,37 +1,35 @@
 package net.sf.jabref;
 
-import java.awt.Dimension;
-import java.awt.Graphics;
-import java.awt.Graphics2D;
-import java.awt.RenderingHints;
-import java.awt.RenderingHints.Key;
+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 javax.swing.JEditorPane;
-import javax.swing.JScrollBar;
-import javax.swing.JScrollPane;
-import javax.swing.SwingUtilities;
+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.util.DocumentPrinter;
 
 /**
  * Displays an BibtexEntry using the given layout format.
  * 
  * @author $Author: mortenalver $
- * @version $Revision: 2173 $ ($Date: 2007-07-10 11:20:11 +0200 (Tue, 10 Jul 2007) $)
- *
+ * @version $Revision: 2597 $ ($Date: 2007-08-01 20:23:38 +0200 (Mi, 01 Aug
+ *          2007) $)
+ * 
  */
-public class PreviewPanel extends JEditorPane implements VetoableChangeListener {
-
-	public String CONTENT_TYPE = "text/html";
+public class PreviewPanel extends JPanel implements VetoableChangeListener {
 
+	/**
+	 * The bibtex entry currently shown
+	 */
 	BibtexEntry entry;
 
 	MetaData metaData;
@@ -46,103 +44,264 @@ public class PreviewPanel extends JEditorPane implements VetoableChangeListener
 
 	String layoutFile;
 
-	JScrollPane sp;
+	public JEditorPane previewPane;
 
-	public PreviewPanel(BibtexDatabase db, MetaData metaData, String layoutFile) {
-		this(metaData, layoutFile);
-		this.database = db;
-	}
+	JScrollPane scrollPane;
+
+	BasePanel panel;
 
-	public PreviewPanel(BibtexDatabase database, MetaData metaData, BibtexEntry entry, String layoutFile) {
-		this(metaData, layoutFile);
+	/**
+	 * 
+	 * @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(panel, metaData, layoutFile);
 		this.database = database;
 		setEntry(entry);
-
-		try {
-			readLayout();
-		} catch (Exception ex) {
-			ex.printStackTrace();
-		}
-		update();
-	}
-
-	public PreviewPanel(BibtexEntry entry, MetaData metaData, String layoutFile) {
-		this(null, metaData, entry, layoutFile);
 	}
 
 	/**
-	 * Emtpy Preview Panel constructor
 	 * 
+	 * @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(MetaData metaData, String layoutFile) {
+	public PreviewPanel(BasePanel panel, MetaData metaData, String layoutFile) {
+		super(new BorderLayout(), true);
+
+		this.panel = panel;
 		this.metaData = metaData;
 		this.layoutFile = layoutFile;
-		
-		sp = new JScrollPane(this, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
+		this.previewPane = createPreviewPane();
+
+		// Set up scroll pane for preview pane
+		scrollPane = new JScrollPane(previewPane,
+			JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
 			JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
-		sp.setBorder(null);
+		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);
+		}
+
+		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) {
+			if (printerService == null)
+				printerService = new DocumentPrinter();
+
+			// Background this, as it takes a while.
+			new Thread() {
+				public void run() {
+					try {
+						printerService.print(entry.getCiteKey(), previewPane);
+					} 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"));
+		}
 
-		setEditable(false);
-		setContentType(CONTENT_TYPE);
-		addHyperlinkListener(new HyperlinkListener() {
+		public void actionPerformed(ActionEvent e) {
+			panel.hideBottomComponent();
+		}
+	}
+
+	Action closeAction;
+
+	public Action getCloseAction() {
+		if (closeAction == null)
+			closeAction = new CloseAction();
+		return closeAction;
+	}
+
+	JPopupMenu createPopupMenu() {
+		JPopupMenu menu = new JPopupMenu();
+		menu.add(getPrintAction());
+
+		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();
+			}
+
+			public void paintComponent(Graphics g) {
+				Graphics2D g2 = (Graphics2D) g;
+				Object hint = g2
+					.getRenderingHint(RenderingHints.KEY_ANTIALIASING);
+				g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
+					RenderingHints.VALUE_ANTIALIAS_ON);
+				g2.setRenderingHint(RenderingHints.KEY_RENDERING,
+					RenderingHints.VALUE_RENDER_QUALITY);
+				super.paintComponent(g2);
+				g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, hint);
+			}
+		};
+		previewPane.setMargin(new Insets(3, 3, 3, 3));
+
+		previewPane.setComponentPopupMenu(createPopupMenu());
+		
+		previewPane.setEditable(false);
+		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");
+						Util.openExternalViewer(PreviewPanel.this.metaData,
+							address, "url");
 					} catch (IOException e) {
 						e.printStackTrace();
 					}
 				}
 			}
 		});
+		
+		return previewPane;
 	}
 
 	public void setDatabase(BibtexDatabase db) {
 		database = db;
 	}
 
-	public JScrollPane getPane() {
-		return sp;
-	}
+    public void setMetaData(MetaData metaData) {
+        this.metaData = metaData;
+    }
 
-	public void readLayout(String layoutFormat) throws Exception {
+    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);
+		StringReader sr = new StringReader(layoutFile.replaceAll("__NEWLINE__",
+			"\n"));
+		layout = new LayoutHelper(sr)
+			.getLayoutFromText(Globals.FORMATTER_PACKAGE);
 	}
 
-	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 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 void update() {
 
 		StringBuffer sb = new StringBuffer();
-		sb.append(layout.doLayout(entry, database));
-		setText(sb.toString());
-		invalidate();
-		revalidate();
+		if (entry != null)
+			sb.append(layout.doLayout(entry, database));
+		previewPane.setText(sb.toString());
+		previewPane.invalidate();
+		previewPane.revalidate();
 
 		// Scroll to top:
-		final JScrollBar bar = sp.getVerticalScrollBar();
+		final JScrollBar bar = scrollPane.getVerticalScrollBar();
 		SwingUtilities.invokeLater(new Runnable() {
 			public void run() {
 				bar.setValue(0);
@@ -154,28 +313,15 @@ public class PreviewPanel extends JEditorPane implements VetoableChangeListener
 		return (entry != null);
 	}
 
-	public Dimension getPreferredScrollableViewportSize() {
-		return getPreferredSize();
-	}
-
-	/*public void paintComponent(Graphics g) {
-		Graphics2D g2 = (Graphics2D) g;
-		Object hint = g2.getRenderingHint(RenderingHints.KEY_ANTIALIASING);
-		g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
-		g2.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
-		super.paintComponent(g2);
-		g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, hint);
-	}*/
-
-    /**
-     * 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 {
-        /*if (entry != null)
-            System.out.println("Updating: "+entry.getCiteKey());*/
-        
-        update();
-    }
+	/**
+	 * 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();
+	}
 }
diff --git a/src/java/net/sf/jabref/PreviewPrefsTab.java b/src/java/net/sf/jabref/PreviewPrefsTab.java
index f9b86f8..e0fb6e2 100644
--- a/src/java/net/sf/jabref/PreviewPrefsTab.java
+++ b/src/java/net/sf/jabref/PreviewPrefsTab.java
@@ -1,8 +1,13 @@
 package net.sf.jabref;
 
+import java.awt.Dimension;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
 import javax.swing.*;
-import java.awt.*;
-import java.awt.event.*;
 
 public class PreviewPrefsTab extends JPanel implements PrefsTab {
 
@@ -134,7 +139,7 @@ public class PreviewPrefsTab extends JPanel implements PrefsTab {
 		test1.addActionListener(new ActionListener() {
 			public void actionPerformed(ActionEvent e) {
 				getTestEntry();
-				PreviewPanel testPanel = new PreviewPanel(entry, new MetaData(), layout1.getText());
+				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);
@@ -144,7 +149,7 @@ public class PreviewPrefsTab extends JPanel implements PrefsTab {
 		test2.addActionListener(new ActionListener() {
 			public void actionPerformed(ActionEvent e) {
 				getTestEntry();
-				PreviewPanel testPanel = new PreviewPanel(entry, new MetaData(), layout2.getText());
+				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);
diff --git a/src/java/net/sf/jabref/RegExpRule.java b/src/java/net/sf/jabref/RegExpRule.java
index 1c56699..5f591e5 100644
--- a/src/java/net/sf/jabref/RegExpRule.java
+++ b/src/java/net/sf/jabref/RegExpRule.java
@@ -26,12 +26,13 @@
  */
 package net.sf.jabref;
 
-import net.sf.jabref.export.layout.format.RemoveBrackets;
-
-import java.util.*;
+import java.util.Map;
+import java.util.Set;
+import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import java.util.regex.PatternSyntaxException;
-import java.util.regex.Matcher;
+
+import net.sf.jabref.export.layout.format.RemoveBrackets;
 
 public class RegExpRule implements SearchRule {
 
@@ -42,12 +43,10 @@ public class RegExpRule implements SearchRule {
         m_caseSensitiveSearch = caseSensitive;
     }
 
-    public int applyRule(Map searchStrings, BibtexEntry bibtexEntry) throws PatternSyntaxException {
+    public int applyRule(Map<String, String> searchStrings, BibtexEntry bibtexEntry) throws PatternSyntaxException {
 
         int score = 0;
-        Iterator e = searchStrings.values().iterator();
-
-        String searchString = (String) e.next();
+        String searchString = searchStrings.values().iterator().next();
 
         int flags = 0;
         if (!m_caseSensitiveSearch)
@@ -55,19 +54,18 @@ public class RegExpRule implements SearchRule {
         //System.out.println(searchString);
         Pattern pattern = Pattern.compile(searchString, flags);
 
-        Object[] fields = bibtexEntry.getAllFields();
-        score += searchFields(fields, bibtexEntry, pattern);
+        score += searchFields(bibtexEntry.getAllFields(), bibtexEntry, pattern);
 
         return score;
     }
 
-    protected int searchFields(Object[] fields, BibtexEntry bibtexEntry,
+    protected int searchFields(Set<String> fields, BibtexEntry bibtexEntry,
                                Pattern pattern) {
         int score = 0;
         if (fields != null) {
-            for (int i = 0; i < fields.length; i++) {
+        	for (String field : fields){
                 try {
-                    Object value = bibtexEntry.getField((String)fields[i]);
+                    Object value = bibtexEntry.getField(field);
                     if (value != null) {
                         Matcher m = pattern.matcher(removeBrackets.format((String)value));
                         if (m.find())
diff --git a/src/java/net/sf/jabref/ReplaceStringDialog.java b/src/java/net/sf/jabref/ReplaceStringDialog.java
index 92a0c5e..c53b689 100644
--- a/src/java/net/sf/jabref/ReplaceStringDialog.java
+++ b/src/java/net/sf/jabref/ReplaceStringDialog.java
@@ -26,10 +26,17 @@ http://www.gnu.org/copyleft/gpl.ja.html
 */
 package net.sf.jabref;
 
-import java.awt.*;
-import java.awt.event.*;
+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.*;
+
+import net.sf.jabref.undo.NamedCompound;
+import net.sf.jabref.undo.UndoableFieldChange;
 
 /**
  * Dialog for creating or modifying groups. Operates directly on the
@@ -203,9 +210,8 @@ class ReplaceStringDialog extends JDialog {
     public int replace(BibtexEntry be, NamedCompound ce) {
         int counter = 0;
         if (allFields()) {
-            Object[] os = be.getAllFields();
-            for (int i=0; i<os.length; i++) {
-                String s = (String)os[i];
+        	
+        	for (String s : be.getAllFields()){
                 if (!s.equals(BibtexFields.KEY_FIELD))
                     counter += replaceField(be, s, ce);
             }
diff --git a/src/java/net/sf/jabref/RightClickMenu.java b/src/java/net/sf/jabref/RightClickMenu.java
index beca9d8..d35fdd6 100644
--- a/src/java/net/sf/jabref/RightClickMenu.java
+++ b/src/java/net/sf/jabref/RightClickMenu.java
@@ -27,15 +27,14 @@ http://www.gnu.org/copyleft/gpl.ja.html
 package net.sf.jabref;
 
 import java.awt.Font;
-import java.awt.event.*;
-import java.util.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
 
 import javax.swing.*;
-import javax.swing.event.*;
-import javax.swing.undo.AbstractUndoableEdit;
+import javax.swing.event.PopupMenuEvent;
+import javax.swing.event.PopupMenuListener;
 
 import net.sf.jabref.groups.*;
-import net.sf.jabref.undo.NamedCompound;
 
 public class RightClickMenu extends JPopupMenu
     implements PopupMenuListener {
@@ -60,7 +59,7 @@ public class RightClickMenu extends JPopupMenu
         // If only one entry is selected, get a reference to it for adapting the menu.
         BibtexEntry be = null;
         if (panel.mainTable.getSelectedRowCount() == 1)
-          be = (BibtexEntry)panel.mainTable.getSelected().get(0);
+          be = panel.mainTable.getSelected().get(0);
 
         addPopupMenuListener(this);
 
@@ -213,10 +212,9 @@ public class RightClickMenu extends JPopupMenu
      */
     public void populateTypeMenu() {
         typeMenu.removeAll();
-        for (Iterator i=BibtexEntryType.ALL_TYPES.keySet().iterator();
-             i.hasNext();) {
+        for (String key : BibtexEntryType.ALL_TYPES.keySet()){
             typeMenu.add(new ChangeTypeAction
-                             (BibtexEntryType.getType((String)i.next()), panel));
+                             (BibtexEntryType.getType(key), panel));
         }
     }
 
diff --git a/src/java/net/sf/jabref/SearchManager2.java b/src/java/net/sf/jabref/SearchManager2.java
index 320be47..43c041e 100644
--- a/src/java/net/sf/jabref/SearchManager2.java
+++ b/src/java/net/sf/jabref/SearchManager2.java
@@ -26,20 +26,24 @@ http://www.gnu.org/copyleft/gpl.ja.html
 */
 package net.sf.jabref;
 
-import java.util.Hashtable;
-import java.util.Iterator;
-import java.util.Collection;
-import java.awt.*;
+import java.awt.Dimension;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
 import java.awt.event.*;
+import java.util.Hashtable;
+
 import javax.swing.*;
-import javax.swing.event.*;
-import javax.swing.event.ChangeListener;
+import javax.swing.event.CaretEvent;
+import javax.swing.event.CaretListener;
 import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
 
-import net.sf.jabref.search.*;
+import net.sf.jabref.search.BasicSearch;
 import net.sf.jabref.search.SearchExpression;
-import ca.odell.glazedlists.matchers.Matcher;
-import ca.odell.glazedlists.EventList;
+import net.sf.jabref.search.SearchExpressionParser;
+import net.sf.jabref.search.SearchMatcher;
+import net.sf.jabref.gui.SearchResultsDialog;
 
 class SearchManager2 extends SidePaneComponent
     implements ActionListener, KeyListener, ItemListener, CaretListener, ErrorMessageDisplay {
@@ -50,11 +54,10 @@ class SearchManager2 extends SidePaneComponent
     GridBagConstraints con = new GridBagConstraints() ;
 
     IncrementalSearcher incSearcher;
+    SearchResultsDialog searchDialog = null;
 
     //private JabRefFrame frame;
     private JTextField searchField = new JTextField("", 12);
-    private JLabel lab = //new JLabel(Globals.lang("Search")+":");
-    new JLabel(GUIGlobals.getImage("search"));
     private JPopupMenu settings = new JPopupMenu();
     private JButton openset = new JButton(Globals.lang("Settings"));
     private JButton escape = new JButton(Globals.lang("Clear"));
@@ -64,7 +67,8 @@ class SearchManager2 extends SidePaneComponent
     private JCheckBoxMenuItem searchReq, searchOpt, searchGen,
     searchAll, caseSensitive, regExpSearch;
 
-    private JRadioButton increment, floatSearch, hideSearch;
+    private JRadioButton increment, floatSearch, hideSearch, showResultsInDialog,
+        searchAllBases;
     private JCheckBoxMenuItem select;
     private ButtonGroup types = new ButtonGroup();
     private boolean incSearch = false, startedFloatSearch=false, startedFilterSearch=false;
@@ -100,25 +104,30 @@ class SearchManager2 extends SidePaneComponent
         (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(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);
-
+    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);
@@ -140,7 +149,8 @@ class SearchManager2 extends SidePaneComponent
 
         caseSensitive = new JCheckBoxMenuItem(Globals.lang("Case sensitive"),
                       Globals.prefs.getBoolean("caseSensitiveSearch"));
-settings.add(select);
+
+    settings.add(select);
 
     // 2005.03.29, trying to remove field category searches, to simplify
         // search usability.
@@ -205,8 +215,17 @@ settings.add(select);
             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("grayOutNonHits"))
+        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);
@@ -233,6 +252,10 @@ settings.add(select);
         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();
@@ -282,18 +305,27 @@ settings.add(select);
         search.setPreferredSize(size2);
     }
 
-    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("grayOutNonHits", floatSearch.isSelected());
-    Globals.prefs.putBoolean("caseSensitiveSearch",
-             caseSensitive.isSelected());
-    Globals.prefs.putBoolean("regExpSearch", regExpSearch.isSelected());
+    /**
+     * 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("grayOutNonHits", floatSearch.isSelected());
+        Globals.prefs.putBoolean("caseSensitiveSearch",
+                 caseSensitive.isSelected());
+        Globals.prefs.putBoolean("regExpSearch", regExpSearch.isSelected());
+        Globals.prefs.putBoolean("showSearchInDialog", showResultsInDialog.isSelected());
+        Globals.prefs.putBoolean("searchAllBases", searchAllBases.isSelected());
     }
 
     public void startIncrementalSearch() {
@@ -321,8 +353,12 @@ settings.add(select);
             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.setSelected(true);
         }
         increment.revalidate();
         increment.repaint();
@@ -355,7 +391,7 @@ settings.add(select);
               return;
             }
         // Setup search parameters common to both normal and float.
-        Hashtable searchOptions = new Hashtable();
+        Hashtable<String, String> searchOptions = new Hashtable<String, String>();
         searchOptions.put("option",searchField.getText()) ;
         SearchRuleSet searchRules = new SearchRuleSet() ;
         SearchRule rule1;
@@ -363,16 +399,6 @@ settings.add(select);
         rule1 = new BasicSearch(Globals.prefs.getBoolean("caseSensitiveSearch"),
                 Globals.prefs.getBoolean("regExpSearch"));
 
-        /*
-        if (Globals.prefs.getBoolean("regExpSearch"))
-            rule1 = new RegExpRule(
-                    Globals.prefs.getBoolean("caseSensitiveSearch"));
-        else {
-            rule1 = new SimpleSearchRule(
-                    Globals.prefs.getBoolean("caseSensitiveSearch"));
-
-        }
-        */
         try {
             // this searches specified fields if specified,
             // and all fields otherwise
@@ -391,20 +417,32 @@ settings.add(select);
 
     class SearchWorker extends AbstractWorker {
         private SearchRuleSet rules;
-        Hashtable searchTerm;
+        Hashtable<String, String> searchTerm;
         int hits = 0;
-        public SearchWorker(SearchRuleSet rules, Hashtable searchTerm) {
+        public SearchWorker(SearchRuleSet rules, Hashtable<String, String> searchTerm) {
             this.rules = rules;
             this.searchTerm = searchTerm;
         }
 
         public void run() {
-            Collection entries = panel.getDatabase().getEntries();
-            for (Iterator i=entries.iterator(); i.hasNext();) {
-                BibtexEntry entry = (BibtexEntry)i.next();
-                boolean hit = rules.applyRule(searchTerm, entry) > 0;
-                entry.setSearchHit(hit);
-                if (hit) hits++;
+            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++;
+                    }
+                }
             }
         }
 
@@ -413,7 +451,50 @@ settings.add(select);
                     + ": " + hits);
 
             // Show the result in the chosen way:
-            if (hideSearch.isSelected()) {
+            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.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.setVisible(true);
+            }
+            else if (hideSearch.isSelected()) {
                 // Filtering search - removes non-hits from the table:
                 if (startedFloatSearch) {
                     panel.mainTable.stopShowingFloatSearch();
diff --git a/src/java/net/sf/jabref/SearchRule.java b/src/java/net/sf/jabref/SearchRule.java
index c3adb19..efea002 100644
--- a/src/java/net/sf/jabref/SearchRule.java
+++ b/src/java/net/sf/jabref/SearchRule.java
@@ -30,7 +30,7 @@ import java.util.Map;
 
 public interface SearchRule{
 
-    public int applyRule(Map searchStrings,BibtexEntry bibtexEntry) ;
+    public int applyRule(Map<String, String> searchStrings,BibtexEntry bibtexEntry) ;
 
 }
 
diff --git a/src/java/net/sf/jabref/SearchRuleSet.java b/src/java/net/sf/jabref/SearchRuleSet.java
index a18e768..4cc737a 100644
--- a/src/java/net/sf/jabref/SearchRuleSet.java
+++ b/src/java/net/sf/jabref/SearchRuleSet.java
@@ -26,11 +26,13 @@
  */
 package net.sf.jabref;
 
-import java.util.*;
+import java.util.Enumeration;
+import java.util.Map;
+import java.util.Vector;
 import java.util.regex.PatternSyntaxException;
 
 public class SearchRuleSet implements SearchRule {
-    protected Vector ruleSet = new Vector();
+    protected Vector<SearchRule> ruleSet = new Vector<SearchRule>();
 
     public void addRule(SearchRule newRule) {
         ruleSet.add(newRule);
@@ -40,11 +42,11 @@ public class SearchRuleSet implements SearchRule {
         ruleSet.clear();
     }
 
-    public int applyRule(Map searchString, BibtexEntry bibtexEntry) throws PatternSyntaxException{
+    public int applyRule(Map<String, String> searchString, BibtexEntry bibtexEntry) throws PatternSyntaxException{
         int score = 0;
-        Enumeration e = ruleSet.elements();
+        Enumeration<SearchRule> e = ruleSet.elements();
         while (e.hasMoreElements()) {
-            score += ((SearchRule) e.nextElement()).applyRule(searchString,
+            score += e.nextElement().applyRule(searchString,
                     bibtexEntry);
         }
         return score;
diff --git a/src/java/net/sf/jabref/SidePane.java b/src/java/net/sf/jabref/SidePane.java
index 71b7229..fc2b346 100644
--- a/src/java/net/sf/jabref/SidePane.java
+++ b/src/java/net/sf/jabref/SidePane.java
@@ -26,14 +26,8 @@
  */
 package net.sf.jabref;
 
-import java.awt.BorderLayout;
-import java.awt.Component;
-import java.awt.Dimension;
-import java.awt.GridBagConstraints;
-import java.awt.GridBagLayout;
-import java.awt.Insets;
+import java.awt.*;
 import java.util.Collection;
-import java.util.Iterator;
 
 import javax.swing.Box;
 import javax.swing.JPanel;
@@ -43,7 +37,7 @@ 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: 1738 $ ($Date: 2006-08-30 22:04:48 +0200 (Wed, 30 Aug 2006) $)
+ * @version $Revision: 2209 $ ($Date: 2007-08-01 20:23:38 +0200 (Wed, 01 Aug 2007) $)
  * 
  */
 public class SidePane extends JPanel {
@@ -84,13 +78,11 @@ public class SidePane extends JPanel {
 		super.add(sp);
 	}
 
-	public void setComponents(Collection comps) {
+	public void setComponents(Collection<SidePaneComponent> comps) {
 		mainPanel.removeAll();
 
 		constraint.weighty = 0;
-		Iterator i = comps.iterator();
-		while (i.hasNext()){
-			Component c = (Component) i.next();
+		for (Component c : comps){
 			gridBagLayout.setConstraints(c, constraint);
 			mainPanel.add(c);
 		}
diff --git a/src/java/net/sf/jabref/SidePaneComponent.java b/src/java/net/sf/jabref/SidePaneComponent.java
index aca5648..17c51f0 100644
--- a/src/java/net/sf/jabref/SidePaneComponent.java
+++ b/src/java/net/sf/jabref/SidePaneComponent.java
@@ -26,13 +26,18 @@
  */
 package net.sf.jabref;
 
-import javax.swing.*;
 import java.awt.Dimension;
 import java.awt.Insets;
-import java.awt.event.*;
-import com.jgoodies.uif_lite.panel.SimpleInternalFrame;
+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"));
diff --git a/src/java/net/sf/jabref/SidePaneHeader.java b/src/java/net/sf/jabref/SidePaneHeader.java
index fc6776d..3363907 100644
--- a/src/java/net/sf/jabref/SidePaneHeader.java
+++ b/src/java/net/sf/jabref/SidePaneHeader.java
@@ -35,7 +35,7 @@ import java.net.URL;
 public class SidePaneHeader extends JPanel implements ActionListener {
 
   private JButton close = new JButton(GUIGlobals.getImage("close2"));
-    private JLabel nameLabel, imageIcon;
+    private JLabel nameLabel;
     private SidePaneComponent parent;
     private GridBagLayout gbl = new GridBagLayout();
     private GridBagConstraints con = new GridBagConstraints();
diff --git a/src/java/net/sf/jabref/SidePaneManager.java b/src/java/net/sf/jabref/SidePaneManager.java
index b24a5d0..c77e8ef 100644
--- a/src/java/net/sf/jabref/SidePaneManager.java
+++ b/src/java/net/sf/jabref/SidePaneManager.java
@@ -26,11 +26,7 @@
  */
 package net.sf.jabref;
 
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 import javax.swing.SwingUtilities;
 import javax.swing.event.ChangeEvent;
@@ -40,7 +36,7 @@ import javax.swing.event.ChangeListener;
  * Manages visibility of SideShowComponents in a given newly constructed
  * sidePane.
  * 
- * @version $Revision: 1910 $ ($Date: 2007-01-25 19:35:45 +0100 (Thu, 25 Jan 2007) $)
+ * @version $Revision: 2598 $ ($Date: 2008-03-03 21:25:28 +0100 (Mon, 03 Mar 2008) $)
  * 
  */
 public class SidePaneManager {
@@ -51,9 +47,9 @@ public class SidePaneManager {
 
 	SidePane sidep;
 
-	Map components = new LinkedHashMap();
+	Map<String, SidePaneComponent> components = new LinkedHashMap<String, SidePaneComponent>();
 
-	List visible = new LinkedList();
+	List<SidePaneComponent> visible = new LinkedList<SidePaneComponent>();
 
 	public SidePaneManager(JabRefFrame frame) {
 		this.frame = frame;
@@ -118,7 +114,7 @@ public class SidePaneManager {
 	}
 
 	public synchronized void register(String name, SidePaneComponent comp) {
-		components.put(name, comp);
+        components.put(name, comp);
 	}
 
 	public synchronized void registerAndShow(String name, SidePaneComponent comp) {
@@ -135,7 +131,11 @@ public class SidePaneManager {
 		}
 	}
 
-	public synchronized void hideComponent(SidePaneComponent comp) {
+    public SidePaneComponent getComponent(String name) {
+        return components.get(name);
+    }
+
+    public synchronized void hideComponent(SidePaneComponent comp) {
 		if (visible.contains(comp)) {
 			comp.componentClosing();
 			visible.remove(comp);
@@ -144,7 +144,7 @@ public class SidePaneManager {
 	}
 
     public synchronized void hideComponent(String name) {
-	SidePaneComponent comp = (SidePaneComponent)components.get(name);
+	SidePaneComponent comp = components.get(name);
 	if (comp == null)
 	    return;
 	if (visible.contains(comp)) {
@@ -167,9 +167,9 @@ public class SidePaneManager {
 	 * @param panel
 	 */
 	public void setActiveBasePanel(BasePanel panel) {
-		for (Iterator i = components.keySet().iterator(); i.hasNext();) {
+		for (Iterator<String> i = components.keySet().iterator(); i.hasNext();) {
 			Object key = i.next();
-			((SidePaneComponent) components.get(key)).setActiveBasePanel(panel);
+			components.get(key).setActiveBasePanel(panel);
 		}
 	}
 
diff --git a/src/java/net/sf/jabref/SimpleSearchRule.java b/src/java/net/sf/jabref/SimpleSearchRule.java
index 24d1194..2517d02 100644
--- a/src/java/net/sf/jabref/SimpleSearchRule.java
+++ b/src/java/net/sf/jabref/SimpleSearchRule.java
@@ -26,9 +26,9 @@
  */
 package net.sf.jabref;
 
-import net.sf.jabref.export.layout.format.RemoveBrackets;
+import java.util.Map;
 
-import java.util.*;
+import net.sf.jabref.export.layout.format.RemoveBrackets;
 
 public class SimpleSearchRule implements SearchRule {
 
@@ -39,8 +39,8 @@ public class SimpleSearchRule implements SearchRule {
         m_caseSensitiveSearch = caseSensitive;
     }
 
-    public int applyRule(Map searchStrings, BibtexEntry bibtexEntry) {
-        String searchString = (String) searchStrings.values().iterator().next();
+    public int applyRule(Map<String, String> searchStrings, BibtexEntry bibtexEntry) {
+        String searchString = searchStrings.values().iterator().next();
 
         if (!m_caseSensitiveSearch)
             searchString = searchString.toLowerCase();
@@ -48,9 +48,8 @@ public class SimpleSearchRule implements SearchRule {
         int counter = 0;
         Object fieldContentAsObject;
         String fieldContent;
-        Object[] fields = bibtexEntry.getAllFields();
-        for (int i = 0; i < fields.length; i++) {
-            fieldContentAsObject = bibtexEntry.getField(fields[i].toString()); 
+        for (String field : bibtexEntry.getAllFields()){
+            fieldContentAsObject = bibtexEntry.getField(field); 
             if (fieldContentAsObject != null)
                 try {
                     fieldContent = removeBrackets.format(fieldContentAsObject.toString());
diff --git a/src/java/net/sf/jabref/SimpleUrlDragDrop.java b/src/java/net/sf/jabref/SimpleUrlDragDrop.java
index cfdac3c..e0bfe94 100644
--- a/src/java/net/sf/jabref/SimpleUrlDragDrop.java
+++ b/src/java/net/sf/jabref/SimpleUrlDragDrop.java
@@ -30,11 +30,7 @@ import java.awt.Component;
 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.awt.dnd.*;
 import java.awt.event.ActionEvent;
 import java.io.IOException;
 import java.net.URL;
@@ -96,27 +92,6 @@ public class SimpleUrlDragDrop implements DropTargetListener {
     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)
      * 
diff --git a/src/java/net/sf/jabref/SplashScreen.java b/src/java/net/sf/jabref/SplashScreen.java
index c848998..74f8da4 100644
--- a/src/java/net/sf/jabref/SplashScreen.java
+++ b/src/java/net/sf/jabref/SplashScreen.java
@@ -1,8 +1,13 @@
 package net.sf.jabref;
 
 //import javax.swing.*;
-import java.awt.*;
-import java.awt.event.*;
+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;
 
 /**
@@ -36,11 +41,14 @@ public class SplashScreen extends Window {
         int imgHeight = splashImage.getHeight(this);  
 
         setSize(imgWidth, imgHeight);
-        Dimension screenDim = Toolkit.getDefaultToolkit().getScreenSize();
+        setLocationRelativeTo(null);
+        
+        /* Dimension screenDim = Toolkit.getDefaultToolkit().getScreenSize();
         setLocation(
             (screenDim.width - imgWidth) / 2,
             (screenDim.height - imgHeight) / 2
         );
+        */
 
     }
     
diff --git a/src/java/net/sf/jabref/StrictDuplicateSearch.java b/src/java/net/sf/jabref/StrictDuplicateSearch.java
index c9da2f9..ddf247f 100644
--- a/src/java/net/sf/jabref/StrictDuplicateSearch.java
+++ b/src/java/net/sf/jabref/StrictDuplicateSearch.java
@@ -6,12 +6,15 @@
 
 package net.sf.jabref;
 
-import javax.swing.*;
-import net.sf.jabref.undo.NamedCompound;
-import net.sf.jabref.undo.UndoableRemoveEntry;
 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
@@ -27,9 +30,8 @@ public class StrictDuplicateSearch extends Thread {
     }
     
     public void run() {
-        HashSet toRemove = new HashSet();
+        HashSet<BibtexEntry> toRemove = new HashSet<BibtexEntry>();
         NamedCompound ce = new NamedCompound(Globals.lang("Remove duplicates"));
-        int duplicateCounter = 0;
         panel.output(Globals.lang("Searching for duplicates..."));
         Object[] keys = panel.database.getKeySet().toArray();
         if ((keys == null) || (keys.length < 2))
@@ -42,7 +44,7 @@ public class StrictDuplicateSearch extends Thread {
             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]) && 
-                    Util.compareEntriesStrictly(bes[i], bes[j]) > 1) {
+                    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]);
@@ -65,8 +67,8 @@ public class StrictDuplicateSearch extends Thread {
         
         panel.output(Globals.lang("Duplicates removed")+": "+toRemove.size());
         
-        for (Iterator i=toRemove.iterator(); i.hasNext();) {
-            BibtexEntry entry = (BibtexEntry)i.next();
+        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));
         }
diff --git a/src/java/net/sf/jabref/StringDialog.java b/src/java/net/sf/jabref/StringDialog.java
index 45ac970..bfb6ae6 100644
--- a/src/java/net/sf/jabref/StringDialog.java
+++ b/src/java/net/sf/jabref/StringDialog.java
@@ -27,15 +27,41 @@ http://www.gnu.org/copyleft/gpl.ja.html
 
 package net.sf.jabref;
 
-import java.awt.event.*;
-import java.awt.*;
-import javax.swing.*;
-import javax.swing.table.*;
-import java.util.*;
-import net.sf.jabref.undo.*;
-import net.sf.jabref.export.LatexFieldFormatter;
+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.
@@ -43,7 +69,7 @@ public class StringDialog extends JDialog {
     JabRefFrame frame;
     BasePanel panel;
     JabRefPreferences prefs;
-    TreeSet stringsSet; // Our locally sorted set of strings.
+    TreeSet<BibtexString> stringsSet; // Our locally sorted set of strings.
     Object[] strings;
 
     // Layout objects.
@@ -139,7 +165,7 @@ public class StringDialog extends JDialog {
     }
 
     class StringTable extends JTable {
-	JScrollPane sp = new JScrollPane((JTable)this);
+	JScrollPane sp = new JScrollPane(this);
 	public StringTable(StringTableModel stm) {
 	    super(stm);
 	    setShowVerticalLines(true);
@@ -168,10 +194,9 @@ public class StringDialog extends JDialog {
 
     private void sortStrings() {
 	// Rebuild our sorted set of strings:
-	stringsSet = new TreeSet(new BibtexStringComparator(false));
-	Iterator i = base.getStringKeySet().iterator();
-	for (;i.hasNext();) {
-	    stringsSet.add(base.getString(i.next()));
+	stringsSet = new TreeSet<BibtexString>(new BibtexStringComparator(false));
+	for (String s : base.getStringKeySet()){
+	    stringsSet.add(base.getString(s));
 	}
 	strings = stringsSet.toArray();
     }
@@ -227,7 +252,7 @@ public class StringDialog extends JDialog {
                             Globals.lang("Label"),
                             JOptionPane.ERROR_MESSAGE);
                       }   
-                      else if ((value != null) && isNumber((String)value)) {
+                      else if (isNumber((String)value)) {
                           JOptionPane.showMessageDialog
                               (parent,
                                Globals.lang("The label of the string can not be a number."),
diff --git a/src/java/net/sf/jabref/TabLabelPattern.java b/src/java/net/sf/jabref/TabLabelPattern.java
index 435a331..b1e7ac5 100644
--- a/src/java/net/sf/jabref/TabLabelPattern.java
+++ b/src/java/net/sf/jabref/TabLabelPattern.java
@@ -3,25 +3,21 @@
  */
 package net.sf.jabref;
 
-import java.util.Iterator;
-import java.util.HashMap;
-import java.awt.GridBagConstraints;
-import java.awt.GridBagLayout;
-import java.awt.Insets;
-import java.awt.Font;
-import java.awt.Container;
-import java.awt.BorderLayout;
+import java.awt.*;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
+import java.util.HashMap;
+import java.util.Iterator;
 
 import javax.swing.*;
-import javax.swing.event.ChangeListener;
 import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
 
 import net.sf.jabref.labelPattern.LabelPattern;
 import net.sf.jabref.labelPattern.LabelPatternUtil;
-import com.jgoodies.forms.layout.FormLayout;
+
 import com.jgoodies.forms.builder.DefaultFormBuilder;
+import com.jgoodies.forms.layout.FormLayout;
 
 /**
  * The Preferences panel for key generation.
@@ -31,7 +27,7 @@ public class TabLabelPattern extends JPanel implements PrefsTab{
     private String def = Globals.lang("Default");
     private GridBagLayout gbl = new GridBagLayout();
     private GridBagConstraints con = new GridBagConstraints();
-    private HashMap textFields = new HashMap();
+    private HashMap<String, JTextField> textFields = new HashMap<String, JTextField>();
 
 	private JabRefPreferences _prefs;
 	private LabelPattern _keypatterns = null;
@@ -94,11 +90,11 @@ public class TabLabelPattern extends JPanel implements PrefsTab{
 	    _keypatterns = new LabelPattern(defKeyPattern);
 	    
 	    // then we rebuild... 
-	    Iterator i=textFields.keySet().iterator();
+	    Iterator<String> i=textFields.keySet().iterator();
 	    //String defa = (String)LabelPatternUtil.DEFAULT_LABELPATTERN.get(0);
 	    while (i.hasNext()) {
-		String s = (String)i.next(),
-		    text = ((JTextField)textFields.get(s)).getText();
+		String s = i.next(),
+		    text = textFields.get(s).getText();
 		if (!"".equals(text.trim())) //(!defa.equals(text))
 		    _keypatterns.addLabelPattern(s, text);
 	    }
@@ -214,12 +210,10 @@ public class TabLabelPattern extends JPanel implements PrefsTab{
         gbl.setConstraints(btnDefault, con);
         pan.add(btnDefault);
 
-	    Iterator i=BibtexEntryType.ALL_TYPES.keySet().iterator();
-	    while (i.hasNext()) {
-		String s = (String)i.next();
-		textFields.put(s, addEntryType(pan, s, y));
-		y++;
-	    }
+        for (String s : BibtexEntryType.ALL_TYPES.keySet()) {
+			textFields.put(s, addEntryType(pan, s, y));
+			y++;
+		}
 
 	    con.fill = GridBagConstraints.BOTH;
 	    con.gridx = 0;
@@ -362,11 +356,11 @@ public class TabLabelPattern extends JPanel implements PrefsTab{
 
 		    if (evt.getSource() == btnDefaultAll) {
 			// All to default
-			Iterator i=textFields.keySet().iterator();
+			Iterator<String> i=textFields.keySet().iterator();
 			while (i.hasNext()) {
-			    String s = (String)i.next();
+			    String s = i.next();
 			    //_keypatterns.removeLabelPattern(s);
-			    JTextField tf = (JTextField)textFields.get(s);
+			    JTextField tf = textFields.get(s);
                             tf.setText("");
     			    /*tf.setText(_keypatterns.getParent()
 				       .getValue(s).get(0).toString());*/
@@ -376,7 +370,7 @@ public class TabLabelPattern extends JPanel implements PrefsTab{
 		    }
 
 		    //_keypatterns.removeLabelPattern(evt.getActionCommand());
-		    JTextField tf = (JTextField)textFields.get(evt.getActionCommand());
+		    JTextField tf = textFields.get(evt.getActionCommand());
                     tf.setText("");
 		    /*tf.setText(_keypatterns.getParent()
 			       .getValue(evt.getActionCommand()).get(0).toString());*/
@@ -397,9 +391,9 @@ public class TabLabelPattern extends JPanel implements PrefsTab{
         warnBeforeOverwriting.setSelected(Globals.prefs.getBoolean("warnBeforeOverwritingKey"));
         // Warning before overwriting is only relevant if overwriting can happen:
         warnBeforeOverwriting.setEnabled(!dontOverwrite.isSelected());
-	    for (Iterator i=textFields.keySet().iterator(); i.hasNext();) {
-            String name = (String)i.next();
-            JTextField tf = (JTextField)textFields.get(name);
+	    for (Iterator<String> i=textFields.keySet().iterator(); i.hasNext();) {
+            String name = i.next();
+            JTextField tf = textFields.get(name);
     	    setValue(tf, name);
     	}
 
@@ -411,6 +405,6 @@ public class TabLabelPattern extends JPanel implements PrefsTab{
     }
 
 	public String getTabName() {
-	    return Globals.lang("Key pattern");
+	    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 a190039..8a769db 100644
--- a/src/java/net/sf/jabref/TableColumnsTab.java
+++ b/src/java/net/sf/jabref/TableColumnsTab.java
@@ -5,15 +5,7 @@ import java.awt.Dimension;
 import java.awt.event.ActionEvent;
 import java.util.Vector;
 
-import javax.swing.AbstractAction;
-import javax.swing.BorderFactory;
-import javax.swing.JButton;
-import javax.swing.JLabel;
-import javax.swing.JPanel;
-import javax.swing.JScrollPane;
-import javax.swing.JTable;
-import javax.swing.JToolBar;
-import javax.swing.SwingConstants;
+import javax.swing.*;
 import javax.swing.table.AbstractTableModel;
 import javax.swing.table.TableColumnModel;
 import javax.swing.table.TableModel;
@@ -27,7 +19,7 @@ class TableColumnsTab extends JPanel implements PrefsTab {
     private boolean tableChanged = false;
     private JTable colSetup;
     private int rowCount = -1, ncWidth = -1;
-    private Vector tableRows = new Vector(10);
+    private Vector<TableRow> tableRows = new Vector<TableRow>(10);
     private JabRefFrame frame;
 
     class TableRow {
@@ -83,9 +75,11 @@ class TableColumnsTab extends JPanel implements PrefsTab {
                 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 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));
@@ -101,7 +95,7 @@ class TableColumnsTab extends JPanel implements PrefsTab {
                           return;
                         }
 
-                    TableRow rowContent = (TableRow)tableRows.elementAt(row-1);
+                    TableRow rowContent = tableRows.elementAt(row-1);
 
                     if (col == 0) {
                         rowContent.name = value.toString();
@@ -296,7 +290,7 @@ class TableColumnsTab extends JPanel implements PrefsTab {
             // First we remove all rows with empty names.
             int i=0;
             while (i < tableRows.size()) {
-                if (((TableRow)tableRows.elementAt(i)).name.equals(""))
+                if (tableRows.elementAt(i).name.equals(""))
                     tableRows.removeElementAt(i);
                 else i++;
             }
@@ -307,7 +301,7 @@ class TableColumnsTab extends JPanel implements PrefsTab {
 
             _prefs.putInt("numberColWidth", ncWidth);
             for (i=0; i<tableRows.size(); i++) {
-                TableRow tr = (TableRow)tableRows.elementAt(i);
+                TableRow tr = tableRows.elementAt(i);
                 names[i] = tr.name;
                 nWidths[i] = tr.length;
                 widths[i] = ""+tr.length;
diff --git a/src/java/net/sf/jabref/TablePrefsTab.java b/src/java/net/sf/jabref/TablePrefsTab.java
index e36bfd9..1984f5e 100644
--- a/src/java/net/sf/jabref/TablePrefsTab.java
+++ b/src/java/net/sf/jabref/TablePrefsTab.java
@@ -7,19 +7,10 @@ import java.util.Arrays;
 import java.util.Collections;
 import java.util.Vector;
 
-import javax.swing.BorderFactory;
-import javax.swing.ButtonGroup;
-import javax.swing.JCheckBox;
-import javax.swing.JComboBox;
-import javax.swing.JLabel;
-import javax.swing.JPanel;
-import javax.swing.JRadioButton;
-import javax.swing.JTable;
-import javax.swing.JTextField;
+import javax.swing.*;
 import javax.swing.event.ChangeEvent;
 import javax.swing.event.ChangeListener;
 
-
 import com.jgoodies.forms.builder.DefaultFormBuilder;
 import com.jgoodies.forms.layout.FormLayout;
 
@@ -37,8 +28,6 @@ class TablePrefsTab extends JPanel implements PrefsTab {
 
 	private JTextField priField, secField, terField;
 
-	private JabRefFrame frame;
-
 	/**
 	 * Customization of external program paths.
 	 * 
@@ -47,7 +36,6 @@ class TablePrefsTab extends JPanel implements PrefsTab {
 	 */
 	public TablePrefsTab(JabRefPreferences prefs, JabRefFrame frame) {
 		_prefs = prefs;
-		this.frame = frame;
 		setLayout(new BorderLayout());
 
 		/**
@@ -57,7 +45,7 @@ class TablePrefsTab extends JPanel implements PrefsTab {
 		 * 
 		 * http://sourceforge.net/tracker/index.php?func=detail&aid=1540646&group_id=92314&atid=600306
 		 */
-		Vector v = new Vector(Arrays.asList(BibtexFields.getAllFieldNames()));
+		Vector<String> v = new Vector<String>(Arrays.asList(BibtexFields.getAllFieldNames()));
 		v.add(BibtexFields.KEY_FIELD);
 		Collections.sort(v);
 		Object[] allPlusKey = v.toArray();
diff --git a/src/java/net/sf/jabref/TitleLabel.java b/src/java/net/sf/jabref/TitleLabel.java
index f5c2fd6..09d810f 100644
--- a/src/java/net/sf/jabref/TitleLabel.java
+++ b/src/java/net/sf/jabref/TitleLabel.java
@@ -1,7 +1,8 @@
 package net.sf.jabref;
 
-import javax.swing.*;
-import java.awt.*;
+import javax.swing.JLabel;
+import javax.swing.SwingConstants;
+import javax.swing.UIManager;
 
 public class TitleLabel extends JLabel {
 
diff --git a/src/java/net/sf/jabref/TransferableBibtexEntry.java b/src/java/net/sf/jabref/TransferableBibtexEntry.java
index 5cb1870..c28c811 100644
--- a/src/java/net/sf/jabref/TransferableBibtexEntry.java
+++ b/src/java/net/sf/jabref/TransferableBibtexEntry.java
@@ -27,11 +27,16 @@ http://www.gnu.org/copyleft/gpl.ja.html
 
 package net.sf.jabref;
 
-import net.sf.jabref.export.LatexFieldFormatter;
-import java.awt.datatransfer.*;
-import java.io.*;
+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.
diff --git a/src/java/net/sf/jabref/UnknownEntryType.java b/src/java/net/sf/jabref/UnknownEntryType.java
index e8a77e4..455c1f8 100644
--- a/src/java/net/sf/jabref/UnknownEntryType.java
+++ b/src/java/net/sf/jabref/UnknownEntryType.java
@@ -1,6 +1,6 @@
 package net.sf.jabref;
 
-import java.io.*;
+import java.io.Writer;
 
 /**
  * This class is used to represent an unknown entry type, e.g. encountered
@@ -39,7 +39,7 @@ public class UnknownEntryType extends BibtexEntryType {
 	return "unknown";
     }
 
-    public boolean hasAllRequiredFields(BibtexEntry entry) {
+    public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) {
 	return true;
     }
 
diff --git a/src/java/net/sf/jabref/UrlDragDrop.java b/src/java/net/sf/jabref/UrlDragDrop.java
index 7afe662..6789d98 100644
--- a/src/java/net/sf/jabref/UrlDragDrop.java
+++ b/src/java/net/sf/jabref/UrlDragDrop.java
@@ -26,7 +26,6 @@
  */
 package net.sf.jabref;
 
-import java.awt.Component;
 import java.awt.datatransfer.DataFlavor;
 import java.awt.datatransfer.Transferable;
 import java.awt.datatransfer.UnsupportedFlavorException;
@@ -126,7 +125,8 @@ public class UrlDragDrop implements DropTargetListener {
      *
      * @see java.awt.dnd.DropTargetListener#drop(java.awt.dnd.DropTargetDropEvent)
      */
-    public void drop(DropTargetDropEvent dtde) {
+    
+	public void drop(DropTargetDropEvent dtde) {
         Transferable tsf = dtde.getTransferable();
         dtde.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);
         //try with an URL
@@ -140,7 +140,7 @@ public class UrlDragDrop implements DropTargetListener {
         try{
             URL url = (URL) tsf.getTransferData(dtURL);
             JOptionChoice res = (JOptionChoice) JOptionPane
-                    .showInputDialog((Component) editor, "", Globals
+                    .showInputDialog(editor, "", Globals
                             .lang("Select action"),
                             JOptionPane.QUESTION_MESSAGE, null,
                             new JOptionChoice[] {
@@ -163,7 +163,7 @@ public class UrlDragDrop implements DropTargetListener {
                             .get("pdfDirectory")), editor.getEntry()
                             .getField(BibtexFields.KEY_FIELD)
                             + ".pdf");
-                    URLDownload udl = new URLDownload((Component) editor, url,
+                    URLDownload udl = new URLDownload(editor, url,
                             file);
                     frame.output(Globals.lang("Downloading..."));
                     udl.download();
@@ -174,7 +174,7 @@ public class UrlDragDrop implements DropTargetListener {
                 }catch (IOException ioex){
                     logger.log(Level.SEVERE, "Error while downloading file",
                             ioex);
-                    JOptionPane.showMessageDialog((Component) editor, Globals
+                    JOptionPane.showMessageDialog(editor, Globals
                             .lang("File download"), Globals
                             .lang("Error while downloading file:"
                                     + ioex.getMessage()),
@@ -188,25 +188,26 @@ public class UrlDragDrop implements DropTargetListener {
         }catch (IOException ioex){
             logger.log(Level.WARNING, "!should not happen!", ioex);
         }
-
+        
         try{
             //try with a File List
-            List filelist = (List) tsf
+        	@SuppressWarnings("unchecked")
+        	List<File> filelist = (List<File>) tsf
                     .getTransferData(DataFlavor.javaFileListFlavor);
             if (filelist.size() > 1){
                 JOptionPane
-                        .showMessageDialog((Component) editor, Globals
+                        .showMessageDialog(editor, Globals
                                 .lang("Only one item is supported"), Globals
                                 .lang("Drag and Drop Error"),
                                 JOptionPane.ERROR_MESSAGE);
                 return;
             }
-            File fl = (File) filelist.get(0);
+            File fl = filelist.get(0);
             feditor.setText(fl.toURI().toURL().toString());
             editor.updateField(feditor);
 
         }catch (UnsupportedFlavorException nfe){
-            JOptionPane.showMessageDialog((Component) editor, Globals
+            JOptionPane.showMessageDialog(editor, Globals
                     .lang("Operation not supported"), Globals
                     .lang("Drag and Drop Error"), JOptionPane.ERROR_MESSAGE);
             logger.log(Level.WARNING, "Transfer exception", nfe);
diff --git a/src/java/net/sf/jabref/Util.java b/src/java/net/sf/jabref/Util.java
index e28067f..3f1ce11 100644
--- a/src/java/net/sf/jabref/Util.java
+++ b/src/java/net/sf/jabref/Util.java
@@ -28,17 +28,30 @@
 //
 // function : utility functions
 //
-// todo     :
-//
 // modified :  - r.nagel 20.04.2006
 //               make the DateFormatter abstract and splitt the easyDate methode
 //               (now we cannot change the dateformat dynamicly, sorry)
 package net.sf.jabref;
 
-import java.awt.*;
+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.Point;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
-import java.io.*;
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.FilenameFilter;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.io.UnsupportedEncodingException;
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.net.URLDecoder;
@@ -46,12 +59,34 @@ import java.nio.charset.Charset;
 import java.nio.charset.CharsetEncoder;
 import java.text.NumberFormat;
 import java.text.SimpleDateFormat;
-import java.util.*;
+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.*;
+import javax.swing.Box;
+import javax.swing.JButton;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTextArea;
 import javax.swing.undo.UndoableEdit;
 
 import net.sf.jabref.export.layout.LayoutEntry;
@@ -98,7 +133,7 @@ public class Util {
 	 * 
 	 */
 	final static int TYPE_MISMATCH = -1, NOT_EQUAL = 0, EQUAL = 1, EMPTY_IN_ONE = 2,
-		EMPTY_IN_TWO = 3;
+		EMPTY_IN_TWO = 3, EMPTY_IN_BOTH = 4;
 
 	final static NumberFormat idFormat;
 
@@ -108,6 +143,10 @@ public class Util {
 		idFormat.setGroupingUsed(false);
 	}
 
+	public static int getMinimumIntegerDigits(){
+		return idFormat.getMinimumIntegerDigits();
+	}
+
 	public static void bool(boolean b) {
 		if (b)
 			System.out.println("true");
@@ -301,10 +340,8 @@ public class Util {
 	 * is the HashMap GLobals.UNICODE_CHARS.
 	 */
 	public static String replaceSpecialCharacters(String s) {
-		for (Iterator i = Globals.UNICODE_CHARS.keySet().iterator(); i.hasNext();) {
-			String chr = (String) i.next(), replacer = (String) Globals.UNICODE_CHARS.get(chr);
-			// pr(chr+" "+replacer);
-			s = s.replaceAll(chr, replacer);
+		for (Map.Entry<String, String> chrAndReplace : Globals.UNICODE_CHARS.entrySet()){
+			s = s.replaceAll(chrAndReplace.getKey(), chrAndReplace.getValue());
 		}
 		return s;
 	}
@@ -370,12 +407,12 @@ public class Util {
 		return out.toString();// .replaceAll("\n", "\n\t");
 	}
 
-	public static HashSet findDeliminatedWordsInField(BibtexDatabase db, String field,
+	public static HashSet<String> findDeliminatedWordsInField(BibtexDatabase db, String field,
 		String deliminator) {
-		HashSet res = new HashSet();
-		Iterator i = db.getKeySet().iterator();
-		while (i.hasNext()) {
-			BibtexEntry be = db.getEntryById(i.next().toString());
+		HashSet<String> res = new HashSet<String>();
+		
+		for (String s : db.getKeySet()){
+			BibtexEntry be = db.getEntryById(s);
 			Object o = be.getField(field);
 			if (o != null) {
 				String fieldValue = o.toString().trim();
@@ -401,12 +438,11 @@ public class Util {
 	 *            a <code>String</code> value
 	 * @return a <code>HashSet</code> value
 	 */
-	public static HashSet findAllWordsInField(BibtexDatabase db, String field, String remove) {
-		HashSet res = new HashSet();
+	public static HashSet<String> findAllWordsInField(BibtexDatabase db, String field, String remove) {
+		HashSet<String> res = new HashSet<String>();
 		StringTokenizer tok;
-		Iterator i = db.getKeySet().iterator();
-		while (i.hasNext()) {
-			BibtexEntry be = db.getEntryById(i.next().toString());
+		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);
@@ -484,14 +520,18 @@ public class Util {
 					fieldName = "ps";
 			}
 
-            // Find the file type descriptor:
-            ExternalFileType type = Globals.prefs.getExternalFileTypeByExt(fieldName);
-
         } else if (fieldName.equals("doi")) {
 			fieldName = "url";
+			
+			link = sanitizeUrl(link);
+			
 			// Check to see if link field already contains a well formated URL
 			if (!link.startsWith("http://")) {
-				link = Globals.DOI_LOOKUP_PREFIX + link;
+			    // Remove possible 'doi:'
+			    if (link.matches("^doi:/*.*")){
+	                link = link.replaceFirst("^doi:/*", "");
+	            }
+			    link = Globals.DOI_LOOKUP_PREFIX + link;
 			}
 		} else if (fieldName.equals("citeseerurl")) {
 			fieldName = "url";
@@ -504,29 +544,17 @@ public class Util {
 		String cmdArray[] = new String[2];
 		if (fieldName.equals("url")) { // html
 			try {
-
-				// First check if the url is enclosed in \\url{}. If so, remove
-				// the wrapper.
-				if (link.startsWith("\\url{") && link.endsWith("}"))
-					link = link.substring(5, link.length() - 1);
-
 				link = sanitizeUrl(link);
 
 				if (Globals.ON_MAC) {
 					String[] cmd = { "/usr/bin/open", "-a", Globals.prefs.get("htmlviewer"), link };
-					Process child = Runtime.getRuntime().exec(cmd);
+					Runtime.getRuntime().exec(cmd);
 				} else if (Globals.ON_WIN) {
 					openFileOnWindows(link, false);
-					/*
-					 * cmdArray[0] = Globals.prefs.get("htmlviewer");
-					 * cmdArray[1] = link; Process child =
-					 * Runtime.getRuntime().exec( cmdArray[0] + " " +
-					 * cmdArray[1]);
-					 */
 				} else {
 					cmdArray[0] = Globals.prefs.get("htmlviewer");
 					cmdArray[1] = link;
-					Process child = Runtime.getRuntime().exec(cmdArray);
+					Runtime.getRuntime().exec(cmdArray);
 				}
 
 			} catch (IOException e) {
@@ -539,7 +567,7 @@ public class Util {
                     ExternalFileType type = Globals.prefs.getExternalFileTypeByExt("ps");
                     String viewer = type != null ? type.getOpenWith() : Globals.prefs.get("psviewer");
                     String[] cmd = { "/usr/bin/open", "-a", viewer, link };
-					Process child = Runtime.getRuntime().exec(cmd);
+					Runtime.getRuntime().exec(cmd);
 				} else if (Globals.ON_WIN) {
 					openFileOnWindows(link, true);
 					/*
@@ -552,7 +580,7 @@ public class Util {
                     String viewer = type != null ? type.getOpenWith() : Globals.prefs.get("psviewer");
                     cmdArray[0] = viewer;
 					cmdArray[1] = link;
-					Process child = Runtime.getRuntime().exec(cmdArray);
+					Runtime.getRuntime().exec(cmdArray);
 				}
 			} catch (IOException e) {
 				System.err.println("An error occured on the command: "
@@ -564,7 +592,7 @@ public class Util {
                     ExternalFileType type = Globals.prefs.getExternalFileTypeByExt("pdf");
                     String viewer = type != null ? type.getOpenWith() : Globals.prefs.get("psviewer");
                     String[] cmd = { "/usr/bin/open", "-a", viewer, link };
-					Process child = Runtime.getRuntime().exec(cmd);
+					Runtime.getRuntime().exec(cmd);
 				} else if (Globals.ON_WIN) {
 					openFileOnWindows(link, true);
 					/*
@@ -585,7 +613,7 @@ public class Util {
 					cmdArray[1] = link;
 					// Process child = Runtime.getRuntime().exec(cmdArray[0]+"
 					// "+cmdArray[1]);
-					Process child = Runtime.getRuntime().exec(cmdArray);
+					Runtime.getRuntime().exec(cmdArray);
 				}
 			} catch (IOException e) {
 				e.printStackTrace();
@@ -596,7 +624,6 @@ public class Util {
 		} else {
 			System.err
 				.println("Message: currently only PDF, PS and HTML files can be opened by double clicking");
-			// ignore
 		}
 	}
 
@@ -652,8 +679,9 @@ public class Util {
 	 *            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 void openExternalFileAnyFormat(MetaData metaData, String link,
+	public static boolean openExternalFileAnyFormat(MetaData metaData, String link,
                                                  ExternalFileType fileType) throws IOException {
 
 
@@ -668,15 +696,10 @@ public class Util {
 		String extension = ((pos >= 0) && (pos < name.length() - 1)) ? name.substring(pos + 1)
 			.trim().toLowerCase() : null;
 
-		/*
-		 * if ((extension == null) || (extension.length() == 0)) { // No
-		 * extension. What to do? throw new IOException(Globals.lang("No file
-		 * extension. Could not find viewer for file.")); }
-		 */
-
 		// Find the default directory for this field type, if any:
 		String dir = metaData.getFileDirectory(extension);
-        // Include the standard "file" directory:
+
+		// Include the standard "file" directory:
         String fileDir = metaData.getFileDirectory(GUIGlobals.FILE_FIELD);
 
         // Include the directory of the bib file:
@@ -700,22 +723,26 @@ public class Util {
 			try {
                 String filePath = httpLink ? link : file.getPath();
                 if (Globals.ON_MAC) {
-		    // Use "-a <application>" if the app is specified, and just "open <filename>" otherwise:
+                    // 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) {
+					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 {
-                    String[] cmdArray = new String[] { fileType.getOpenWith(), filePath };
-					Runtime.getRuntime().exec(cmdArray);
+                    String[] openWith = fileType.getOpenWith().split(" ");
+                    String[] cmdArray = new String[openWith.length+1];
+                    System.arraycopy(openWith, 0, cmdArray, 0, openWith.length);
+                    cmdArray[cmdArray.length-1] = filePath;
+                    Runtime.getRuntime().exec(cmdArray);
 				}
-			} catch (IOException e) {
+                return true;
+            } catch (IOException e) {
                 throw e;
                 /*e.printStackTrace();
 				System.err.println("An error occured on the command: " + fileType.getOpenWith()
@@ -724,18 +751,15 @@ public class Util {
 			}
 
 		} else {
-			// No file matched the name, or we didn't know the file type.
-			// Perhaps it is an URL thing.
-
-			// 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.startsWith("doi:"))
-				link = Globals.DOI_LOOKUP_PREFIX + link;
+            return false;
+            // No file matched the name, or we didn't know the file type.
+			// Perhaps it is an URL thing.
 
-			link = sanitizeUrl(link);
+            /* TODO: find out if this fallback option of opening the link in a web browser is
+               TODO: actually necessary. */
+            /*
+            link = sanitizeUrl(link);
 
 			if (Globals.ON_MAC) {
 				String[] cmd = { "/usr/bin/open", "-a", Globals.prefs.get("htmlviewer"), link };
@@ -743,14 +767,19 @@ public class Util {
 			} else if (Globals.ON_WIN) {
 				openFileOnWindows(link, false);
 			} else {
-				String[] cmdArray = new String[] { Globals.prefs.get("htmlviewer"), link };
-				Runtime.getRuntime().exec(cmdArray);
-			}
-
+				String[] openWith = Globals.prefs.get("htmlviewer").split(" ");
+                String[] cmdArray = new String[openWith.length+1];
+                System.arraycopy(openWith, 0, cmdArray, 0, openWith.length);
+                cmdArray[cmdArray.length-1] = link;
+                Runtime.getRuntime().exec(cmdArray);
+            }
+            */
 		}
-	}
 
-public static void openExternalFileUnknown(JabRefFrame frame, BibtexEntry entry, MetaData metaData,
+
+    }
+
+public static boolean openExternalFileUnknown(JabRefFrame frame, BibtexEntry entry, MetaData metaData,
                                            String link, UnknownExternalFileType fileType) throws IOException {
 
     String cancelMessage = Globals.lang("Unable to open file.");
@@ -763,7 +792,7 @@ public static void openExternalFileUnknown(JabRefFrame frame, BibtexEntry entry,
             JOptionPane.QUESTION_MESSAGE, null, options, defOption);
     if (answer == JOptionPane.CANCEL_OPTION) {
         frame.output(cancelMessage);
-        return;
+        return false;
     }
     else if (answer == JOptionPane.YES_OPTION) {
         // User wants to define the new file type. Show the dialog:
@@ -781,18 +810,18 @@ public static void openExternalFileUnknown(JabRefFrame frame, BibtexEntry entry,
             Collections.sort(fileTypes);
             Globals.prefs.setExternalFileTypes(fileTypes);
             // Finally, open the file:
-            openExternalFileAnyFormat(metaData, link, newType);
+            return openExternalFileAnyFormat(metaData, link, newType);
         } else {
             // Cancelled:
             frame.output(cancelMessage);
-            return;
+            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 = (String)entry.getField(GUIGlobals.FILE_FIELD);
+        String oldValue = entry.getField(GUIGlobals.FILE_FIELD);
         tModel.setContent(oldValue);
         FileListEntry flEntry = null;
         // Then find which one we are looking at:
@@ -819,11 +848,11 @@ public static void openExternalFileUnknown(JabRefFrame frame, BibtexEntry entry,
             frame.basePanel().undoManager.addEdit(ce);
             frame.basePanel().markBaseChanged();
             // Finally, open the link:
-            openExternalFileAnyFormat(metaData, flEntry.getLink(), flEntry.getType());
+            return openExternalFileAnyFormat(metaData, flEntry.getLink(), flEntry.getType());
         } else {
             // Cancelled:
             frame.output(cancelMessage);
-            return;
+            return false;
         }
     }
 }
@@ -831,6 +860,8 @@ public static void openExternalFileUnknown(JabRefFrame frame, BibtexEntry entry,
 	 * 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.
+	 * 
 	 * Old Version can be found in CVS version 114 of Util.java.
 	 * 
 	 * @param link
@@ -839,6 +870,27 @@ public static void openExternalFileUnknown(JabRefFrame frame, BibtexEntry entry,
 	 */
 	public static String sanitizeUrl(String link) {
 
+	    // 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;
+        }
+        
+        /*
+         * Poor man's DOI detection
+         * 
+         * Fixes
+         * https://sourceforge.net/tracker/index.php?func=detail&aid=1709449&group_id=92314&atid=600306
+         */
+        if (link.startsWith("10.")) {
+            link = Globals.DOI_LOOKUP_PREFIX + link;
+        }
+	    
 		link = link.replaceAll("\\+", "%2B");
 
 		try {
@@ -1017,14 +1069,14 @@ public static void openExternalFileUnknown(JabRefFrame frame, BibtexEntry entry,
      * @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 extraDirs) {
+    public static String findFile(BibtexEntry entry, ExternalFileType fileType, List<String> extraDirs) {
 
-        List dirs = new ArrayList();
+        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 = (String[])dirs.toArray(new String[dirs.size()]);
+        String [] directories = dirs.toArray(new String[dirs.size()]);
         return findPdf(entry, fileType.getExtension(), directories);
     }
 
@@ -1114,6 +1166,7 @@ public static void openExternalFileUnknown(JabRefFrame frame, BibtexEntry entry,
 
 					// Skip the brace
 					i++;
+
 					if (i < c.length){
 						if (c[i] == '"'){
 							// Parameter is in format "xxx"
@@ -1136,7 +1189,8 @@ public static void openExternalFileUnknown(JabRefFrame frame, BibtexEntry entry,
                             }
 
 							String param = calls.substring(startParam, i);
-                            result.add(new String[] { method, param });
+		
+							result.add(new String[] { method, param });
 						} else {
 							// Parameter is in format xxx
 
@@ -1335,7 +1389,7 @@ public static void openExternalFileUnknown(JabRefFrame frame, BibtexEntry entry,
 				}
 				// Do for all direct and indirect subdirs
 				if (dirToProcess.equals("**")) {
-					List toDo = new LinkedList();
+					List<File> toDo = new LinkedList<File>();
 					toDo.add(directory);
 
 					String restOfFileString = join(fileParts, "/", i + 1, fileParts.length);
@@ -1349,7 +1403,7 @@ public static void openExternalFileUnknown(JabRefFrame frame, BibtexEntry entry,
 					while (!toDo.isEmpty()) {
 
 						// Get all subdirs of each of the elements found in toDo
-						File[] subDirs = ((File) toDo.remove(0)).listFiles();
+						File[] subDirs = toDo.remove(0).listFiles();
 						if (subDirs == null) // No permission?
 							continue;
 
@@ -1453,6 +1507,9 @@ public static void openExternalFileUnknown(JabRefFrame frame, BibtexEntry entry,
 	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++) {
@@ -1487,7 +1544,7 @@ public static void openExternalFileUnknown(JabRefFrame frame, BibtexEntry entry,
 	 * null if the file does not exist.
 	 */
 	public static File expandFilename(String name, String dir) {
-		// System.out.println("expandFilename: name="+name+"\t dir="+dir);
+
 		File file = null;
 		if (name == null || name.length() == 0)
 			return null;
@@ -1495,40 +1552,39 @@ public static void openExternalFileUnknown(JabRefFrame frame, BibtexEntry entry,
 			file = new File(name);
 		}
 
-		if (file != null) {
-			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;
-	}
+		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;
+    }
 
 	private static String findInDir(String key, String dir, OpenFileFilter off) {
 		File f = new File(dir);
@@ -1556,142 +1612,17 @@ public static void openExternalFileUnknown(JabRefFrame frame, BibtexEntry entry,
 		return null;
 	}
 
-	/**
-	 * 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, float threshold) {
-
-		// 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();
-
-        float req;
-        if (fields == null)
-			req = 1;
-        else
-            req = compareFieldSet(fields, one, two);
-		fields = one.getType().getOptionalFields();
-
-		if (fields != null) {
-			float opt = compareFieldSet(fields, one, two);
-			return (2 * req + opt) / 3 >= threshold;
-		} else {
-			return (req >= threshold);
-		}
-	}
-
-	/**
-	 * 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) {
-		Collection entries = database.getEntries();
-		for (Iterator i = entries.iterator(); i.hasNext();) {
-			BibtexEntry other = (BibtexEntry) i.next();
-			if (isDuplicate(entry, other, Globals.duplicateThreshold))
-				return other; // Duplicate found.
-		}
-		return null; // No duplicate found.
-	}
-
-	private static float compareFieldSet(String[] fields, BibtexEntry one, BibtexEntry two) {
-		int res = 0;
-		for (int i = 0; i < fields.length; i++) {
-			// Util.pr(":"+compareSingleField(fields[i], one, two));
-			if (compareSingleField(fields[i], one, two) == EQUAL) {
-				res++;
-				// Util.pr(fields[i]);
-			}
-		}
-		return ((float) res) / ((float) fields.length);
-	}
-
-	private static int compareSingleField(String field, BibtexEntry one, BibtexEntry two) {
-		String s1 = (String) one.getField(field), s2 = (String) two.getField(field);
-		if (s1 == null) {
-			if (s2 == null)
-				return EQUAL;
-			else
-				return EMPTY_IN_ONE;
-		} else if (s2 == null)
-			return EMPTY_IN_TWO;
-		s1 = s1.toLowerCase();
-		s2 = s2.toLowerCase();
-		// Util.pr(field+": '"+s1+"' vs '"+s2+"'");
-		if (field.equals("author") || field.equals("editor")) {
-			// Specific for name fields.
-			// Harmonise case:
-			String[] aus1 = AuthorList.fixAuthor_lastNameFirst(s1).split(" and "), aus2 = AuthorList
-				.fixAuthor_lastNameFirst(s2).split(" and "), au1 = aus1[0].split(","), au2 = aus2[0]
-				.split(",");
-
-			// Can check number of authors, all authors or only the first.
-			if ((aus1.length > 0) && (aus1.length == aus2.length)
-				&& au1[0].trim().equals(au2[0].trim()))
-				return EQUAL;
-			else
-				return NOT_EQUAL;
-		} else {
-			if (s1.trim().equals(s2.trim()))
-				return EQUAL;
-			else
-				return NOT_EQUAL;
-		}
-
-	}
-
-	public static double compareEntriesStrictly(BibtexEntry one, BibtexEntry two) {
-		HashSet allFields = new HashSet();// one.getAllFields());
-		Object[] o = one.getAllFields();
-		for (int i = 0; i < o.length; i++)
-			allFields.add(o[i]);
-		o = two.getAllFields();
-		for (int i = 0; i < o.length; i++)
-			allFields.add(o[i]);
-		int score = 0;
-		for (Iterator fld = allFields.iterator(); fld.hasNext();) {
-			String field = (String) 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();
-	}
-
     /**
      * This methods assures all words in the given entry are recorded in their
      * respective Completers, if any.
      */
-    public static void updateCompletersForEntry(HashMap autoCompleters,
+    public static void updateCompletersForEntry(HashMap<String, AutoCompleter> autoCompleters,
                                                 BibtexEntry be) {
 
-        for (Iterator j = autoCompleters.keySet().iterator(); j.hasNext();) {
-            String field = (String) j.next();
-            AutoCompleter comp = (AutoCompleter) autoCompleters.get(field);
+    	for (Map.Entry<String, AutoCompleter> entry : autoCompleters.entrySet()){
+    		String field = entry.getKey();
+            AutoCompleter comp = entry.getValue();
+
             comp.addAll(be.getField(field));
         }
     }
@@ -1705,24 +1636,29 @@ public static void openExternalFileUnknown(JabRefFrame frame, BibtexEntry entry,
 	 * @param bibs
 	 *            List of bibtex entries
 	 */
-	public static void setAutomaticFields(List bibs, boolean overwriteOwner,
-             boolean overwriteTimestamp) {
+	public static void setAutomaticFields(Collection<BibtexEntry> bibs,
+             boolean overwriteOwner, boolean overwriteTimestamp) {
+		
+
+		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");
-		String timeStampField = Globals.prefs.get("timeStampField");
-		// Iterate through all entries
-		for (int i = 0; i < bibs.size(); i++) {
-			// Get current entry
-			BibtexEntry curEntry = (BibtexEntry) bibs.get(i);
+
+        // Do not need to do anything if both options are disabled
+		if (!(globalSetOwner || globalSetTimeStamp))
+			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);
-
 		}
 
 	}
@@ -1854,25 +1790,21 @@ public static void openExternalFileUnknown(JabRefFrame frame, BibtexEntry entry,
      */
     public static NamedCompound upgradePdfPsToFile(BibtexDatabase database, String[] fields) {
         NamedCompound ce = new NamedCompound(Globals.lang("Move external links to 'file' field"));
-        for (Iterator i = database.getEntryMap().keySet().iterator(); i.hasNext();) {
-            BibtexEntry entry = (BibtexEntry) database.getEntryMap().get(i.next());
+        
+        for (BibtexEntry entry : database.getEntryMap().values()){
             FileListTableModel tableModel = new FileListTableModel();
             // If there are already links in the file field, keep those on top:
-            Object oldFileContent = entry.getField(GUIGlobals.FILE_FIELD);
+            String oldFileContent = entry.getField(GUIGlobals.FILE_FIELD);
             if (oldFileContent != null) {
-                tableModel.setContent((String) oldFileContent);
+                tableModel.setContent(oldFileContent);
             }
             int oldRowCount = tableModel.getRowCount();
             for (int j = 0; j < fields.length; j++) {
-                Object o = entry.getField(fields[j]);
+                String o = entry.getField(fields[j]);
                 if (o != null) {
-                    String s = (String) o;
+                    String s = o;
                     if (s.trim().length() > 0) {
                         File f = new File(s);
-                        String extension = "";
-                        if ((s.lastIndexOf('.') >= 0) && (s.lastIndexOf('.') < s.length() - 1)) {
-                            extension = s.substring(s.lastIndexOf('.') + 1);
-                        }
                         FileListEntry flEntry = new FileListEntry(f.getName(), s,
                                 Globals.prefs.getExternalFileTypeByExt(fields[j]));
                         tableModel.addEntry(tableModel.getRowCount(), flEntry);
@@ -2018,11 +1950,11 @@ public static void openExternalFileUnknown(JabRefFrame frame, BibtexEntry entry,
 	public static String sortWordsAndRemoveDuplicates(String text) {
 
 		String[] words = text.split(", ");
-		SortedSet set = new TreeSet();
+		SortedSet<String> set = new TreeSet<String>();
 		for (int i = 0; i < words.length; i++)
 			set.add(words[i]);
 		StringBuffer sb = new StringBuffer();
-		for (Iterator i = set.iterator(); i.hasNext();) {
+		for (Iterator<String> i = set.iterator(); i.hasNext();) {
 			sb.append(i.next());
 			sb.append(", ");
 		}
@@ -2050,7 +1982,7 @@ public static void openExternalFileUnknown(JabRefFrame frame, BibtexEntry entry,
 	 */
 	public static boolean warnAssignmentSideEffects(AbstractGroup[] groups, BibtexEntry[] entries,
 		BibtexDatabase db, Component parent) {
-		Vector affectedFields = new Vector();
+		Vector<String> affectedFields = new Vector<String>();
 		for (int k = 0; k < groups.length; ++k) {
 			if (groups[k] instanceof KeywordGroup) {
 				KeywordGroup kg = (KeywordGroup) groups[k];
@@ -2403,9 +2335,8 @@ public static void openExternalFileUnknown(JabRefFrame frame, BibtexEntry entry,
 	 * @param ce
 	 */
 	private static void unmarkOldStyle(BibtexEntry be, BibtexDatabase database, NamedCompound ce) {
-		TreeSet owners = new TreeSet();
-		for (Iterator i = database.getEntries().iterator(); i.hasNext();) {
-			BibtexEntry entry = (BibtexEntry) i.next();
+		TreeSet<Object> owners = new TreeSet<Object>();
+		for (BibtexEntry entry : database.getEntries()){
 			Object o = entry.getField(BibtexFields.OWNER);
 			if (o != null)
 				owners.add(o);
@@ -2413,7 +2344,7 @@ public static void openExternalFileUnknown(JabRefFrame frame, BibtexEntry entry,
 		}
 		owners.remove(Globals.prefs.get("defaultOwner"));
 		StringBuffer sb = new StringBuffer();
-		for (Iterator i = owners.iterator(); i.hasNext();) {
+		for (Iterator<Object> i = owners.iterator(); i.hasNext();) {
 			sb.append('[');
 			sb.append(i.next().toString());
 			sb.append(']');
@@ -2452,17 +2383,16 @@ public static void openExternalFileUnknown(JabRefFrame frame, BibtexEntry entry,
 	 *            already has the field set.
 	 * @return A CompoundEdit for the entire operation.
 	 */
-	public static UndoableEdit massSetField(Collection entries, String field, String text,
+	public static UndoableEdit massSetField(Collection<BibtexEntry> entries, String field, String text,
 		boolean overwriteValues) {
 
 		NamedCompound ce = new NamedCompound(Globals.lang("Set field"));
-		for (Iterator i = entries.iterator(); i.hasNext();) {
-			BibtexEntry entry = (BibtexEntry) i.next();
-			Object oldVal = entry.getField(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) && (((String) oldVal).length() > 0))
+			if (!overwriteValues && (oldVal != null) && ((oldVal).length() > 0))
 				continue;
 			if (text != null)
 				entry.setField(field, text);
@@ -2483,8 +2413,8 @@ public static void openExternalFileUnknown(JabRefFrame frame, BibtexEntry entry,
 	 *            encodings.
 	 * @return A List of character encodings
 	 */
-	public static List findEncodingsForString(String characters) {
-		List encodings = new ArrayList();
+	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))
@@ -2699,4 +2629,27 @@ public static void openExternalFileUnknown(JabRefFrame frame, BibtexEntry entry,
 		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);
+	}
+	
+	
+	
+}
\ No newline at end of file
diff --git a/src/java/net/sf/jabref/XmpPrefsTab.java b/src/java/net/sf/jabref/XmpPrefsTab.java
index 6f16c87..eb05753 100644
--- a/src/java/net/sf/jabref/XmpPrefsTab.java
+++ b/src/java/net/sf/jabref/XmpPrefsTab.java
@@ -5,14 +5,7 @@ import java.awt.Dimension;
 import java.awt.event.ActionEvent;
 import java.util.Vector;
 
-import javax.swing.AbstractAction;
-import javax.swing.BorderFactory;
-import javax.swing.JCheckBox;
-import javax.swing.JPanel;
-import javax.swing.JScrollPane;
-import javax.swing.JTable;
-import javax.swing.JToolBar;
-import javax.swing.SwingConstants;
+import javax.swing.*;
 import javax.swing.table.AbstractTableModel;
 import javax.swing.table.TableColumnModel;
 import javax.swing.table.TableModel;
@@ -25,8 +18,8 @@ import com.jgoodies.forms.layout.FormLayout;
  * 
  * Allows the user to enable and configure the XMP privacy filter.
  * 
- * @author $Author: mortenalver $
- * @version $Revision: 2377 $ ($Date: 2007-09-20 19:39:59 +0200 (Thu, 20 Sep 2007) $)
+ * @author $Author: coezbek $
+ * @version $Revision: 2488 $ ($Date: 2007-11-14 01:25:31 +0100 (Wed, 14 Nov 2007) $)
  * 
  */
 class XmpPrefsTab extends JPanel implements PrefsTab {
@@ -40,7 +33,7 @@ class XmpPrefsTab extends JPanel implements PrefsTab {
 	JCheckBox privacyFilterCheckBox = new JCheckBox(Globals
 		.lang("Do not write the following fields to XMP Metadata:"));
 
-	Vector tableRows = new Vector(10);
+	Vector<Object> tableRows = new Vector<Object>(10);
 
 	/**
 	 * Customization of external program paths.
@@ -70,7 +63,7 @@ class XmpPrefsTab extends JPanel implements PrefsTab {
 				return Globals.lang("Field to filter");
 			}
 
-			public Class getColumnClass(int column) {
+			public Class<?> getColumnClass(int column) {
 				return String.class;
 			}
 
@@ -226,7 +219,7 @@ class XmpPrefsTab extends JPanel implements PrefsTab {
 
 			// Finally, we store the new preferences.
 			JabRefPreferences.getInstance().putStringArray("xmpPrivacyFilters",
-				(String[]) tableRows.toArray(new String[tableRows.size()]));
+				tableRows.toArray(new String[tableRows.size()]));
 		}
 
 		JabRefPreferences.getInstance().putBoolean("useXmpPrivacyFilter", privacyFilterCheckBox.isSelected());
diff --git a/src/java/net/sf/jabref/about/About2.java b/src/java/net/sf/jabref/about/About2.java
index d545816..8c3b7cb 100644
--- a/src/java/net/sf/jabref/about/About2.java
+++ b/src/java/net/sf/jabref/about/About2.java
@@ -36,11 +36,17 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 package net.sf.jabref.about ;
 
-import java.awt.* ;
-import java.awt.event.* ;
-import javax.swing.* ;
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.WindowEvent;
 
-import net.sf.jabref.* ;
+import javax.swing.JDialog;
+import javax.swing.JFrame;
+import javax.swing.JPanel;
+
+import net.sf.jabref.Globals;
 
 public class About2 extends JDialog implements ActionListener
 {
diff --git a/src/java/net/sf/jabref/about/AboutPanel.java b/src/java/net/sf/jabref/about/AboutPanel.java
index 06d1ecc..2fb5ea1 100644
--- a/src/java/net/sf/jabref/about/AboutPanel.java
+++ b/src/java/net/sf/jabref/about/AboutPanel.java
@@ -35,20 +35,32 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 package net.sf.jabref.about ;
 
-import java.io.* ;
-import java.util.* ;
-
-import java.awt.* ;
-import java.awt.image.* ;
-import javax.swing.* ;
-import javax.swing.border.* ;
-
-import net.sf.jabref.* ;
+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 textBlocks ;
+  private Vector<TextBlock> textBlocks ;
   private String versionStr ;
   private String buildStr ;
   private AnimationThread thread;
@@ -113,7 +125,7 @@ public class AboutPanel extends JComponent
 
     setBorder ( BorderFactory.createBevelBorder( BevelBorder.RAISED)) ;
 
-    textBlocks = new Vector( 50 ) ;
+    textBlocks = new Vector<TextBlock>( 50 ) ;
 
     loadAboutText() ;
 
@@ -170,12 +182,8 @@ public class AboutPanel extends JComponent
                                                  "credits.txt" ) ;
       }
       InputStreamReader reader = new InputStreamReader( stream ) ;
-//          getClass().getResourceAsStream(GUIGlobals.getLocaleHelpPath() + "credits.txt" ) ) ;
-//          getClass().getResourceAsStream( "/help/credits.txt" ) ) ;
       BufferedReader input = new BufferedReader(reader, 1000) ;
 
-//      System.out.println("encoding :" +reader.getEncoding() ) ;
-
       while ( input.ready() )
       {
         String line = input.readLine() ;
@@ -214,9 +222,10 @@ public class AboutPanel extends JComponent
               aLine.setDirection( 0.0, -1.0 ) ;
               aLine.setFont( font3 ) ;
 
-//              System.out.println( "line " +aLine.getText() +"<" +(borders[3] + ( index * fm.getHeight() * 1.5 )) +">" ) ;
-
+              block = new TextBlock() ;
               block.add( aLine ) ;
+              block.setVisible(true);
+              
               index++ ;
             }
           }
@@ -272,19 +281,14 @@ public class AboutPanel extends JComponent
       g.drawString( "JabRef", (getWidth() - fm.stringWidth("JabRef")) /2, fm.getHeight()+10) ;
 
 
-      for ( Enumeration myE = textBlocks.elements() ; myE.hasMoreElements() ; )
-      {
-        TextBlock block = (TextBlock) myE.nextElement() ;
-
+      for ( TextBlock block : textBlocks){
         if (block.isVisible()) // only if Block is marked as visible
         {
           // print Heading
           AboutTextLine head = block.getHeading() ;
           drawLine(head, g) ;
 
-          for ( Enumeration myEnum = block.getEnumeration() ; myEnum.hasMoreElements() ; )
-          {
-            AboutTextLine line = ( AboutTextLine ) myEnum.nextElement() ;
+          for (AboutTextLine line : block){
             drawLine(line, g) ;
           }
         }
@@ -389,16 +393,14 @@ public class AboutPanel extends JComponent
         {
           int counter = 0 ;
 
-          for ( Enumeration myE = textBlocks.elements() ; myE.hasMoreElements() ; )
+          for ( Enumeration<TextBlock> myE = textBlocks.elements() ; myE.hasMoreElements() ; )
           {
-            TextBlock block = ( TextBlock ) myE.nextElement() ;
+            TextBlock block = myE.nextElement() ;
             AboutTextLine head = block.getHeading() ;
             counter = performStep(head) ;
 
-            for ( Enumeration myEnum = block.getEnumeration() ; myEnum.hasMoreElements() ; )
-            {
-              AboutTextLine line = ( AboutTextLine ) myEnum.nextElement() ;
-              counter += performStep( line ) ;
+            for (AboutTextLine line : block){
+            	counter += performStep( line ) ;
             }
           }
           if (counter < 1)
diff --git a/src/java/net/sf/jabref/about/AboutTextLine.java b/src/java/net/sf/jabref/about/AboutTextLine.java
index 83b0cc5..096bc55 100644
--- a/src/java/net/sf/jabref/about/AboutTextLine.java
+++ b/src/java/net/sf/jabref/about/AboutTextLine.java
@@ -37,8 +37,10 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 package net.sf.jabref.about ;
 
-import java.util.*;
-import java.awt.*;
+import java.awt.Color;
+import java.awt.Font;
+import java.util.Random;
+
 import javax.swing.UIManager;
 
 // a single About Line
diff --git a/src/java/net/sf/jabref/about/ExtendedInfoPanel.java b/src/java/net/sf/jabref/about/ExtendedInfoPanel.java
index 572ff81..8b68039 100644
--- a/src/java/net/sf/jabref/about/ExtendedInfoPanel.java
+++ b/src/java/net/sf/jabref/about/ExtendedInfoPanel.java
@@ -40,15 +40,20 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 package net.sf.jabref.about ;
 
-import javax.swing.* ;
-import java.net.* ;
-import java.io.*;
-import java.awt.*;
-import javax.swing.border.*;
+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.*;
+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;
-import net.sf.jabref.*;
 
 public class ExtendedInfoPanel extends JPanel implements AnimationListener, ActionListener
 {
diff --git a/src/java/net/sf/jabref/about/HighlightFilter.java b/src/java/net/sf/jabref/about/HighlightFilter.java
index d64efaa..3471373 100644
--- a/src/java/net/sf/jabref/about/HighlightFilter.java
+++ b/src/java/net/sf/jabref/about/HighlightFilter.java
@@ -30,8 +30,8 @@
 
 package net.sf.jabref.about ;
 
-import java.awt.* ;
-import java.awt.image.* ;
+import java.awt.Color;
+import java.awt.image.RGBImageFilter;
 
 /**
  * An image filter to highlight an image by brightening or darkening
diff --git a/src/java/net/sf/jabref/about/NewAboutAction.java b/src/java/net/sf/jabref/about/NewAboutAction.java
deleted file mode 100644
index 161d3b9..0000000
--- a/src/java/net/sf/jabref/about/NewAboutAction.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- animated about dialog
-
-Copyright (C) 2005 Raik Nagel <kiar at users.sourceforge.net>
-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.
-* Neither the name of the author 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.
-*/
-
-// created by : r.nagel 05.05.2005
-//
-// function : about action, used in JabrefFrame
-//
-// modified :
-
-package net.sf.jabref.about ;
-
-import java.awt.event.* ;
-import javax.swing.* ;
-
-import net.sf.jabref.* ;
-
-public class NewAboutAction
-    extends MnemonicAwareAction
-{
-
-  private String type = null ; // The type of item to create.
-  private KeyStroke keyStroke = null ; // Used for the specific instances.
-
-  public NewAboutAction()
-  {
-    // This action leads to a dialog asking for entry type.
-    super(GUIGlobals.getImage("about")) ;
-    putValue( NAME, "About JabRef" ) ;
-//    putValue( ACCELERATOR_KEY, key ) ;
-    putValue( SHORT_DESCRIPTION, Globals.lang( "About JabRef" ) ) ;
-  }
-
-  public void actionPerformed( ActionEvent e )
-  {
-    About2 dialog = new About2((JFrame) null) ;
-  }
-}
diff --git a/src/java/net/sf/jabref/about/TextBlock.java b/src/java/net/sf/jabref/about/TextBlock.java
index ffa3890..20c12fb 100644
--- a/src/java/net/sf/jabref/about/TextBlock.java
+++ b/src/java/net/sf/jabref/about/TextBlock.java
@@ -37,17 +37,18 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 package net.sf.jabref.about ;
 
-import java.util.*;
+import java.util.Iterator;
+import java.util.Vector;
 
-public class TextBlock
-{
-  private Vector textLines ;
+public class TextBlock implements Iterable<AboutTextLine> {
+
+  private Vector<AboutTextLine> textLines ;
   private AboutTextLine headLine ;
   private boolean visible ;
 
   public TextBlock()
   {
-    textLines = new Vector() ;
+    textLines = new Vector<AboutTextLine>() ;
     visible = false ;
   }
 
@@ -58,7 +59,9 @@ public class TextBlock
     textLines.add(line);
   }
 
-  public Enumeration getEnumeration() { return textLines.elements() ; }
+  public Iterator<AboutTextLine> iterator() { 
+	  return textLines.iterator(); 
+  }
 
 // ---------------------------------------------------------------------------
   public void setHeading(AboutTextLine head)
diff --git a/src/java/net/sf/jabref/bst/BstLexer.java b/src/java/net/sf/jabref/bst/BstLexer.java
index 9d81e3e..1ee239f 100644
--- a/src/java/net/sf/jabref/bst/BstLexer.java
+++ b/src/java/net/sf/jabref/bst/BstLexer.java
@@ -2,10 +2,13 @@ package net.sf.jabref.bst;
 
 // $ANTLR 3.0b5 Bst.g 2006-11-23 23:20:24
 
-import org.antlr.runtime.*;
-import java.util.Stack;
-import java.util.List;
-import java.util.ArrayList;
+import org.antlr.runtime.CharStream;
+import org.antlr.runtime.EarlyExitException;
+import org.antlr.runtime.Lexer;
+import org.antlr.runtime.MismatchedSetException;
+import org.antlr.runtime.NoViableAltException;
+import org.antlr.runtime.RecognitionException;
+import org.antlr.runtime.Token;
 
 public class BstLexer extends Lexer {
     public static final int LETTER=21;
@@ -40,7 +43,9 @@ public class BstLexer extends Lexer {
     public static final int IDLIST=4;
     public static final int NUMERAL=22;
     public static final int READ=13;
-    public BstLexer() {;} 
+    public BstLexer() {
+        
+    } 
     public BstLexer(CharStream input) {
         super(input);
     }
diff --git a/src/java/net/sf/jabref/bst/BstParser.java b/src/java/net/sf/jabref/bst/BstParser.java
index 516e240..e37f069 100644
--- a/src/java/net/sf/jabref/bst/BstParser.java
+++ b/src/java/net/sf/jabref/bst/BstParser.java
@@ -2,14 +2,21 @@ package net.sf.jabref.bst;
 
 // $ANTLR 3.0b5 Bst.g 2006-11-23 23:20:24
 
-import org.antlr.runtime.*;
-import java.util.Stack;
-import java.util.List;
 import java.util.ArrayList;
+import java.util.List;
 
-
-import org.antlr.runtime.tree.*;
-
+import org.antlr.runtime.BitSet;
+import org.antlr.runtime.EarlyExitException;
+import org.antlr.runtime.NoViableAltException;
+import org.antlr.runtime.Parser;
+import org.antlr.runtime.ParserRuleReturnScope;
+import org.antlr.runtime.RecognitionException;
+import org.antlr.runtime.Token;
+import org.antlr.runtime.TokenStream;
+import org.antlr.runtime.tree.CommonTreeAdaptor;
+import org.antlr.runtime.tree.TreeAdaptor;
+
+ at SuppressWarnings({"unused", "unchecked", "null"})
 public class BstParser extends Parser {
     public static final String[] tokenNames = new String[] {
         "<invalid>", "<EOR>", "<DOWN>", "<UP>", "IDLIST", "STACK", "ENTRY", "COMMANDS", "STRINGS", "INTEGERS", "FUNCTION", "MACRO", "STRING", "READ", "EXECUTE", "ITERATE", "REVERSE", "SORT", "IDENTIFIER", "INTEGER", "QUOTED", "LETTER", "NUMERAL", "WS", "LINE_COMMENT", "'{'", "'}'", "'<'", "'>'", "'='", "'+'", "'-'", "':='", "'*'"
@@ -57,7 +64,7 @@ public class BstParser extends Parser {
     public static class program_return extends ParserRuleReturnScope {
         Object tree;
         public Object getTree() { return tree; }
-    };
+    }
 
     // $ANTLR start program
     // Bst.g:14:1: program : ( commands )+ -> ^( COMMANDS ( commands )+ ) ;
@@ -110,15 +117,16 @@ public class BstParser extends Parser {
 
 
             // AST REWRITE
-            int i_0 = 0;
+            
+			int i_0 = 0;
             retval.tree = root_0;
-            root_0 = (Object)adaptor.nil();
+            root_0 = adaptor.nil();
             // 14:21: -> ^( COMMANDS ( commands )+ )
             {
                 // Bst.g:14:24: ^( COMMANDS ( commands )+ )
                 {
-                Object root_1 = (Object)adaptor.nil();
-                root_1 = (Object)adaptor.becomeRoot(adaptor.create(COMMANDS, "COMMANDS"), root_1);
+                Object root_1 = adaptor.nil();
+                root_1 = adaptor.becomeRoot(adaptor.create(COMMANDS, "COMMANDS"), root_1);
 
                 // Bst.g:14:35: ( commands )+
                 {
@@ -150,7 +158,7 @@ public class BstParser extends Parser {
         finally {
             retval.stop = input.LT(-1);
 
-                retval.tree = (Object)adaptor.rulePostProcessing(root_0);
+                retval.tree = adaptor.rulePostProcessing(root_0);
                 adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
 
        }
@@ -161,10 +169,11 @@ public class BstParser extends Parser {
     public static class commands_return extends ParserRuleReturnScope {
         Object tree;
         public Object getTree() { return tree; }
-    };
+    }
 
     // $ANTLR start commands
     // Bst.g:16:1: commands : ( STRINGS^^ idList | INTEGERS^^ idList | FUNCTION^^ id stack | MACRO^^ id '{'! STRING '}'! | READ^^ | EXECUTE^^ '{'! function '}'! | ITERATE^^ '{'! function '}'! | REVERSE^^ '{'! function '}'! | ENTRY^^ idList0 idList0 idList0 | SORT^^ );
+    @SuppressWarnings("unused")
     public commands_return commands() throws RecognitionException {   
         commands_return retval = new commands_return();
         retval.start = input.LT(1);
@@ -278,12 +287,12 @@ public class BstParser extends Parser {
                 case 1 :
                     // Bst.g:17:4: STRINGS^^ idList
                     {
-                    root_0 = (Object)adaptor.nil();
+                    root_0 = adaptor.nil();
 
-                    STRINGS2=(Token)input.LT(1);
+                    STRINGS2=input.LT(1);
                     match(input,STRINGS,FOLLOW_STRINGS_in_commands65); 
-                    STRINGS2_tree = (Object)adaptor.create(STRINGS2);
-                    root_0 = (Object)adaptor.becomeRoot(STRINGS2_tree, root_0);
+                    STRINGS2_tree = adaptor.create(STRINGS2);
+                    root_0 = adaptor.becomeRoot(STRINGS2_tree, root_0);
 
                     pushFollow(FOLLOW_idList_in_commands68);
                     idList3=idList();
@@ -296,12 +305,12 @@ public class BstParser extends Parser {
                 case 2 :
                     // Bst.g:18:4: INTEGERS^^ idList
                     {
-                    root_0 = (Object)adaptor.nil();
+                    root_0 = adaptor.nil();
 
-                    INTEGERS4=(Token)input.LT(1);
+                    INTEGERS4=input.LT(1);
                     match(input,INTEGERS,FOLLOW_INTEGERS_in_commands73); 
-                    INTEGERS4_tree = (Object)adaptor.create(INTEGERS4);
-                    root_0 = (Object)adaptor.becomeRoot(INTEGERS4_tree, root_0);
+                    INTEGERS4_tree = adaptor.create(INTEGERS4);
+                    root_0 = adaptor.becomeRoot(INTEGERS4_tree, root_0);
 
                     pushFollow(FOLLOW_idList_in_commands76);
                     idList5=idList();
@@ -314,12 +323,12 @@ public class BstParser extends Parser {
                 case 3 :
                     // Bst.g:19:4: FUNCTION^^ id stack
                     {
-                    root_0 = (Object)adaptor.nil();
+                    root_0 = adaptor.nil();
 
-                    FUNCTION6=(Token)input.LT(1);
+                    FUNCTION6=input.LT(1);
                     match(input,FUNCTION,FOLLOW_FUNCTION_in_commands81); 
-                    FUNCTION6_tree = (Object)adaptor.create(FUNCTION6);
-                    root_0 = (Object)adaptor.becomeRoot(FUNCTION6_tree, root_0);
+                    FUNCTION6_tree = adaptor.create(FUNCTION6);
+                    root_0 = adaptor.becomeRoot(FUNCTION6_tree, root_0);
 
                     pushFollow(FOLLOW_id_in_commands84);
                     id7=id();
@@ -337,26 +346,26 @@ public class BstParser extends Parser {
                 case 4 :
                     // Bst.g:20:4: MACRO^^ id '{'! STRING '}'!
                     {
-                    root_0 = (Object)adaptor.nil();
+                    root_0 = adaptor.nil();
 
-                    MACRO9=(Token)input.LT(1);
+                    MACRO9=input.LT(1);
                     match(input,MACRO,FOLLOW_MACRO_in_commands91); 
-                    MACRO9_tree = (Object)adaptor.create(MACRO9);
-                    root_0 = (Object)adaptor.becomeRoot(MACRO9_tree, root_0);
+                    MACRO9_tree = adaptor.create(MACRO9);
+                    root_0 = adaptor.becomeRoot(MACRO9_tree, root_0);
 
                     pushFollow(FOLLOW_id_in_commands94);
                     id10=id();
                     _fsp--;
 
                     adaptor.addChild(root_0, id10.tree);
-                    char_literal11=(Token)input.LT(1);
+                    char_literal11=input.LT(1);
                     match(input,25,FOLLOW_25_in_commands96); 
-                    STRING12=(Token)input.LT(1);
+                    STRING12=input.LT(1);
                     match(input,STRING,FOLLOW_STRING_in_commands99); 
-                    STRING12_tree = (Object)adaptor.create(STRING12);
+                    STRING12_tree = adaptor.create(STRING12);
                     adaptor.addChild(root_0, STRING12_tree);
 
-                    char_literal13=(Token)input.LT(1);
+                    char_literal13=input.LT(1);
                     match(input,26,FOLLOW_26_in_commands101); 
 
                     }
@@ -364,12 +373,12 @@ public class BstParser extends Parser {
                 case 5 :
                     // Bst.g:21:4: READ^^
                     {
-                    root_0 = (Object)adaptor.nil();
+                    root_0 = adaptor.nil();
 
-                    READ14=(Token)input.LT(1);
+                    READ14=input.LT(1);
                     match(input,READ,FOLLOW_READ_in_commands107); 
-                    READ14_tree = (Object)adaptor.create(READ14);
-                    root_0 = (Object)adaptor.becomeRoot(READ14_tree, root_0);
+                    READ14_tree = adaptor.create(READ14);
+                    root_0 = adaptor.becomeRoot(READ14_tree, root_0);
 
 
                     }
@@ -377,21 +386,21 @@ public class BstParser extends Parser {
                 case 6 :
                     // Bst.g:22:4: EXECUTE^^ '{'! function '}'!
                     {
-                    root_0 = (Object)adaptor.nil();
+                    root_0 = adaptor.nil();
 
-                    EXECUTE15=(Token)input.LT(1);
+                    EXECUTE15=input.LT(1);
                     match(input,EXECUTE,FOLLOW_EXECUTE_in_commands113); 
-                    EXECUTE15_tree = (Object)adaptor.create(EXECUTE15);
-                    root_0 = (Object)adaptor.becomeRoot(EXECUTE15_tree, root_0);
+                    EXECUTE15_tree = adaptor.create(EXECUTE15);
+                    root_0 = adaptor.becomeRoot(EXECUTE15_tree, root_0);
 
-                    char_literal16=(Token)input.LT(1);
+                    char_literal16=input.LT(1);
                     match(input,25,FOLLOW_25_in_commands116); 
                     pushFollow(FOLLOW_function_in_commands119);
                     function17=function();
                     _fsp--;
 
                     adaptor.addChild(root_0, function17.tree);
-                    char_literal18=(Token)input.LT(1);
+                    char_literal18=input.LT(1);
                     match(input,26,FOLLOW_26_in_commands121); 
 
                     }
@@ -399,21 +408,21 @@ public class BstParser extends Parser {
                 case 7 :
                     // Bst.g:23:4: ITERATE^^ '{'! function '}'!
                     {
-                    root_0 = (Object)adaptor.nil();
+                    root_0 = adaptor.nil();
 
-                    ITERATE19=(Token)input.LT(1);
+                    ITERATE19=input.LT(1);
                     match(input,ITERATE,FOLLOW_ITERATE_in_commands127); 
-                    ITERATE19_tree = (Object)adaptor.create(ITERATE19);
-                    root_0 = (Object)adaptor.becomeRoot(ITERATE19_tree, root_0);
+                    ITERATE19_tree = adaptor.create(ITERATE19);
+                    root_0 = adaptor.becomeRoot(ITERATE19_tree, root_0);
 
-                    char_literal20=(Token)input.LT(1);
+                    char_literal20=input.LT(1);
                     match(input,25,FOLLOW_25_in_commands130); 
                     pushFollow(FOLLOW_function_in_commands133);
                     function21=function();
                     _fsp--;
 
                     adaptor.addChild(root_0, function21.tree);
-                    char_literal22=(Token)input.LT(1);
+                    char_literal22=input.LT(1);
                     match(input,26,FOLLOW_26_in_commands135); 
 
                     }
@@ -421,21 +430,21 @@ public class BstParser extends Parser {
                 case 8 :
                     // Bst.g:24:4: REVERSE^^ '{'! function '}'!
                     {
-                    root_0 = (Object)adaptor.nil();
+                    root_0 = adaptor.nil();
 
-                    REVERSE23=(Token)input.LT(1);
+                    REVERSE23=input.LT(1);
                     match(input,REVERSE,FOLLOW_REVERSE_in_commands141); 
-                    REVERSE23_tree = (Object)adaptor.create(REVERSE23);
-                    root_0 = (Object)adaptor.becomeRoot(REVERSE23_tree, root_0);
+                    REVERSE23_tree = adaptor.create(REVERSE23);
+                    root_0 = adaptor.becomeRoot(REVERSE23_tree, root_0);
 
-                    char_literal24=(Token)input.LT(1);
+                    char_literal24=input.LT(1);
                     match(input,25,FOLLOW_25_in_commands144); 
                     pushFollow(FOLLOW_function_in_commands147);
                     function25=function();
                     _fsp--;
 
                     adaptor.addChild(root_0, function25.tree);
-                    char_literal26=(Token)input.LT(1);
+                    char_literal26=input.LT(1);
                     match(input,26,FOLLOW_26_in_commands149); 
 
                     }
@@ -443,12 +452,12 @@ public class BstParser extends Parser {
                 case 9 :
                     // Bst.g:25:4: ENTRY^^ idList0 idList0 idList0
                     {
-                    root_0 = (Object)adaptor.nil();
+                    root_0 = adaptor.nil();
 
-                    ENTRY27=(Token)input.LT(1);
+                    ENTRY27=input.LT(1);
                     match(input,ENTRY,FOLLOW_ENTRY_in_commands155); 
-                    ENTRY27_tree = (Object)adaptor.create(ENTRY27);
-                    root_0 = (Object)adaptor.becomeRoot(ENTRY27_tree, root_0);
+                    ENTRY27_tree = adaptor.create(ENTRY27);
+                    root_0 = adaptor.becomeRoot(ENTRY27_tree, root_0);
 
                     pushFollow(FOLLOW_idList0_in_commands158);
                     idList028=idList0();
@@ -471,12 +480,12 @@ public class BstParser extends Parser {
                 case 10 :
                     // Bst.g:26:4: SORT^^
                     {
-                    root_0 = (Object)adaptor.nil();
+                    root_0 = adaptor.nil();
 
-                    SORT31=(Token)input.LT(1);
+                    SORT31=input.LT(1);
                     match(input,SORT,FOLLOW_SORT_in_commands167); 
-                    SORT31_tree = (Object)adaptor.create(SORT31);
-                    root_0 = (Object)adaptor.becomeRoot(SORT31_tree, root_0);
+                    SORT31_tree = adaptor.create(SORT31);
+                    root_0 = adaptor.becomeRoot(SORT31_tree, root_0);
 
 
                     }
@@ -491,7 +500,7 @@ public class BstParser extends Parser {
         finally {
             retval.stop = input.LT(-1);
 
-                retval.tree = (Object)adaptor.rulePostProcessing(root_0);
+                retval.tree = adaptor.rulePostProcessing(root_0);
                 adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
 
        }
@@ -502,7 +511,7 @@ public class BstParser extends Parser {
     public static class identifier_return extends ParserRuleReturnScope {
         Object tree;
         public Object getTree() { return tree; }
-    };
+    }
 
     // $ANTLR start identifier
     // Bst.g:28:1: identifier : IDENTIFIER ;
@@ -520,11 +529,11 @@ public class BstParser extends Parser {
             // Bst.g:29:4: ( IDENTIFIER )
             // Bst.g:29:4: IDENTIFIER
             {
-            root_0 = (Object)adaptor.nil();
+            root_0 = adaptor.nil();
 
-            IDENTIFIER32=(Token)input.LT(1);
+            IDENTIFIER32=input.LT(1);
             match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_identifier178); 
-            IDENTIFIER32_tree = (Object)adaptor.create(IDENTIFIER32);
+            IDENTIFIER32_tree = adaptor.create(IDENTIFIER32);
             adaptor.addChild(root_0, IDENTIFIER32_tree);
 
 
@@ -538,7 +547,7 @@ public class BstParser extends Parser {
         finally {
             retval.stop = input.LT(-1);
 
-                retval.tree = (Object)adaptor.rulePostProcessing(root_0);
+                retval.tree = adaptor.rulePostProcessing(root_0);
                 adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
 
        }
@@ -549,7 +558,7 @@ public class BstParser extends Parser {
     public static class id_return extends ParserRuleReturnScope {
         Object tree;
         public Object getTree() { return tree; }
-    };
+    }
 
     // $ANTLR start id
     // Bst.g:31:1: id : '{'! identifier '}'! ;
@@ -571,16 +580,16 @@ public class BstParser extends Parser {
             // Bst.g:32:4: ( '{'! identifier '}'! )
             // Bst.g:32:4: '{'! identifier '}'!
             {
-            root_0 = (Object)adaptor.nil();
+            root_0 = adaptor.nil();
 
-            char_literal33=(Token)input.LT(1);
+            char_literal33=input.LT(1);
             match(input,25,FOLLOW_25_in_id188); 
             pushFollow(FOLLOW_identifier_in_id191);
             identifier34=identifier();
             _fsp--;
 
             adaptor.addChild(root_0, identifier34.tree);
-            char_literal35=(Token)input.LT(1);
+            char_literal35=input.LT(1);
             match(input,26,FOLLOW_26_in_id193); 
 
             }
@@ -593,7 +602,7 @@ public class BstParser extends Parser {
         finally {
             retval.stop = input.LT(-1);
 
-                retval.tree = (Object)adaptor.rulePostProcessing(root_0);
+                retval.tree = adaptor.rulePostProcessing(root_0);
                 adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
 
        }
@@ -604,11 +613,12 @@ public class BstParser extends Parser {
     public static class idList_return extends ParserRuleReturnScope {
         Object tree;
         public Object getTree() { return tree; }
-    };
+    }
 
     // $ANTLR start idList
     // Bst.g:34:1: idList : '{' ( identifier )+ '}' -> ^( IDLIST ( identifier )+ ) ;
-    public idList_return idList() throws RecognitionException {   
+    
+	public idList_return idList() throws RecognitionException {   
         idList_return retval = new idList_return();
         retval.start = input.LT(1);
 
@@ -628,7 +638,7 @@ public class BstParser extends Parser {
             // Bst.g:35:4: ( '{' ( identifier )+ '}' -> ^( IDLIST ( identifier )+ ) )
             // Bst.g:35:4: '{' ( identifier )+ '}'
             {
-            char_literal36=(Token)input.LT(1);
+            char_literal36=input.LT(1);
             match(input,25,FOLLOW_25_in_idList205); 
             list_25.add(char_literal36);
 
@@ -665,7 +675,7 @@ public class BstParser extends Parser {
                 cnt3++;
             } while (true);
 
-            char_literal38=(Token)input.LT(1);
+            char_literal38=input.LT(1);
             match(input,26,FOLLOW_26_in_idList210); 
             list_26.add(char_literal38);
 
@@ -673,13 +683,13 @@ public class BstParser extends Parser {
             // AST REWRITE
             int i_0 = 0;
             retval.tree = root_0;
-            root_0 = (Object)adaptor.nil();
+            root_0 = adaptor.nil();
             // 35:24: -> ^( IDLIST ( identifier )+ )
             {
                 // Bst.g:35:27: ^( IDLIST ( identifier )+ )
                 {
-                Object root_1 = (Object)adaptor.nil();
-                root_1 = (Object)adaptor.becomeRoot(adaptor.create(IDLIST, "IDLIST"), root_1);
+                Object root_1 = adaptor.nil();
+                root_1 = adaptor.becomeRoot(adaptor.create(IDLIST, "IDLIST"), root_1);
 
                 // Bst.g:35:36: ( identifier )+
                 {
@@ -711,7 +721,7 @@ public class BstParser extends Parser {
         finally {
             retval.stop = input.LT(-1);
 
-                retval.tree = (Object)adaptor.rulePostProcessing(root_0);
+                retval.tree = adaptor.rulePostProcessing(root_0);
                 adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
 
        }
@@ -722,7 +732,7 @@ public class BstParser extends Parser {
     public static class idList0_return extends ParserRuleReturnScope {
         Object tree;
         public Object getTree() { return tree; }
-    };
+    }
 
     // $ANTLR start idList0
     // Bst.g:37:1: idList0 : '{' ( identifier )* '}' -> ^( IDLIST ( identifier )* ) ;
@@ -746,7 +756,7 @@ public class BstParser extends Parser {
             // Bst.g:38:4: ( '{' ( identifier )* '}' -> ^( IDLIST ( identifier )* ) )
             // Bst.g:38:4: '{' ( identifier )* '}'
             {
-            char_literal39=(Token)input.LT(1);
+            char_literal39=input.LT(1);
             match(input,25,FOLLOW_25_in_idList0230); 
             list_25.add(char_literal39);
 
@@ -778,7 +788,7 @@ public class BstParser extends Parser {
                 }
             } while (true);
 
-            char_literal41=(Token)input.LT(1);
+            char_literal41=input.LT(1);
             match(input,26,FOLLOW_26_in_idList0235); 
             list_26.add(char_literal41);
 
@@ -786,13 +796,13 @@ public class BstParser extends Parser {
             // AST REWRITE
             int i_0 = 0;
             retval.tree = root_0;
-            root_0 = (Object)adaptor.nil();
+            root_0 = adaptor.nil();
             // 38:24: -> ^( IDLIST ( identifier )* )
             {
                 // Bst.g:38:27: ^( IDLIST ( identifier )* )
                 {
-                Object root_1 = (Object)adaptor.nil();
-                root_1 = (Object)adaptor.becomeRoot(adaptor.create(IDLIST, "IDLIST"), root_1);
+                Object root_1 = adaptor.nil();
+                root_1 = adaptor.becomeRoot(adaptor.create(IDLIST, "IDLIST"), root_1);
 
                 // Bst.g:38:36: ( identifier )*
                 {
@@ -823,7 +833,7 @@ public class BstParser extends Parser {
         finally {
             retval.stop = input.LT(-1);
 
-                retval.tree = (Object)adaptor.rulePostProcessing(root_0);
+                retval.tree = adaptor.rulePostProcessing(root_0);
                 adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
 
        }
@@ -834,7 +844,7 @@ public class BstParser extends Parser {
     public static class function_return extends ParserRuleReturnScope {
         Object tree;
         public Object getTree() { return tree; }
-    };
+    }
 
     // $ANTLR start function
     // Bst.g:40:1: function : ( '<' | '>' | '=' | '+' | '-' | ':=' | '*' | identifier );
@@ -901,11 +911,11 @@ public class BstParser extends Parser {
                 case 1 :
                     // Bst.g:41:4: '<'
                     {
-                    root_0 = (Object)adaptor.nil();
+                    root_0 = adaptor.nil();
 
-                    char_literal42=(Token)input.LT(1);
+                    char_literal42=input.LT(1);
                     match(input,27,FOLLOW_27_in_function254); 
-                    char_literal42_tree = (Object)adaptor.create(char_literal42);
+                    char_literal42_tree = adaptor.create(char_literal42);
                     adaptor.addChild(root_0, char_literal42_tree);
 
 
@@ -914,11 +924,11 @@ public class BstParser extends Parser {
                 case 2 :
                     // Bst.g:41:10: '>'
                     {
-                    root_0 = (Object)adaptor.nil();
+                    root_0 = adaptor.nil();
 
-                    char_literal43=(Token)input.LT(1);
+                    char_literal43=input.LT(1);
                     match(input,28,FOLLOW_28_in_function258); 
-                    char_literal43_tree = (Object)adaptor.create(char_literal43);
+                    char_literal43_tree = adaptor.create(char_literal43);
                     adaptor.addChild(root_0, char_literal43_tree);
 
 
@@ -927,11 +937,11 @@ public class BstParser extends Parser {
                 case 3 :
                     // Bst.g:41:16: '='
                     {
-                    root_0 = (Object)adaptor.nil();
+                    root_0 = adaptor.nil();
 
-                    char_literal44=(Token)input.LT(1);
+                    char_literal44=input.LT(1);
                     match(input,29,FOLLOW_29_in_function262); 
-                    char_literal44_tree = (Object)adaptor.create(char_literal44);
+                    char_literal44_tree = adaptor.create(char_literal44);
                     adaptor.addChild(root_0, char_literal44_tree);
 
 
@@ -940,11 +950,11 @@ public class BstParser extends Parser {
                 case 4 :
                     // Bst.g:41:22: '+'
                     {
-                    root_0 = (Object)adaptor.nil();
+                    root_0 = adaptor.nil();
 
-                    char_literal45=(Token)input.LT(1);
+                    char_literal45=input.LT(1);
                     match(input,30,FOLLOW_30_in_function266); 
-                    char_literal45_tree = (Object)adaptor.create(char_literal45);
+                    char_literal45_tree = adaptor.create(char_literal45);
                     adaptor.addChild(root_0, char_literal45_tree);
 
 
@@ -953,11 +963,11 @@ public class BstParser extends Parser {
                 case 5 :
                     // Bst.g:41:28: '-'
                     {
-                    root_0 = (Object)adaptor.nil();
+                    root_0 = adaptor.nil();
 
-                    char_literal46=(Token)input.LT(1);
+                    char_literal46=input.LT(1);
                     match(input,31,FOLLOW_31_in_function270); 
-                    char_literal46_tree = (Object)adaptor.create(char_literal46);
+                    char_literal46_tree = adaptor.create(char_literal46);
                     adaptor.addChild(root_0, char_literal46_tree);
 
 
@@ -966,11 +976,11 @@ public class BstParser extends Parser {
                 case 6 :
                     // Bst.g:41:34: ':='
                     {
-                    root_0 = (Object)adaptor.nil();
+                    root_0 = adaptor.nil();
 
-                    string_literal47=(Token)input.LT(1);
+                    string_literal47=input.LT(1);
                     match(input,32,FOLLOW_32_in_function274); 
-                    string_literal47_tree = (Object)adaptor.create(string_literal47);
+                    string_literal47_tree = adaptor.create(string_literal47);
                     adaptor.addChild(root_0, string_literal47_tree);
 
 
@@ -979,11 +989,11 @@ public class BstParser extends Parser {
                 case 7 :
                     // Bst.g:41:41: '*'
                     {
-                    root_0 = (Object)adaptor.nil();
+                    root_0 = adaptor.nil();
 
-                    char_literal48=(Token)input.LT(1);
+                    char_literal48=input.LT(1);
                     match(input,33,FOLLOW_33_in_function278); 
-                    char_literal48_tree = (Object)adaptor.create(char_literal48);
+                    char_literal48_tree = adaptor.create(char_literal48);
                     adaptor.addChild(root_0, char_literal48_tree);
 
 
@@ -992,7 +1002,7 @@ public class BstParser extends Parser {
                 case 8 :
                     // Bst.g:41:47: identifier
                     {
-                    root_0 = (Object)adaptor.nil();
+                    root_0 = adaptor.nil();
 
                     pushFollow(FOLLOW_identifier_in_function282);
                     identifier49=identifier();
@@ -1012,7 +1022,7 @@ public class BstParser extends Parser {
         finally {
             retval.stop = input.LT(-1);
 
-                retval.tree = (Object)adaptor.rulePostProcessing(root_0);
+                retval.tree = adaptor.rulePostProcessing(root_0);
                 adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
 
        }
@@ -1023,7 +1033,7 @@ public class BstParser extends Parser {
     public static class stack_return extends ParserRuleReturnScope {
         Object tree;
         public Object getTree() { return tree; }
-    };
+    }
 
     // $ANTLR start stack
     // Bst.g:43:1: stack : '{' ( stackitem )+ '}' -> ^( STACK ( stackitem )+ ) ;
@@ -1047,7 +1057,7 @@ public class BstParser extends Parser {
             // Bst.g:44:4: ( '{' ( stackitem )+ '}' -> ^( STACK ( stackitem )+ ) )
             // Bst.g:44:4: '{' ( stackitem )+ '}'
             {
-            char_literal50=(Token)input.LT(1);
+            char_literal50=input.LT(1);
             match(input,25,FOLLOW_25_in_stack293); 
             list_25.add(char_literal50);
 
@@ -1084,7 +1094,7 @@ public class BstParser extends Parser {
                 cnt6++;
             } while (true);
 
-            char_literal52=(Token)input.LT(1);
+            char_literal52=input.LT(1);
             match(input,26,FOLLOW_26_in_stack298); 
             list_26.add(char_literal52);
 
@@ -1092,13 +1102,13 @@ public class BstParser extends Parser {
             // AST REWRITE
             int i_0 = 0;
             retval.tree = root_0;
-            root_0 = (Object)adaptor.nil();
+            root_0 = adaptor.nil();
             // 44:23: -> ^( STACK ( stackitem )+ )
             {
                 // Bst.g:44:26: ^( STACK ( stackitem )+ )
                 {
-                Object root_1 = (Object)adaptor.nil();
-                root_1 = (Object)adaptor.becomeRoot(adaptor.create(STACK, "STACK"), root_1);
+                Object root_1 = adaptor.nil();
+                root_1 = adaptor.becomeRoot(adaptor.create(STACK, "STACK"), root_1);
 
                 // Bst.g:44:34: ( stackitem )+
                 {
@@ -1130,7 +1140,7 @@ public class BstParser extends Parser {
         finally {
             retval.stop = input.LT(-1);
 
-                retval.tree = (Object)adaptor.rulePostProcessing(root_0);
+                retval.tree = adaptor.rulePostProcessing(root_0);
                 adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
 
        }
@@ -1141,7 +1151,7 @@ public class BstParser extends Parser {
     public static class stackitem_return extends ParserRuleReturnScope {
         Object tree;
         public Object getTree() { return tree; }
-    };
+    }
 
     // $ANTLR start stackitem
     // Bst.g:46:1: stackitem : ( function | STRING | INTEGER | QUOTED | stack );
@@ -1200,7 +1210,7 @@ public class BstParser extends Parser {
                 case 1 :
                     // Bst.g:47:4: function
                     {
-                    root_0 = (Object)adaptor.nil();
+                    root_0 = adaptor.nil();
 
                     pushFollow(FOLLOW_function_in_stackitem317);
                     function53=function();
@@ -1213,11 +1223,11 @@ public class BstParser extends Parser {
                 case 2 :
                     // Bst.g:48:4: STRING
                     {
-                    root_0 = (Object)adaptor.nil();
+                    root_0 = adaptor.nil();
 
-                    STRING54=(Token)input.LT(1);
+                    STRING54=input.LT(1);
                     match(input,STRING,FOLLOW_STRING_in_stackitem322); 
-                    STRING54_tree = (Object)adaptor.create(STRING54);
+                    STRING54_tree = adaptor.create(STRING54);
                     adaptor.addChild(root_0, STRING54_tree);
 
 
@@ -1226,11 +1236,11 @@ public class BstParser extends Parser {
                 case 3 :
                     // Bst.g:49:4: INTEGER
                     {
-                    root_0 = (Object)adaptor.nil();
+                    root_0 = adaptor.nil();
 
-                    INTEGER55=(Token)input.LT(1);
+                    INTEGER55=input.LT(1);
                     match(input,INTEGER,FOLLOW_INTEGER_in_stackitem328); 
-                    INTEGER55_tree = (Object)adaptor.create(INTEGER55);
+                    INTEGER55_tree = adaptor.create(INTEGER55);
                     adaptor.addChild(root_0, INTEGER55_tree);
 
 
@@ -1239,11 +1249,11 @@ public class BstParser extends Parser {
                 case 4 :
                     // Bst.g:50:4: QUOTED
                     {
-                    root_0 = (Object)adaptor.nil();
+                    root_0 = adaptor.nil();
 
-                    QUOTED56=(Token)input.LT(1);
+                    QUOTED56=input.LT(1);
                     match(input,QUOTED,FOLLOW_QUOTED_in_stackitem334); 
-                    QUOTED56_tree = (Object)adaptor.create(QUOTED56);
+                    QUOTED56_tree = adaptor.create(QUOTED56);
                     adaptor.addChild(root_0, QUOTED56_tree);
 
 
@@ -1252,7 +1262,7 @@ public class BstParser extends Parser {
                 case 5 :
                     // Bst.g:51:4: stack
                     {
-                    root_0 = (Object)adaptor.nil();
+                    root_0 = adaptor.nil();
 
                     pushFollow(FOLLOW_stack_in_stackitem339);
                     stack57=stack();
@@ -1272,7 +1282,7 @@ public class BstParser extends Parser {
         finally {
             retval.stop = input.LT(-1);
 
-                retval.tree = (Object)adaptor.rulePostProcessing(root_0);
+                retval.tree = adaptor.rulePostProcessing(root_0);
                 adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
 
        }
diff --git a/src/java/net/sf/jabref/bst/ChangeCaseFunction.java b/src/java/net/sf/jabref/bst/ChangeCaseFunction.java
index da32600..acc9638 100644
--- a/src/java/net/sf/jabref/bst/ChangeCaseFunction.java
+++ b/src/java/net/sf/jabref/bst/ChangeCaseFunction.java
@@ -40,7 +40,7 @@ public class ChangeCaseFunction implements BstFunction {
 	}
 
 	public void execute(BstEntry context) {
-		Stack stack = vm.getStack();
+		Stack<Object> stack = vm.getStack();
 
 		if (stack.size() < 2) {
 			throw new VMException("Not enough operands on stack for operation change.case$");
diff --git a/src/java/net/sf/jabref/bst/FormatNameFunction.java b/src/java/net/sf/jabref/bst/FormatNameFunction.java
index 726f863..39cecac 100644
--- a/src/java/net/sf/jabref/bst/FormatNameFunction.java
+++ b/src/java/net/sf/jabref/bst/FormatNameFunction.java
@@ -33,7 +33,7 @@ public class FormatNameFunction implements BstFunction {
 	}
 	
 	public void execute(BstEntry context) {
-		Stack stack = vm.getStack();
+		Stack<Object> stack = vm.getStack();
 
 		if (stack.size() < 3) {
 			throw new VMException("Not enough operands on stack for operation format.name$");
diff --git a/src/java/net/sf/jabref/bst/PurifyFunction.java b/src/java/net/sf/jabref/bst/PurifyFunction.java
index cbbe5e0..6112722 100644
--- a/src/java/net/sf/jabref/bst/PurifyFunction.java
+++ b/src/java/net/sf/jabref/bst/PurifyFunction.java
@@ -17,7 +17,7 @@ import net.sf.jabref.bst.VM.BstFunction;
  * pushes the null string.
  * 
  * @author $Author: coezbek $
- * @version $Revision: 1799 $ ($Date: 2006-11-11 18:11:39 +0100 (Sat, 11 Nov 2006) $)
+ * @version $Revision: 2209 $ ($Date: 2007-08-01 20:23:38 +0200 (Wed, 01 Aug 2007) $)
  * 
  */
 public class PurifyFunction implements BstFunction {
@@ -29,7 +29,7 @@ public class PurifyFunction implements BstFunction {
 	}
 
 	public void execute(BstEntry context) {
-		Stack stack = vm.getStack();
+		Stack<Object> stack = vm.getStack();
 
 		if (stack.size() < 1) {
 			throw new VMException("Not enough operands on stack for operation purify$");
diff --git a/src/java/net/sf/jabref/bst/TextPrefixFunction.java b/src/java/net/sf/jabref/bst/TextPrefixFunction.java
index e7594c9..3ee913a 100644
--- a/src/java/net/sf/jabref/bst/TextPrefixFunction.java
+++ b/src/java/net/sf/jabref/bst/TextPrefixFunction.java
@@ -22,7 +22,7 @@ characters; furthermore, this function appends any needed matching
 pushes the null string.
  * 
  * @author $Author: coezbek $
- * @version $Revision: 1799 $ ($Date: 2006-11-11 18:11:39 +0100 (Sat, 11 Nov 2006) $)
+ * @version $Revision: 2209 $ ($Date: 2007-08-01 20:23:38 +0200 (Wed, 01 Aug 2007) $)
  * 
  */
 public class TextPrefixFunction implements BstFunction {
@@ -34,7 +34,7 @@ public class TextPrefixFunction implements BstFunction {
 	}
 
 	public void execute(BstEntry context) {
-		Stack stack = vm.getStack();
+		Stack<Object> stack = vm.getStack();
 
 		if (stack.size() < 2) {
 			throw new VMException("Not enough operands on stack for operation text.prefix$");
diff --git a/src/java/net/sf/jabref/bst/VM.java b/src/java/net/sf/jabref/bst/VM.java
index 9b0d691..5a110d5 100644
--- a/src/java/net/sf/jabref/bst/VM.java
+++ b/src/java/net/sf/jabref/bst/VM.java
@@ -36,7 +36,7 @@ import org.antlr.runtime.tree.Tree;
  * http://texcatalogue.sarovar.org/entries/bibtex.html#Download
  * 
  * @author $Author: coezbek $
- * @version $Revision: 1811 $ ($Date: 2006-11-23 23:37:19 +0100 (Thu, 23 Nov 2006) $)
+ * @version $Revision: 2488 $ ($Date: 2007-11-14 01:25:31 +0100 (Wed, 14 Nov 2007) $)
  * 
  */
 
@@ -76,7 +76,7 @@ public class VM implements Warn {
 
 	public static final Integer TRUE = new Integer(1);
 
-	private HashMap buildInFunctions;
+	private HashMap<String,BstFunction> buildInFunctions;
 
 	public File file;
 
@@ -104,7 +104,7 @@ public class VM implements Warn {
 	public VM(CommonTree tree) {
 		this.tree = tree;
 
-		this.buildInFunctions = new HashMap(37);
+		this.buildInFunctions = new HashMap<String, BstFunction>(37);
 
 		buildInFunctions.put(">", new BstFunction() {
 			/**
@@ -123,11 +123,6 @@ public class VM implements Warn {
 					throw new VMException("Can only compare two integers with >");
 				}
 
-				if (o1 == null ^ o2 == null) {
-					stack.push(VM.FALSE);
-					return;
-				}
-
 				if (o1 == o2) {
 					stack.push(VM.FALSE);
 					return;
@@ -150,11 +145,6 @@ public class VM implements Warn {
 					throw new VMException("Can only compare two integers with <");
 				}
 
-				if (o1 == null ^ o2 == null) {
-					stack.push(VM.FALSE);
-					return;
-				}
-
 				if (o1 == o2) {
 					stack.push(VM.FALSE);
 					return;
@@ -342,7 +332,7 @@ public class VM implements Warn {
 
 				String s = (String) o1;
 
-				stack.push(new Integer((int) s.charAt(0)));
+				stack.push(new Integer(s.charAt(0)));
 			}
 		});
 
@@ -906,16 +896,15 @@ public class VM implements Warn {
 		return run(db.getEntries());
 	}
 
-	public String run(Collection bibtex) {
+	public String run(Collection<BibtexEntry> bibtex) {
 
 		reset();
 
 		{ // Create entries
-			entries = new Vector(bibtex.size());
-			ListIterator i = entries.listIterator();
-			Iterator j = bibtex.iterator();
-			while (j.hasNext()) {
-				i.add(new BstEntry((BibtexEntry) j.next()));
+			entries = new Vector<BstEntry>(bibtex.size());
+			ListIterator<BstEntry> i = entries.listIterator();
+			for (BibtexEntry entry : bibtex){
+				i.add(new BstEntry(entry));
 			}
 		}
 
@@ -966,16 +955,16 @@ public class VM implements Warn {
 
 		entries = null;
 
-		strings = new HashMap();
+		strings = new HashMap<String, String>();
 
-		integers = new HashMap();
+		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();
+		functions = new HashMap<String, BstFunction>();
 		functions.putAll(buildInFunctions);
 
-		stack = new Stack();
+		stack = new Stack<Object>();
 	}
 
 	/**
@@ -990,15 +979,12 @@ public class VM implements Warn {
 	 */
 	private void read() {
 
-		Iterator i = entries.iterator();
+		Iterator<BstEntry> i = entries.iterator();
 		while (i.hasNext()) {
-			BstEntry e = (BstEntry) i.next();
+			BstEntry e = i.next();
 
-			Iterator j = e.fields.entrySet().iterator();
-			while (j.hasNext()) {
-				Map.Entry mEntry = (Map.Entry) j.next();
-
-				Object fieldValue = e.entry.getField((String) mEntry.getKey());
+			for (Map.Entry<String, String> mEntry : e.fields.entrySet()){
+				Object fieldValue = e.entry.getField(mEntry.getKey());
 
 				mEntry.setValue((fieldValue == null ? null : fieldValue.toString()));
 			}
@@ -1006,7 +992,7 @@ public class VM implements Warn {
 
 		i = entries.iterator();
 		while (i.hasNext()) {
-			BstEntry e = (BstEntry) i.next();
+			BstEntry e = i.next();
 			if (!e.fields.containsKey("crossref")) {
 				e.fields.put("crossref", null);
 			}
@@ -1062,9 +1048,7 @@ public class VM implements Warn {
 			for (int i = 0; i < t.getChildCount(); i++) {
 				String name = t.getChild(i).getText();
 
-				Iterator j = entries.iterator();
-				while (j.hasNext()) {
-					BstEntry entry = (BstEntry) j.next();
+				for (BstEntry entry : entries){
 					entry.fields.put(name, null);
 				}
 			}
@@ -1075,9 +1059,8 @@ public class VM implements Warn {
 
 			for (int i = 0; i < t.getChildCount(); i++) {
 				String name = t.getChild(i).getText();
-				Iterator j = entries.iterator();
-				while (j.hasNext()) {
-					BstEntry entry = (BstEntry) j.next();
+				
+				for (BstEntry entry : entries){
 					entry.integers.put(name, new Integer(0));
 				}
 			}
@@ -1088,15 +1071,11 @@ public class VM implements Warn {
 
 			for (int i = 0; i < t.getChildCount(); i++) {
 				String name = t.getChild(i).getText();
-				Iterator j = entries.iterator();
-				while (j.hasNext()) {
-					BstEntry entry = (BstEntry) j.next();
+				for (BstEntry entry : entries){
 					entry.strings.put(name, null);
 				}
 			}
-			Iterator j = entries.iterator();
-			while (j.hasNext()) {
-				BstEntry entry = (BstEntry) j.next();
+			for (BstEntry entry : entries){
 				entry.strings.put("sort.key$", null);
 			}
 		}
@@ -1104,20 +1083,20 @@ public class VM implements Warn {
 
 	private void reverse(Tree child) {
 
-		BstFunction f = (BstFunction) functions.get(child.getChild(0).getText());
+		BstFunction f = functions.get(child.getChild(0).getText());
 
-		ListIterator i = entries.listIterator(entries.size());
+		ListIterator<BstEntry> i = entries.listIterator(entries.size());
 		while (i.hasPrevious()) {
-			f.execute((BstEntry) i.previous());
+			f.execute(i.previous());
 		}
 	}
 
 	private void iterate(Tree child) {
-		BstFunction f = (BstFunction) functions.get(child.getChild(0).getText());
+		BstFunction f = functions.get(child.getChild(0).getText());
 
-		Iterator i = entries.iterator();
+		Iterator<BstEntry> i = entries.iterator();
 		while (i.hasNext()) {
-			f.execute((BstEntry) i.next());
+			f.execute(i.next());
 		}
 	}
 
@@ -1128,11 +1107,9 @@ public class VM implements Warn {
 	 * @param child
 	 */
 	private void sort(Tree child) {
-		Collections.sort(entries, new Comparator() {
-			public int compare(Object x1, Object x2) {
-				BstEntry o1 = (BstEntry) x1;
-				BstEntry o2 = (BstEntry) x2;
-				return ((String) o1.strings.get("sort.key$")).compareTo((String) o2.strings
+		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$"));
 			}
 		});
@@ -1234,7 +1211,7 @@ public class VM implements Warn {
 		}
 
 		if (functions.containsKey(name)) {
-			((BstFunction) functions.get(name)).execute(context);
+			functions.get(name).execute(context);
 			return;
 		}
 
@@ -1292,19 +1269,13 @@ public class VM implements Warn {
 
 		BibtexEntry entry;
 
-		// Map<String, String> strings = new HashMap<String, String>();
-
-		// Map<String, String> fields = new HashMap<String, String>();
+		Map<String, String> strings = new HashMap<String, String>();
 
-		// Map<String, Integer> integers = new HashMap<String, Integer>();
+		Map<String, String> fields = new HashMap<String, String>();
 
-		Map strings = new HashMap();
+		Map<String, Integer> integers = new HashMap<String, Integer>();
 
-		Map fields = new HashMap();
-
-		Map integers = new HashMap();
-
-		public Map getFields() {
+		public Map<String, String> getFields() {
 			return fields;
 		}
 
@@ -1313,21 +1284,16 @@ public class VM implements Warn {
 		}
 	}
 
-	// Vector<BstEntry> entries;
-	Vector entries;
-
-	// Map<String, String> strings = new HashMap<String, String>();
-	Map strings = new HashMap();
-
-	// Map<String, Integer> integers = new HashMap<String, Integer>();
-	Map integers = new HashMap();
-
-	// Map<String, BstFunction> functions = new HashMap<String, BstFunction>();
-	Map functions = new HashMap();
-
-	// Stack<Object> stack = new Stack<Object>();
-	Stack stack = new Stack();
-
+	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);
 	}
@@ -1340,33 +1306,16 @@ public class VM implements Warn {
 		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 Map getStrings() {
-		return strings;
-	}
-
-	public Map getIntegers() {
-		return integers;
-	}
-
-	public Vector getEntries() {
-		return entries;
-	}
-
-	public Map getFunctions() {
-		return functions;
-	}
+	
+	  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 getStack() {
+	public Stack<Object> getStack() {
 		return stack;
 	}
 
diff --git a/src/java/net/sf/jabref/bst/WidthFunction.java b/src/java/net/sf/jabref/bst/WidthFunction.java
index e884fd2..1c44b77 100644
--- a/src/java/net/sf/jabref/bst/WidthFunction.java
+++ b/src/java/net/sf/jabref/bst/WidthFunction.java
@@ -18,7 +18,7 @@ import net.sf.jabref.bst.VM.BstFunction;
  * 
  * 
  * @author $Author: coezbek $
- * @version $Revision: 1799 $ ($Date: 2006-11-11 18:11:39 +0100 (Sat, 11 Nov 2006) $)
+ * @version $Revision: 2209 $ ($Date: 2007-08-01 20:23:38 +0200 (Wed, 01 Aug 2007) $)
  * 
  */
 public class WidthFunction implements BstFunction {
@@ -30,7 +30,7 @@ public class WidthFunction implements BstFunction {
 	}
 
 	public void execute(BstEntry context) {
-		Stack stack = vm.getStack();
+		Stack<Object> stack = vm.getStack();
 
 		if (stack.size() < 1) {
 			throw new VMException("Not enough operands on stack for operation width$");
diff --git a/src/java/net/sf/jabref/collab/ChangeDisplayDialog.java b/src/java/net/sf/jabref/collab/ChangeDisplayDialog.java
index cf49d7b..92aa1b3 100644
--- a/src/java/net/sf/jabref/collab/ChangeDisplayDialog.java
+++ b/src/java/net/sf/jabref/collab/ChangeDisplayDialog.java
@@ -28,6 +28,7 @@ public class ChangeDisplayDialog extends JDialog implements TreeSelectionListene
   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, final DefaultMutableTreeNode root) {
     super(owner, Globals.lang("External changes"), true);
@@ -65,11 +66,13 @@ public class ChangeDisplayDialog extends JDialog implements TreeSelectionListene
       }
     });
     ok.addActionListener(new ActionListener() {
-      public void actionPerformed(ActionEvent e) {
+      
+	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();
         for (; enumer.hasMoreElements();) {
           Change c = (Change)enumer.nextElement();
@@ -81,13 +84,18 @@ public class ChangeDisplayDialog extends JDialog implements TreeSelectionListene
         panel.markBaseChanged();
         panel.setUpdatedExternally(false);
         dispose();
+        okPressed = true;
       }
     });
 
     pack();
   }
 
-  private void setInfo(JComponent comp) {
+    public boolean isOkPressed() {
+        return okPressed;
+    }
+
+    private void setInfo(JComponent comp) {
     if (infoShown != null)
       infoPanel.remove(infoShown);
     infoShown = comp;
diff --git a/src/java/net/sf/jabref/collab/ChangeScanner.java b/src/java/net/sf/jabref/collab/ChangeScanner.java
index 0a99f42..5e18b1a 100644
--- a/src/java/net/sf/jabref/collab/ChangeScanner.java
+++ b/src/java/net/sf/jabref/collab/ChangeScanner.java
@@ -1,12 +1,18 @@
 package net.sf.jabref.collab;
 
-import java.io.*;
-import java.util.*;
-import javax.swing.*;
+import java.io.File;
+import java.io.IOException;
+import java.util.HashSet;
+import java.util.Iterator;
+
+import javax.swing.JOptionPane;
+import javax.swing.SwingUtilities;
 import javax.swing.tree.DefaultMutableTreeNode;
+
 import net.sf.jabref.*;
-import net.sf.jabref.groups.*;
-import net.sf.jabref.imports.*;
+import net.sf.jabref.groups.GroupTreeNode;
+import net.sf.jabref.imports.OpenDatabaseAction;
+import net.sf.jabref.imports.ParserResult;
 
 
 public class ChangeScanner extends Thread {
@@ -93,19 +99,21 @@ public class ChangeScanner extends Thread {
         return changes.getChildCount() > 0;
     }
 
-    public void displayResult() {
+    public void displayResult(final DisplayResultCallback fup) {
         if (changes.getChildCount() > 0) {
             SwingUtilities.invokeLater(new Runnable() {
                 public void run() {
                     ChangeDisplayDialog dial = new ChangeDisplayDialog(frame, panel, changes);
                     Util.placeDialog(dial, frame);
                     dial.setVisible(true); // dial.show(); -> deprecated since 1.5
+                    fup.scanResultsResolved(dial.isOkPressed());
                 }
             });
 
         } else {
             JOptionPane.showMessageDialog(frame, Globals.lang("No actual changes found."),
             Globals.lang("External changes"), JOptionPane.INFORMATION_MESSAGE);
+            fup.scanResultsResolved(true);
         }
     }
 
@@ -118,8 +126,8 @@ public class ChangeScanner extends Thread {
 
         // 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 used = new HashSet(disk.getEntryCount());
-        HashSet notMatched = new HashSet(tmp.getEntryCount());
+        HashSet<String> used = new HashSet<String>(disk.getEntryCount());
+        HashSet<Integer> notMatched = new HashSet<Integer>(tmp.getEntryCount());
 
         // Loop through the entries of the "mem" 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
@@ -131,7 +139,7 @@ public class ChangeScanner extends Thread {
             // (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 = Util.compareEntriesStrictly(tmp.getEntryAt(piv1), disk.getEntryAt(piv2));
+                comp = DuplicateCheck.compareEntriesStrictly(tmp.getEntryAt(piv1), disk.getEntryAt(piv2));
             }
             if (comp > 1) {
                 used.add(""+piv2);
@@ -143,7 +151,7 @@ public class ChangeScanner extends Thread {
             if (piv2 < disk.getEntryCount()-1) {
                 for (int i = piv2+1; i < disk.getEntryCount(); i++) {
                     if (!used.contains(""+i))
-                        comp = Util.compareEntriesStrictly(tmp.getEntryAt(piv1), disk.getEntryAt(i));
+                        comp = DuplicateCheck.compareEntriesStrictly(tmp.getEntryAt(piv1), disk.getEntryAt(i));
                     else
                         comp = -1;
 
@@ -163,9 +171,9 @@ public class ChangeScanner extends Thread {
         // for close matches.
         if (notMatched.size() > 0) {
 
-            fuzzyLoop: for (Iterator it=notMatched.iterator(); it.hasNext();) {
+            for (Iterator<Integer> it=notMatched.iterator(); it.hasNext();) {
 
-                Integer integ = (Integer)it.next();
+                Integer integ = it.next();
                 piv1 = integ.intValue();
 
 
@@ -178,7 +186,7 @@ public class ChangeScanner extends Thread {
                 if (piv2 < disk.getEntryCount()-1) {
                     for (int i = piv2; i < disk.getEntryCount(); i++) {
                         if (!used.contains(""+i)) {
-                            comp = Util.compareEntriesStrictly(tmp.getEntryAt(piv1),
+                            comp = DuplicateCheck.compareEntriesStrictly(tmp.getEntryAt(piv1),
                             disk.getEntryAt(i));
                         }
                         else
@@ -233,7 +241,7 @@ public class ChangeScanner extends Thread {
                     // See if there is an identical dupe in the mem database:
                     boolean hasAlready = false;
                     for (int j = 0; j < mem.getEntryCount(); j++) {
-                        if (Util.compareEntriesStrictly(mem.getEntryAt(j),
+                        if (DuplicateCheck.compareEntriesStrictly(mem.getEntryAt(j),
                             disk.getEntryAt(i)) >= 1) {
                             hasAlready = true;
                             break;
@@ -265,7 +273,7 @@ public class ChangeScanner extends Thread {
         double comp = -1;
         int found = 0;
         loop: for (int i=0; i<neu.getEntryCount(); i++) {
-            double res = Util.compareEntriesStrictly(old.getEntryAt(index),
+            double res = DuplicateCheck.compareEntriesStrictly(old.getEntryAt(index),
             neu.getEntryAt(i));
             if (res > comp) {
                 comp = res;
@@ -296,19 +304,17 @@ public class ChangeScanner extends Thread {
         if ((nTmp == 0) && (nDisk == 0))
             return;
 
-        HashSet used = new HashSet();
-        HashSet usedInMem = new HashSet();
-        HashSet notMatched = new HashSet(onTmp.getStringCount());
+        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 (Iterator i=onTmp.getStringKeySet().iterator(); i.hasNext();) {
-            Object tmpId = i.next();
-            BibtexString tmp = onTmp.getString(tmpId);
+        mainLoop: for (String key : onTmp.getStringKeySet()){
+            BibtexString tmp = onTmp.getString(key);
 
             //      for (int j=piv2+1; j<nDisk; j++)
-            for (Iterator j=onDisk.getStringKeySet().iterator(); j.hasNext();) {
-                Object diskId = j.next();
+            for (String diskId : onDisk.getStringKeySet()){
                 if (!used.contains(diskId)) {
                     BibtexString disk = onDisk.getString(diskId);
                     if (disk.getName().equals(tmp.getName())) {
@@ -337,18 +343,14 @@ public class ChangeScanner extends Thread {
 
         // See if we can detect a name change for those entries that we couldn't match.
         if (notMatched.size() > 0) {
-            for (Iterator i = notMatched.iterator(); i.hasNext(); ) {
-                Object nmId = i.next();
-                BibtexString tmp = onTmp.getString(nmId);
+            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.
-                String tmpContent = tmp.getContent();
-                //for (Iterator i=onTmp.getStringKeySet().iterator(); i.hasNext();) {
-                for (Iterator j=onDisk.getStringKeySet().iterator(); j.hasNext();) {
-                    Object diskId = j.next();
-                    //for (int j = piv2 + 1; j < nDisk; j++)
-                    if (!used.contains(diskId)) {
+                for (String diskId : onDisk.getStringKeySet()){
+
+                	if (!used.contains(diskId)) {
                         BibtexString disk = onDisk.getString(diskId);
 
                         if (disk.getContent().equals(tmp.getContent())) {
@@ -357,15 +359,14 @@ public class ChangeScanner extends Thread {
 
                             // Try to find the matching one in memory:
                             BibtexString bsMem = null;
-                            findInMem: for (Iterator k=inMem.getStringKeySet().iterator(); k.hasNext();) {
-                                Object memId = k.next();
-                                //for (int k = 0; k < inMem.getStringCount(); k++) {
+                            
+                            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 findInMem;
+                                    break;
                                 }
                             }
 
@@ -383,8 +384,8 @@ public class ChangeScanner extends Thread {
 
         if (notMatched.size() > 0) {
             // Still one or more non-matched strings. So they must have been removed.
-            for (Iterator i = notMatched.iterator(); i.hasNext(); ) {
-                Object nmId = i.next();
+            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.
@@ -396,8 +397,8 @@ public class ChangeScanner extends Thread {
 
         // Finally, see if there are remaining strings in the disk database. They
         // must have been added.
-        for (Iterator i=onDisk.getStringKeySet().iterator(); i.hasNext();) {
-            Object diskId = i.next();
+        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());
@@ -407,11 +408,11 @@ public class ChangeScanner extends Thread {
         }
     }
 
-    private BibtexString findString(BibtexDatabase base, String name, HashSet used) {
+    private BibtexString findString(BibtexDatabase base, String name, HashSet<Object> used) {
         if (!base.hasStringLabel(name))
             return null;
-        for (Iterator i=base.getStringKeySet().iterator(); i.hasNext();) {
-            Object key = i.next();
+        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);
@@ -427,7 +428,6 @@ public class ChangeScanner extends Thread {
      * properly, so I rather only report the change.
      */
     public void scanGroups(MetaData inMem, MetaData onTmp, MetaData onDisk) {
-        final GroupTreeNode groupsMem = inMem.getGroups();
         final GroupTreeNode groupsTmp = onTmp.getGroups();
         final GroupTreeNode groupsDisk = onDisk.getGroups();
         if (groupsTmp == null && groupsDisk == null)
@@ -492,4 +492,8 @@ public class ChangeScanner extends Thread {
 //        }
     }
 
+
+    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 ce637bf..5053041 100644
--- a/src/java/net/sf/jabref/collab/EntryAddChange.java
+++ b/src/java/net/sf/jabref/collab/EntryAddChange.java
@@ -1,13 +1,12 @@
 package net.sf.jabref.collab;
 
-import net.sf.jabref.undo.NamedCompound;
-import net.sf.jabref.undo.UndoableInsertEntry;
 import javax.swing.JComponent;
-import javax.swing.JLabel;
-import net.sf.jabref.*;
-
 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;
@@ -19,19 +18,14 @@ public class EntryAddChange extends Change {
     super("Added entry");
     this.diskEntry = diskEntry;
 
-    pp = new PreviewPanel(diskEntry, new MetaData(), Globals.prefs.get("preview0"));
+    pp = new PreviewPanel(null, diskEntry, null, new MetaData(), Globals.prefs.get("preview0"));
     sp = new JScrollPane(pp);
   }
 
   public void makeChange(BasePanel panel, NamedCompound undoEdit) {
-    try {
       diskEntry.setId(Util.createNeutralId());
       panel.database().insertEntry(diskEntry);
       undoEdit.addEdit(new UndoableInsertEntry(panel.database(), diskEntry, panel));
-    } catch (KeyCollisionException ex) {
-
-    }
-
   }
 
   JComponent description() {
diff --git a/src/java/net/sf/jabref/collab/EntryChange.java b/src/java/net/sf/jabref/collab/EntryChange.java
index ec00b7f..bfc9719 100644
--- a/src/java/net/sf/jabref/collab/EntryChange.java
+++ b/src/java/net/sf/jabref/collab/EntryChange.java
@@ -1,17 +1,13 @@
 package net.sf.jabref.collab;
 
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.BasePanel;
-import net.sf.jabref.Util;
-import net.sf.jabref.KeyCollisionException;
+import java.util.Enumeration;
+import java.util.TreeSet;
+
 import javax.swing.JComponent;
 import javax.swing.JLabel;
-import java.util.TreeSet;
-import java.util.Iterator;
-import javax.swing.JTextPane;
-import net.sf.jabref.Globals;
-import java.util.Enumeration;
 import javax.swing.JScrollPane;
+
+import net.sf.jabref.*;
 import net.sf.jabref.undo.NamedCompound;
 import net.sf.jabref.undo.UndoableFieldChange;
 
@@ -33,32 +29,24 @@ public class EntryChange extends Change {
 
     // We know that tmpEntry is not equal to diskEntry. Check if it has been modified
     // locally as well, since last tempfile was saved.
-    isModifiedLocally = ! (Util.compareEntriesStrictly(memEntry, tmpEntry) > 1);
+    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 = (Util.compareEntriesStrictly(memEntry, diskEntry) > 1);
+    modificationsAgree = (DuplicateCheck.compareEntriesStrictly(memEntry, diskEntry) > 1);
 
     //Util.pr("Modified entry: "+memEntry.getCiteKey()+"\n Modified locally: "+isModifiedLocally
     //        +" Modifications agree: "+modificationsAgree);
 
-    TreeSet allFields = new TreeSet(); //one.getAllFields());
-    Object[] o = memEntry.getAllFields();
-    for (int i = 0; i < o.length; i++)
-      allFields.add(o[i]);
-    o = tmpEntry.getAllFields();
-    for (int i = 0; i < o.length; i++)
-      allFields.add(o[i]);
-    o = diskEntry.getAllFields();
-    for (int i = 0; i < o.length; i++)
-      allFields.add(o[i]);
-
-    int score = 0;
-    for (Iterator fld = allFields.iterator(); fld.hasNext();) {
-      String field = (String)fld.next();
-      String mem = (String)memEntry.getField(field),
-          tmp = (String)tmpEntry.getField(field),
-          disk = (String)diskEntry.getField(field);
+    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)) {
@@ -78,11 +66,13 @@ public class EntryChange extends Change {
     }
   }
 
-  public void makeChange(BasePanel panel, NamedCompound undoEdit) {
+  
+public void makeChange(BasePanel panel, NamedCompound undoEdit) {
 
-    Enumeration e = children();
+	@SuppressWarnings("unchecked")
+    Enumeration<Change> e = children();
     for (; e.hasMoreElements();) {
-      Change c = (Change)e.nextElement();
+      Change c = e.nextElement();
       if (c.isAcceptable() && c.isAccepted())
         c.makeChange(panel, undoEdit);
     }
diff --git a/src/java/net/sf/jabref/collab/EntryDeleteChange.java b/src/java/net/sf/jabref/collab/EntryDeleteChange.java
index 6ef0354..121e2cf 100644
--- a/src/java/net/sf/jabref/collab/EntryDeleteChange.java
+++ b/src/java/net/sf/jabref/collab/EntryDeleteChange.java
@@ -1,10 +1,9 @@
 package net.sf.jabref.collab;
 
 import javax.swing.JComponent;
-import javax.swing.JLabel;
-import net.sf.jabref.*;
-
 import javax.swing.JScrollPane;
+
+import net.sf.jabref.*;
 import net.sf.jabref.undo.NamedCompound;
 import net.sf.jabref.undo.UndoableRemoveEntry;
 
@@ -23,7 +22,7 @@ public class EntryDeleteChange extends Change {
 
     // Compare the deleted entry in memory with the one in the tmpfile. The
     // entry could have been removed in memory.
-    matchWithTmp = Util.compareEntriesStrictly(memEntry, tmpEntry);
+    matchWithTmp = DuplicateCheck.compareEntriesStrictly(memEntry, tmpEntry);
 
     // Check if it has been modified locally, since last tempfile was saved.
     isModifiedLocally = !(matchWithTmp > 1);
@@ -31,7 +30,7 @@ public class EntryDeleteChange extends Change {
     //Util.pr("Modified entry: "+memEntry.getCiteKey()+"\n Modified locally: "+isModifiedLocally
     //        +" Modifications agree: "+modificationsAgree);
 
-    pp = new PreviewPanel(memEntry, new MetaData(), Globals.prefs.get("preview0"));
+    pp = new PreviewPanel(null, memEntry, null, new MetaData(), Globals.prefs.get("preview0"));
     sp = new JScrollPane(pp);
   }
 
diff --git a/src/java/net/sf/jabref/collab/FileUpdateMonitor.java b/src/java/net/sf/jabref/collab/FileUpdateMonitor.java
index e684f47..92b2624 100644
--- a/src/java/net/sf/jabref/collab/FileUpdateMonitor.java
+++ b/src/java/net/sf/jabref/collab/FileUpdateMonitor.java
@@ -16,7 +16,7 @@ public class FileUpdateMonitor extends Thread {
   final int WAIT = 4000;
   static int tmpNum = 0;
   int no = 0;
-  HashMap entries = new HashMap();
+  HashMap<String, Entry> entries = new HashMap<String, Entry>();
   boolean running;
 
   public FileUpdateMonitor() {
@@ -29,9 +29,9 @@ public class FileUpdateMonitor extends Thread {
     // The running variable is used to make the thread stop when needed.
     while (running) {
       //System.out.println("Polling...");
-      Iterator i = entries.keySet().iterator();
+      Iterator<String> i = entries.keySet().iterator();
       for (;i.hasNext();) {
-        Entry e = (Entry)entries.get(i.next());
+        Entry e = entries.get(i.next());
         try {
           if (e.hasBeenUpdated())
             e.notifyListener();
diff --git a/src/java/net/sf/jabref/collab/FileUpdatePanel.java b/src/java/net/sf/jabref/collab/FileUpdatePanel.java
index 02f1e31..9efbb30 100644
--- a/src/java/net/sf/jabref/collab/FileUpdatePanel.java
+++ b/src/java/net/sf/jabref/collab/FileUpdatePanel.java
@@ -1,14 +1,19 @@
 package net.sf.jabref.collab;
 
-import net.sf.jabref.*;
 import java.awt.BorderLayout;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
-import javax.swing.*;
-import java.io.IOException;
 import java.io.File;
 
-public class FileUpdatePanel extends SidePaneComponent implements ActionListener {
+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";
 
@@ -27,7 +32,8 @@ public class FileUpdatePanel extends SidePaneComponent implements ActionListener
 	public FileUpdatePanel(JabRefFrame frame, BasePanel panel, SidePaneManager manager, File file,
 		ChangeScanner scanner) {
 		super(manager, GUIGlobals.getIconUrl("save"), Globals.lang("File changed"));
-		this.panel = panel;
+        close.setEnabled(false);
+        this.panel = panel;
 		this.frame = frame;
 		this.manager = manager;
 		this.scanner = scanner;
@@ -47,13 +53,22 @@ public class FileUpdatePanel extends SidePaneComponent implements ActionListener
 		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
@@ -62,15 +77,27 @@ public class FileUpdatePanel extends SidePaneComponent implements ActionListener
 	 *            ActionEvent
 	 */
 	public void actionPerformed(ActionEvent e) {
-		manager.hideComponent(this);
+
 		// ChangeScanner scanner = new ChangeScanner(frame, panel); //,
 		// panel.database(), panel.metaData());
 		// try {
-		scanner.displayResult();
+		scanner.displayResult(this);
 		// scanner.changeScan(panel.file());
-		panel.setUpdatedExternally(false);
+
 		// } 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 81c1237..9b81a58 100644
--- a/src/java/net/sf/jabref/collab/GroupChange.java
+++ b/src/java/net/sf/jabref/collab/GroupChange.java
@@ -1,9 +1,13 @@
 package net.sf.jabref.collab;
 
-import javax.swing.*;
+import javax.swing.JComponent;
+import javax.swing.JLabel;
 
-import net.sf.jabref.*;
-import net.sf.jabref.groups.*;
+import net.sf.jabref.BasePanel;
+import net.sf.jabref.Globals;
+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 {
diff --git a/src/java/net/sf/jabref/collab/PreambleChange.java b/src/java/net/sf/jabref/collab/PreambleChange.java
index 3a8f592..6234e72 100644
--- a/src/java/net/sf/jabref/collab/PreambleChange.java
+++ b/src/java/net/sf/jabref/collab/PreambleChange.java
@@ -1,16 +1,12 @@
 package net.sf.jabref.collab;
 
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.BasePanel;
-import net.sf.jabref.Util;
-import net.sf.jabref.undo.NamedCompound;
-import net.sf.jabref.undo.UndoablePreambleChange;
-import net.sf.jabref.KeyCollisionException;
 import javax.swing.JComponent;
-import javax.swing.JLabel;
-import javax.swing.JEditorPane;
 import javax.swing.JScrollPane;
+
+import net.sf.jabref.BasePanel;
 import net.sf.jabref.Globals;
+import net.sf.jabref.undo.NamedCompound;
+import net.sf.jabref.undo.UndoablePreambleChange;
 
 public class PreambleChange extends Change {
 
diff --git a/src/java/net/sf/jabref/collab/StringAddChange.java b/src/java/net/sf/jabref/collab/StringAddChange.java
index 9ae6b8d..d2978bf 100644
--- a/src/java/net/sf/jabref/collab/StringAddChange.java
+++ b/src/java/net/sf/jabref/collab/StringAddChange.java
@@ -1,10 +1,14 @@
 package net.sf.jabref.collab;
 
-import javax.swing.*;
-
-import net.sf.jabref.*;
-import net.sf.jabref.undo.*;
-import net.sf.jabref.undo.UndoableStringChange;
+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.KeyCollisionException;
+import net.sf.jabref.undo.NamedCompound;
+import net.sf.jabref.undo.UndoableInsertString;
 
 public class StringAddChange extends Change {
 
diff --git a/src/java/net/sf/jabref/collab/StringChange.java b/src/java/net/sf/jabref/collab/StringChange.java
index 2e98895..f57729f 100644
--- a/src/java/net/sf/jabref/collab/StringChange.java
+++ b/src/java/net/sf/jabref/collab/StringChange.java
@@ -1,9 +1,11 @@
 package net.sf.jabref.collab;
 
-import javax.swing.*;
+import javax.swing.JComponent;
+import javax.swing.JScrollPane;
 
 import net.sf.jabref.*;
-import net.sf.jabref.undo.*;
+import net.sf.jabref.undo.NamedCompound;
+import net.sf.jabref.undo.UndoableInsertString;
 import net.sf.jabref.undo.UndoableStringChange;
 
 public class StringChange extends Change {
diff --git a/src/java/net/sf/jabref/collab/StringNameChange.java b/src/java/net/sf/jabref/collab/StringNameChange.java
index 0490c1a..e3ea8be 100644
--- a/src/java/net/sf/jabref/collab/StringNameChange.java
+++ b/src/java/net/sf/jabref/collab/StringNameChange.java
@@ -1,9 +1,11 @@
 package net.sf.jabref.collab;
 
-import javax.swing.*;
+import javax.swing.JComponent;
+import javax.swing.JLabel;
 
 import net.sf.jabref.*;
-import net.sf.jabref.undo.*;
+import net.sf.jabref.undo.NamedCompound;
+import net.sf.jabref.undo.UndoableInsertString;
 import net.sf.jabref.undo.UndoableStringChange;
 
 public class StringNameChange extends Change {
diff --git a/src/java/net/sf/jabref/collab/StringRemoveChange.java b/src/java/net/sf/jabref/collab/StringRemoveChange.java
index 35db1a2..3e9be68 100644
--- a/src/java/net/sf/jabref/collab/StringRemoveChange.java
+++ b/src/java/net/sf/jabref/collab/StringRemoveChange.java
@@ -1,10 +1,13 @@
 package net.sf.jabref.collab;
 
-import javax.swing.*;
-
-import net.sf.jabref.*;
-import net.sf.jabref.undo.*;
-import net.sf.jabref.undo.UndoableStringChange;
+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.undo.NamedCompound;
+import net.sf.jabref.undo.UndoableRemoveString;
 
 public class StringRemoveChange extends Change {
 
diff --git a/src/java/net/sf/jabref/export/CustomExportDialog.java b/src/java/net/sf/jabref/export/CustomExportDialog.java
index add2336..a4c6fdc 100644
--- a/src/java/net/sf/jabref/export/CustomExportDialog.java
+++ b/src/java/net/sf/jabref/export/CustomExportDialog.java
@@ -26,16 +26,21 @@ http://www.gnu.org/copyleft/gpl.ja.html
 */
 package net.sf.jabref.export;
 
-import java.awt.*;
-import java.awt.event.*;
-import javax.swing.*;
-import java.util.Vector;
+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.Globals;
+
 import com.jgoodies.forms.builder.ButtonBarBuilder;
-import com.jgoodies.forms.layout.Sizes;
 
 /**
  * Dialog for creating or modifying custom exports.
@@ -58,11 +63,10 @@ class CustomExportDialog extends JDialog {
     main = new JPanel(),
     buttons = new JPanel();
     private boolean ok_pressed = false;
-    private Vector groups;
     private int index;
     private JabRefFrame parent;
 
-    private String /*name, regexp, field,*/ oldName, oldRegexp, oldField;
+    private String oldName, oldRegexp, oldField;
 
     GridBagLayout gbl = new GridBagLayout();
     GridBagConstraints con = new GridBagConstraints();
@@ -79,28 +83,6 @@ class CustomExportDialog extends JDialog {
     public CustomExportDialog(JabRefFrame parent_) {
     super(parent_, Globals.lang("Edit custom export"), true);
     parent = parent_;
-    //groups = groups_;
-    //index = index_;
-    /*if (index >= 0) {
-            // Group entry already exists.
-            try {
-            oldField = (String)groups.elementAt(index);
-            field.setText(oldField);
-            oldName = (String)groups.elementAt(index+1);
-            name.setText(oldName);
-            oldRegexp = (String)groups.elementAt(index+2);
-            regexp.setText(oldRegexp);
-
-            // We disable these text fields, since changing field
-            // or regexp would leave the entries added to the
-            // group hanging.
-            field.setEnabled(false);
-            regexp.setEnabled(false);
-            } catch (ArrayIndexOutOfBoundsException ex) {
-            }
-        } else
-            field.setText(defaultField);
-    */
     ActionListener okListener = new ActionListener() {
         public void actionPerformed(ActionEvent e) {
 
diff --git a/src/java/net/sf/jabref/export/CustomExportList.java b/src/java/net/sf/jabref/export/CustomExportList.java
index 5a1fc76..e5b2c32 100644
--- a/src/java/net/sf/jabref/export/CustomExportList.java
+++ b/src/java/net/sf/jabref/export/CustomExportList.java
@@ -8,96 +8,95 @@ import net.sf.jabref.Globals;
 import net.sf.jabref.JabRefPreferences;
 
 /**
-* 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 extends TreeSet {
-
-    private TreeMap formats = new TreeMap();
-  private Object[] array;
-  JabRefPreferences prefs;
-//  ExportComparator comp = new ExportComparator();
-
-  public CustomExportList(JabRefPreferences prefs_, Comparator comp) {
-    super(comp);
-    //super(new ExportComparator());
-    prefs = prefs_;
-    readPrefs();
-    sort();
-  }
-
-  public TreeMap getCustomExportFormats() {
-      return formats;
-  }
-
-
-  private void readPrefs() {
-    int i=0;
-    String[] s = null;
-    while ((s = prefs.getStringArray("customExportFormat"+i)) != null) {
-        ExportFormat format = createFormat(s);
-        formats.put(format.getConsoleName(), format);
-      super.add(s);
-      i++;
-    }
-  }
-
-    private ExportFormat createFormat(String[] s) {
-        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) {
-    super.add(s);
-      ExportFormat format = createFormat(s);
-      formats.put(format.getConsoleName(), format);
-    sort();
-  }
-
-  public void remove(int pos) {
-      String[] toRemove = (String[])array[pos];
-      formats.remove(toRemove[0]);
-    super.remove(array[pos]);
-    sort();
-  }
-
-  public void sort() {
-    array = toArray();
-  }
-
-  public void store() {
-
-    if (array.length == 0)
-      purge(0);
-    else {
-      for (int i=0; i<array.length; i++) {
-        //System.out.println(i+"..");
-        Globals.prefs.putStringArray("customExportFormat"+i, (String[])(array[i]));
-      }
-      purge(array.length);
-    }
-  }
-
-  private void purge(int from) {
-    String[] s = null;
-    int i = from;
-    while ((s = Globals.prefs.getStringArray("customExportFormat"+i)) != null) {
-      Globals.prefs.remove("customExportFormat"+i);
-      i++;
-    }
-  }
+ * 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 extends TreeSet<String[]> {
+
+	private TreeMap<String, ExportFormat> formats = new TreeMap<String, ExportFormat>();
+	private Object[] array;
+	JabRefPreferences prefs;
+
+	public CustomExportList(JabRefPreferences prefs_, Comparator<String[]> comp) {
+		super(comp);
+		prefs = prefs_;
+		readPrefs();
+		sort();
+	}
+
+	public TreeMap<String, ExportFormat> getCustomExportFormats() {
+		return formats;
+	}
+
+	private void readPrefs() {
+		int i = 0;
+		String[] s = null;
+		while ((s = prefs.getStringArray("customExportFormat" + i)) != null) {
+			ExportFormat format = createFormat(s);
+			formats.put(format.getConsoleName(), format);
+			super.add(s);
+			i++;
+		}
+	}
+
+	private ExportFormat createFormat(String[] s) {
+		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) {
+		super.add(s);
+		ExportFormat format = createFormat(s);
+		formats.put(format.getConsoleName(), format);
+		sort();
+	}
+
+	public void remove(int pos) {
+		String[] toRemove = (String[]) array[pos];
+		formats.remove(toRemove[0]);
+		super.remove(array[pos]);
+		sort();
+	}
+
+	public void sort() {
+		array = toArray();
+	}
+
+	public void store() {
+
+		if (array.length == 0)
+			purge(0);
+		else {
+			for (int i = 0; i < array.length; i++) {
+				// System.out.println(i+"..");
+				Globals.prefs.putStringArray("customExportFormat" + i,
+					(String[]) (array[i]));
+			}
+			purge(array.length);
+		}
+	}
+
+	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 de668ec..ae85600 100644
--- a/src/java/net/sf/jabref/export/ExpandEndnoteFilters.java
+++ b/src/java/net/sf/jabref/export/ExpandEndnoteFilters.java
@@ -6,10 +6,16 @@
 
 package net.sf.jabref.export;
 
-import java.awt.event.*;
-import javax.swing.*;
+import java.awt.event.ActionEvent;
 import java.io.File;
-import net.sf.jabref.*;
+
+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.util.ResourceExtractor;
 import spin.Spin;
 
diff --git a/src/java/net/sf/jabref/export/ExportComparator.java b/src/java/net/sf/jabref/export/ExportComparator.java
index fc7293a..4505652 100644
--- a/src/java/net/sf/jabref/export/ExportComparator.java
+++ b/src/java/net/sf/jabref/export/ExportComparator.java
@@ -2,12 +2,9 @@ package net.sf.jabref.export;
 
 import java.util.Comparator;
 
-public class ExportComparator implements Comparator {
-  public ExportComparator() {}// super(); }
-  public int compare(Object o1, Object o2) {
-    String[] s1 = (String[])o1,
-        s2 = (String[])o2;
-    return s1[0].compareTo(s2[0]);
-  }
+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 0125fc1..91f7a31 100644
--- a/src/java/net/sf/jabref/export/ExportCustomizationDialog.java
+++ b/src/java/net/sf/jabref/export/ExportCustomizationDialog.java
@@ -1,16 +1,18 @@
 package net.sf.jabref.export;
 
-import javax.swing.JDialog;
-import java.awt.*;
-import net.sf.jabref.*;
-import javax.swing.*;
-import java.awt.event.ActionListener;
+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 com.jgoodies.forms.layout.Sizes;
 
 /**
  * <p>Title: </p>
diff --git a/src/java/net/sf/jabref/export/ExportFileFilter.java b/src/java/net/sf/jabref/export/ExportFileFilter.java
index 1a54870..db20534 100644
--- a/src/java/net/sf/jabref/export/ExportFileFilter.java
+++ b/src/java/net/sf/jabref/export/ExportFileFilter.java
@@ -7,19 +7,24 @@ 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 {
-    private ExportFormat format;
+public class ExportFileFilter extends FileFilter implements Comparable<ExportFileFilter> {
+    private IExportFormat format;
     private String extension, name;
 
-    public ExportFileFilter(ExportFormat format) {
-        this.format = format;
-        this.extension = format.getExtension();
-        this.name = format.getDisplayName()+" (*"+format.getExtension()+")";
-    }
+    public ExportFileFilter(IExportFormat format, String extension) {
+		this.format = format;
+		this.extension = extension;
+		this.name = format.getDisplayName() + " (*" + extension
+				+ ")";
+	}
 
-    public ExportFormat getExportFormat() {
+    public IExportFormat getExportFormat() {
         return format;
     }
+    
+    public String getExtension(){
+    	return extension;
+    }
 
     public boolean accept(File file) {
         if (file.isDirectory())
@@ -32,7 +37,7 @@ public class ExportFileFilter extends FileFilter implements Comparable {
         return name;
     }
 
-    public int compareTo(Object o) {
-        return name.compareTo(((ExportFileFilter)o).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 78f81b0..313b434 100644
--- a/src/java/net/sf/jabref/export/ExportFormat.java
+++ b/src/java/net/sf/jabref/export/ExportFormat.java
@@ -1,202 +1,258 @@
 package net.sf.jabref.export;
 
-import net.sf.jabref.Globals;
+import java.io.File;
+import java.io.IOException;
+import java.io.Reader;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Set;
+
+import javax.swing.filechooser.FileFilter;
+
 import net.sf.jabref.BibtexDatabase;
 import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.MetaData;
+import net.sf.jabref.Globals;
 import net.sf.jabref.export.layout.Layout;
 import net.sf.jabref.export.layout.LayoutHelper;
 
-import javax.swing.filechooser.FileFilter;
-import javax.swing.*;
-import java.util.List;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Set;
-import java.io.File;
-import java.io.Reader;
-import java.io.IOException;
-
 /**
- * Created by IntelliJ IDEA.
- * User: alver
- * Date: Oct 18, 2006
- * Time: 9:39:53 PM
- * To change this template use File | Settings | File Templates.
+ * Base class for export formats based on templates.
+ * 
  */
-public class ExportFormat {
-
-    private String displayName;
-    private String consoleName;
-    private String lfFileName;
-    private String directory;
-    private String extension;
-    private FileFilter fileFilter;
-    private boolean customExport = false;
-
-    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;
-
-        fileFilter = new ExportFileFilter(this);
-    }
-
-    /**
-     * 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;
-    }
-
-    public String getConsoleName() {
-        return consoleName;
-    }
-
-    public String getExtension() {
-        return extension;
-    }
-
-    public String getDisplayName() {
-        return displayName;
-    }
-
-    /**
-     * Perform the export.
-     * @param database The database to export from.
-     * @param file The filename to write to.
-     * @param encoding The encoding to use.
-     * @param entries (may be null) A Set containing the IDs of all entries that should be exported.
-     *  If null, all entries will be exported.
-     * @throws Exception
-     */
-    public void performExport(final BibtexDatabase database, final String file,
-                              final String encoding,
-                              Set entries) throws Exception {
-
-        
-        File outFile = new File(file);
-        SaveSession ss = getSaveSession(encoding, outFile);
-        final String dir;
-        // If this is a custom export, just use the given file name:
-        if (customExport)
-            dir = "";
-        else
-            dir = (directory == null ? Globals.LAYOUT_PREFIX :
-                Globals.LAYOUT_PREFIX + directory + "/");
-        VerifyingWriter ps = ss.getWriter();
-        // Print header
-        Layout beginLayout = null;
-        Reader reader;
-        try {
-            reader = FileActions.getReader(dir + 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));
-        }
-        // changed section - end (arudert)
-
-    // 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 sorted = FileActions.getSortedEntries(database, entries, false);
-
-
-    // Load default layout
-    reader = FileActions.getReader(dir + lfFileName + ".layout");
-
-
-    LayoutHelper layoutHelper = new LayoutHelper(reader);
-    Layout defLayout = layoutHelper.getLayoutFromText(Globals.FORMATTER_PACKAGE);
-    reader.close();
-    HashMap layouts = new HashMap();
-    Layout layout;
-    Iterator i = sorted.iterator();
-    for (; i.hasNext();) {
-        // Get the entry
-        BibtexEntry entry = (BibtexEntry) (i.next());
-
-        // Get the layout
-        String type = entry.getType().getName().toLowerCase();
-        if (layouts.containsKey(type))
-                layout = (Layout)layouts.get(type);
-        else {
-                try {
-            // We try to get a type-specific layout for this entry.
-            reader = FileActions.getReader(dir + lfFileName + "."+type+".layout");
-            layoutHelper = new LayoutHelper(reader);
-            layout = layoutHelper.getLayoutFromText(Globals.FORMATTER_PACKAGE);
-            layouts.put(type, layout);
-            reader.close();
-                } 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 = FileActions.getReader(dir + 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 the header
-        if (endLayout != null) {
-            ps.write(endLayout.doLayout(database, encoding));
-        }
-
-        finalizeSaveSession(ss);
-    }
-
-    public SaveSession getSaveSession(final String encoding, final File outFile)
-        throws IOException {
-
-        SaveSession ss = new SaveSession(outFile, encoding, false);
-        return ss;
-    }
-
-    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();
-
-    }
-
-    public FileFilter getFileFilter() {
-        return fileFilter;
-    }
-
+public class ExportFormat implements IExportFormat {
+
+	String displayName;
+	String consoleName;
+	String lfFileName;
+	String directory;
+	String extension;
+	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;
+	}
+
+	/**
+	 * 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 = getSaveSession(encoding, outFile);
+		VerifyingWriter ps = ss.getWriter();
+
+		// Print header
+		Layout beginLayout = null;
+		Reader reader;
+		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));
+		}
+
+		/*
+		 * 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();
+		HashMap<String, Layout> layouts = new HashMap<String, Layout>();
+		Layout layout;
+		for (BibtexEntry entry : sorted) {
+			// 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();
+				} 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));
+		}
+
+		finalizeSaveSession(ss);
+	}
+
+	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 f588375..52f09b0 100644
--- a/src/java/net/sf/jabref/export/ExportFormats.java
+++ b/src/java/net/sf/jabref/export/ExportFormats.java
@@ -1,12 +1,20 @@
 package net.sf.jabref.export;
 
-import net.sf.jabref.*;
-
-import javax.swing.*;
-import javax.swing.filechooser.FileFilter;
-import java.util.*;
 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
@@ -17,7 +25,7 @@ import java.io.File;
  */
 public class ExportFormats {
 
-	private static Map<String,ExportFormat> exportFormats = new TreeMap<String,ExportFormat>();
+	private static Map<String,IExportFormat> exportFormats = new TreeMap<String,IExportFormat>();
 
     public static void initAllExports() {
         exportFormats.clear();
@@ -36,18 +44,67 @@ public class ExportFormats {
                 "tablerefsabsbib", "tablerefsabsbib", "tablerefsabsbib", ".html"));
         putFormat(new ExportFormat(Globals.lang("Harvard RTF"), "harvard", "harvard",
                 "harvard", ".rtf"));
-        putFormat(new ExportFormat(Globals.lang("MIS Quarterly"), "misq", "misq",
-                "misq", ".rtf"));
         putFormat(new ExportFormat(Globals.lang("Endnote"), "endnote", "EndNote",
                 "endnote", ".txt"));
+        putFormat(new ExportFormat(Globals.lang("OpenOffice CSV"), "oocsv", "openoffice-csv",
+            "openoffice", ".csv"));
         putFormat(new OpenOfficeDocumentCreator());
         putFormat(new OpenDocumentSpreadsheetCreator());
         putFormat(new MSBibExportFormat());
+        putFormat(new MySQLExport());
     
+        // 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 customExports = Globals.prefs.customExports.getCustomExportFormats();
-        for (Iterator i=customExports.keySet().iterator(); i.hasNext();) {
-            putFormat((ExportFormat)customExports.get(i.next()));
+        for (IExportFormat format : Globals.prefs.customExports.getCustomExportFormats().values()){
+            putFormat(format);
         }
     }
 
@@ -66,8 +123,8 @@ public class ExportFormats {
 		StringBuffer sb = new StringBuffer();
 		int lastBreak = -firstLineSubtr;
 
-		for (Iterator i = exportFormats.keySet().iterator(); i.hasNext();) {
-			String name = (String) i.next();
+		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();
@@ -84,7 +141,7 @@ public class ExportFormats {
      * Get a Map of all export formats.
      * @return A Map containing all export formats, mapped to their console names.
      */
-    public static Map getExportFormats() {
+    public static Map<String, IExportFormat> getExportFormats() {
         // It is perhaps overly paranoid to make a defensive copy in this case:
         return Collections.unmodifiableMap(exportFormats);
     } 
@@ -97,8 +154,8 @@ public class ExportFormats {
 	 * @return The ExportFormat, or null if no exportformat with that name is
 	 *         registered.
 	 */
-	public static ExportFormat getExportFormat(String consoleName) {
-		return (ExportFormat) exportFormats.get(consoleName);
+	public static IExportFormat getExportFormat(String consoleName) {
+		return exportFormats.get(consoleName);
 	}
 
 	/**
@@ -138,10 +195,11 @@ public class ExportFormats {
 				FileFilter ff = fc.getFileFilter();
 				if (ff instanceof ExportFileFilter) {
 
+
                     ExportFileFilter eff = (ExportFileFilter) ff;
                     String path = file.getPath();
-                    if (!path.endsWith(eff.getExportFormat().getExtension()))
-                        path = path + eff.getExportFormat().getExtension();
+                    if (!path.endsWith(eff.getExtension()))
+                        path = path + eff.getExtension();
                     file = new File(path);
                     if (file.exists()) {
                         // Warn that the file exists:
@@ -150,7 +208,7 @@ public class ExportFormats {
                             JOptionPane.OK_CANCEL_OPTION) != JOptionPane.OK_OPTION)
                             return;
                     }
-                    final ExportFormat format = eff.getExportFormat();
+                    final IExportFormat format = eff.getExportFormat();
                     Set<String> entryIds = null;
                     if (selectedOnly) {
                         BibtexEntry[] selected = frame.basePanel().getSelectedEntries();
@@ -171,17 +229,23 @@ public class ExportFormats {
                     // 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(), finFile.getPath(), frame
+                                format.performExport(frame.basePanel().database(),
+                                        frame.basePanel().metaData(),
+                                        finFile.getPath(), frame
                                     .basePanel().getEncoding(), finEntryIDs);
                             } catch (Exception ex) {
-                                //ex.printStackTrace();
-                                errorMessage = ex.getMessage();
+                                if (ex.getMessage()==null ) {
+                                    errorMessage = ex.toString();
+                                } else {
+                                    errorMessage = ex.getMessage();
+                                }
                             }
                         }
 
@@ -219,15 +283,15 @@ public class ExportFormats {
 		FileFilter defaultFilter = null;
 		JFileChooser fc = new JFileChooser(currentDir);
 		TreeSet<FileFilter> filters = new TreeSet<FileFilter>();
-		for (Iterator i = exportFormats.keySet().iterator(); i.hasNext();) {
-			String formatName = (String) i.next();
-			ExportFormat format = (ExportFormat) exportFormats.get(formatName);
+		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 (Iterator i = filters.iterator(); i.hasNext();) {
-			fc.addChoosableFileFilter((ExportFileFilter) i.next());
+		for (FileFilter ff : filters) {
+			fc.addChoosableFileFilter(ff);
 		}
 		fc.setAcceptAllFileFilterUsed(false);
 		if (defaultFilter != null)
@@ -235,7 +299,7 @@ public class ExportFormats {
 		return fc;
 	}
 
-	private static void putFormat(ExportFormat format) {
+	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 b82384f..0c679da 100644
--- a/src/java/net/sf/jabref/export/ExportToClipboardAction.java
+++ b/src/java/net/sf/jabref/export/ExportToClipboardAction.java
@@ -1,15 +1,19 @@
 package net.sf.jabref.export;
 
-import net.sf.jabref.*;
-import net.sf.jabref.gui.MainTable;
-
-import javax.swing.*;
-import java.util.*;
-import java.io.*;
-import java.awt.datatransfer.ClipboardOwner;
+import java.awt.Toolkit;
 import java.awt.datatransfer.Clipboard;
+import java.awt.datatransfer.ClipboardOwner;
 import java.awt.datatransfer.Transferable;
-import java.awt.*;
+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.
@@ -37,31 +41,17 @@ public class ExportToClipboardAction extends AbstractWorker {
             return;
         }
 
-        Map m = ExportFormats.getExportFormats();
-        ExportFormat[] formats = new ExportFormat[m.size()];
-        int piv=0;
-        for (Iterator iterator = m.keySet().iterator(); iterator.hasNext();) {
-            formats[piv++] = (ExportFormat)m.get(iterator.next());
-        }
-        //ExportFormat[] formats = (ExportFormat[])(m.entrySet().toArray
-        //        (new ExportFormat[m.size()]));
-
-        // Make a list of possible formats:
-        /*Map formats = new HashMap();
-        formats.put("BibTeXML", "bibtexml");
-        formats.put("DocBook", "docbook");
-        formats.put("HTML", "html");
-        formats.put("RTF (Harvard)", "harvard/harvard");
-        formats.put("Simple HTML", "simplehtml");
-        for (int i = 0; i < Globals.prefs.customExports.size(); i++) {
-            Object o = (Globals.prefs.customExports.getElementAt(i))[0];
-            formats.put(o, o);
-        }*/
+        Map<String, IExportFormat> m = ExportFormats.getExportFormats();
+        IExportFormat[] formats = new ExportFormat[m.size()];
         String[] array = new String[formats.length];
-        for (int i=0; i<formats.length; i++) {
-            array[i] = formats[i].getDisplayName();
-        }
-        //Arrays.sort(array);
+        
+        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);
@@ -75,7 +65,7 @@ public class ExportToClipboardAction extends AbstractWorker {
         if (answer == JOptionPane.NO_OPTION)
             return;
 
-        ExportFormat format = formats[list.getSelectedIndex()];
+        IExportFormat format = formats[list.getSelectedIndex()];
 
         // Set the global variable for this database's file directory before exporting,
         // so formatters can resolve linked files correctly.
@@ -105,11 +95,13 @@ public class ExportToClipboardAction extends AbstractWorker {
             tmp = File.createTempFile("jabrefCb", ".tmp");
             tmp.deleteOnExit();
             BibtexEntry[] bes = panel.getSelectedEntries();
-            HashSet entries = new HashSet(bes.length);
-            for (int i = 0; i < bes.length; i++)
-                entries.add(bes[i].getId());
+            HashSet<String> entries = new HashSet<String>(bes.length);
+            for (BibtexEntry be : bes)
+                entries.add(be.getId());
+            
             // Write to file:
-            format.performExport(database, tmp.getPath(), panel.getEncoding(), entries);
+            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());
diff --git a/src/java/net/sf/jabref/export/FileActions.java b/src/java/net/sf/jabref/export/FileActions.java
index 809031d..b0d85c4 100644
--- a/src/java/net/sf/jabref/export/FileActions.java
+++ b/src/java/net/sf/jabref/export/FileActions.java
@@ -26,23 +26,40 @@ http://www.gnu.org/copyleft/gpl.ja.html
 */
 package net.sf.jabref.export;
 
-import javax.xml.transform.*;
-import javax.xml.transform.dom.*;
-import javax.xml.transform.stream.*;
-import javax.swing.*;
-import java.io.*;
+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.*;
-import java.util.regex.Pattern;
+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.nio.charset.UnsupportedCharsetException;
-
-import net.sf.jabref.export.layout.Layout;
-import net.sf.jabref.export.layout.LayoutHelper;
-import net.sf.jabref.export.layout.LayoutFormatter;
-import net.sf.jabref.export.layout.format.*;
-import net.sf.jabref.*;
-import net.sf.jabref.mods.*;
+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;
 
@@ -68,25 +85,25 @@ public class FileActions
      * @throws IOException If anthing goes wrong in writing.
      */
     private static void writeStrings(Writer fw, BibtexDatabase database) throws IOException {
-        List strings = new ArrayList();
-        for (Iterator i = database.getStringKeySet().iterator(); i.hasNext();) {
-            strings.add(database.getString(i.next()));
+        List<BibtexString> strings = new ArrayList<BibtexString>();
+        for (String s : database.getStringKeySet()) {
+            strings.add(database.getString(s));
         }
         Collections.sort(strings, new BibtexStringComparator(false));
         // First, make a Map of all entries:
-        HashMap remaining = new HashMap();
-        for (Iterator i=strings.iterator(); i.hasNext();) {
-            BibtexString string = (BibtexString)i.next();
+        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 i = strings.iterator(); i.hasNext();) {
-            BibtexString bs = (BibtexString) i.next();
+        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 remaining) throws IOException {
+    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());
 
@@ -133,134 +150,137 @@ public class FileActions
      * 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) throws SaveException
-    {
-        BibtexEntry be = null;
-        TreeMap types = new TreeMap(); // Map to collect entry type definitions
-        // that we must save along with entries using them.
-
-        boolean backup = prefs.getBoolean("backup");
-
-        SaveSession session;
-        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 sorter = getSortedEntries(database, null, true);
-
-            FieldFormatter ff = new LatexFieldFormatter();
-
-            for (Iterator i = sorter.iterator(); i.hasNext();) {
-                be = (BibtexEntry) (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);
-        }
-
-                // 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 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)
-        {
-            ex.printStackTrace();
-            try {
-                session.cancel();
-                //repairAfterError(file, backup, INIT_OK);
-            } catch (IOException e) {
-                // Argh, another error? Can we do anything?
-                e.printStackTrace();
+    public static SaveSession saveDatabase(BibtexDatabase database,
+		MetaData metaData, File file, JabRefPreferences prefs,
+		boolean checkSearch, boolean checkGroup, String encoding)
+		throws SaveException {
+    	
+		TreeMap<String, BibtexEntryType> types = new TreeMap<String, BibtexEntryType>();
+		
+		boolean backup = prefs.getBoolean("backup");
+
+		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();) {
+					CustomEntryType tp = (CustomEntryType) types.get(i.next());
+					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(), be);
-    }
 
-    return session;
+			}
+			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.
-     */
-    public static SaveSession savePartOfDatabase(BibtexDatabase database, MetaData metaData,
+	 * 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 types = new TreeMap(); // Map to collect entry type definitions
+    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;
@@ -294,10 +314,9 @@ public class FileActions
             // sorted as they appear on the screen.
         String pri, sec, ter;
 
-        boolean priD, secD, terD, priBinary=false;
+        boolean priD, secD, terD;
         if (!prefs.getBoolean("saveInStandardOrder")) {
         // The setting is to save according to the current table order.
-            priBinary = prefs.getBoolean("priBinary");
         pri = prefs.get("priSort");
         sec = prefs.get("secSort");
         // sorted as they appear on the screen.
@@ -315,7 +334,7 @@ public class FileActions
         terD = true;
         }
 
-        List comparators = new ArrayList();
+        List<Comparator<BibtexEntry>> comparators = new ArrayList<Comparator<BibtexEntry>>();
         comparators.add(new CrossRefEntryComparator());
         comparators.add(new FieldComparator(pri, priD));
         comparators.add(new FieldComparator(sec, secD));
@@ -323,7 +342,7 @@ public class FileActions
         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(comparators));
+        SortedList sorter = new SortedList(entryList, new FieldComparatorStack<BibtexEntry>(comparators));
 
         if ((bes != null) && (bes.length > 0))
         for (int i=0; i<bes.length; i++) {
@@ -332,9 +351,9 @@ public class FileActions
 
             FieldFormatter ff = new LatexFieldFormatter();
 
-            for (Iterator i = sorter.iterator(); i.hasNext();)
+            for (Iterator<BibtexEntry> i = sorter.iterator(); i.hasNext();)
             {
-                be = (BibtexEntry) (i.next());
+                be = (i.next());
 
         // Check if we must write the type definition for this
         // entry, as well. Our criterion is that all non-standard
@@ -356,7 +375,7 @@ public class FileActions
 
         // Write type definitions, if any:
         if (types.size() > 0) {
-        for (Iterator i=types.keySet().iterator(); i.hasNext();) {
+        for (Iterator<String> i=types.keySet().iterator(); i.hasNext();) {
             CustomEntryType tp = (CustomEntryType)types.get(i.next());
             tp.save(fw);
             fw.write(Globals.NEWLINE);
@@ -385,71 +404,6 @@ public class FileActions
 
     }
 
-    public static void exportToCSV(BibtexDatabase database,
-                                   File outFile, JabRefPreferences prefs)
-        throws Exception {
-
-    HashMap fieldFormatters = new HashMap();
-    fieldFormatters.put("default", new RemoveLatexCommands());
-    fieldFormatters.put("author", new Object[] {new AuthorLastFirst(),
-                            new RemoveLatexCommands()});
-    fieldFormatters.put("pdf", new ResolvePDF());
-
-    String SEPARATOR = "\t";
-    List sorted = getSortedEntries(database, null, true);
-    Set fields = new TreeSet();
-    for (int i=0, len=BibtexFields.numberOfPublicFields(); i<len; i++)
-        fields.add(BibtexFields.getFieldName(i));
-
-    //	try {
-    Object[] o = fields.toArray();
-    FileWriter out = new FileWriter(outFile);
-    out.write((String)o[0]);
-    for (int i=1; i<o.length; i++) {
-        out.write(SEPARATOR+(String)o[i]);
-    }
-    out.write(Globals.NEWLINE);
-
-    for (Iterator i=sorted.iterator(); i.hasNext();) {
-        BibtexEntry entry = (BibtexEntry)i.next();
-        writeField(database, entry, (String)o[0], fieldFormatters, out);
-        for (int j=1; j<o.length; j++) {
-        out.write(SEPARATOR);
-        writeField(database, entry, (String)o[j], fieldFormatters, out);
-        }
-        out.write(Globals.NEWLINE);
-    }
-
-
-    out.close();
-    //	} catch (Throwable ex) {}
-
-
-    }
-
-
-
-    private static void writeField(BibtexDatabase database, BibtexEntry entry, String field,
-                                   HashMap fieldFormatters, Writer out)
-    throws IOException {
-
-    String s = BibtexDatabase.getResolvedField(field, entry, database);
-    	
-    Object form = fieldFormatters.get(field);
-    if (form == null)
-        form = fieldFormatters.get("default");
-
-    if (form instanceof LayoutFormatter) {
-        s = ((LayoutFormatter)form).format(s);
-    } else if (form instanceof Object[]) {
-        Object[] forms = (Object[])form;
-        for (int i=0; i<forms.length; i++) {
-        s = ((LayoutFormatter)(forms[i])).format(s);
-        }
-    }
-
-    out.write(s);
-    }
 
     /**
      * This method attempts to get a Reader for the file path given, either by
@@ -486,25 +440,25 @@ public class FileActions
     * (such as the exportDatabase call), we do not wish to use the
     * global preference of saving in standard order.
     */
-    public static List getSortedEntries(BibtexDatabase database, Set keySet, boolean isSaveOperation) {
-        FieldComparatorStack comparatorStack = null;
+    @SuppressWarnings("unchecked")
+	public static List<BibtexEntry> getSortedEntries(BibtexDatabase database, Set<String> keySet, boolean isSaveOperation) {
+        FieldComparatorStack<BibtexEntry> comparatorStack = null;
 
         if (Globals.prefs.getBoolean("saveInOriginalOrder")) {
             // Sort entries based on their creation order, utilizing the fact
             // that IDs used for entries are increasing, sortable numbers.
-            List comparators = new ArrayList();
+            List<Comparator<BibtexEntry>> comparators = new ArrayList<Comparator<BibtexEntry>>();
             comparators.add(new CrossRefEntryComparator());
             comparators.add(new IdComparator());
-            comparatorStack = new FieldComparatorStack(comparators);
+            comparatorStack = new FieldComparatorStack<BibtexEntry>(comparators);
 
         } else {
             String pri, sec, ter;
-            boolean priD, secD, terD, priBinary = false;
+            boolean priD, secD, terD = false;
 
 
             if (!isSaveOperation || !Globals.prefs.getBoolean("saveInStandardOrder")) {
                 // The setting is to save according to the current table order.
-                priBinary = Globals.prefs.getBoolean("priBinary");
                 pri = Globals.prefs.get("priSort");
                 sec = Globals.prefs.get("secSort");
                 // sorted as they appear on the screen.
@@ -522,7 +476,7 @@ public class FileActions
                 terD = true;
             }
 
-            List comparators = new ArrayList();
+            List<Comparator<BibtexEntry>> comparators = new ArrayList<Comparator<BibtexEntry>>();
             if (isSaveOperation)
                 comparators.add(new CrossRefEntryComparator());
             comparators.add(new FieldComparator(pri, priD));
@@ -530,7 +484,7 @@ public class FileActions
             comparators.add(new FieldComparator(ter, terD));
             comparators.add(new FieldComparator(BibtexFields.KEY_FIELD));
 
-            comparatorStack = new FieldComparatorStack(comparators);
+            comparatorStack = new FieldComparatorStack<BibtexEntry>(comparators);
         }
         // Use glazed lists to get a sorted view of the entries:
         BasicEventList entryList = new BasicEventList();
@@ -540,10 +494,10 @@ public class FileActions
             keySet = database.getKeySet();
 
         if (keySet != null) {
-            Iterator i = keySet.iterator();
+            Iterator<String> i = keySet.iterator();
 
             for (; i.hasNext();) {
-                sorter.add(database.getEntryById((String) (i.next())));
+                sorter.add(database.getEntryById((i.next())));
             }
         }
         return sorter;
@@ -553,7 +507,7 @@ public class FileActions
      */
     private static boolean nonZeroField(BibtexEntry be, String field)
     {
-        String o = (String) (be.getField(field));
+        String o = (be.getField(field));
 
         return ((o != null) && !o.equals("0"));
     }
diff --git a/src/java/net/sf/jabref/export/IExportFormat.java b/src/java/net/sf/jabref/export/IExportFormat.java
new file mode 100644
index 0000000..997ed3c
--- /dev/null
+++ b/src/java/net/sf/jabref/export/IExportFormat.java
@@ -0,0 +1,50 @@
+package net.sf.jabref.export;
+
+import net.sf.jabref.BibtexDatabase;
+import net.sf.jabref.MetaData;
+
+import java.io.Writer;
+import java.util.Set;
+
+import javax.swing.filechooser.FileFilter;
+
+public interface IExportFormat {
+
+	/**
+	 * Name to call this format in the console.
+	 */
+	String getConsoleName();
+
+	/**
+	 * Name to display to the user (for instance in the Save file format drop
+	 * down box.
+	 */
+	String getDisplayName();
+
+	/**
+	 * A file filter that accepts filetypes that this exporter would create.
+	 */
+	FileFilter getFileFilter();
+
+	/**
+	 * Perform the export.
+	 * 
+	 * @param database
+	 *            The database to export from.
+     * @param metaData
+     *            The database's metadata.
+	 * @param file
+	 *            The filename to write to.
+	 * @param encoding
+	 *            The encoding to use.
+	 * @param entryIds
+	 *            (may be null) A Set containing the IDs of all entries that
+	 *            should be exported. If null, all entries will be exported.
+	 * @throws Exception
+	 * @see #performExport(BibtexDatabase, Set, Writer)
+	 */
+	void performExport(BibtexDatabase database, MetaData metaData,
+                       String file, String encoding,
+		Set<String> entryIds) throws Exception;
+
+}
\ No newline at end of file
diff --git a/src/java/net/sf/jabref/export/IExportFormatProvider.java b/src/java/net/sf/jabref/export/IExportFormatProvider.java
new file mode 100644
index 0000000..b22fe05
--- /dev/null
+++ b/src/java/net/sf/jabref/export/IExportFormatProvider.java
@@ -0,0 +1,14 @@
+package net.sf.jabref.export;
+
+import java.util.List;
+
+/**
+ * @author kariem
+ */
+public interface IExportFormatProvider {
+
+	/**
+	 * @return a list of export formats
+	 */
+	List<IExportFormat> getExportFormats();
+}
diff --git a/src/java/net/sf/jabref/export/LatexFieldFormatter.java b/src/java/net/sf/jabref/export/LatexFieldFormatter.java
index bb30eac..a0448ed 100644
--- a/src/java/net/sf/jabref/export/LatexFieldFormatter.java
+++ b/src/java/net/sf/jabref/export/LatexFieldFormatter.java
@@ -27,9 +27,12 @@ http://www.gnu.org/copyleft/gpl.ja.html
 
 package net.sf.jabref.export;
 
-import java.util.* ;
+import java.util.Vector;
 
-import net.sf.jabref.* ;
+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 {
 
@@ -80,7 +83,7 @@ public class LatexFieldFormatter implements FieldFormatter {
           if (!ok)
             throw new IllegalArgumentException("Curly braces { and } must be balanced.");
 
-          sb = new StringBuffer(Globals.getOpeningBrace());
+          sb = new StringBuffer("{");
           // No formatting at all for these fields, to allow custom formatting?
           //if (Globals.prefs.getBoolean("preserveFieldFormatting"))
           //  sb.append(text);
@@ -90,7 +93,7 @@ public class LatexFieldFormatter implements FieldFormatter {
           else
             sb.append(text);
 
-          sb.append(Globals.getClosingBrace());
+          sb.append('}');
 
           return sb.toString();
     }
@@ -159,7 +162,7 @@ public class LatexFieldFormatter implements FieldFormatter {
     /*sb.append("{");
      sb.append(text.substring(start_pos, end_pos));
      sb.append("}");*/
-    sb.append(Globals.getOpeningBrace());
+    sb.append('{');
     boolean escape = false, inCommandName = false, inCommand = false,
         inCommandOption = false;
     int nestedEnvironments = 0;
@@ -172,7 +175,7 @@ public class LatexFieldFormatter implements FieldFormatter {
         if (Character.isLetter(c) && (escape || inCommandName)) {
             inCommandName = true;
             if (!inCommandOption)
-                commandName.append((char)c);
+                commandName.append(c);
         }
         else if (Character.isWhitespace(c) && (inCommand || inCommandOption)) {
             //System.out.println("whitespace here");
@@ -227,7 +230,7 @@ public class LatexFieldFormatter implements FieldFormatter {
             sb.append(c);
         escape = (c == '\\');
     }
-    sb.append(Globals.getClosingBrace());
+    sb.append('}');
     }
 
     private void writeStringLabel(String text, int start_pos, int end_pos,
@@ -245,9 +248,9 @@ public class LatexFieldFormatter implements FieldFormatter {
 
     private void checkBraces(String text) throws IllegalArgumentException {
 
-    Vector
-        left = new Vector(5, 3),
-        right = new Vector(5, 3);
+    Vector<Integer>
+        left = new Vector<Integer>(5, 3),
+        right = new Vector<Integer>(5, 3);
     int current = -1;
 
     // First we collect all occurences:
@@ -260,8 +263,8 @@ public class LatexFieldFormatter implements FieldFormatter {
     if ((right.size() > 0) && (left.size() == 0))
         throw new IllegalArgumentException
         ("'}' character ends string prematurely.");
-    if ((right.size() > 0) && (((Integer)right.elementAt(0)).intValue()
-                   < ((Integer)left.elementAt(0)).intValue()))
+    if ((right.size() > 0) && ((right.elementAt(0)).intValue()
+                   < (left.elementAt(0)).intValue()))
         throw new IllegalArgumentException
         ("'}' character ends string prematurely.");
     if (left.size() != right.size())
diff --git a/src/java/net/sf/jabref/export/MSBibExportFormat.java b/src/java/net/sf/jabref/export/MSBibExportFormat.java
index 503d650..66f2d46 100644
--- a/src/java/net/sf/jabref/export/MSBibExportFormat.java
+++ b/src/java/net/sf/jabref/export/MSBibExportFormat.java
@@ -1,39 +1,31 @@
 package net.sf.jabref.export;
 
-import net.sf.jabref.Globals;
-import net.sf.jabref.BibtexDatabase;
-import net.sf.jabref.msbib.*;
+import java.io.File;
+import java.io.IOException;
+import java.util.Set;
 
-import javax.xml.transform.dom.DOMSource;
-import javax.xml.transform.stream.StreamResult;
+import javax.xml.transform.OutputKeys;
 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;
-/*
- * @author S M Mahbub Murshed 
-* @email udvranto at yahoo.com
-*
-* @version 1.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 03, 2007
-* 
-*/
+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 MSBibExportFormat() {
+        super(Globals.lang("MS Office 2007"), "MSBib", null, null, ".xml");
     }
 
-    public void performExport(final BibtexDatabase database, final String file, final String encoding, Set keySet) throws IOException {
+    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));
diff --git a/src/java/net/sf/jabref/export/ModsExportFormat.java b/src/java/net/sf/jabref/export/ModsExportFormat.java
index b0ce8f7..f77164c 100644
--- a/src/java/net/sf/jabref/export/ModsExportFormat.java
+++ b/src/java/net/sf/jabref/export/ModsExportFormat.java
@@ -2,6 +2,7 @@ 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;
@@ -19,10 +20,10 @@ import java.io.File;
 class ModsExportFormat extends ExportFormat {
     public ModsExportFormat() {
         super(Globals.lang("MODS"), "mods", null, null, ".xml");
-
     }
 
-    public void performExport(final BibtexDatabase database, final String file, final String encoding, Set keySet) throws IOException {
+    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);
diff --git a/src/java/net/sf/jabref/export/MySQLExport.java b/src/java/net/sf/jabref/export/MySQLExport.java
new file mode 100644
index 0000000..7d07899
--- /dev/null
+++ b/src/java/net/sf/jabref/export/MySQLExport.java
@@ -0,0 +1,45 @@
+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.SQLutil;
+
+/**
+ * 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 {
+
+        SQLutil.exportDatabase(database, metaData, keySet, file, SQLutil.DBTYPE.MYSQL);
+
+    }
+
+
+}
\ No newline at end of file
diff --git a/src/java/net/sf/jabref/export/OOCalcDatabase.java b/src/java/net/sf/jabref/export/OOCalcDatabase.java
index f6054a4..e88c4b6 100644
--- a/src/java/net/sf/jabref/export/OOCalcDatabase.java
+++ b/src/java/net/sf/jabref/export/OOCalcDatabase.java
@@ -1,16 +1,26 @@
 /*
  * Created on Oct 23, 2004
  *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
  */
 package net.sf.jabref.export;
 
-import net.sf.jabref.export.layout.format.*;
+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 java.util.*;
-import javax.xml.parsers.*;
-import org.w3c.dom.*;
+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;
 
@@ -20,11 +30,12 @@ import ca.odell.glazedlists.SortedList;
  *
  */
 public class OOCalcDatabase {
-    protected Collection entries;
+    protected Collection<BibtexEntry> entries;
 
-    public OOCalcDatabase(BibtexDatabase bibtex, Set keySet) {
+    @SuppressWarnings("unchecked")
+	public OOCalcDatabase(BibtexDatabase bibtex, Set<String> keySet) {
         // Make a list of comparators for sorting the entries:
-        List comparators = new ArrayList();
+        List<FieldComparator> comparators = new ArrayList<FieldComparator>();
         comparators.add(new FieldComparator("author"));
         comparators.add(new FieldComparator("year"));
         comparators.add(new FieldComparator(BibtexFields.KEY_FIELD));
@@ -35,8 +46,8 @@ public class OOCalcDatabase {
         if (keySet == null)
             entryList.addAll(bibtex.getEntries());
         else {
-            for (Iterator i=keySet.iterator(); i.hasNext();)
-                entryList.add(bibtex.getEntryById((String)i.next()));
+            for (String key : keySet)
+                entryList.add(bibtex.getEntryById(key));
         }
         
         entries = new SortedList(entryList, new FieldComparatorStack(comparators));
@@ -119,8 +130,7 @@ public class OOCalcDatabase {
             addTableCell(result, row, "Custom5");
             table.appendChild(row);
 
-            for(Iterator iter = entries.iterator(); iter.hasNext(); ) {
-                BibtexEntry e = (BibtexEntry)iter.next();
+            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"));
diff --git a/src/java/net/sf/jabref/export/OpenDocumentRepresentation.java b/src/java/net/sf/jabref/export/OpenDocumentRepresentation.java
index 08c0f8f..7e0a77c 100644
--- a/src/java/net/sf/jabref/export/OpenDocumentRepresentation.java
+++ b/src/java/net/sf/jabref/export/OpenDocumentRepresentation.java
@@ -1,19 +1,28 @@
 /*
  * Created on Oct 23, 2004
  *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
  */
 package net.sf.jabref.export;
 
-import net.sf.jabref.export.layout.format.*;
+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 java.util.*;
-import javax.xml.parsers.*;
-import org.w3c.dom.*;
-import ca.odell.glazedlists.SortedList;
-import ca.odell.glazedlists.EventList;
+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.
@@ -21,12 +30,12 @@ import ca.odell.glazedlists.BasicEventList;
  *
  */
 public class OpenDocumentRepresentation {
-    protected Collection entries;
-
+    protected Collection<BibtexEntry> entries;
 
-    public OpenDocumentRepresentation(BibtexDatabase bibtex, Set keySet) {
+    @SuppressWarnings("unchecked")
+	public OpenDocumentRepresentation(BibtexDatabase bibtex, Set<String> keySet) {
         // Make a list of comparators for sorting the entries:
-        List comparators = new ArrayList();
+        List<FieldComparator> comparators = new ArrayList<FieldComparator>();
         comparators.add(new FieldComparator("author"));
         comparators.add(new FieldComparator("year"));
         comparators.add(new FieldComparator(BibtexFields.KEY_FIELD));
@@ -38,8 +47,8 @@ public class OpenDocumentRepresentation {
         if (keySet == null)
             entryList.addAll(bibtex.getEntries());
         else {
-            for (Iterator i=keySet.iterator(); i.hasNext();)
-                entryList.add(bibtex.getEntryById((String)i.next()));
+            for (String key : keySet)
+                entryList.add(bibtex.getEntryById(key));
         }
 
         entries = new SortedList(entryList, new FieldComparatorStack(comparators));
@@ -123,8 +132,7 @@ public class OpenDocumentRepresentation {
             addTableCell(result, row, "ISBN");
             table.appendChild(row);
 
-            for(Iterator iter = entries.iterator(); iter.hasNext(); ) {
-                BibtexEntry e = (BibtexEntry)iter.next();
+            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()));
diff --git a/src/java/net/sf/jabref/export/OpenDocumentSpreadsheetCreator.java b/src/java/net/sf/jabref/export/OpenDocumentSpreadsheetCreator.java
index 1f76455..42ccab8 100644
--- a/src/java/net/sf/jabref/export/OpenDocumentSpreadsheetCreator.java
+++ b/src/java/net/sf/jabref/export/OpenDocumentSpreadsheetCreator.java
@@ -6,15 +6,21 @@
 
 package net.sf.jabref.export;
 
-import net.sf.jabref.*;
-
 import java.io.*;
-import java.util.zip.*;
-import java.util.Set;
 import java.net.URL;
-import javax.xml.transform.*;
-import javax.xml.transform.dom.*;
-import javax.xml.transform.stream.*;
+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
@@ -28,7 +34,8 @@ public class OpenDocumentSpreadsheetCreator extends ExportFormat {
         super(Globals.lang("OpenDocument Spreadsheet"), "ods", null, null, ".ods");
     }
 
-    public void performExport(final BibtexDatabase database, final String file, final String encoding, Set keySet) throws Exception {
+    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);
     }
 
@@ -56,7 +63,7 @@ public class OpenDocumentSpreadsheetCreator extends ExportFormat {
         }
     }
 
-    public static void exportOpenDocumentSpreadsheet(File file, BibtexDatabase database, Set keySet) throws Exception {
+    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);
@@ -70,7 +77,7 @@ public class OpenDocumentSpreadsheetCreator extends ExportFormat {
         tmpFile.delete();
     }
 
-    public static void exportOpenDocumentSpreadsheetXML(File tmpFile, BibtexDatabase database, Set keySet) {
+    public static void exportOpenDocumentSpreadsheetXML(File tmpFile, BibtexDatabase database, Set<String> keySet) {
         OpenDocumentRepresentation od = new OpenDocumentRepresentation(database, keySet);
 
         try {
diff --git a/src/java/net/sf/jabref/export/OpenOfficeDocumentCreator.java b/src/java/net/sf/jabref/export/OpenOfficeDocumentCreator.java
index c869d2a..d9a2a96 100644
--- a/src/java/net/sf/jabref/export/OpenOfficeDocumentCreator.java
+++ b/src/java/net/sf/jabref/export/OpenOfficeDocumentCreator.java
@@ -6,15 +6,21 @@
 
 package net.sf.jabref.export;
 
-import net.sf.jabref.*;
-
 import java.io.*;
-import java.util.zip.*;
-import java.util.Set;
 import java.net.URL;
-import javax.xml.transform.*;
-import javax.xml.transform.dom.*;
-import javax.xml.transform.stream.*;
+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
@@ -28,7 +34,8 @@ public class OpenOfficeDocumentCreator extends ExportFormat {
         super(Globals.lang("OpenOffice Calc"), "oocalc", null, null, ".sxc");
     }
 
-    public void performExport(final BibtexDatabase database, final String file, final String encoding, Set keySet) throws Exception {
+    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);
     }
 
@@ -57,7 +64,7 @@ public class OpenOfficeDocumentCreator extends ExportFormat {
     }
 
     public static void exportOpenOfficeCalc(File file, BibtexDatabase database,
-        Set keySet) throws Exception {
+        Set<String> keySet) throws Exception {
 
 
         // First store the xml formatted content to a temporary file.
@@ -72,7 +79,7 @@ public class OpenOfficeDocumentCreator extends ExportFormat {
         tmpFile.delete();
     }
 
-    public static void exportOpenOfficeCalcXML(File tmpFile, BibtexDatabase database, Set keySet) {
+    public static void exportOpenOfficeCalcXML(File tmpFile, BibtexDatabase database, Set<String> keySet) {
         OOCalcDatabase od = new OOCalcDatabase(database, keySet);
 
         try {
diff --git a/src/java/net/sf/jabref/export/PluginBasedExportFormat.java b/src/java/net/sf/jabref/export/PluginBasedExportFormat.java
new file mode 100644
index 0000000..10c49cb
--- /dev/null
+++ b/src/java/net/sf/jabref/export/PluginBasedExportFormat.java
@@ -0,0 +1,71 @@
+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();
+
+		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, extension);
+	}
+
+	public PluginBasedExportFormat(String displayName, String consoleName,
+		String layoutFileName, String fileExtension,
+		ExportFormatTemplateExtension extension) {
+		super(displayName, consoleName, layoutFileName, null, fileExtension);
+		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/RtfSelection.java b/src/java/net/sf/jabref/export/RtfSelection.java
index d1e49d2..3f51085 100644
--- a/src/java/net/sf/jabref/export/RtfSelection.java
+++ b/src/java/net/sf/jabref/export/RtfSelection.java
@@ -1,7 +1,10 @@
 package net.sf.jabref.export;
 
-import java.awt.datatransfer.*;
-import java.io.*;
+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 {
diff --git a/src/java/net/sf/jabref/export/SaveAllAction.java b/src/java/net/sf/jabref/export/SaveAllAction.java
index 2074b4d..6b78591 100644
--- a/src/java/net/sf/jabref/export/SaveAllAction.java
+++ b/src/java/net/sf/jabref/export/SaveAllAction.java
@@ -10,12 +10,8 @@
 package net.sf.jabref.export;
 
 import java.awt.event.ActionEvent;
-import net.sf.jabref.BasePanel;
-import net.sf.jabref.GUIGlobals;
-import net.sf.jabref.Globals;
-import net.sf.jabref.JabRefFrame;
-import net.sf.jabref.MnemonicAwareAction;
-import net.sf.jabref.Worker;
+
+import net.sf.jabref.*;
 import spin.Spin;
 
 /**
@@ -40,14 +36,9 @@ public class SaveAllAction extends MnemonicAwareAction implements Worker {
         databases = frame.getTabbedPane().getTabCount();
         saved = 0;
         frame.output(Globals.lang("Saving all databases..."));
-        Worker worker = (Worker)Spin.off(this);
+        Spin.off(this);
         run();
-        //if (saved == databases)
         frame.output(Globals.lang("Save all finished."));
-        /*else if (saved > 0)
-            frame.output(Globals.lang("Saved %0 databases."));
-        else
-            frame.output(Globals.lang("No databases saved."));*/
     }
 
     public void run() {
diff --git a/src/java/net/sf/jabref/export/SaveDatabaseAction.java b/src/java/net/sf/jabref/export/SaveDatabaseAction.java
index 89b8c31..7cec978 100644
--- a/src/java/net/sf/jabref/export/SaveDatabaseAction.java
+++ b/src/java/net/sf/jabref/export/SaveDatabaseAction.java
@@ -1,5 +1,7 @@
 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.collab.ChangeScanner;
 
@@ -7,9 +9,7 @@ import javax.swing.*;
 import java.io.File;
 import java.io.IOException;
 import java.nio.charset.UnsupportedCharsetException;
-
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-import com.jgoodies.forms.layout.FormLayout;
+import java.util.Vector;
 
 /**
  * Action for the "Save" and "Save as" operations called from BasePanel. This class is also used for
@@ -38,6 +38,7 @@ public class SaveDatabaseAction extends AbstractWorker {
         else {
 
             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. "
@@ -48,25 +49,59 @@ public class SaveDatabaseAction extends AbstractWorker {
 +"Are you sure you want to save?"), Globals.lang("File updated externally"),
                JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE);*/
 
-                if (answer == JOptionPane.CANCEL_OPTION)
+                if (answer == JOptionPane.CANCEL_OPTION) {
+                    cancelled = true;
                     return;
+                }
                 else if (answer == JOptionPane.YES_OPTION) {
-                    ChangeScanner scanner = new ChangeScanner(panel.frame(), panel); //, panel.database(), panel.metaData());
                     //try {
-                    scanner.changeScan(panel.getFile());
-                    panel.setUpdatedExternally(false);
-                    SwingUtilities.invokeLater(new Runnable() {
+
+                    cancelled = true;
+
+                    (new Thread(new Runnable() {
                         public void run() {
-                            panel.getSidePaneManager().hide("fileUpdate");
+                            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");
+                                                }
+                                            });
+                                        }
+                                    }
+                                });
+                            }
                         }
-                    });
-
-                    //} catch (IOException ex) {
-                    //    ex.printStackTrace();
-                    //}
+                    })).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") + "...");
@@ -87,7 +122,7 @@ public class SaveDatabaseAction extends AbstractWorker {
     }
 
     public void run() {
-        if (panel.getFile() == null) {
+        if (cancelled || (panel.getFile() == null)) {
             return;
         }
 
@@ -239,11 +274,9 @@ public class SaveDatabaseAction extends AbstractWorker {
      * still runs synchronously using Spin (the method returns only after completing the operation).
      */
     public void saveAs() throws Throwable {
-        boolean repeat = true;
         String chosenFile = null;
         File f = null;
-        while (repeat) {
-            repeat = false;
+        while (f == null) {
             chosenFile = Globals.getNewFile(frame, new File(Globals.prefs.get("workingDirectory")), ".bib",
                     JFileChooser.SAVE_DIALOG, false, null);
             if (chosenFile == null) {
@@ -256,7 +289,7 @@ public class SaveDatabaseAction extends AbstractWorker {
                     (frame, "'" + f.getName() + "' " + Globals.lang("exists. Overwrite file?"),
                             Globals.lang("Save database"), JOptionPane.OK_CANCEL_OPTION)
                     != JOptionPane.OK_OPTION)) {
-                repeat = true;
+                f = null;
             }
         }
 
diff --git a/src/java/net/sf/jabref/export/SaveSession.java b/src/java/net/sf/jabref/export/SaveSession.java
index 516f4f1..1f2ddd7 100644
--- a/src/java/net/sf/jabref/export/SaveSession.java
+++ b/src/java/net/sf/jabref/export/SaveSession.java
@@ -10,14 +10,18 @@ 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
+ * 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 {
diff --git a/src/java/net/sf/jabref/export/VerifyingWriter.java b/src/java/net/sf/jabref/export/VerifyingWriter.java
index 86061a8..c53ac98 100644
--- a/src/java/net/sf/jabref/export/VerifyingWriter.java
+++ b/src/java/net/sf/jabref/export/VerifyingWriter.java
@@ -1,51 +1,50 @@
 package net.sf.jabref.export;
 
-import sun.misc.CharacterEncoder;
-
-import java.io.*;
+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;
-import java.util.Iterator;
-
-import net.sf.jabref.Globals;
 
 /**
- * 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.
+ * 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 problemCharacters = new TreeSet();
-
-    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 (Iterator i=problemCharacters.iterator(); i.hasNext();) {
-            chars.append(((Character)i.next()).charValue());
-        }
-        return chars.toString();
-    }
+	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 1ac98e6..e315ea3 100644
--- a/src/java/net/sf/jabref/export/layout/AbstractParamLayoutFormatter.java
+++ b/src/java/net/sf/jabref/export/layout/AbstractParamLayoutFormatter.java
@@ -1,9 +1,7 @@
 package net.sf.jabref.export.layout;
 
-import net.sf.jabref.export.layout.LayoutFormatter;
-
-import java.util.List;
 import java.util.ArrayList;
+import java.util.List;
 
 /**
  * This is an abstract implementation of ParamLayoutFormatter, which provides some
diff --git a/src/java/net/sf/jabref/export/layout/EntryLayout.java b/src/java/net/sf/jabref/export/layout/EntryLayout.java
deleted file mode 100755
index 81dd0a6..0000000
--- a/src/java/net/sf/jabref/export/layout/EntryLayout.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
-Copyright (C) 2003 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.export.layout;
-
-/**
- * DOCUMENT ME!
- *
- * @author $author$
- * @version $Revision: 148 $
- */
-public class EntryLayout
-{
-}
-///////////////////////////////////////////////////////////////////////////////
-//  END OF FILE.
-///////////////////////////////////////////////////////////////////////////////
diff --git a/src/java/net/sf/jabref/export/layout/FieldLayout.java b/src/java/net/sf/jabref/export/layout/FieldLayout.java
deleted file mode 100755
index dbfd837..0000000
--- a/src/java/net/sf/jabref/export/layout/FieldLayout.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
-Copyright (C) 2003 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.export.layout;
-
-/**
- * DOCUMENT ME!
- *
- * @author $author$
- * @version $Revision: 148 $
- */
-public class FieldLayout
-{
-}
-///////////////////////////////////////////////////////////////////////////////
-//  END OF FILE.
-///////////////////////////////////////////////////////////////////////////////
diff --git a/src/java/net/sf/jabref/export/layout/FieldLayoutFormatter.java b/src/java/net/sf/jabref/export/layout/FieldLayoutFormatter.java
deleted file mode 100755
index 09db4a0..0000000
--- a/src/java/net/sf/jabref/export/layout/FieldLayoutFormatter.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
-Copyright (C) 2003 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.export.layout;
-
-/**
- * DOCUMENT ME!
- *
- * @author $author$
- * @version $Revision: 148 $
- */
-public interface FieldLayoutFormatter
-{
-    //~ Methods ////////////////////////////////////////////////////////////////
-
-    public String format(String s);
-}
-///////////////////////////////////////////////////////////////////////////////
-//  END OF FILE.
-///////////////////////////////////////////////////////////////////////////////
diff --git a/src/java/net/sf/jabref/export/layout/Layout.java b/src/java/net/sf/jabref/export/layout/Layout.java
index e9718ec..ed24ca7 100755
--- a/src/java/net/sf/jabref/export/layout/Layout.java
+++ b/src/java/net/sf/jabref/export/layout/Layout.java
@@ -25,20 +25,18 @@ http://www.gnu.org/copyleft/gpl.ja.html
 */
 package net.sf.jabref.export.layout;
 
-import wsi.ra.types.StringInt;
-
 import java.util.Vector;
 
 import net.sf.jabref.BibtexDatabase;
 import net.sf.jabref.BibtexEntry;
-import java.io.IOException;
+import wsi.ra.types.StringInt;
 
 
 /**
- * DOCUMENT ME!
+ * Main class for formatting DOCUMENT ME!
  *
  * @author $author$
- * @version $Revision: 2178 $
+ * @version $Revision: 2488 $
  */
 public class Layout
 {
@@ -48,21 +46,19 @@ public class Layout
 
     //~ Constructors ///////////////////////////////////////////////////////////
 
-    public Layout(Vector parsedEntries, String classPrefix)  throws Exception
+    public Layout(Vector<StringInt> parsedEntries, String classPrefix)  throws Exception
     {
         StringInt si;
-        Vector tmpEntries = new Vector(parsedEntries.size());
+        Vector<LayoutEntry> tmpEntries = new Vector<LayoutEntry>(parsedEntries.size());
 
-        //layoutEntries=new LayoutEntry[parsedEntries.size()];
-        Vector blockEntries = null;
+        Vector<StringInt> blockEntries = null;
         LayoutEntry le;
         String blockStart = null;
 
         for (int i = 0; i < parsedEntries.size(); i++)
         {
-            si = (StringInt) parsedEntries.get(i);
+            si = parsedEntries.get(i);
 
-            //System.out.println("PARSED: "+si.s+"="+si.i);
             if (si.i == LayoutHelper.IS_LAYOUT_TEXT)
             {
             }
@@ -71,47 +67,48 @@ public class Layout
             }
             else if (si.i == LayoutHelper.IS_FIELD_START)
             {
-                blockEntries = new Vector();
+                blockEntries = new Vector<StringInt>();
                 blockStart = si.s;
             }
             else if (si.i == LayoutHelper.IS_FIELD_END)
             {
-                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 !!!");
-                    //System.out.println("..."+blockStart+"..."+si.s+"...");
-                    Thread.dumpStack();
+                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();
+                blockEntries = new Vector<StringInt>();
                 blockStart = si.s;
             }
             else if (si.i == LayoutHelper.IS_GROUP_END)
             {
-                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();
-
-                }                
+                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)
             {
@@ -131,7 +128,7 @@ public class Layout
 
         for (int i = 0; i < tmpEntries.size(); i++)
         {
-            layoutEntries[i] = (LayoutEntry) tmpEntries.get(i);
+            layoutEntries[i] = tmpEntries.get(i);
 
             //System.out.println(layoutEntries[i].text);
         }
diff --git a/src/java/net/sf/jabref/export/layout/LayoutEntry.java b/src/java/net/sf/jabref/export/layout/LayoutEntry.java
index e89bcf0..effb241 100755
--- a/src/java/net/sf/jabref/export/layout/LayoutEntry.java
+++ b/src/java/net/sf/jabref/export/layout/LayoutEntry.java
@@ -26,15 +26,15 @@
 package net.sf.jabref.export.layout;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.Map;
 import java.util.Vector;
 
-import net.sf.jabref.BibtexDatabase;
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.Globals;
-import net.sf.jabref.NameFormatterTab;
-import net.sf.jabref.Util;
-import net.sf.jabref.export.layout.format.NameFormat;
+import net.sf.jabref.*;
+import net.sf.jabref.export.layout.format.plugin.NameFormat;
+import net.sf.jabref.plugin.PluginCore;
+import net.sf.jabref.plugin.core.JabRefPlugin;
+import net.sf.jabref.plugin.core.generated._JabRefPlugin.LayoutFormatterExtension;
 import wsi.ra.tool.WSITools;
 import wsi.ra.types.StringInt;
 
@@ -42,7 +42,7 @@ import wsi.ra.types.StringInt;
  * DOCUMENT ME!
  * 
  * @author $author$
- * @version $Revision: 2331 $
+ * @version $Revision: 2488 $
  */
 public class LayoutEntry {
 	// ~ Instance fields
@@ -72,31 +72,20 @@ public class LayoutEntry {
 		} 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 v = new Vector();
+			Vector<String> v = new Vector<String>();
 			WSITools.tokenize(v, si.s, "\n");
 
 			if (v.size() == 1) {
-				text = (String) v.get(0);
+				text = v.get(0);
 			} else {
-				text = ((String) v.get(0)).trim();
-
-				// try
-				// {
-				option = getOptionalLayout((String) v.get(1), classPrefix);
-				// }
-				// catch (Exception e)
-				// {
-				// e.printStackTrace();
-				// }
+				text = v.get(0).trim();
+
+				option = getOptionalLayout(v.get(1), classPrefix);
 			}
 		}
-
-		// else if (si.i == LayoutHelper.IS_OPTION_FIELD_PARAM)
-		// {
-		// }
 	}
 
-	public LayoutEntry(Vector parsedEntries, String classPrefix_, int layoutType) throws Exception {
+	public LayoutEntry(Vector<StringInt> parsedEntries, String classPrefix_, int layoutType) throws Exception {
 		classPrefix = classPrefix_;
 		String blockStart = null;
 		String blockEnd = null;
@@ -104,9 +93,9 @@ public class LayoutEntry {
 		Vector<StringInt> blockEntries = null;
 		Vector<LayoutEntry> tmpEntries = new Vector<LayoutEntry>();
 		LayoutEntry le;
-		si = (StringInt) parsedEntries.get(0);
+		si = parsedEntries.get(0);
 		blockStart = si.s;
-		si = (StringInt) parsedEntries.get(parsedEntries.size() - 1);
+		si = parsedEntries.get(parsedEntries.size() - 1);
 		blockEnd = si.s;
 
 		if (!blockStart.equals(blockEnd)) {
@@ -117,7 +106,7 @@ public class LayoutEntry {
 		text = si.s;
 
 		for (int i = 1; i < (parsedEntries.size() - 1); i++) {
-			si = (StringInt) parsedEntries.get(i);
+			si = parsedEntries.get(i);
 
 			// System.out.println("PARSED-ENTRY: "+si.s+"="+si.i);
 			if (si.i == LayoutHelper.IS_LAYOUT_TEXT) {
@@ -155,7 +144,7 @@ public class LayoutEntry {
 		layoutEntries = new LayoutEntry[tmpEntries.size()];
 
 		for (int i = 0; i < tmpEntries.size(); i++) {
-			layoutEntries[i] = (LayoutEntry) tmpEntries.get(i);
+			layoutEntries[i] = tmpEntries.get(i);
 
 			// System.out.println(layoutEntries[i].text);
 		}
@@ -302,15 +291,38 @@ public class LayoutEntry {
 
 	// added section - end (arudert)
 
-	public static LayoutFormatter getLayoutFormatter(String className, String classPrefix)
+	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);
+					}
+				}
+			}
+		}
+		return pluginLayoutFormatter.get(formatterName);
+	}
+	
+	public static LayoutFormatter getLayoutFormatterByClassName(String className, String classPrefix)
 		throws Exception {
-		LayoutFormatter f = null;
-        if (className.length() > 0) {
+
+		if (className.length() > 0) {
 			try {
 				try {
-					f = (LayoutFormatter) Class.forName(classPrefix + className).newInstance();
+					return (LayoutFormatter) Class.forName(classPrefix + className).newInstance();
 				} catch (Throwable ex2) {
-					f = (LayoutFormatter) Class.forName(className).newInstance();
+					return (LayoutFormatter) Class.forName(className).newInstance();
 				}
 			} catch (ClassNotFoundException ex) {
 				throw new Exception(Globals.lang("Formatter not found") + ": " + className);
@@ -320,7 +332,7 @@ public class LayoutEntry {
 				throw new Exception(className + " can't be accessed.");
 			}
 		}
-		return f;
+		return null;
 	}
 
 	/**
@@ -328,23 +340,24 @@ public class LayoutEntry {
 	 * string (in order of appearance).
 	 * 
 	 */
-	public static LayoutFormatter[] getOptionalLayout(String formatterName, String classPrefix)
-		throws Exception {
+	public static LayoutFormatter[] getOptionalLayout(String formatterName,
+			String classPrefix) throws Exception {
 
-		ArrayList formatterStrings = Util.parseMethodsCalls(formatterName);
+		ArrayList<String[]> formatterStrings = Util
+				.parseMethodsCalls(formatterName);
 
-		ArrayList<LayoutFormatter> results = new ArrayList<LayoutFormatter>(formatterStrings.size());
+		ArrayList<LayoutFormatter> results = new ArrayList<LayoutFormatter>(
+				formatterStrings.size()); 
 
-		Map userNameFormatter = NameFormatterTab.getNameFormatters();
+		Map<String, String> userNameFormatter = NameFormatterTab.getNameFormatters();
 
-		for (int i = 0; i < formatterStrings.size(); i++) {
-
-			String[] strings = (String[]) formatterStrings.get(i);
+		for (String[] strings : formatterStrings) {
 
+			// First load from formatters in formatter folder
 			String className = strings[0].trim();
-
             try {
-				LayoutFormatter f = getLayoutFormatter(className, classPrefix);
+				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) {
@@ -352,21 +365,34 @@ public class LayoutEntry {
                         ((ParamLayoutFormatter)f).setArgument(strings[1]);
                 }
                 results.add(f);
+				continue;
 			} catch (Exception e) {
+			}
 
-				String formatterParameter = (String) userNameFormatter.get(className);
+			// Then check whether this is a user defined formatter
+			String formatterParameter = userNameFormatter
+					.get(className);
 
-				if (formatterParameter == null) {
-					throw new Exception(Globals.lang("Formatter not found") + ": " + className);
-				} else {
-					NameFormat nf = new NameFormat();
-					nf.setParameter(formatterParameter);
-					results.add(nf);
-				}
+			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) {
+				results.add(f);
+				continue;
 			}
+
+			// If not found throw exception...
+			throw new Exception(Globals.lang("Formatter not found") + ": "
+					+ className);
 		}
 
-		return (LayoutFormatter[]) results.toArray(new LayoutFormatter[] {});
+		return results.toArray(new LayoutFormatter[] {});
 	}
 
 }
\ No newline at end of file
diff --git a/src/java/net/sf/jabref/export/layout/LayoutHelper.java b/src/java/net/sf/jabref/export/layout/LayoutHelper.java
index f1e8f7b..dcd4fce 100755
--- a/src/java/net/sf/jabref/export/layout/LayoutHelper.java
+++ b/src/java/net/sf/jabref/export/layout/LayoutHelper.java
@@ -26,27 +26,24 @@ http://www.gnu.org/copyleft/gpl.ja.html
 */
 package net.sf.jabref.export.layout;
 
-import wsi.ra.types.StringInt;
-
 import java.io.IOException;
 import java.io.PushbackReader;
 import java.io.Reader;
-
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.StringTokenizer;
 import java.util.Vector;
 
+import wsi.ra.types.StringInt;
+
 
 /**
- * DOCUMENT ME!
+ * Helper class to get a Layout object.
+ * 
+ * <code>
+ * LayoutHelper helper = new LayoutHelper(...a reader...);
+ * Layout layout = helper.getLayoutFromText();
+ * </code>
  *
- * @author $author$
- * @version $Revision: 2178 $
  */
-public class LayoutHelper
-{
-    //~ Static fields/initializers /////////////////////////////////////////////
+public class LayoutHelper {
 
     public static final int IS_LAYOUT_TEXT = 1;
     public static final int IS_SIMPLE_FIELD = 2;
@@ -56,21 +53,15 @@ public class LayoutHelper
     public static final int IS_GROUP_START = 6;
     public static final int IS_GROUP_END = 7;
     public static final int IS_ENCODING_NAME = 8;
+    
     private static String currentGroup = null;
     
-    //~ Instance fields ////////////////////////////////////////////////////////
-
-
-    //public static final int IS_OPTION_FIELD_PARAM = 6;
     private PushbackReader _in;
-    private Vector parsedEntries = new Vector();
+    private Vector<StringInt> parsedEntries = new Vector<StringInt>();
 
-    //private HashMap _meta;
     private boolean _eof = false;
     private int line = 1;
 
-    //~ Constructors ///////////////////////////////////////////////////////////
-
     public LayoutHelper(Reader in)
     {
         if (in == null)
@@ -81,8 +72,6 @@ public class LayoutHelper
         _in = new PushbackReader(in);
     }
 
-    //~ Methods ////////////////////////////////////////////////////////////////
-
     public Layout getLayoutFromText(String classPrefix) throws Exception
     {
         parse();
@@ -91,7 +80,7 @@ public class LayoutHelper
 
         for (int i = 0; i < parsedEntries.size(); i++)
         {
-            si = (StringInt) parsedEntries.get(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) ||
@@ -115,13 +104,9 @@ public class LayoutHelper
         currentGroup = newGroup;
     }
     
-    /**
-     *
-     */
     private String getBracketedField(int _field) throws IOException
     {
         StringBuffer buffer = null;
-        int previous = -1;
         int c;
         boolean start = false;
 
@@ -184,8 +169,6 @@ public class LayoutHelper
                     }
                 }
             }
-
-            previous = c;
         }
 
         return null;
@@ -198,7 +181,6 @@ public class LayoutHelper
         throws IOException
     {
         StringBuffer buffer = null;
-        int previous = -1;
         int c;
         boolean start = false;
         String option = null;
@@ -309,8 +291,6 @@ public class LayoutHelper
                     }
                 }
             }
-
-            previous = c;
         }
 
         return null;
@@ -534,136 +514,4 @@ public class LayoutHelper
 
         _in.unread(c);
     }
-
-    //
-    //	private String parseFieldContent() throws IOException
-    //	{
-    //		skipWhitespace();
-    //		consume('=');
-    //		skipWhitespace();
-    //		StringBuffer value = new StringBuffer();
-    //		int c, j = '.';
-    //
-    //		while (((c = peek()) != ',') && (c != '}') && (c != ')'))
-    //		{
-    //
-    //			if (_eof)
-    //			{
-    //				throw new RuntimeException(
-    //					"Error in line " + line + ": EOF in mid-string");
-    //			}
-    //			if (c == '"')
-    //			{
-    //				// 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('"');
-    //
-    //			}
-    //			skipWhitespace();
-    //		}
-    //		//Util.pr("Returning field content: "+value.toString());
-    //		return value.toString();
-    //
-    //	}
-    //
-    //	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 (Character.isWhitespace((char) j))
-    //			{
-    //				value.append(' ');
-    //				skipWhitespace();
-    //			}
-    //			else
-    //				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 void consumeUncritically(char expected) throws IOException
-    //	{
-    //		int c;
-    //		while (((c = read()) != expected) && (c != -1) && (c != 65535));
-    //		if ((c == -1) || (c == 65535))
-    //			_eof = true;
-    //	}
-    //
-    //	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 "
-    //					+ (int) c);
-    //		}
-    //
-    //	}
 }
-///////////////////////////////////////////////////////////////////////////////
-//  END OF FILE.
-///////////////////////////////////////////////////////////////////////////////
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 7e035b0..55bb1f2 100644
--- a/src/java/net/sf/jabref/export/layout/format/AuthorLastFirstAbbreviator.java
+++ b/src/java/net/sf/jabref/export/layout/format/AuthorLastFirstAbbreviator.java
@@ -1,6 +1,5 @@
 package net.sf.jabref.export.layout.format;
 
-import net.sf.jabref.AuthorList;
 import net.sf.jabref.export.layout.LayoutFormatter;
 
 /**
@@ -27,103 +26,8 @@ public class AuthorLastFirstAbbreviator implements LayoutFormatter {
         /**
          * This formatter is a duplicate of AuthorAbbreviator, so we simply
          * call that one.
-         *
-         * TODO: Note that this makes the remaining methods in this formatter obsolete. 
          */
         return (new AuthorAbbreviator()).format(fieldText);
 
 	}
-
-	/**
-	 * Abbreviates the names in the Last, First or Last, Jr, First format.
-	 * 
-	 * @param authors
-	 *            List of authors.
-	 * @return The abbreviated names.
-	 */
-	private String getAbbreviations(String[] authors) {
-		if (authors.length == 0)
-			return "";
-
-		if (!isProperFormat(authors)) {
-			throw new IllegalArgumentException("Author names must be formatted \"Last, First\" or \"Last, Jr., First\" before formatting with AuthorLastFirstAbbreviator");
-		}
-
-		for (int i = 0; i < authors.length; i++) {
-			authors[i] = getAbbreviation(authors[i]);
-		}
-
-		StringBuffer sb = new StringBuffer();
-
-		for (int i = 0; i < authors.length - 1; i++) {
-			sb.append(authors[i]).append(" and ");
-		}
-		sb.append(authors[authors.length - 1]);
-
-		return sb.toString();
-	}
-
-	/**
-	 * Method that verifies if the author names are in the Last, First or Last,
-	 * Jr, First format.
-	 * 
-	 * If the name contains a space, but does not have the comma it is not in
-	 * the appropriate format.
-	 * 
-	 * @param authors
-	 *            List of authors to verify
-	 */
-	private boolean isProperFormat(String[] authors) {
-        for (int i = 0; i < authors.length; i++) {
-			if ((authors[i].indexOf(' ') >= 0)
-					&& (authors[i].indexOf(',') == -1)) {
-				return false;
-			}
-
-		}
-		return true;
-	}
-
-	/**
-	 * Abbreviates all first names of the author.
-	 * 
-	 * @param author
-	 * @return
-	 */
-	private String getAbbreviation(String author) {
-
-		String[] parts = author.split(",");
-
-		String last, first;
-
-		switch (parts.length) {
-		case 1:
-			// If there is no comma in the name, we return it as it is
-			return author;
-		case 2:
-			last = parts[0].trim();
-			first = parts[1].trim();
-			break;
-		case 3:
-			last = parts[0].trim();
-			// jr = parts[1];
-			first = parts[2].trim();
-			break;
-		default:
-			throw new IllegalArgumentException("Authorname contained 3 or more commas");
-		}
-
-		StringBuffer sb = new StringBuffer();
-		sb.append(last);
-		sb.append(", ");
-
-		String[] firstNames = first.split(" ");
-		for (int i = 0; i < firstNames.length; i++) {
-			sb.append(firstNames[i].charAt(0));
-			sb.append('.');
-			if (i < firstNames.length - 1)
-				sb.append(' ');
-		}
-		return sb.toString();
-	}
 }
diff --git a/src/java/net/sf/jabref/export/layout/format/CreateDocBookAuthors.java b/src/java/net/sf/jabref/export/layout/format/CreateDocBookAuthors.java
index 08afd3a..fdbb77c 100755
--- a/src/java/net/sf/jabref/export/layout/format/CreateDocBookAuthors.java
+++ b/src/java/net/sf/jabref/export/layout/format/CreateDocBookAuthors.java
@@ -4,9 +4,9 @@
 //  Language: Java
 //  Compiler: JDK 1.4
 //  Authors:  Joerg K. Wegner
-//  Version:  $Revision: 1296 $
-//            $Date: 2005-10-23 05:36:09 +0200 (Sun, 23 Oct 2005) $
-//            $Author: mortenalver $
+//  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
 //
@@ -33,7 +33,7 @@ import net.sf.jabref.AuthorList;
  * Create DocBook authors formatter.
  *
  * @author $author$
- * @version $Revision: 1296 $
+ * @version $Revision: 2268 $
  */
 public class CreateDocBookAuthors implements LayoutFormatter
 {
@@ -46,11 +46,7 @@ public class CreateDocBookAuthors implements LayoutFormatter
         //     <author><firstname>J.</firstname><othername role="mi">W.</othername><surname>Godden</surname></author>
         //     <author><firstname>J.</firstname><surname>Bajorath</surname></author>
 
-        int index = 0;
-        int oldPos = 0;
-        String author;
         StringBuffer sb = new StringBuffer(100);
-        //fieldText = (new ConvertSpecialCharactersForXML()).format(fieldText);
 
         if (fieldText.indexOf(" and ") == -1)
         {
@@ -85,7 +81,7 @@ public class CreateDocBookAuthors implements LayoutFormatter
     protected void singleAuthor(StringBuffer sb, String author)
     {
         // TODO: replace special characters
-        Vector v = new Vector();
+        Vector<String> v = new Vector<String>();
         String authorMod = AuthorList.fixAuthor_firstNameFirst(author);
 
         WSITools.tokenize(v, authorMod, " \n\r");
diff --git a/src/java/net/sf/jabref/export/layout/format/CreateDocBookEditors.java b/src/java/net/sf/jabref/export/layout/format/CreateDocBookEditors.java
index f90ff4a..b9156bd 100755
--- a/src/java/net/sf/jabref/export/layout/format/CreateDocBookEditors.java
+++ b/src/java/net/sf/jabref/export/layout/format/CreateDocBookEditors.java
@@ -4,9 +4,9 @@
 //  Language: Java
 //  Compiler: JDK 1.4
 //  Authors:  Joerg K. Wegner
-//  Version:  $Revision: 742 $
-//            $Date: 2005-01-27 22:31:00 +0100 (Thu, 27 Jan 2005) $
-//            $Author: egonw $
+//  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
 //
@@ -21,19 +21,13 @@
 ///////////////////////////////////////////////////////////////////////////////
 package net.sf.jabref.export.layout.format;
 
-import wsi.ra.tool.WSITools;
-
-import java.util.Vector;
-
-import net.sf.jabref.export.layout.LayoutFormatter;
-import net.sf.jabref.imports.*;
 
 
 /**
  * Create DocBook editors formatter.
  *
  * @author $author$
- * @version $Revision: 742 $
+ * @version $Revision: 2268 $
  */
 public class CreateDocBookEditors extends CreateDocBookAuthors
 {
@@ -43,9 +37,6 @@ public class CreateDocBookEditors extends CreateDocBookAuthors
     {
         //		<editor><firstname>L.</firstname><surname>Xue</surname></editor>
 
-        int index = 0;
-        int oldPos = 0;
-        String author;
         StringBuffer sb = new StringBuffer(100);
         //fieldText = (new ConvertSpecialCharactersForXML()).format(fieldText);
 
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 9b50d2b..ae2f16b 100644
--- a/src/java/net/sf/jabref/export/layout/format/FileLink.java
+++ b/src/java/net/sf/jabref/export/layout/format/FileLink.java
@@ -1,14 +1,13 @@
 package net.sf.jabref.export.layout.format;
 
-import net.sf.jabref.export.layout.LayoutFormatter;
-import net.sf.jabref.export.layout.ParamLayoutFormatter;
-import net.sf.jabref.gui.FileListTableModel;
-import net.sf.jabref.gui.FileListEntry;
+import java.io.File;
+
+import net.sf.jabref.GUIGlobals;
 import net.sf.jabref.Globals;
 import net.sf.jabref.Util;
-import net.sf.jabref.GUIGlobals;
-
-import java.io.File;
+import net.sf.jabref.export.layout.ParamLayoutFormatter;
+import net.sf.jabref.gui.FileListEntry;
+import net.sf.jabref.gui.FileListTableModel;
 import java.io.IOException;
 
 /**
@@ -30,8 +29,6 @@ public class FileLink implements ParamLayoutFormatter {
             // No file type specified. Simply take the first link.
             if (tableModel.getRowCount() > 0)
                 link = tableModel.getEntry(0).getLink();
-            else
-                link = null;
         }
         else {
             // A file type is specified:
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 01ba1e1..bb64d38 100644
--- a/src/java/net/sf/jabref/export/layout/format/FormatPagesForHTML.java
+++ b/src/java/net/sf/jabref/export/layout/format/FormatPagesForHTML.java
@@ -1,6 +1,6 @@
 package net.sf.jabref.export.layout.format;
 
-import net.sf.jabref.export.layout.*;
+import net.sf.jabref.export.layout.LayoutFormatter;
 
 public class FormatPagesForHTML implements LayoutFormatter {
 
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 c03b42d..0d37083 100644
--- a/src/java/net/sf/jabref/export/layout/format/FormatPagesForXML.java
+++ b/src/java/net/sf/jabref/export/layout/format/FormatPagesForXML.java
@@ -1,6 +1,6 @@
 package net.sf.jabref.export.layout.format;
 
-import net.sf.jabref.export.layout.*;
+import net.sf.jabref.export.layout.LayoutFormatter;
 
 public class FormatPagesForXML implements LayoutFormatter {
 
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 9f2d461..51716b4 100644
--- a/src/java/net/sf/jabref/export/layout/format/HTMLChars.java
+++ b/src/java/net/sf/jabref/export/layout/format/HTMLChars.java
@@ -6,7 +6,7 @@ import net.sf.jabref.export.layout.LayoutFormatter;
 /**
  * This formatter escapes characters so they are suitable for HTML.
  * 
- * @version $Revision: 2281 $ ($Date: 2007-08-21 22:47:40 +0200 (Tue, 21 Aug 2007) $)
+ * @version $Revision: 2568 $ ($Date: 2008-01-15 18:40:26 +0100 (Tue, 15 Jan 2008) $)
  */
 public class HTMLChars implements LayoutFormatter {
 
@@ -41,15 +41,15 @@ public class HTMLChars implements LayoutFormatter {
 				currentCommand = new StringBuffer();
 			} else if (!incommand && (c == '{' || c == '}')) {
 				// Swallow the brace.
-			} else if (Character.isLetter((char) c) || (c == '%')
-				|| (Globals.SPECIAL_COMMAND_CHARS.indexOf(String.valueOf((char)c)) >= 0)) {
+			} else if (Character.isLetter(c) || (c == '%')
+				|| (Globals.SPECIAL_COMMAND_CHARS.indexOf(String.valueOf(c)) >= 0)) {
 				escaped = false;
 
                 if (!incommand)
-					sb.append((char) c);
+					sb.append(c);
 					// Else we are in a command, and should not keep the letter.
 				else {
-					currentCommand.append((char) c);
+					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
@@ -99,7 +99,7 @@ public class HTMLChars implements LayoutFormatter {
 				String argument = null;
 
 				if (!incommand) {
-					sb.append((char) c);
+					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)
@@ -110,7 +110,7 @@ public class HTMLChars implements LayoutFormatter {
                     // Then test if we are dealing with a italics or bold
 					// command.
 					// If so, handle.
-					if (command.equals("emph") || command.equals("textit")) {
+					if (command.equals("em") || command.equals("emph") || command.equals("textit")) {
 						IntAndString part = getPart(field, i, true);
 
 						i += part.i;
@@ -205,7 +205,7 @@ public class HTMLChars implements LayoutFormatter {
 				break;
 			else if (c == '{')
 				count++;
-			part.append((char) c);
+			part.append(c);
 			i++;
 		}
 		return new IntAndString(part.length(), format(part.toString()));
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 d60157b..8fbf8ff 100644
--- a/src/java/net/sf/jabref/export/layout/format/RTFChars.java
+++ b/src/java/net/sf/jabref/export/layout/format/RTFChars.java
@@ -1,7 +1,7 @@
 package net.sf.jabref.export.layout.format;
 
-import net.sf.jabref.export.layout.*;
 import net.sf.jabref.Globals;
+import net.sf.jabref.export.layout.LayoutFormatter;
 
 /**
  * Transform a LaTeX-String to RTF.
@@ -16,8 +16,8 @@ import net.sf.jabref.Globals;
  *   
  *   4.) Take special care to save all unicode characters correctly. 
  * 
- * @author $Author: coezbek $
- * @version $Revision: 1896 $ ($Date: 2007-01-19 01:12:49 +0100 (Fri, 19 Jan 2007) $)
+ * @author $Author: mortenalver $
+ * @version $Revision: 2568 $ ($Date: 2008-01-15 18:40:26 +0100 (Tue, 15 Jan 2008) $)
  *
  */
 public class RTFChars implements LayoutFormatter {
@@ -28,8 +28,16 @@ public class RTFChars implements LayoutFormatter {
 		StringBuffer currentCommand = null;
 		boolean escaped = false, incommand = false;
 		for (int i = 0; i < field.length(); i++) {
-			char c = field.charAt(i);
-			if (escaped && (c == '\\')) {
+
+            /*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;
 			}
@@ -40,16 +48,15 @@ public class RTFChars implements LayoutFormatter {
 				currentCommand = new StringBuffer();
 			} else if (!incommand && (c == '{' || c == '}')) {
 				// Swallow the brace.
-			} else if (Character.isLetter((char) c)
-				|| (Globals.SPECIAL_COMMAND_CHARS.indexOf("" + (char) c) >= 0)) {
+			} else if (Character.isLetter(c)
+				|| (Globals.SPECIAL_COMMAND_CHARS.indexOf("" + c) >= 0)) {
 				escaped = false;
 				if (!incommand){
-					sb.append((char) c);
+					sb.append(c);
 				} else {
 					// Else we are in a command, and should not keep the letter.
-					currentCommand.append((char) c);
-
-					testCharCom: if ((currentCommand.length() == 1)
+					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}
@@ -67,9 +74,10 @@ public class RTFChars implements LayoutFormatter {
 						} else {
 							combody = field.substring(i, i + 1);
 						}
-						String result = (String)Globals.RTFCHARS.get(command + combody);
 
-						if (result != null)
+                        String result = Globals.RTFCHARS.get(command + combody);
+
+                        if (result != null)
 							sb.append(result);
 
 						incommand = false;
@@ -81,19 +89,38 @@ public class RTFChars implements LayoutFormatter {
 
 			} else {
 				// if (!incommand || ((c!='{') && !Character.isWhitespace(c)))
-				testContent: if (!incommand || (!Character.isWhitespace(c) && (c != '{')))
-					sb.append((char) c);
+				testContent: if (!incommand || (!Character.isWhitespace(c) && (c != '{')
+                    && (c != '}')))
+					sb.append(c);
 				else {
-					// First test if we are already at the end of the string.
+
+                    // 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 == '{') {
-
-						String command = currentCommand.toString();
+					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("emph") || command.equals("textit")) {
+						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("}{");
@@ -102,8 +129,8 @@ public class RTFChars implements LayoutFormatter {
 							i += part.i;
 							sb.append("}{\\b ").append(part.s).append("}{");
 						}
-					} else
-						sb.append((char) c);
+                    } else
+						sb.append(c);
 
 				}
 				incommand = false;
@@ -138,7 +165,7 @@ public class RTFChars implements LayoutFormatter {
 			else if (c == '{')
 				count++;
 
-			part.append((char) c);
+			part.append(c);
 		}
 		return new IntAndString(part.length(), format(part.toString()));
 	}
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 0803f38..51b0272 100644
--- a/src/java/net/sf/jabref/export/layout/format/RemoveLatexCommands.java
+++ b/src/java/net/sf/jabref/export/layout/format/RemoveLatexCommands.java
@@ -1,7 +1,7 @@
 package net.sf.jabref.export.layout.format;
 
-import net.sf.jabref.export.layout.*;
 import net.sf.jabref.Globals;
+import net.sf.jabref.export.layout.LayoutFormatter;
 
 public class RemoveLatexCommands implements LayoutFormatter {
 
@@ -28,14 +28,14 @@ public class RemoveLatexCommands implements LayoutFormatter {
         // Swallow the brace.
       }
 
-      else if (Character.isLetter((char)c) ||
-                (Globals.SPECIAL_COMMAND_CHARS.indexOf(""+(char)c) >= 0)) {
+      else if (Character.isLetter(c) ||
+                (Globals.SPECIAL_COMMAND_CHARS.indexOf(""+c) >= 0)) {
          escaped = false;
          if (!incommand)
-           sb.append((char)c);
+           sb.append(c);
            // Else we are in a command, and should not keep the letter.
          else {
-           currentCommand.append( (char) c);
+           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}
@@ -68,21 +68,21 @@ public class RemoveLatexCommands implements LayoutFormatter {
         }
       }
 
-      else if (Character.isLetter((char)c)) {
+      else if (Character.isLetter(c)) {
         escaped = false;
         if (!incommand)
-          sb.append((char)c);
+          sb.append(c);
           // Else we are in a command, and should not keep the letter.
         else
-          currentCommand.append((char)c);
+          currentCommand.append(c);
       }
       else {
         //if (!incommand || ((c!='{') && !Character.isWhitespace(c)))
         if (!incommand || (!Character.isWhitespace(c) && (c != '{')))
-          sb.append((char)c);
+          sb.append(c);
         else {
           if (c != '{')
-            sb.append((char)c);
+            sb.append(c);
         }
         incommand = false;
         escaped = false;
diff --git a/src/java/net/sf/jabref/export/layout/format/RemoveWhitespace.java b/src/java/net/sf/jabref/export/layout/format/RemoveWhitespace.java
index c0f2108..5d3714c 100755
--- a/src/java/net/sf/jabref/export/layout/format/RemoveWhitespace.java
+++ b/src/java/net/sf/jabref/export/layout/format/RemoveWhitespace.java
@@ -4,9 +4,9 @@
 //  Language: Java
 //  Compiler: JDK 1.4
 //  Authors:  Joerg K. Wegner
-//  Version:  $Revision: 806 $
-//            $Date: 2005-03-06 22:02:25 +0100 (Sun, 06 Mar 2005) $
-//            $Author: mortenalver $
+//  Version:  $Revision: 2339 $
+//            $Date: 2007-09-10 21:42:01 +0200 (Mon, 10 Sep 2007) $
+//            $Author: coezbek $
 //
 //  Copyright (c) Dept. Computer Architecture, University of Tuebingen, Germany
 //
@@ -24,37 +24,26 @@ 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: 806 $
+ * @version $Revision: 2339 $
  */
-public class RemoveWhitespace implements LayoutFormatter
-{
-    //~ Methods ////////////////////////////////////////////////////////////////
+public class RemoveWhitespace implements LayoutFormatter {
+
+    public String format(String fieldEntry) {
 
-    public String format(String fieldText)
-    {
-        String fieldEntry = fieldText;
-        StringBuffer sb = new StringBuffer(fieldEntry.length());
+        StringBuilder sb = new StringBuilder(fieldEntry.length());
 
-        for (int i = 0; i < fieldEntry.length(); i++)
-        {
-            //System.out.print(fieldEntry.charAt(i));
-            if ( !Character.isWhitespace(fieldEntry.charAt(i)) || Character.isSpaceChar(fieldEntry.charAt(i)))
-            {
-                //System.out.print(fieldEntry.charAt(i));
-                sb.append(fieldEntry.charAt(i));
+        for (char c : fieldEntry.toCharArray()) {
+            if (!Character.isWhitespace(c) || Character.isSpaceChar(c)) {
+                sb.append(c);
             }
         }
 
-        fieldEntry = sb.toString();
-        return fieldEntry;
+        return sb.toString();
     }
-}
-///////////////////////////////////////////////////////////////////////////////
-//  END OF FILE.
-///////////////////////////////////////////////////////////////////////////////
+}
\ No newline at end of file
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 f906f10..5fecdd7 100644
--- a/src/java/net/sf/jabref/export/layout/format/Replace.java
+++ b/src/java/net/sf/jabref/export/layout/format/Replace.java
@@ -2,9 +2,6 @@ package net.sf.jabref.export.layout.format;
 
 import net.sf.jabref.export.layout.AbstractParamLayoutFormatter;
 
-import java.util.List;
-import java.util.ArrayList;
-
 /**
  * Formatter that does regexp replacement.
  *
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 a52b492..4da59d6 100644
--- a/src/java/net/sf/jabref/export/layout/format/ResolvePDF.java
+++ b/src/java/net/sf/jabref/export/layout/format/ResolvePDF.java
@@ -10,10 +10,8 @@ import net.sf.jabref.export.layout.LayoutFormatter;
  * Will expand the relative PDF path and return a URI for the given file (which
  * must exist).
  * 
- * TODO Search also relative to Bib-file.
- * 
  * @author $Author: mortenalver $
- * @version $Revision: 2181 $ ($Date: 2007-07-11 22:31:20 +0200 (Wed, 11 Jul 2007) $)
+ * @version $Revision: 2484 $ ($Date: 2007-11-13 18:57:36 +0100 (Tue, 13 Nov 2007) $)
  */
 public class ResolvePDF implements LayoutFormatter {
 
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 ecd1732..2ab6c7c 100644
--- a/src/java/net/sf/jabref/export/layout/format/WrapContent.java
+++ b/src/java/net/sf/jabref/export/layout/format/WrapContent.java
@@ -2,9 +2,6 @@ package net.sf.jabref.export.layout.format;
 
 import net.sf.jabref.export.layout.AbstractParamLayoutFormatter;
 
-import java.util.List;
-import java.util.ArrayList;
-
 /**
  * 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
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 7836305..9749720 100644
--- a/src/java/net/sf/jabref/export/layout/format/XMLChars.java
+++ b/src/java/net/sf/jabref/export/layout/format/XMLChars.java
@@ -4,9 +4,9 @@
 //  Language: Java
 //  Compiler: JDK 1.4
 //  Authors:  Joerg K. Wegner, Morten O. Alver
-//  Version:  $Revision: 1428 $
-//            $Date: 2006-01-22 14:42:18 +0100 (Sun, 22 Jan 2006) $
-//            $Author: wegner $
+//  Version:  $Revision: 2488 $
+//            $Date: 2007-11-14 01:25:31 +0100 (Wed, 14 Nov 2007) $
+//            $Author: coezbek $
 //
 //  Copyright (c) Dept. Computer Architecture, University of Tuebingen, Germany
 //
@@ -22,91 +22,83 @@
 
 package net.sf.jabref.export.layout.format;
 
-import net.sf.jabref.export.layout.LayoutFormatter;
-import java.util.regex.*;
-import java.util.Iterator;
-import net.sf.jabref.Util;
+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: 1428 $
+ * @version $Revision: 2488 $
  */
-public class XMLChars implements LayoutFormatter
-{
-    //~ Methods ////////////////////////////////////////////////////////////////
-    //Pattern pattern = Pattern.compile(".*\\{..[a-zA-Z].\\}.*");
-    Pattern pattern = Pattern.compile(".*\\{\\\\.*[a-zA-Z]\\}.*");
-  
-    public String format(String fieldText)
-    {
- 
-	fieldText = firstFormat(fieldText);
+public class XMLChars implements LayoutFormatter {
+	Pattern pattern = Pattern.compile(".*\\{\\\\.*[a-zA-Z]\\}.*");
+
+	public String format(String fieldText) {
 
-	//if (!pattern.matcher(fieldText).matches())
-	//    return restFormat(fieldText);
-        
-	for (Iterator i=Globals.HTML_CHARS.keySet().iterator(); i.hasNext();) {
-	    String s = (String)i.next();         
-            String repl = (String)Globals.XML_CHARS.get(s);
-            if (repl != null)
-                fieldText = fieldText.replaceAll(s, repl);
+		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);
 	}
-	//RemoveBrackets rb = new RemoveBrackets();
-	return restFormat(fieldText);
-    }
 
-    private String firstFormat(String s) {
-	return s.replaceAll("&|\\\\&","&#x0026;").replaceAll("--", "&#x2013;");
-    }
+	private String firstFormat(String s) {
+		return s.replaceAll("&|\\\\&", "&#x0026;").replaceAll("--", "&#x2013;");
+	}
 
-    private String restFormat(String s) {
-		String fieldText=s.replaceAll("\\}","").replaceAll("\\{","");
+	boolean[] forceReplace;
+	
+	private String restFormat(String toFormat) {
 		
-		// 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
-		int code;
-		char character;
-		StringBuffer buffer=new StringBuffer(fieldText.length()<<1);
-    for ( int i = 0; i < fieldText.length(); i++)
-    {
-    	character = fieldText.charAt(i);
-      code = ((int) character);
-      //System.out.println(""+character+" "+code);
-      if((code<40 && code!=32)||code>125){
-      	buffer.append("&#" + code+";");
-      }
-      else 
-      {
-      	// TODO: highly inefficient, create look-up array with all 255 codes only once and use code as key!!!
-      	int[] forceReplace=new int[]{44,45,63,64,94,95,96,124};
-      	boolean alphabet=true;
-      	for(int ii=0;ii<forceReplace.length;ii++){
-      		if(code==forceReplace[ii]){
-      			buffer.append("&#" + code+";");
-      			alphabet=false;
-      			break;
-      		}
-      	}
-    		// force roundtripping
-      	if(alphabet)buffer.append((char)code);
-      }
-    }
-    fieldText=buffer.toString();
+		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));
+		
+			// 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 (Iterator i=Globals.ASCII2XML_CHARS.keySet().iterator(); i.hasNext();) {
-	    String ss = (String)i.next();         
-            String repl = (String)Globals.ASCII2XML_CHARS.get(ss);
-            if (repl != null)
-                fieldText = fieldText.replaceAll(ss, repl);
-	  }
+		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;
-    }
+	}
 }
-///////////////////////////////////////////////////////////////////////////////
-//  END OF FILE.
-///////////////////////////////////////////////////////////////////////////////
diff --git a/src/java/net/sf/jabref/export/layout/format/NameFormat.java b/src/java/net/sf/jabref/export/layout/format/plugin/NameFormat.java
similarity index 96%
rename from src/java/net/sf/jabref/export/layout/format/NameFormat.java
rename to src/java/net/sf/jabref/export/layout/format/plugin/NameFormat.java
index e9986d8..7bf7c09 100644
--- a/src/java/net/sf/jabref/export/layout/format/NameFormat.java
+++ b/src/java/net/sf/jabref/export/layout/format/plugin/NameFormat.java
@@ -1,4 +1,4 @@
-package net.sf.jabref.export.layout.format;
+package net.sf.jabref.export.layout.format.plugin;
 
 import net.sf.jabref.AuthorList;
 import net.sf.jabref.BibtexEntry;
@@ -68,7 +68,7 @@ import net.sf.jabref.export.layout.LayoutFormatter;
  * For more examples see the test-cases.
  * 
  * @author $Author: coezbek $
- * @version $Revision: 1799 $ ($Date: 2006-11-11 18:11:39 +0100 (Sat, 11 Nov 2006) $)
+ * @version $Revision: 2186 $ ($Date: 2007-07-19 03:35:35 +0200 (Thu, 19 Jul 2007) $)
  *
  */
 public class NameFormat implements LayoutFormatter {
diff --git a/src/java/net/sf/jabref/external/AccessLinksForEntries.java b/src/java/net/sf/jabref/external/AccessLinksForEntries.java
index 9da3ee1..b31b221 100644
--- a/src/java/net/sf/jabref/external/AccessLinksForEntries.java
+++ b/src/java/net/sf/jabref/external/AccessLinksForEntries.java
@@ -1,17 +1,29 @@
 package net.sf.jabref.external;
 
-import net.sf.jabref.*;
+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;
 
-import javax.swing.*;
-import java.util.*;
-import java.util.List;
-import java.io.File;
-import java.io.IOException;
-import java.awt.event.ActionListener;
-import java.awt.event.ActionEvent;
-import java.awt.*;
 
 /**
  * This class handles the task of looking up all external files linked for a set
@@ -32,7 +44,7 @@ public class AccessLinksForEntries {
         FileListTableModel model = new FileListTableModel();
         for (Iterator<BibtexEntry> iterator = entries.iterator(); iterator.hasNext();) {
             BibtexEntry entry = iterator.next();
-            String links = (String)entry.getField(GUIGlobals.FILE_FIELD);
+            String links = entry.getField(GUIGlobals.FILE_FIELD);
             if (links == null)
                 continue;
             model.setContent(links);
@@ -154,6 +166,7 @@ public class AccessLinksForEntries {
             this.panel = panel;
         }
 
+        @Override
         public void action() throws Throwable {
 
             ArrayList<BibtexEntry> entries = new ArrayList<BibtexEntry>();
diff --git a/src/java/net/sf/jabref/external/AutoSetExternalFileForEntries.java b/src/java/net/sf/jabref/external/AutoSetExternalFileForEntries.java
index 753a7de..90edf01 100644
--- a/src/java/net/sf/jabref/external/AutoSetExternalFileForEntries.java
+++ b/src/java/net/sf/jabref/external/AutoSetExternalFileForEntries.java
@@ -1,20 +1,21 @@
 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 javax.swing.*;
-import java.io.File;
-import java.awt.*;
-import java.awt.event.ActionListener;
-import java.awt.event.ActionEvent;
-import java.util.Collection;
-
-import com.jgoodies.forms.layout.FormLayout;
-import com.jgoodies.forms.builder.DefaultFormBuilder;
 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
@@ -34,7 +35,7 @@ public class AutoSetExternalFileForEntries extends AbstractWorker {
 
     private boolean goOn = true, autoSet = true, overWriteAllowed = true, checkExisting = true;
 
-    private int skipped = 0, entriesChanged = 0, brokenLinks = 0;
+    private int entriesChanged = 0, brokenLinks = 0;
 
 
     public AutoSetExternalFileForEntries(BasePanel panel, String fieldName) {
@@ -43,17 +44,9 @@ public class AutoSetExternalFileForEntries extends AbstractWorker {
     }
 
     public void init() {
-        /*// Get all entries, and make sure there are selected entries:
-    	sel = panel.getSelectedEntries();
-    	if (sel.length < 1) {
-	    // No entries selected. Assume all entries should be treated:
-	    */
-        Collection col = panel.database().getEntries();
-        sel = new BibtexEntry[col.size()];
-        sel = (BibtexEntry[]) col.toArray(sel);
-        //goOn = false;
-        //return;
-        //}
+
+    	Collection<BibtexEntry> col = panel.database().getEntries();
+        sel = col.toArray(new BibtexEntry[col.size()]);
 
         // Ask about rules for the operation:
         if (optDiag == null)
@@ -83,7 +76,6 @@ public class AutoSetExternalFileForEntries extends AbstractWorker {
                 + (checkExisting ? sel.length : 0);
         panel.frame().setProgressBarMaximum(progressBarMax);
         int progress = 0;
-        skipped = 0;
         entriesChanged = 0;
         brokenLinks = 0;
         NamedCompound ce = new NamedCompound(Globals.lang("Autoset %0 field", fieldName));
@@ -102,7 +94,7 @@ public class AutoSetExternalFileForEntries extends AbstractWorker {
                 progress += weightAutoSet;
                 panel.frame().setProgressBarValue(progress);
 
-                final Object old = sel[i].getField(fieldName);
+                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;
@@ -132,18 +124,18 @@ public class AutoSetExternalFileForEntries extends AbstractWorker {
             mainLoop:
             for (int i = 0; i < sel.length; i++) {
                 panel.frame().setProgressBarValue(progress++);
-                final Object old = sel[i].getField(fieldName);
+                final String old = sel[i].getField(fieldName);
                 // Check if a extension is set:
-                if ((old != null) && !((String) old).equals("")) {
+                if ((old != null) && !old.equals("")) {
                     // Get an absolute path representation:
-                    File file = Util.expandFilename((String) old, new String[]{dir, "."});
+                    File file = Util.expandFilename(old, new String[]{dir, "."});
 
                     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[]{(String) old, sel[i].getCiteKey()}),
+                                                new String[]{old, sel[i].getCiteKey()}),
                                         Globals.lang("Broken link"),
                                         JOptionPane.YES_NO_CANCEL_OPTION,
                                         JOptionPane.QUESTION_MESSAGE, null, brokenLinkOptions, brokenLinkOptions[0]);
diff --git a/src/java/net/sf/jabref/external/DownloadExternalFile.java b/src/java/net/sf/jabref/external/DownloadExternalFile.java
index e1cad48..ec5f163 100644
--- a/src/java/net/sf/jabref/external/DownloadExternalFile.java
+++ b/src/java/net/sf/jabref/external/DownloadExternalFile.java
@@ -1,16 +1,17 @@
 package net.sf.jabref.external;
 
-import net.sf.jabref.*;
-import net.sf.jabref.gui.FileListEditor;
-import net.sf.jabref.gui.FileListEntryEditor;
-import net.sf.jabref.gui.FileListEntry;
-import net.sf.jabref.net.URLDownload;
-
-import javax.swing.*;
 import java.io.File;
 import java.io.IOException;
-import java.net.URL;
 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
@@ -26,7 +27,6 @@ import java.net.MalformedURLException;
  */
 public class DownloadExternalFile {
     private JabRefFrame frame;
-    private JDialog dialog;
     private MetaData metaData;
     private String bibtexKey;
     private FileListEntryEditor editor;
@@ -193,11 +193,10 @@ public class DownloadExternalFile {
     }
 
     public String getSuggestedFileName(String res, String suffix) {
-        if (suffix == null) {
-            System.out.println("Link has no obvious extension (DownloadExternalFile.download()");
-        }
-
-        String plannedName = bibtexKey + "." + suffix;
+        
+        String plannedName = bibtexKey;
+        if (suffix.length() > 0)
+            plannedName += "." + suffix;
 
         /*
         * [ 1548875 ] download pdf produces unsupported filename
@@ -222,22 +221,50 @@ public class DownloadExternalFile {
      * @param link The link
      * @return The suffix, excluding the dot (e.g. ".pdf")
      */
-    public String getSuffix(String link) {
+    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)) {
-                link = link.substring(0, link.length()-url.getQuery().length()-1);
-                System.out.println(link);
+                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.
         }
-        int index = link.lastIndexOf('.');
-        if ((index <= 0) || (index == link.length() - 1)) // No occurence, or at the end
-            return null;
-        return link.substring(index + 1);
+        // 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) {
diff --git a/src/java/net/sf/jabref/external/DroppedFileHandler.java b/src/java/net/sf/jabref/external/DroppedFileHandler.java
index dff80f5..3bfea29 100644
--- a/src/java/net/sf/jabref/external/DroppedFileHandler.java
+++ b/src/java/net/sf/jabref/external/DroppedFileHandler.java
@@ -5,12 +5,7 @@ import java.io.IOException;
 import java.util.Iterator;
 import java.util.List;
 
-import javax.swing.ButtonGroup;
-import javax.swing.JCheckBox;
-import javax.swing.JLabel;
-import javax.swing.JOptionPane;
-import javax.swing.JPanel;
-import javax.swing.JRadioButton;
+import javax.swing.*;
 import javax.swing.event.ChangeEvent;
 import javax.swing.event.ChangeListener;
 
@@ -162,7 +157,7 @@ public class DroppedFileHandler {
             return false;
         }
 
-        List xmpEntriesInFile = null;
+        List<BibtexEntry> xmpEntriesInFile = null;
         try {
             xmpEntriesInFile = XMPUtil.readXMP(fileName);
         } catch (Exception e) {
@@ -201,7 +196,7 @@ public class DroppedFileHandler {
          */
 
         boolean isSingle = xmpEntriesInFile.size() == 1;
-        BibtexEntry single = (isSingle ? (BibtexEntry) xmpEntriesInFile.get(0) : null);
+        BibtexEntry single = (isSingle ? xmpEntriesInFile.get(0) : null);
 
        
         boolean success = true;
@@ -225,11 +220,11 @@ public class DroppedFileHandler {
         }
         if (success) {
 
-            Iterator it = xmpEntriesInFile.iterator();
+            Iterator<BibtexEntry> it = xmpEntriesInFile.iterator();
 
             while (it.hasNext()) {
                 try {
-                    BibtexEntry entry = (BibtexEntry) it.next();
+                    BibtexEntry entry = it.next();
                     entry.setId(Util.createNeutralId());
                     edits.addEdit(new UndoableInsertEntry(panel.getDatabase(), entry, panel));
                     panel.getDatabase().insertEntry(entry);
@@ -310,10 +305,10 @@ public class DroppedFileHandler {
         boolean avoidDuplicate, NamedCompound edits) {
 
 
-        Object oldValue = entry.getField(GUIGlobals.FILE_FIELD);
+        String oldValue = entry.getField(GUIGlobals.FILE_FIELD);
         FileListTableModel tm = new FileListTableModel();
         if (oldValue != null)
-            tm.setContent((String)oldValue);
+            tm.setContent(oldValue);
 
         // If avoidDuplicate==true, we should check if this file is already linked:
         if (avoidDuplicate) {
diff --git a/src/java/net/sf/jabref/external/ExternalFileMenuItem.java b/src/java/net/sf/jabref/external/ExternalFileMenuItem.java
index 91c71cc..dc2efc2 100644
--- a/src/java/net/sf/jabref/external/ExternalFileMenuItem.java
+++ b/src/java/net/sf/jabref/external/ExternalFileMenuItem.java
@@ -1,12 +1,13 @@
 package net.sf.jabref.external;
 
-import net.sf.jabref.*;
-
-import javax.swing.*;
-import java.awt.event.ActionListener;
 import java.awt.event.ActionEvent;
-import java.io.IOException;
+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
@@ -40,6 +41,10 @@ public class ExternalFileMenuItem extends JMenuItem implements ActionListener {
     }
 
     public void actionPerformed(ActionEvent e) {
+        openLink();
+    }
+
+    public boolean openLink() {
         
         try {
             ExternalFileType type = fileType;
@@ -57,10 +62,10 @@ public class ExternalFileMenuItem extends JMenuItem implements ActionListener {
             }
 
             if (type instanceof UnknownExternalFileType)
-                Util.openExternalFileUnknown(frame, entry, metaData, link, 
+                return Util.openExternalFileUnknown(frame, entry, metaData, link,
                         (UnknownExternalFileType)type);
             else
-                Util.openExternalFileAnyFormat(metaData, link, type);
+                return Util.openExternalFileAnyFormat(metaData, link, type);
 
 
 
@@ -77,11 +82,11 @@ public class ExternalFileMenuItem extends JMenuItem implements ActionListener {
                     +"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;
+                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 686de4d..c2fe874 100644
--- a/src/java/net/sf/jabref/external/ExternalFilePanel.java
+++ b/src/java/net/sf/jabref/external/ExternalFilePanel.java
@@ -42,8 +42,8 @@ import net.sf.jabref.util.XMPUtil;
  * 
  * Current Version:
  * 
- * @author $Author: mortenalver $
- * @version $Revision: 2454 $ ($Date: 2007-10-31 21:00:41 +0000 (Wed, 31 Oct 2007) $)
+ * @author $Author: coezbek $
+ * @version $Revision: 2488 $ ($Date: 2007-11-14 01:25:31 +0100 (Wed, 14 Nov 2007) $)
  * 
  */
 public class ExternalFilePanel extends JPanel {
@@ -54,8 +54,6 @@ public class ExternalFilePanel extends JPanel {
 
 	private EntryEditor entryEditor;
 
-    private FieldEditor fieldEditor;
-
     private JabRefFrame frame;
 
 	private OpenFileFilter off;
@@ -68,10 +66,9 @@ public class ExternalFilePanel extends JPanel {
 
 	public ExternalFilePanel(final String fieldName, final MetaData metaData,
 		final BibtexEntry entry, final FieldEditor editor, final OpenFileFilter off) {
-		this(null, metaData, null, fieldName, off, null);
+		this(null, metaData, null, fieldName, off, editor);
 		this.entry = entry;
         this.entryEditor = null;
-        this.fieldEditor = editor;
     }
 
 	public ExternalFilePanel(final JabRefFrame frame, final MetaData metaData,
@@ -82,7 +79,6 @@ public class ExternalFilePanel extends JPanel {
 		this.metaData = metaData;
 		this.off = off;
 		this.entryEditor = entryEditor;
-        this.fieldEditor = null;
 
         setLayout(new GridLayout(2, 2));
 
@@ -174,14 +170,8 @@ public class ExternalFilePanel extends JPanel {
 				if (file == null) {
 					file = new File(editor.getText());
 				}
-
-				if (file == null) {
-					output(Globals.lang("No file associated"));
-					return;
-				}
 				
 				final File finalFile = file;
-
 		
 				output(Globals.lang("Writing XMP to '%0'...", finalFile.getName()));
 				try {
@@ -361,10 +351,8 @@ public class ExternalFilePanel extends JPanel {
 						 * and not set the text of the editor.
 						 */
 						targetEntry.setField(fieldName, textToSet);
-                        if (fieldEditor != null) {
-                            fieldEditor.setText(textToSet);
-                            fieldEditor.setEnabled(true);
-                        }
+                        fieldEditor.setText(textToSet);
+                        fieldEditor.setEnabled(true);
                         updateEditor = false;
 					} else {
 						/*
@@ -444,7 +432,7 @@ public class ExternalFilePanel extends JPanel {
 				 */
 				list.add(".");
 
-				String found = Util.findPdf(getEntry(), fieldName, (String[]) list
+				String found = Util.findPdf(getEntry(), fieldName, list
 					.toArray(new String[list.size()]));// , off);
                                         
                                 
diff --git a/src/java/net/sf/jabref/external/ExternalFileType.java b/src/java/net/sf/jabref/external/ExternalFileType.java
index 73d9a4a..cfa596a 100644
--- a/src/java/net/sf/jabref/external/ExternalFileType.java
+++ b/src/java/net/sf/jabref/external/ExternalFileType.java
@@ -1,15 +1,15 @@
 package net.sf.jabref.external;
 
-import net.sf.jabref.GUIGlobals;
-
 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 {
+public class ExternalFileType implements Comparable<ExternalFileType> {
 
     protected String name, extension, openWith, iconName;
     protected ImageIcon icon;
@@ -143,8 +143,8 @@ public class ExternalFileType implements Comparable {
         return getName();
     }
 
-    public int compareTo(Object o) {
-        return getName().compareTo(((ExternalFileType)o).getName());
+    public int compareTo(ExternalFileType o) {
+        return getName().compareTo(o.getName());
     }
 
     public ExternalFileType copy() {
diff --git a/src/java/net/sf/jabref/external/ExternalFileTypeEditor.java b/src/java/net/sf/jabref/external/ExternalFileTypeEditor.java
index 79a4ccb..a16fdfd 100644
--- a/src/java/net/sf/jabref/external/ExternalFileTypeEditor.java
+++ b/src/java/net/sf/jabref/external/ExternalFileTypeEditor.java
@@ -1,20 +1,22 @@
 package net.sf.jabref.external;
 
-import net.sf.jabref.JabRefFrame;
-import net.sf.jabref.Globals;
-import net.sf.jabref.GUIGlobals;
-import net.sf.jabref.MnemonicAwareAction;
+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 java.util.ArrayList;
-import java.util.Collections;
-import java.awt.*;
-import java.awt.event.ActionListener;
-import java.awt.event.ActionEvent;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
+
+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;
diff --git a/src/java/net/sf/jabref/external/ExternalFileTypeEntryEditor.java b/src/java/net/sf/jabref/external/ExternalFileTypeEntryEditor.java
index 2217fcd..bbe6dfe 100644
--- a/src/java/net/sf/jabref/external/ExternalFileTypeEntryEditor.java
+++ b/src/java/net/sf/jabref/external/ExternalFileTypeEntryEditor.java
@@ -1,24 +1,22 @@
 package net.sf.jabref.external;
 
-import net.sf.jabref.Globals;
-import net.sf.jabref.Util;
-import net.sf.jabref.GUIGlobals;
+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.DocumentListener;
 import javax.swing.event.DocumentEvent;
+import javax.swing.event.DocumentListener;
+
+import net.sf.jabref.GUIGlobals;
+import net.sf.jabref.Globals;
 
-import com.jgoodies.forms.builder.DefaultFormBuilder;
 import com.jgoodies.forms.builder.ButtonBarBuilder;
+import com.jgoodies.forms.builder.DefaultFormBuilder;
 import com.jgoodies.forms.layout.FormLayout;
 
-import java.awt.event.ActionListener;
-import java.awt.event.ActionEvent;
-import java.awt.event.FocusListener;
-import java.awt.event.FocusEvent;
-import java.awt.*;
-import java.io.File;
-
 /**
  * This class produces a dialog box for editing an external file type.
  */
@@ -80,18 +78,13 @@ public class ExternalFileTypeEntryEditor {
             JPanel p1 = new JPanel();
             builder.append(p1);
             JPanel p2 = new JPanel();
-            DefaultFormBuilder b2 = new DefaultFormBuilder(
-                    new FormLayout("left:pref, 4dlu, fill:pref", ""));
             application.setPreferredSize(new Dimension(300, application.getPreferredSize().height));
             BorderLayout bl = new BorderLayout();
             bl.setHgap(4);
-            //b2.append(other);
-            //b2.append(application);
             p2.setLayout(bl);
             p2.add(other, BorderLayout.WEST);
             p2.add(application, BorderLayout.CENTER);
             builder.append(p2);
-            //builder.append(b2.getPanel());
             builder.append(browseBut);
         } else {
             builder.append(application);
@@ -220,11 +213,9 @@ public class ExternalFileTypeEntryEditor {
     }
 
     class BrowseListener implements ActionListener {
-        private JDialog parent;
         private JTextField comp;
 
         public BrowseListener(JDialog parent, JTextField comp) {
-            this.parent = parent;
             this.comp = comp;
         }
 
diff --git a/src/java/net/sf/jabref/external/FileLinksUpgradeWarning.java b/src/java/net/sf/jabref/external/FileLinksUpgradeWarning.java
index 4a5b409..86e0bfa 100644
--- a/src/java/net/sf/jabref/external/FileLinksUpgradeWarning.java
+++ b/src/java/net/sf/jabref/external/FileLinksUpgradeWarning.java
@@ -1,17 +1,15 @@
 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.*;
 import net.sf.jabref.undo.NamedCompound;
 
-import javax.swing.*;
-import java.awt.event.ActionListener;
-import java.awt.event.ActionEvent;
-import java.util.regex.Pattern;
-import java.util.Iterator;
-import java.util.List;
-
 import com.jgoodies.forms.builder.DefaultFormBuilder;
 import com.jgoodies.forms.layout.FormLayout;
 
@@ -134,8 +132,7 @@ public class FileLinksUpgradeWarning implements PostOpenAction {
      *  false otherwise.
      */
     public boolean linksFound(BibtexDatabase database, String[] fields) {
-        for (Iterator iterator = database.getEntries().iterator(); iterator.hasNext();) {
-            BibtexEntry entry = (BibtexEntry)iterator.next();
+        for (BibtexEntry entry : database.getEntries()){
             for (int i = 0; i < fields.length; i++) {
                 if (entry.getField(fields[i]) != null)
                     return true;
@@ -190,9 +187,9 @@ public class FileLinksUpgradeWarning implements PostOpenAction {
         boolean found = false;
         EntryEditorTabList tabList = Globals.prefs.getEntryEditorTabList();
         outer: for (int i=0; i<tabList.getTabCount(); i++) {
-            List fields = tabList.getTabFields(i);
-            for (Iterator j=fields.iterator(); j.hasNext();) {
-                String field = (String)j.next();
+            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;
diff --git a/src/java/net/sf/jabref/external/IconSelection.java b/src/java/net/sf/jabref/external/IconSelection.java
index 7dd1944..187262b 100644
--- a/src/java/net/sf/jabref/external/IconSelection.java
+++ b/src/java/net/sf/jabref/external/IconSelection.java
@@ -1,16 +1,17 @@
 package net.sf.jabref.external;
 
-import net.sf.jabref.Globals;
-import net.sf.jabref.GUIGlobals;
-
-import javax.swing.*;
-import java.util.*;
-import java.util.List;
-import java.awt.event.ActionListener;
+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.awt.*;
+import java.util.*;
+
+import javax.swing.*;
+
+import net.sf.jabref.GUIGlobals;
+import net.sf.jabref.Globals;
 
 import com.jgoodies.forms.builder.ButtonBarBuilder;
 
@@ -61,10 +62,9 @@ public class IconSelection extends JDialog {
     private void init(String initialSelection) {
         int initSelIndex = -1;
         iconKeys = new ArrayList<String>();
-        Map icns = GUIGlobals.getAllIcons();
+        Map<String, String> icns = GUIGlobals.getAllIcons();
         HashSet<ImageIcon> iconSet = new LinkedHashSet<ImageIcon>();
-        for (Iterator i=icns.keySet().iterator(); i.hasNext();) {
-            String key = (String)i.next();
+        for (String key : icns.keySet()){
             ImageIcon icon = GUIGlobals.getImage(key);
             if (!iconSet.contains(icon)) {
                 iconKeys.add(key);
diff --git a/src/java/net/sf/jabref/external/MoveFileAction.java b/src/java/net/sf/jabref/external/MoveFileAction.java
new file mode 100644
index 0000000..ce815b7
--- /dev/null
+++ b/src/java/net/sf/jabref/external/MoveFileAction.java
@@ -0,0 +1,152 @@
+package net.sf.jabref.external;
+
+import net.sf.jabref.*;
+import net.sf.jabref.gui.FileListEditor;
+import net.sf.jabref.gui.FileListEntry;
+
+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 dir = frame.basePanel().metaData().getFileDirectory(GUIGlobals.FILE_FIELD);
+        File file = Util.expandFilename(ln, new String[]{dir});
+        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) {
+                    String suggName = eEditor.getEntry().getCiteKey()+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(dir);
+                    if (!dir.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();
+                    System.out.println(chosenFile);
+                } else {
+                    chosenFile = Globals.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) {
+                        // Relativise path, if possible.
+                        if (newFile.getPath().startsWith(dir)) {
+                            if ((newFile.getPath().length() > dir.length()) &&
+                                    (newFile.getPath().charAt(dir.length()) == File.separatorChar))
+                                flEntry.setLink(newFile.getPath().substring(1+dir.length()));
+                            else
+                                flEntry.setLink(newFile.getPath().substring(dir.length()));
+
+
+                        }
+                        else
+                            flEntry.setLink(newFile.getCanonicalPath());
+                        eEditor.updateField(editor);
+                        JOptionPane.showMessageDialog(frame, Globals.lang("File moved"),
+                                Globals.lang("Move/Rename file"), JOptionPane.INFORMATION_MESSAGE);
+                    } 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);
+            
+        }
+
+    }
+}
\ No newline at end of file
diff --git a/src/java/net/sf/jabref/external/PushToApplication.java b/src/java/net/sf/jabref/external/PushToApplication.java
index eee97b5..43ca14c 100644
--- a/src/java/net/sf/jabref/external/PushToApplication.java
+++ b/src/java/net/sf/jabref/external/PushToApplication.java
@@ -1,7 +1,9 @@
 package net.sf.jabref.external;
 
-import net.sf.jabref.BibtexEntry;
 import net.sf.jabref.BasePanel;
+import net.sf.jabref.BibtexDatabase;
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.MetaData;
 
 import javax.swing.*;
 
@@ -20,12 +22,37 @@ public interface PushToApplication {
     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(BibtexEntry[] entries, String keyString);
+    public void pushEntries(BibtexDatabase database, BibtexEntry[] entries,
+                            String keyString, MetaData metaData);
 
     /**
      * Reporting etc., this method is called on the event dispatch thread after
diff --git a/src/java/net/sf/jabref/external/PushToApplicationAction.java b/src/java/net/sf/jabref/external/PushToApplicationAction.java
index 7d69397..04753ff 100644
--- a/src/java/net/sf/jabref/external/PushToApplicationAction.java
+++ b/src/java/net/sf/jabref/external/PushToApplicationAction.java
@@ -1,12 +1,16 @@
 package net.sf.jabref.external;
 
-import net.sf.jabref.*;
-
-import javax.swing.*;
 import java.awt.event.ActionEvent;
-import java.awt.*;
-import java.util.List;
-import java.util.Iterator;
+
+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.
@@ -60,7 +64,7 @@ public class PushToApplicationAction extends AbstractAction implements Runnable
 
     public void run() {
         // Do the operation:
-        operation.pushEntries(entries, getKeyString(entries));
+        operation.pushEntries(panel.database(), entries, getKeyString(entries), panel.metaData());
 
         // Call the operationCompleted() method on the event dispatch thread:
         SwingUtilities.invokeLater(new Runnable() {
@@ -76,7 +80,7 @@ public class PushToApplicationAction extends AbstractAction implements Runnable
         boolean first = true;
         for (int i=0; i<entries.length; i++) {
             BibtexEntry bes = entries[i];
-            citeKey = (String) bes.getField(BibtexFields.KEY_FIELD);
+            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;
diff --git a/src/java/net/sf/jabref/external/PushToApplicationButton.java b/src/java/net/sf/jabref/external/PushToApplicationButton.java
index e97e641..3b92c8d 100644
--- a/src/java/net/sf/jabref/external/PushToApplicationButton.java
+++ b/src/java/net/sf/jabref/external/PushToApplicationButton.java
@@ -1,16 +1,25 @@
 package net.sf.jabref.external;
 
-import net.sf.jabref.*;
+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.plugin.PluginCore;
+import net.sf.jabref.plugin.core.JabRefPlugin;
+import net.sf.jabref.plugin.core.generated._JabRefPlugin;
 
 import javax.swing.*;
-import java.util.List;
-import java.util.Iterator;
-import java.util.HashMap;
-import java.util.ArrayList;
 import java.awt.*;
-import java.awt.event.ActionListener;
 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
@@ -21,33 +30,47 @@ import java.net.URL;
  */
 public class PushToApplicationButton implements ActionListener {
 
-    public static List applications;
+    public static List<PushToApplication> applications;
 
     private JabRefFrame frame;
-    private List pushActions;
+    private List<PushToApplication> pushActions;
     private JPanel comp;
     private JButton pushButton, menuButton;
     private int selected = 0;
     private JPopupMenu popup = null;
-    private HashMap actions = new HashMap();
+    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"));
+    private boolean settingsOkPressed = false;
 
     /**
      * Set up the current available choices:
      */
     static {
-      applications = new ArrayList();
-      applications.add(new PushToLyx());
-      applications.add(new PushToEmacs());
-      applications.add(new PushToWinEdt());
-      applications.add(new PushToLatexEditor());
-      applications.add(new PushToVim());
+
+        applications = new ArrayList<PushToApplication>();
+
+        JabRefPlugin jabrefPlugin = JabRefPlugin.getInstance(PluginCore.getManager());
+        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());
+
+        // Finally, sort the entries:
+        //Collections.sort(applications, new PushToApplicationComparator());
     }
 
 
-    public PushToApplicationButton(JabRefFrame frame, List pushActions) {
+    public PushToApplicationButton(JabRefFrame frame, List<PushToApplication> pushActions) {
         this.frame = frame;
         this.pushActions = pushActions;
         init();
@@ -67,7 +90,7 @@ public class PushToApplicationButton implements ActionListener {
         if (Globals.prefs.hasKey("pushToApplication")) {
             String appSelected = Globals.prefs.get("pushToApplication");
             for (int i=0; i<pushActions.size(); i++) {
-                PushToApplication toApp = (PushToApplication)pushActions.get(i);
+                PushToApplication toApp = pushActions.get(i);
                 if (toApp.getName().equals(appSelected)) {
                     selected = i;
                     break;
@@ -77,13 +100,24 @@ public class PushToApplicationButton implements ActionListener {
 
         setSelected(selected);
         pushButton.addActionListener(this);
+        pushButton.addMouseListener(new PushButtonMouseListener());
 
         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(toApp, options);
+                }
 
+            }
+        });
     }
 
     /**
@@ -92,8 +126,7 @@ public class PushToApplicationButton implements ActionListener {
     private void buildPopupMenu() {
         popup = new JPopupMenu();
         int j=0;
-        for (Iterator i = pushActions.iterator(); i.hasNext();) {
-            PushToApplication application = (PushToApplication) i.next();
+        for (PushToApplication application : pushActions){
             JMenuItem item = new JMenuItem(application.getApplicationName(),
                     application.getIcon());
             item.addActionListener(new PopupItemActionListener(j));
@@ -108,7 +141,7 @@ public class PushToApplicationButton implements ActionListener {
      */
     private void setSelected(int i) {
         this.selected = i;
-        PushToApplication toApp = (PushToApplication)pushActions.get(i);
+        PushToApplication toApp = pushActions.get(i);
         pushButton.setIcon(toApp.getIcon());
         pushButton.setToolTipText(toApp.getTooltip());
         pushButton.setPreferredSize(buttonDim);
@@ -129,10 +162,10 @@ public class PushToApplicationButton implements ActionListener {
     }
 
     public void actionPerformed(ActionEvent e) {
-        PushToApplication toApp = (PushToApplication)pushActions.get(selected);
+        PushToApplication toApp = pushActions.get(selected);
 
         // Lazy initialization of the push action:
-        PushToApplicationAction action = (PushToApplicationAction)actions.get(toApp);
+        PushToApplicationAction action = actions.get(toApp);
         if (action == null) {
             action = new PushToApplicationAction(frame, toApp);
             actions.put(toApp, action);
@@ -140,6 +173,51 @@ public class PushToApplicationButton implements ActionListener {
         action.actionPerformed(new ActionEvent(toApp, 0, "push"));
     }
 
+    private void showSettingsDialog(PushToApplication toApp, JPanel options) {
+        final JDialog diag = new JDialog(frame, Globals.lang("Settings"), true);
+        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.addGridded(ok);
+        bb.addGridded(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) {
+                settingsOkPressed = 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();
+            }
+        });
+        settingsOkPressed = false;
+        diag.pack();
+        diag.setLocationRelativeTo(frame);
+        // Show the dialog:
+        diag.setVisible(true);
+        // If the user pressed Ok, ask the PushToApplication implementation
+        // to store its settings:
+        if (settingsOkPressed) {
+            toApp.storeSettings();
+        }
+    }
+
     class PopupItemActionListener implements ActionListener {
         private int index;
         public PopupItemActionListener(int index) {
@@ -150,7 +228,7 @@ public class PushToApplicationButton implements ActionListener {
             // Change the selection:
             setSelected(index);
             // Invoke the selected operation (is that expected behaviour?):
-            PushToApplicationButton.this.actionPerformed(null);
+            //PushToApplicationButton.this.actionPerformed(null);
             // It makes sense to transfer focus to the push button after the
             // menu closes:
             pushButton.requestFocus();
@@ -184,4 +262,39 @@ public class PushToApplicationButton implements ActionListener {
         }
     }
 
+    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 a13397d..dd057a2 100644
--- a/src/java/net/sf/jabref/external/PushToEmacs.java
+++ b/src/java/net/sf/jabref/external/PushToEmacs.java
@@ -1,13 +1,14 @@
 package net.sf.jabref.external;
 
-import net.sf.jabref.*;
-
-import javax.swing.*;
-import java.util.List;
 import java.io.IOException;
-import java.io.OutputStream;
 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
@@ -17,6 +18,9 @@ import java.io.InputStream;
  */
 public class PushToEmacs implements PushToApplication {
 
+    private JPanel settings = null;
+    private JTextField citeCommand = new JTextField(30);
+
     private boolean couldNotConnect=false, couldNotRunClient=false;
 
     public String getName() {
@@ -39,7 +43,26 @@ public class PushToEmacs implements PushToApplication {
         return "Push to Emacs";
     }
 
-    public void pushEntries(BibtexEntry[] entries, String keys) {
+    public JPanel getSettingsPanel() {
+        if (settings == null)
+            initSettingsPanel();
+        citeCommand.setText(Globals.prefs.get("citeCommandEmacs"));
+        return settings;
+    }
+
+    public void storeSettings() {
+        Globals.prefs.put("citeCommandEmacs", citeCommand.getText());
+    }
+
+    private void initSettingsPanel() {
+        DefaultFormBuilder builder = new DefaultFormBuilder(
+                new FormLayout("left:pref, 4dlu, fill:pref", ""));
+        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;
@@ -50,7 +73,7 @@ public class PushToEmacs implements PushToApplication {
                 // so cmd receives: (insert \"\\cite{Blah2001}\")
                 // so emacs receives: (insert "\cite{Blah2001}")
                 new String[] {"gnuclient", "-qe",
-                "(insert \\\"\\\\" + Globals.prefs.get("citeCommand") +
+                "(insert \\\"\\\\" + Globals.prefs.get("citeCommandEmacs").replaceAll("\\\\", "\\\\\\\\") +
                         "{" + keys + "}\\\")"}
             :
                 // Linux gnuclient escaping:
@@ -58,7 +81,7 @@ public class PushToEmacs implements PushToApplication {
                 // so sh receives: (insert "\\cite{Blah2001}")
                 // so emacs receives: (insert "\cite{Blah2001}")
                 new String[] {"gnuclient", "-batch", "-eval",
-                "(insert \"\\\\" + Globals.prefs.get("citeCommand") +
+                "(insert \"" + Globals.prefs.get("citeCommandEmacs").replaceAll("\\\\", "\\\\\\\\") +
                        "{" + keys + "}\")"};
 
             final Process p = Runtime.getRuntime().exec(com);
diff --git a/src/java/net/sf/jabref/external/PushToLatexEditor.java b/src/java/net/sf/jabref/external/PushToLatexEditor.java
index dc5da9a..e56d6c8 100644
--- a/src/java/net/sf/jabref/external/PushToLatexEditor.java
+++ b/src/java/net/sf/jabref/external/PushToLatexEditor.java
@@ -1,24 +1,23 @@
 package net.sf.jabref.external;
 
-import net.sf.jabref.BasePanel;
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.Globals;
-import net.sf.jabref.GUIGlobals;
+import java.io.IOException;
 
 import javax.swing.*;
-import java.io.IOException;
+
+import net.sf.jabref.*;
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+import com.jgoodies.forms.layout.FormLayout;
 
 /**
- * Created by IntelliJ IDEA.
- * User: alver
- * Date: Apr 4, 2006
- * Time: 10:14:04 PM
- * To change this template use File | Settings | File Templates.
+ * 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");
@@ -40,7 +39,7 @@ public class PushToLatexEditor implements PushToApplication {
         return null;
     }
 
-    public void pushEntries(BibtexEntry[] entries, String keyString) {
+    public void pushEntries(BibtexDatabase database, BibtexEntry[] entries, String keyString, MetaData metaData) {
 
         couldNotCall = false;
         notDefined = false;
@@ -53,8 +52,8 @@ public class PushToLatexEditor implements PushToApplication {
         }
 
         try {
-            StringBuffer toSend = new StringBuffer("-i \\")
-                    .append(Globals.prefs.get("citeCommand")).append("{")
+            StringBuffer toSend = new StringBuffer("-i ")
+                    .append(Globals.prefs.get("citeCommandLed")).append("{")
                     .append(keyString)
                     .append("}");
             Runtime.getRuntime().exec(led + " " + toSend.toString());
@@ -77,10 +76,38 @@ public class PushToLatexEditor implements PushToApplication {
                     +Globals.prefs.get("latexEditorPath") + "'.");
         }
         else
-            Globals.lang("Pushed citations to WinEdt");
+            Globals.lang("Pushed citations to %0", "LatexEditor");
     }
 
     public boolean requiresBibtexKeys() {
-        return false;  //To change body of implemented methods use File | Settings | File Templates.
+        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 743554e..811a87a 100644
--- a/src/java/net/sf/jabref/external/PushToLyx.java
+++ b/src/java/net/sf/jabref/external/PushToLyx.java
@@ -1,18 +1,24 @@
 package net.sf.jabref.external;
 
-import net.sf.jabref.*;
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
 
 import javax.swing.*;
-import java.io.*;
-import java.awt.event.*;
+
+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(final BibtexEntry[] entries, final String keyString) {
+    public void pushEntries(BibtexDatabase database, final BibtexEntry[] entries, final String keyString, MetaData metaData) {
 
         couldNotFindPipe = false;
         couldNotWrite = false;
@@ -94,6 +100,22 @@ public class PushToLyx implements PushToApplication {
         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) {
diff --git a/src/java/net/sf/jabref/external/PushToVim.java b/src/java/net/sf/jabref/external/PushToVim.java
index 16f65dd..6688d8d 100644
--- a/src/java/net/sf/jabref/external/PushToVim.java
+++ b/src/java/net/sf/jabref/external/PushToVim.java
@@ -1,13 +1,12 @@
 package net.sf.jabref.external;
 
-import net.sf.jabref.BasePanel;
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.Globals;
-import net.sf.jabref.GUIGlobals;
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+import com.jgoodies.forms.layout.FormLayout;
+import net.sf.jabref.*;
 
 import javax.swing.*;
-import java.io.InputStream;
 import java.io.IOException;
+import java.io.InputStream;
 
 /**
  * Created by IntelliJ IDEA.
@@ -18,6 +17,11 @@ import java.io.IOException;
  */
 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() {
@@ -40,13 +44,48 @@ public class PushToVim implements PushToApplication {
         return null;
     }
 
-    public void pushEntries(BibtexEntry[] entries, String keys) {
+    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("citeCommand") +
+                "<C-\\><C-N>a" + Globals.prefs.get("citeCommandVim") +
                        "{" + keys + "}"};
 
             final Process p = Runtime.getRuntime().exec(com);
diff --git a/src/java/net/sf/jabref/external/PushToWinEdt.java b/src/java/net/sf/jabref/external/PushToWinEdt.java
index d454a77..6f16e09 100644
--- a/src/java/net/sf/jabref/external/PushToWinEdt.java
+++ b/src/java/net/sf/jabref/external/PushToWinEdt.java
@@ -1,26 +1,20 @@
 package net.sf.jabref.external;
 
-import net.sf.jabref.BasePanel;
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.GUIGlobals;
-import net.sf.jabref.Globals;
+import java.io.IOException;
 
 import javax.swing.*;
-import java.util.List;
-import java.util.Iterator;
-import java.io.IOException;
 
-/**
- * Created by IntelliJ IDEA.
- * User: alver
- * Date: Apr 4, 2006
- * Time: 10:01:44 PM
- * To change this template use File | Settings | File Templates.
- */
+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");
@@ -42,7 +36,7 @@ public class PushToWinEdt implements PushToApplication {
         return "Push to WinEdt";
     }
 
-    public void pushEntries(BibtexEntry[] entries, String keyString) {
+    public void pushEntries(BibtexDatabase database, BibtexEntry[] entries, String keyString, MetaData metaData) {
 
         couldNotCall = false;
         notDefined = false;
@@ -54,8 +48,8 @@ public class PushToWinEdt implements PushToApplication {
         }
 
         try {
-            StringBuffer toSend = new StringBuffer("\"[InsText('\\")
-                    .append(Globals.prefs.get("citeCommand")).append("{")
+            StringBuffer toSend = new StringBuffer("\"[InsText('")
+                    .append(Globals.prefs.get("citeCommandWinEdt")).append("{")
                     .append(keyString.replaceAll("'", "''"))
                     .append("}');]\"");
             Runtime.getRuntime().exec(winEdt + " " + toSend.toString());
@@ -86,4 +80,32 @@ public class PushToWinEdt implements PushToApplication {
     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/SynchronizeFileField.java b/src/java/net/sf/jabref/external/SynchronizeFileField.java
index 957d744..31c3488 100644
--- a/src/java/net/sf/jabref/external/SynchronizeFileField.java
+++ b/src/java/net/sf/jabref/external/SynchronizeFileField.java
@@ -1,20 +1,22 @@
 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.*;
+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.util.*;
-import java.io.File;
-import java.awt.event.ActionListener;
-import java.awt.event.ActionEvent;
 import java.awt.*;
-
-import com.jgoodies.forms.layout.FormLayout;
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-import com.jgoodies.forms.builder.ButtonBarBuilder;
+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
@@ -32,19 +34,19 @@ public class SynchronizeFileField extends AbstractWorker {
             {Globals.lang("Ignore"), Globals.lang("Assign new file"), Globals.lang("Remove link"),
                     Globals.lang("Quit synchronization")};
 
-    private boolean goOn = true, autoSet = true, overWriteAllowed = true, checkExisting = true;
+    private boolean goOn = true, autoSet = true, checkExisting = true;
 
-    private int skipped = 0, brokenLinks = 0, entriesChangedCount = 0;
+    private int brokenLinks = 0, entriesChangedCount = 0;
 
     public SynchronizeFileField(BasePanel panel) {
         this.panel = panel;
     }
 
     public void init() {
+        Collection<BibtexEntry> col = panel.database().getEntries();
         goOn = true;
-        Collection col = panel.database().getEntries();
         sel = new BibtexEntry[col.size()];
-        sel = (BibtexEntry[]) col.toArray(sel);
+        sel = col.toArray(sel);
 
         // Ask about rules for the operation:
         if (optDiag == null)
@@ -56,7 +58,6 @@ public class SynchronizeFileField extends AbstractWorker {
             return;
         }
         autoSet = !optDiag.autoSetNone.isSelected();
-        overWriteAllowed = optDiag.autoSetAll.isSelected();
         checkExisting = optDiag.checkLinks.isSelected();
         
         panel.output(Globals.lang("Synchronizing %0 links...", fieldName.toUpperCase()));
@@ -74,7 +75,6 @@ public class SynchronizeFileField extends AbstractWorker {
                 + (checkExisting ? sel.length : 0);
         panel.frame().setProgressBarMaximum(progressBarMax);
         int progress = 0;
-        skipped = 0;
         brokenLinks = 0;
         final NamedCompound ce = new NamedCompound(Globals.lang("Autoset %0 field", fieldName));
 
@@ -137,11 +137,11 @@ public class SynchronizeFileField extends AbstractWorker {
             mainLoop:
             for (int i = 0; i < sel.length; i++) {
                 panel.frame().setProgressBarValue(progress++);
-                final Object old = sel[i].getField(fieldName);
+                final String old = sel[i].getField(fieldName);
                 // Check if a extension is set:
                 if ((old != null) && !old.equals("")) {
                     FileListTableModel tableModel = new FileListTableModel();
-                    tableModel.setContentDontGuessTypes((String)old);
+                    tableModel.setContentDontGuessTypes(old);
                     for (int j=0; j<tableModel.getRowCount(); j++) {
                         FileListEntry flEntry = tableModel.getEntry(j);
                         // See if the link looks like an URL:
@@ -271,14 +271,12 @@ public class SynchronizeFileField extends AbstractWorker {
                 cancel = new JButton(Globals.lang("Cancel"));
         JLabel description;
         private boolean canceled = true;
-        private String fieldName;
         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");
-            this.fieldName = fieldName;
             ok.addActionListener(new ActionListener() {
                 public void actionPerformed(ActionEvent e) {
                     canceled = false;
diff --git a/src/java/net/sf/jabref/external/UnknownExternalFileType.java b/src/java/net/sf/jabref/external/UnknownExternalFileType.java
index 761958c..571a119 100644
--- a/src/java/net/sf/jabref/external/UnknownExternalFileType.java
+++ b/src/java/net/sf/jabref/external/UnknownExternalFileType.java
@@ -1,6 +1,5 @@
 package net.sf.jabref.external;
 
-import net.sf.jabref.GUIGlobals;
 
 /**
  * This subclass of ExternalFileType is used to mark types that are unknown.
diff --git a/src/java/net/sf/jabref/external/UpgradeExternalLinks.java b/src/java/net/sf/jabref/external/UpgradeExternalLinks.java
index 6372c3e..347821e 100644
--- a/src/java/net/sf/jabref/external/UpgradeExternalLinks.java
+++ b/src/java/net/sf/jabref/external/UpgradeExternalLinks.java
@@ -1,10 +1,10 @@
 package net.sf.jabref.external;
 
+import javax.swing.JOptionPane;
+
 import net.sf.jabref.*;
 import net.sf.jabref.undo.NamedCompound;
 
-import javax.swing.*;
-
 /**
  * Action for upgrading old-style (pre 2.3) PS/PDF links to the new "file" field.
  */
diff --git a/src/java/net/sf/jabref/external/WriteXMPAction.java b/src/java/net/sf/jabref/external/WriteXMPAction.java
index f9e6097..409080b 100644
--- a/src/java/net/sf/jabref/external/WriteXMPAction.java
+++ b/src/java/net/sf/jabref/external/WriteXMPAction.java
@@ -9,18 +9,7 @@ import java.io.File;
 import java.util.List;
 import java.util.ArrayList;
 
-import javax.swing.AbstractAction;
-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.JFrame;
-import javax.swing.JOptionPane;
-import javax.swing.JPanel;
-import javax.swing.JScrollPane;
-import javax.swing.JTextArea;
+import javax.swing.*;
 
 import net.sf.jabref.*;
 import net.sf.jabref.gui.FileListTableModel;
@@ -34,8 +23,8 @@ 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: mortenalver $
- * @version $Revision: 2352 $ ($Date: 2007-09-14 18:23:14 +0200 (Fri, 14 Sep 2007) $)
+ * @author $Author: coezbek $
+ * @version $Revision: 2488 $ ($Date: 2007-11-14 01:25:31 +0100 (Wed, 14 Nov 2007) $)
  * 
  */
 public class WriteXMPAction extends AbstractWorker {
@@ -111,7 +100,7 @@ public class WriteXMPAction extends AbstractWorker {
             List<File> files = new ArrayList<File>();
 
             // First check the (legacy) "pdf" field:
-            String pdf = (String) entry.getField("pdf");
+            String pdf = entry.getField("pdf");
             String dir = panel.metaData().getFileDirectory("pdf");
             File f = Util.expandFilename(pdf, new String[]{dir,"."});
             if (f != null)
@@ -119,7 +108,7 @@ public class WriteXMPAction extends AbstractWorker {
 
             // Then check the "file" field:
             dir = panel.metaData().getFileDirectory(GUIGlobals.FILE_FIELD);
-            String field = (String)entry.getField(GUIGlobals.FILE_FIELD);
+            String field = entry.getField(GUIGlobals.FILE_FIELD);
             if (field != null) {
                 FileListTableModel tm = new FileListTableModel();
                 tm.setContent(field);
diff --git a/src/java/net/sf/jabref/external/WriteXMPEntryEditorAction.java b/src/java/net/sf/jabref/external/WriteXMPEntryEditorAction.java
index db932b8..92c30a5 100644
--- a/src/java/net/sf/jabref/external/WriteXMPEntryEditorAction.java
+++ b/src/java/net/sf/jabref/external/WriteXMPEntryEditorAction.java
@@ -38,7 +38,7 @@ public class WriteXMPEntryEditorAction extends AbstractAction {
         List<File> files = new ArrayList<File>();
 
         // First check the (legacy) "pdf" field:
-        String pdf = (String) entry.getField("pdf");
+        String pdf = entry.getField("pdf");
         String dir = panel.metaData().getFileDirectory("pdf");
         File f = Util.expandFilename(pdf, new String[]{dir, "."});
         if (f != null)
@@ -46,7 +46,7 @@ public class WriteXMPEntryEditorAction extends AbstractAction {
 
         // Then check the "file" field:
         dir = panel.metaData().getFileDirectory(GUIGlobals.FILE_FIELD);
-        String field = (String) entry.getField(GUIGlobals.FILE_FIELD);
+        String field = entry.getField(GUIGlobals.FILE_FIELD);
         if (field != null) {
             FileListTableModel tm = new FileListTableModel();
             tm.setContent(field);
diff --git a/src/java/net/sf/jabref/groups/AbstractGroup.java b/src/java/net/sf/jabref/groups/AbstractGroup.java
index 61e838f..98a3cb1 100644
--- a/src/java/net/sf/jabref/groups/AbstractGroup.java
+++ b/src/java/net/sf/jabref/groups/AbstractGroup.java
@@ -26,7 +26,9 @@ import java.util.Map;
 
 import javax.swing.undo.AbstractUndoableEdit;
 
-import net.sf.jabref.*;
+import net.sf.jabref.BibtexDatabase;
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.SearchRule;
 
 /**
  * A group of BibtexEntries.
@@ -142,7 +144,7 @@ public abstract class AbstractGroup {
 	 *            The search options to apply.
 	 * @return true if this group contains the specified entry, false otherwise.
 	 */
-	public abstract boolean contains(Map searchOptions, BibtexEntry entry);
+	public abstract boolean contains(Map<String, String> searchOptions, BibtexEntry entry);
 
 	/**
 	 * @return true if this group contains the specified entry, false otherwise.
diff --git a/src/java/net/sf/jabref/groups/AddToGroupAction.java b/src/java/net/sf/jabref/groups/AddToGroupAction.java
index faa8101..112dfba 100644
--- a/src/java/net/sf/jabref/groups/AddToGroupAction.java
+++ b/src/java/net/sf/jabref/groups/AddToGroupAction.java
@@ -23,12 +23,16 @@ http://www.gnu.org/copyleft/gpl.ja.html
 package net.sf.jabref.groups;
 
 import java.awt.event.ActionEvent;
-import java.util.*;
+import java.util.Enumeration;
+import java.util.Vector;
 
-import javax.swing.*;
+import javax.swing.AbstractAction;
 import javax.swing.undo.AbstractUndoableEdit;
 
-import net.sf.jabref.*;
+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 {
@@ -58,14 +62,14 @@ public class AddToGroupAction extends AbstractAction {
     }
     public void actionPerformed(ActionEvent evt) {
         final BibtexEntry[] entries = m_panel.getSelectedEntries();
-        final Vector removeGroupsNodes = new Vector(); // used only when moving
+        final Vector<GroupTreeNode> removeGroupsNodes = new Vector<GroupTreeNode>(); // used only when moving
         
         if (m_move) {
             // collect warnings for removal
-            Enumeration e = ((GroupTreeNode) m_node.getRoot()).preorderEnumeration();
+            Enumeration<GroupTreeNode> e = ((GroupTreeNode) m_node.getRoot()).preorderEnumeration();
             GroupTreeNode node;
             while (e.hasMoreElements()) {
-                node = (GroupTreeNode) e.nextElement();
+                node = e.nextElement();
                 if (!node.getGroup().supportsRemove())
                     continue;
                 for (int i = 0; i < entries.length; ++i) {
@@ -77,7 +81,7 @@ public class AddToGroupAction extends AbstractAction {
             // 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] = ((GroupTreeNode) removeGroupsNodes.elementAt(i)).getGroup();
+                groups[i] = removeGroupsNodes.elementAt(i).getGroup();
             groups[groups.length-1] = m_node.getGroup();
             if (!Util.warnAssignmentSideEffects(groups,
                     entries, m_panel.getDatabase(), m_panel.frame()))
@@ -99,7 +103,7 @@ public class AddToGroupAction extends AbstractAction {
         if (m_move) {
             // first remove
             for (int i = 0; i < removeGroupsNodes.size(); ++i) {
-                GroupTreeNode node = (GroupTreeNode) removeGroupsNodes.elementAt(i);
+                GroupTreeNode node = removeGroupsNodes.elementAt(i);
                 if (node.getGroup().containsAny(entries))
                     undoAll.addEdit(node.removeFromGroup(entries));
             }
diff --git a/src/java/net/sf/jabref/groups/AllEntriesGroup.java b/src/java/net/sf/jabref/groups/AllEntriesGroup.java
index c59eef9..b4c4083 100644
--- a/src/java/net/sf/jabref/groups/AllEntriesGroup.java
+++ b/src/java/net/sf/jabref/groups/AllEntriesGroup.java
@@ -26,7 +26,10 @@ import java.util.Map;
 
 import javax.swing.undo.AbstractUndoableEdit;
 
-import net.sf.jabref.*;
+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.
@@ -77,7 +80,7 @@ public class AllEntriesGroup extends AbstractGroup implements SearchRule {
         return null;
     }
 
-    public boolean contains(Map searchOptions, BibtexEntry entry) {
+    public boolean contains(Map<String, String> searchOptions, BibtexEntry entry) {
         return true; // contains everything
     }
 
@@ -85,7 +88,7 @@ public class AllEntriesGroup extends AbstractGroup implements SearchRule {
         return new AllEntriesGroup();
     }
 
-    public int applyRule(Map searchStrings, BibtexEntry bibtexEntry) {
+    public int applyRule(Map<String, String> searchStrings, BibtexEntry bibtexEntry) {
         return 1; // contains everything
     }
 
diff --git a/src/java/net/sf/jabref/groups/AndOrSearchRuleSet.java b/src/java/net/sf/jabref/groups/AndOrSearchRuleSet.java
index 408a9d6..a035439 100644
--- a/src/java/net/sf/jabref/groups/AndOrSearchRuleSet.java
+++ b/src/java/net/sf/jabref/groups/AndOrSearchRuleSet.java
@@ -26,9 +26,11 @@
  */
 package net.sf.jabref.groups;
 
-import java.util.*;
+import java.util.Map;
 
-import net.sf.jabref.*;
+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
@@ -43,15 +45,13 @@ class AndOrSearchRuleSet extends SearchRuleSet {
         this.invert = invert;
     }
 
-    public int applyRule(Map searchString, BibtexEntry bibtexEntry) {
+    public int applyRule(Map<String, String> searchString, BibtexEntry bibtexEntry) {
         int score = 0;
-        Enumeration e = ruleSet.elements();
-
+        
         // We let each rule add a maximum of 1 to the score.
-        while (e.hasMoreElements()) {
-            score += (((SearchRule) e.nextElement()).applyRule(searchString,
-                    bibtexEntry) > 0 ? 1 : 0);
-        }
+        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.
diff --git a/src/java/net/sf/jabref/groups/AutoGroupDialog.java b/src/java/net/sf/jabref/groups/AutoGroupDialog.java
index 1059f75..dae7be8 100644
--- a/src/java/net/sf/jabref/groups/AutoGroupDialog.java
+++ b/src/java/net/sf/jabref/groups/AutoGroupDialog.java
@@ -26,15 +26,22 @@
  */
 package net.sf.jabref.groups;
 
-import java.awt.*;
-import java.awt.event.*;
-import java.util.*;
+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 javax.swing.*;
-import javax.swing.event.*;
+import javax.swing.event.CaretEvent;
 import javax.swing.event.CaretListener;
 
-import net.sf.jabref.*;
+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;
 
 /**
@@ -86,7 +93,7 @@ class AutoGroupDialog extends JDialog implements CaretListener {
                 GroupTreeNode autoGroupsRoot = new GroupTreeNode(
                         new ExplicitGroup(Globals.lang("Automatically created groups"),
                         		AbstractGroup.INCLUDING));
-                HashSet hs = null;
+                HashSet<String> hs = null;
                 if (nd.isSelected()) {
                     hs = Util
                             .findDeliminatedWordsInField(panel.getDatabase(),
@@ -96,9 +103,7 @@ class AutoGroupDialog extends JDialog implements CaretListener {
                     hs = Util.findAllWordsInField(panel.getDatabase(), field()
                             .toLowerCase().trim(), remove());
                 }
-                Iterator i = hs.iterator();
-                while (i.hasNext()) {
-                    String keyword = i.next().toString();
+                for (String keyword : hs){
                     KeywordGroup group = new KeywordGroup(keyword, field(),
                             keyword, false, false, AbstractGroup.INDEPENDENT);
                     autoGroupsRoot.add(new GroupTreeNode(group));
diff --git a/src/java/net/sf/jabref/groups/EntryTableTransferHandler.java b/src/java/net/sf/jabref/groups/EntryTableTransferHandler.java
index 08b2315..517c112 100644
--- a/src/java/net/sf/jabref/groups/EntryTableTransferHandler.java
+++ b/src/java/net/sf/jabref/groups/EntryTableTransferHandler.java
@@ -31,9 +31,9 @@ import java.awt.event.InputEvent;
 import java.io.File;
 import java.io.FileWriter;
 import java.io.IOException;
-import java.net.URL;
 import java.net.MalformedURLException;
 import java.net.URISyntaxException;
+import java.net.URL;
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
@@ -117,8 +117,6 @@ public class EntryTableTransferHandler extends TransferHandler {
 	 * Imports the dropped URL or plain text as a new entry in the current
 	 * database.
 	 * 
-	 * @todo It would be nice to support dropping of pdfs onto the table as a
-	 *       way to link them to the corresponding entries.
 	 */
 	public boolean importData(JComponent comp, Transferable t) {
 
@@ -135,7 +133,8 @@ public class EntryTableTransferHandler extends TransferHandler {
 			if (t.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
 				// JOptionPane.showMessageDialog(null, "Received
 				// javaFileListFlavor");
-				List l = (List) t.getTransferData(DataFlavor.javaFileListFlavor);
+				@SuppressWarnings("unchecked")
+				List<File> l = (List<File>) t.getTransferData(DataFlavor.javaFileListFlavor);
 				return handleDraggedFiles(l, dropRow);
 			}
 
@@ -193,7 +192,21 @@ public class EntryTableTransferHandler extends TransferHandler {
 
 	public void exportAsDrag(JComponent comp, InputEvent e, int action) {
 		// action is always LINK
-		super.exportAsDrag(comp, e, DnDConstants.ACTION_LINK);
+        /* 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");
+            }
+        }*/
+        super.exportAsDrag(comp, e, DnDConstants.ACTION_LINK);
 	}
 
 	protected void exportDone(JComponent source, Transferable data, int action) {
@@ -307,11 +320,11 @@ public class EntryTableTransferHandler extends TransferHandler {
 	 * @param dropRow @param dropRow The row in the table where the files were dragged.
      * @return success status for the operation
 	 */
-	private boolean handleDraggedFiles(List files, final int dropRow) {
+	private boolean handleDraggedFiles(List<File> files, final int dropRow) {
 		final String[] fileNames = new String[files.size()];
 		int i = 0;
-		for (Iterator iterator = files.iterator(); iterator.hasNext();) {
-			File file = (File) iterator.next();
+		for (Iterator<File> iterator = files.iterator(); iterator.hasNext();) {
+			File file = iterator.next();
 			fileNames[i] = file.getAbsolutePath();
 			i++;
 		}
@@ -339,7 +352,7 @@ public class EntryTableTransferHandler extends TransferHandler {
 	private void loadOrImportFiles(String[] fileNames, int dropRow) {
 
 		OpenDatabaseAction openAction = new OpenDatabaseAction(frame, false);
-		ArrayList notBibFiles = new ArrayList();
+		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:
diff --git a/src/java/net/sf/jabref/groups/ExplicitGroup.java b/src/java/net/sf/jabref/groups/ExplicitGroup.java
index 2e7fc38..ff4d3e1 100644
--- a/src/java/net/sf/jabref/groups/ExplicitGroup.java
+++ b/src/java/net/sf/jabref/groups/ExplicitGroup.java
@@ -36,11 +36,11 @@ import net.sf.jabref.util.QuotedStringTokenizer;
 public class ExplicitGroup extends AbstractGroup implements SearchRule {
     public static final String ID = "ExplicitGroup:";
 
-    private final Set m_entries;
+    private final Set<BibtexEntry> m_entries;
 
     public ExplicitGroup(String name, int context) {
         super(name, context);
-        m_entries = new HashSet();
+        m_entries = new HashSet<BibtexEntry>();
     }
 
     public static AbstractGroup fromString(String s, BibtexDatabase db,
@@ -101,7 +101,7 @@ public class ExplicitGroup extends AbstractGroup implements SearchRule {
         if (entries.length == 0)
             return null; // nothing to do
 
-        HashSet entriesBeforeEdit = new HashSet(m_entries);
+        HashSet<BibtexEntry> entriesBeforeEdit = new HashSet<BibtexEntry>(m_entries);
         for (int i = 0; i < entries.length; ++i)
             m_entries.add(entries[i]);
 
@@ -116,7 +116,7 @@ public class ExplicitGroup extends AbstractGroup implements SearchRule {
         if (entries.length == 0)
             return null; // nothing to do
 
-        HashSet entriesBeforeEdit = new HashSet(m_entries);
+        HashSet<BibtexEntry> entriesBeforeEdit = new HashSet<BibtexEntry>(m_entries);
         for (int i = 0; i < entries.length; ++i)
             m_entries.remove(entries[i]);
 
@@ -131,11 +131,11 @@ public class ExplicitGroup extends AbstractGroup implements SearchRule {
         return m_entries.contains(entry);
     }
 
-    public boolean contains(Map searchOptions, BibtexEntry entry) {
+    public boolean contains(Map<String, String> searchOptions, BibtexEntry entry) {
         return contains(entry);
     }
 
-    public int applyRule(Map searchStrings, BibtexEntry bibtexEntry) {
+    public int applyRule(Map<String, String> searchStrings, BibtexEntry bibtexEntry) {
         return contains(searchStrings, bibtexEntry) ? 1 : 0;
     }
 
@@ -152,18 +152,18 @@ public class ExplicitGroup extends AbstractGroup implements SearchRule {
         // compare entries assigned to both groups
         if (m_entries.size() != other.m_entries.size())
             return false; // add/remove
-        HashSet keys = new HashSet();
+        HashSet<String> keys = new HashSet<String>();
         BibtexEntry entry;
         String key;
         // compare bibtex keys for all entries that have one
-        for (Iterator it = m_entries.iterator(); it.hasNext(); ) {
-            entry = (BibtexEntry) it.next();
+        for (Iterator<BibtexEntry> it = m_entries.iterator(); it.hasNext(); ) {
+            entry = it.next();
             key = entry.getCiteKey();
             if (key != null)
                 keys.add(key);
         }
-        for (Iterator it = other.m_entries.iterator(); it.hasNext(); ) {
-            entry = (BibtexEntry) it.next();
+        for (Iterator<BibtexEntry> it = other.m_entries.iterator(); it.hasNext(); ) {
+            entry = it.next();
             key = entry.getCiteKey();
             if (key != null)
                 if (!keys.remove(key))
@@ -186,14 +186,14 @@ public class ExplicitGroup extends AbstractGroup implements SearchRule {
         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 sortedKeys = new TreeSet();
-        for (Iterator it = m_entries.iterator(); it.hasNext();) {
-            s = ((BibtexEntry) it.next()).getCiteKey();
+        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 it = sortedKeys.iterator(); it.hasNext();) {
-            sb.append(Util.quote((String) it.next(), SEPARATOR, QUOTE_CHAR)).append(SEPARATOR);
+        for (Iterator<String> it = sortedKeys.iterator(); it.hasNext();) {
+            sb.append(Util.quote(it.next(), SEPARATOR, QUOTE_CHAR)).append(SEPARATOR);
         }
         return sb.toString();
     }
@@ -248,9 +248,9 @@ public class ExplicitGroup extends AbstractGroup implements SearchRule {
      * @param db The database to refresh for.
      */
         public void refreshForNewDatabase(BibtexDatabase db) {
-            Set newSet = new HashSet();
-            for (Iterator i=m_entries.iterator(); i.hasNext();) {
-                BibtexEntry entry = (BibtexEntry)i.next();
+            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()+"'");
@@ -262,4 +262,8 @@ public class ExplicitGroup extends AbstractGroup implements SearchRule {
             m_entries.clear();
             m_entries.addAll(newSet);
         }
+
+		public Set<BibtexEntry> getEntries(){
+			return m_entries;
+		}
 }
diff --git a/src/java/net/sf/jabref/groups/GroupDialog.java b/src/java/net/sf/jabref/groups/GroupDialog.java
index 0928cf8..68b8872 100644
--- a/src/java/net/sf/jabref/groups/GroupDialog.java
+++ b/src/java/net/sf/jabref/groups/GroupDialog.java
@@ -26,21 +26,30 @@
  */
 package net.sf.jabref.groups;
 
-import java.awt.*;
-import java.awt.event.*;
-import java.util.*;
-import java.util.regex.*;
+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.*;
+import javax.swing.event.CaretEvent;
+import javax.swing.event.CaretListener;
 import javax.swing.undo.AbstractUndoableEdit;
 
 import net.sf.jabref.*;
-import net.sf.jabref.search.*;
+import net.sf.jabref.search.SearchExpressionParser;
 import antlr.collections.AST;
 
 import com.jgoodies.forms.builder.DefaultFormBuilder;
-import com.jgoodies.forms.layout.*;
+import com.jgoodies.forms.layout.CellConstraints;
+import com.jgoodies.forms.layout.FormLayout;
 
 /**
  * Dialog for creating or modifying groups. Operates directly on the Vector
@@ -459,13 +468,10 @@ class GroupDialog extends JDialog {
                                 JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
                 if (i == JOptionPane.NO_OPTION)
                         return;
-                BibtexEntry entry;
-                Vector vec = new Vector();
-                for (Iterator it = m_basePanel.database().getEntries().iterator(); it
-                                .hasNext();) {
-                        entry = (BibtexEntry) it.next();
+                Vector<BibtexEntry> vec = new Vector<BibtexEntry>();
+                for (BibtexEntry entry : m_basePanel.database().getEntries()){
                         if (m_editedGroup.contains(entry))
-                                vec.add(entry);
+                        	vec.add(entry);
                 }
                 if (vec.size() > 0) {
                         BibtexEntry[] entries = new BibtexEntry[vec.size()];
diff --git a/src/java/net/sf/jabref/groups/GroupMatcher.java b/src/java/net/sf/jabref/groups/GroupMatcher.java
index 2874c91..db24e98 100644
--- a/src/java/net/sf/jabref/groups/GroupMatcher.java
+++ b/src/java/net/sf/jabref/groups/GroupMatcher.java
@@ -7,12 +7,11 @@ 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 {
+public class GroupMatcher implements Matcher<BibtexEntry> {
 
     public static GroupMatcher INSTANCE = new GroupMatcher();
 
-    public boolean matches(Object object) {
-        BibtexEntry entry = (BibtexEntry)object;
+    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 e6e06cb..280b32c 100644
--- a/src/java/net/sf/jabref/groups/GroupSelector.java
+++ b/src/java/net/sf/jabref/groups/GroupSelector.java
@@ -26,18 +26,64 @@
  */
 package net.sf.jabref.groups;
 
-import java.awt.*;
-import java.awt.event.*;
-import java.util.*;
+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.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 javax.swing.*;
-import javax.swing.event.*;
-import javax.swing.tree.*;
-import javax.swing.undo.*;
-
-import net.sf.jabref.*;
-import net.sf.jabref.search.SearchMatcher;
+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.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.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
@@ -532,7 +578,7 @@ public class GroupSelector extends SidePaneComponent implements
                         searchRules.addRule(((GroupTreeNode) selection[i]
                                         .getLastPathComponent()).getSearchRule());
                 }
-        Hashtable searchOptions = new Hashtable();
+        Hashtable<String, String> searchOptions = new Hashtable<String, String>();
         searchOptions.put("option", "dummy");
         GroupingWorker worker = new GroupingWorker(searchRules, searchOptions);
         worker.getWorker().run();
@@ -550,21 +596,19 @@ public class GroupSelector extends SidePaneComponent implements
 
     class GroupingWorker extends AbstractWorker {
         private SearchRuleSet rules;
-        private Hashtable searchTerm;
-        private ArrayList matches = new ArrayList();
+        private Hashtable<String, String> searchTerm;
+        private ArrayList<BibtexEntry> matches = new ArrayList<BibtexEntry>();
         private boolean showOverlappingGroupsP;
         int hits = 0;
 
-        public GroupingWorker(SearchRuleSet rules, Hashtable searchTerm) {
+        public GroupingWorker(SearchRuleSet rules, Hashtable<String, String> searchTerm) {
             this.rules = rules;
             this.searchTerm = searchTerm;
             showOverlappingGroupsP = showOverlappingGroups.isSelected();
         }
 
         public void run() {
-            Collection entries = panel.getDatabase().getEntries();
-            for (Iterator i = entries.iterator(); i.hasNext();) {
-                BibtexEntry entry = (BibtexEntry) i.next();
+            for (BibtexEntry entry : panel.getDatabase().getEntries()){
                 boolean hit = rules.applyRule(searchTerm, entry) > 0;
                 entry.setGroupHit(hit);
                 if (hit) {
@@ -599,7 +643,7 @@ public class GroupSelector extends SidePaneComponent implements
      * @param node If this is non-null, the view is scrolled to make it visible.
      */
     public void revalidateGroups(TreePath[] selectionPaths,
-            Enumeration expandedNodes) {
+            Enumeration<TreePath> expandedNodes) {
             revalidateGroups(selectionPaths, expandedNodes, null);
     }
 
@@ -609,7 +653,7 @@ public class GroupSelector extends SidePaneComponent implements
      * @param node If this is non-null, the view is scrolled to make it visible.
      */
     public void revalidateGroups(TreePath[] selectionPaths,
-            Enumeration expandedNodes, GroupTreeNode node) {
+            Enumeration<TreePath> expandedNodes, GroupTreeNode node) {
         groupsTreeModel.reload();
         groupsTree.clearSelection();
         if (selectionPaths != null) {
@@ -618,7 +662,7 @@ public class GroupSelector extends SidePaneComponent implements
         // tree is completely collapsed here
         if (expandedNodes != null) {
             while (expandedNodes.hasMoreElements())
-                groupsTree.expandPath((TreePath)expandedNodes.nextElement());
+                groupsTree.expandPath(expandedNodes.nextElement());
         }
         groupsTree.revalidate();
         if (node != null) {
@@ -874,7 +918,7 @@ public class GroupSelector extends SidePaneComponent implements
                         group.getName()));
             }
         }
-    };
+    }
 
     private class RemoveSubgroupsAction extends NodeAction {
         public RemoveSubgroupsAction() {
@@ -900,7 +944,7 @@ public class GroupSelector extends SidePaneComponent implements
                         group.getName()));
             }
         }
-    };
+    }
 
     private class RemoveGroupKeepSubgroupsAction extends NodeAction {
         public RemoveGroupKeepSubgroupsAction() {
@@ -930,7 +974,7 @@ public class GroupSelector extends SidePaneComponent implements
                         group.getName()));
             }
         }
-    };
+    }
 
     public TreePath getSelectionPath() {
         return groupsTree.getSelectionPath();
@@ -964,7 +1008,7 @@ public class GroupSelector extends SidePaneComponent implements
             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) {
@@ -1171,7 +1215,7 @@ public class GroupSelector extends SidePaneComponent implements
         return groupsRoot;
     }
 
-    public Enumeration getExpandedPaths() {
+    public Enumeration<TreePath> getExpandedPaths() {
         return groupsTree.getExpandedDescendants(
                 new TreePath(groupsRoot.getPath()));
     }
@@ -1243,9 +1287,9 @@ public class GroupSelector extends SidePaneComponent implements
         }
         GroupTreeNode node;
         AbstractGroup group;
-        Vector vec = new Vector();
-        for (Enumeration e = groupsRoot.preorderEnumeration(); e.hasMoreElements(); ) {
-            node = (GroupTreeNode) e.nextElement();
+        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) {
@@ -1263,7 +1307,7 @@ public class GroupSelector extends SidePaneComponent implements
         groupsTree.setHighlight3Cells(vec.toArray());
         // ensure that all highlighted nodes are visible
         for (int i = 0; i < vec.size(); ++i) {
-            node = (GroupTreeNode)((GroupTreeNode)vec.elementAt(i)).getParent();
+            node = (GroupTreeNode)vec.elementAt(i).getParent();
             if (node != null)
                 groupsTree.expandPath(new TreePath(node.getPath()));
         }
@@ -1272,17 +1316,17 @@ public class GroupSelector extends SidePaneComponent implements
 
     /** Show groups that, if selected, would show at least one
      * of the entries found in the specified search. */
-    protected void showOverlappingGroups(List matches) { //DatabaseSearch search) {
+    protected void showOverlappingGroups(List<BibtexEntry> matches) { //DatabaseSearch search) {
       GroupTreeNode node;
       SearchRule rule;
       BibtexEntry entry;
-      Vector vec = new Vector();
-      Map dummyMap = new HashMap(); // just because I don't want to use null...
-      for (Enumeration e = groupsRoot.depthFirstEnumeration(); e.hasMoreElements(); ) {
-          node = (GroupTreeNode) e.nextElement();
+      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 it = matches.iterator(); it.hasNext(); ) {
-              entry = (BibtexEntry) it.next();
+          for (Iterator<BibtexEntry> it = matches.iterator(); it.hasNext(); ) {
+              entry = it.next();
               if (rule.applyRule(dummyMap, entry) == 0)
                       continue;
               vec.add(node);
diff --git a/src/java/net/sf/jabref/groups/GroupTreeCellRenderer.java b/src/java/net/sf/jabref/groups/GroupTreeCellRenderer.java
index 81d91cc..ce18ace 100644
--- a/src/java/net/sf/jabref/groups/GroupTreeCellRenderer.java
+++ b/src/java/net/sf/jabref/groups/GroupTreeCellRenderer.java
@@ -22,12 +22,18 @@
 
 package net.sf.jabref.groups;
 
-import java.awt.*;
+import java.awt.Color;
+import java.awt.Component;
 
-import javax.swing.*;
+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.*;
+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
diff --git a/src/java/net/sf/jabref/groups/GroupTreeNode.java b/src/java/net/sf/jabref/groups/GroupTreeNode.java
index b9fc263..f05c26f 100644
--- a/src/java/net/sf/jabref/groups/GroupTreeNode.java
+++ b/src/java/net/sf/jabref/groups/GroupTreeNode.java
@@ -22,15 +22,20 @@
 
 package net.sf.jabref.groups;
 
-import java.awt.datatransfer.*;
+import java.awt.datatransfer.DataFlavor;
 import java.awt.datatransfer.Transferable;
+import java.awt.datatransfer.UnsupportedFlavorException;
 import java.io.IOException;
-import java.util.*;
+import java.util.Enumeration;
+import java.util.Vector;
 
-import javax.swing.tree.*;
+import javax.swing.tree.DefaultMutableTreeNode;
+import javax.swing.tree.TreeNode;
 import javax.swing.undo.AbstractUndoableEdit;
 
-import net.sf.jabref.*;
+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.
@@ -83,10 +88,10 @@ public class GroupTreeNode extends DefaultMutableTreeNode implements
 	 */
 	public String getTreeAsString() {
 		StringBuffer sb = new StringBuffer();
-		Enumeration e = preorderEnumeration();
+		Enumeration<GroupTreeNode> e = preorderEnumeration();
 		GroupTreeNode cursor;
 		while (e.hasMoreElements()) {
-			cursor = (GroupTreeNode) e.nextElement();
+			cursor = e.nextElement();
             sb.append(cursor.getLevel()).append(" ").append(cursor.getGroup().toString()).append("\n");
 		}
 		return sb.toString();
@@ -195,23 +200,47 @@ public class GroupTreeNode extends DefaultMutableTreeNode implements
 		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 matchingGroups = new Vector();
-		Enumeration e = preorderEnumeration();
+		Vector<AbstractGroup> matchingGroups = new Vector<AbstractGroup>();
+		Enumeration<GroupTreeNode> e = preorderEnumeration();
 		AbstractGroup group;
 		while (e.hasMoreElements()) {
-			group = ((GroupTreeNode) e.nextElement()).getGroup();
+			group = (e.nextElement()).getGroup();
 			if (group.contains(null, entry)) // first argument is never used
 				matchingGroups.add(group);
 		}
 		AbstractGroup[] matchingGroupsArray = new AbstractGroup[matchingGroups
 				.size()];
-		return (AbstractGroup[]) matchingGroups.toArray(matchingGroupsArray);
+		return matchingGroups.toArray(matchingGroupsArray);
 	}
 
 	public boolean canMoveUp() {
diff --git a/src/java/net/sf/jabref/groups/GroupsPrefsTab.java b/src/java/net/sf/jabref/groups/GroupsPrefsTab.java
index 8b00528..e7acb63 100644
--- a/src/java/net/sf/jabref/groups/GroupsPrefsTab.java
+++ b/src/java/net/sf/jabref/groups/GroupsPrefsTab.java
@@ -4,11 +4,7 @@ import java.awt.BorderLayout;
 import java.awt.event.FocusEvent;
 import java.awt.event.FocusListener;
 
-import javax.swing.BorderFactory;
-import javax.swing.JCheckBox;
-import javax.swing.JLabel;
-import javax.swing.JPanel;
-import javax.swing.JTextField;
+import javax.swing.*;
 
 import net.sf.jabref.Globals;
 import net.sf.jabref.JabRefPreferences;
diff --git a/src/java/net/sf/jabref/groups/GroupsTree.java b/src/java/net/sf/jabref/groups/GroupsTree.java
index 6209947..b859515 100644
--- a/src/java/net/sf/jabref/groups/GroupsTree.java
+++ b/src/java/net/sf/jabref/groups/GroupsTree.java
@@ -22,18 +22,28 @@
 
 package net.sf.jabref.groups;
 
-import java.awt.*;
-import java.awt.datatransfer.*;
+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.*;
-
-import javax.swing.*;
-import javax.swing.tree.*;
+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.*;
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.Globals;
+import net.sf.jabref.Util;
 
 public class GroupsTree extends JTree implements DragSourceListener,
 		DropTargetListener, DragGestureListener {
@@ -77,7 +87,7 @@ public class GroupsTree extends JTree implements DragSourceListener,
 						DnDConstants.ACTION_MOVE, this);
 		// Eliminates right mouse clicks as valid actions
 		dgr.setSourceActions(dgr.getSourceActions() & ~InputEvent.BUTTON3_MASK);
-		DropTarget dropTarget = new DropTarget(this, this);
+		new DropTarget(this, this);
 		setCellRenderer(cellRenderer);
 		setFocusable(false);
 		setToggleClickCount(0);
@@ -228,7 +238,7 @@ public class GroupsTree extends JTree implements DragSourceListener,
 					dtde.rejectDrop();
 					return;
 				}
-				Enumeration expandedPaths = groupSelector.getExpandedPaths();
+				Enumeration<TreePath> expandedPaths = groupSelector.getExpandedPaths();
 				UndoableMoveGroup undo = new UndoableMoveGroup(groupSelector,
 						groupSelector.getGroupTreeRoot(), source, target,
 						target.getChildCount());
@@ -316,11 +326,11 @@ public class GroupsTree extends JTree implements DragSourceListener,
      *            Paths that may have become invalid.
      * @return Refreshed paths that are all valid.
      */
-    public Enumeration refreshPaths(Enumeration paths) {
-        Vector freshPaths = new Vector();
+    public Enumeration<TreePath> refreshPaths(Enumeration<TreePath> paths) {
+        Vector<TreePath> freshPaths = new Vector<TreePath>();
         while (paths.hasMoreElements()) {
             freshPaths.add(new TreePath(
-                    ((DefaultMutableTreeNode) ((TreePath) paths.nextElement())
+                    ((DefaultMutableTreeNode)paths.nextElement()
                             .getLastPathComponent()).getPath()));
         }
         return freshPaths.elements();
@@ -404,14 +414,14 @@ public class GroupsTree extends JTree implements DragSourceListener,
 
 	/** Expand this node and all its children. */
 	public void expandSubtree(GroupTreeNode node) {
-		for (Enumeration e = node.depthFirstEnumeration(); e.hasMoreElements();)
-			expandPath(new TreePath(((GroupTreeNode) e.nextElement()).getPath()));
+		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 e = node.depthFirstEnumeration(); e.hasMoreElements();)
-			collapsePath(new TreePath(((GroupTreeNode) e.nextElement())
+		for (Enumeration<GroupTreeNode> e = node.depthFirstEnumeration(); e.hasMoreElements();)
+			collapsePath(new TreePath((e.nextElement())
 					.getPath()));
 	}
 
@@ -421,8 +431,8 @@ public class GroupsTree extends JTree implements DragSourceListener,
 	 */
 	public boolean hasExpandedDescendant(TreePath path) {
 		GroupTreeNode node = (GroupTreeNode) path.getLastPathComponent();
-		for (Enumeration e = node.children(); e.hasMoreElements();) {
-			GroupTreeNode child = (GroupTreeNode) e.nextElement();
+		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);
@@ -438,8 +448,8 @@ public class GroupsTree extends JTree implements DragSourceListener,
 	 */
 	public boolean hasCollapsedDescendant(TreePath path) {
 		GroupTreeNode node = (GroupTreeNode) path.getLastPathComponent();
-		for (Enumeration e = node.children(); e.hasMoreElements();) {
-			GroupTreeNode child = (GroupTreeNode) e.nextElement();
+		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);
diff --git a/src/java/net/sf/jabref/groups/KeywordGroup.java b/src/java/net/sf/jabref/groups/KeywordGroup.java
index 58d28a9..da390ef 100644
--- a/src/java/net/sf/jabref/groups/KeywordGroup.java
+++ b/src/java/net/sf/jabref/groups/KeywordGroup.java
@@ -23,12 +23,14 @@
 package net.sf.jabref.groups;
 
 import java.util.Map;
-import java.util.regex.*;
+import java.util.regex.Pattern;
+import java.util.regex.PatternSyntaxException;
 
 import javax.swing.undo.AbstractUndoableEdit;
 
 import net.sf.jabref.*;
-import net.sf.jabref.undo.*;
+import net.sf.jabref.undo.NamedCompound;
+import net.sf.jabref.undo.UndoableFieldChange;
 import net.sf.jabref.util.QuotedStringTokenizer;
 
 /**
@@ -156,7 +158,7 @@ public class KeywordGroup extends AbstractGroup implements SearchRule {
 			boolean modified = false;
 			for (int i = 0; i < entries.length; i++) {
 				if (applyRule(null, entries[i]) == 0) {
-					String oldContent = (String) entries[i]
+					String oldContent = entries[i]
 							.getField(m_searchField), 
 							pre = Globals.prefs.get("groupKeywordSeparator");
 					String newContent = (oldContent == null ? "" : oldContent
@@ -189,7 +191,7 @@ public class KeywordGroup extends AbstractGroup implements SearchRule {
 			boolean modified = false;
 			for (int i = 0; i < entries.length; ++i) {
 				if (applyRule(null, entries[i]) > 0) {
-					String oldContent = (String) entries[i]
+					String oldContent = entries[i]
 							.getField(m_searchField);
 					removeMatches(entries[i]);
 					// Store undo information.
@@ -226,12 +228,12 @@ public class KeywordGroup extends AbstractGroup implements SearchRule {
 	 * @see net.sf.jabref.groups.AbstractGroup#contains(java.util.Map,
 	 *      net.sf.jabref.BibtexEntry)
 	 */
-	public boolean contains(Map searchOptions, BibtexEntry entry) {
+	public boolean contains(Map<String, String> searchOptions, BibtexEntry entry) {
 		return contains(entry);
 	}
 
 	public boolean contains(BibtexEntry entry) {
-		String content = (String) entry.getField(m_searchField);
+		String content = entry.getField(m_searchField);
 		if (content == null)
 			return false;
 		if (m_regExp)
@@ -247,7 +249,7 @@ public class KeywordGroup extends AbstractGroup implements SearchRule {
 	 * possible if the search expression is not a regExp.
 	 */
 	private void removeMatches(BibtexEntry entry) {
-		String content = (String) entry.getField(m_searchField);
+		String content = entry.getField(m_searchField);
 		if (content == null)
 			return; // nothing to modify
 		StringBuffer sbOrig = new StringBuffer(content);
@@ -275,7 +277,7 @@ public class KeywordGroup extends AbstractGroup implements SearchRule {
 		entry.setField(m_searchField, (result.length() > 0 ? result : null));
 	}
 
-	public int applyRule(Map searchOptions, BibtexEntry entry) {
+	public int applyRule(Map<String, String> searchOptions, BibtexEntry entry) {
 		return contains(searchOptions, entry) ? 1 : 0;
 	}
 
diff --git a/src/java/net/sf/jabref/groups/RemoveFromGroupAction.java b/src/java/net/sf/jabref/groups/RemoveFromGroupAction.java
index 629037d..621b5ff 100644
--- a/src/java/net/sf/jabref/groups/RemoveFromGroupAction.java
+++ b/src/java/net/sf/jabref/groups/RemoveFromGroupAction.java
@@ -27,7 +27,9 @@ import java.awt.event.ActionEvent;
 import javax.swing.AbstractAction;
 import javax.swing.undo.AbstractUndoableEdit;
 
-import net.sf.jabref.*;
+import net.sf.jabref.BasePanel;
+import net.sf.jabref.Globals;
+import net.sf.jabref.Util;
 
 public class RemoveFromGroupAction extends AbstractAction {
     protected GroupTreeNode m_node;
diff --git a/src/java/net/sf/jabref/groups/SearchGroup.java b/src/java/net/sf/jabref/groups/SearchGroup.java
index ddd3fe9..f8409b9 100644
--- a/src/java/net/sf/jabref/groups/SearchGroup.java
+++ b/src/java/net/sf/jabref/groups/SearchGroup.java
@@ -23,13 +23,17 @@
 package net.sf.jabref.groups;
 
 import java.io.StringReader;
-import java.util.*;
+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.*;
+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;
@@ -202,16 +206,16 @@ public class SearchGroup extends AbstractGroup implements SearchRule {
 	 * @see net.sf.jabref.groups.AbstractGroup#contains(java.util.Map,
 	 *      net.sf.jabref.BibtexEntry)
 	 */
-	public boolean contains(Map searchOptions, BibtexEntry entry) {
+	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(), entry);
+		return contains(new HashMap<String, String>(), entry);
 	}
 
-	public int applyRule(Map searchOptions, BibtexEntry 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.
diff --git a/src/java/net/sf/jabref/groups/TransferableEntrySelection.java b/src/java/net/sf/jabref/groups/TransferableEntrySelection.java
index 9aaeb4d..038bb08 100644
--- a/src/java/net/sf/jabref/groups/TransferableEntrySelection.java
+++ b/src/java/net/sf/jabref/groups/TransferableEntrySelection.java
@@ -22,12 +22,12 @@
 
 package net.sf.jabref.groups;
 
-import java.awt.datatransfer.*;
-import java.io.*;
+import java.awt.datatransfer.DataFlavor;
+import java.awt.datatransfer.Transferable;
+import java.awt.datatransfer.UnsupportedFlavorException;
+import java.io.ByteArrayInputStream;
 import java.io.IOException;
 
-import javax.print.FlavorException;
-
 import net.sf.jabref.BibtexEntry;
 
 public class TransferableEntrySelection implements Transferable {
diff --git a/src/java/net/sf/jabref/groups/UndoableChangeAssignment.java b/src/java/net/sf/jabref/groups/UndoableChangeAssignment.java
index c2de990..d86d569 100644
--- a/src/java/net/sf/jabref/groups/UndoableChangeAssignment.java
+++ b/src/java/net/sf/jabref/groups/UndoableChangeAssignment.java
@@ -22,19 +22,22 @@
 
 package net.sf.jabref.groups;
 
-import java.util.*;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
 
 import javax.swing.undo.AbstractUndoableEdit;
 
-import net.sf.jabref.*;
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.Globals;
 
 /**
  * @author jzieren
  * 
  */
 public class UndoableChangeAssignment extends AbstractUndoableEdit {
-    private final Set m_previousAssignmentBackup;
-    private final Set m_newAssignmentBackup;
+    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 */
@@ -48,14 +51,14 @@ public class UndoableChangeAssignment extends AbstractUndoableEdit {
      * @param previousAssignment
      * @param currentAssignment
      */
-    public UndoableChangeAssignment(Set previousAssignment,
-            Set currentAssignment) {
-        m_previousAssignmentBackup = new HashSet(previousAssignment);
-        m_newAssignmentBackup = new HashSet(currentAssignment);
+    public UndoableChangeAssignment(Set<BibtexEntry> previousAssignment,
+            Set<BibtexEntry> currentAssignment) {
+        m_previousAssignmentBackup = new HashSet<BibtexEntry>(previousAssignment);
+        m_newAssignmentBackup = new HashSet<BibtexEntry>(currentAssignment);
     }
 
-    public UndoableChangeAssignment(Set previousAssignment,
-            Set currentAssignment, GroupTreeNode node) {
+    public UndoableChangeAssignment(Set<BibtexEntry> previousAssignment,
+            Set<BibtexEntry> currentAssignment, GroupTreeNode node) {
         this(previousAssignment, currentAssignment);
         setEditedNode(node);
     }
@@ -88,8 +91,8 @@ public class UndoableChangeAssignment extends AbstractUndoableEdit {
         ExplicitGroup group = (ExplicitGroup) m_groupsRootHandle.getChildAt(
                 m_pathToNode).getGroup();
         group.clearAssignments();
-        for (Iterator it = m_previousAssignmentBackup.iterator(); it.hasNext();)
-            group.addEntry((BibtexEntry) it.next());
+        for (Iterator<BibtexEntry> it = m_previousAssignmentBackup.iterator(); it.hasNext();)
+            group.addEntry(it.next());
     }
 
     public void redo() {
@@ -97,7 +100,7 @@ public class UndoableChangeAssignment extends AbstractUndoableEdit {
         ExplicitGroup group = (ExplicitGroup) m_groupsRootHandle.getChildAt(
                 m_pathToNode).getGroup();
         group.clearAssignments();
-        for (Iterator it = m_newAssignmentBackup.iterator(); it.hasNext();)
-            group.addEntry((BibtexEntry) it.next());
+        for (Iterator<BibtexEntry> it = m_newAssignmentBackup.iterator(); it.hasNext();)
+            group.addEntry(it.next());
     }
 }
diff --git a/src/java/net/sf/jabref/groups/UndoableModifySubtree.java b/src/java/net/sf/jabref/groups/UndoableModifySubtree.java
index 3609cfb..4b6c8da 100644
--- a/src/java/net/sf/jabref/groups/UndoableModifySubtree.java
+++ b/src/java/net/sf/jabref/groups/UndoableModifySubtree.java
@@ -28,6 +28,7 @@ package net.sf.jabref.groups;
 
 import java.util.Vector;
 
+import javax.swing.tree.TreeNode;
 import javax.swing.undo.AbstractUndoableEdit;
 
 import net.sf.jabref.Globals;
@@ -39,7 +40,7 @@ public class UndoableModifySubtree extends AbstractUndoableEdit {
     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 m_modifiedSubtree = new Vector();
+    private Vector<TreeNode> m_modifiedSubtree = new Vector<TreeNode>();
     private boolean m_revalidate = true;
     private final String m_name;
 
diff --git a/src/java/net/sf/jabref/groups/VersionHandling.java b/src/java/net/sf/jabref/groups/VersionHandling.java
index 57584a6..05cb333 100644
--- a/src/java/net/sf/jabref/groups/VersionHandling.java
+++ b/src/java/net/sf/jabref/groups/VersionHandling.java
@@ -24,7 +24,9 @@ package net.sf.jabref.groups;
 
 import java.util.Vector;
 
-import net.sf.jabref.*;
+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
@@ -41,27 +43,27 @@ public class VersionHandling {
      * 
      * @return the root of the generated tree.
      */
-    public static GroupTreeNode importFlatGroups(Vector groups)
+    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 = (String) groups.elementAt(3 * i + 0);
-            name = (String) groups.elementAt(3 * i + 1);
-            regexp = (String) groups.elementAt(3 * i + 2);
+            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 orderedData,
+    public static GroupTreeNode importGroups(Vector<String> orderedData,
             BibtexDatabase db, int version) throws Exception {
         switch (version) {
         case 0:
         case 1:
-            return Version0_1.fromString((String) orderedData.firstElement(),
+            return Version0_1.fromString(orderedData.firstElement(),
                     db, version);
         case 2:
         case 3:
@@ -172,7 +174,7 @@ public class VersionHandling {
     }
     
     private static class Version2_3 {
-        private static GroupTreeNode fromString(Vector data, BibtexDatabase db,
+        private static GroupTreeNode fromString(Vector<String> data, BibtexDatabase db,
                 int version) throws Exception {
             GroupTreeNode cursor = null;
             GroupTreeNode root = null;
diff --git a/src/java/net/sf/jabref/gui/AttachFileDialog.java b/src/java/net/sf/jabref/gui/AttachFileDialog.java
index d059390..396018f 100644
--- a/src/java/net/sf/jabref/gui/AttachFileDialog.java
+++ b/src/java/net/sf/jabref/gui/AttachFileDialog.java
@@ -1,16 +1,19 @@
 package net.sf.jabref.gui;
 
-import net.sf.jabref.*;
-import net.sf.jabref.external.ExternalFilePanel;
+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 java.awt.*;
-import java.awt.event.ActionListener;
-import java.awt.event.ActionEvent;
 
-import com.jgoodies.forms.layout.FormLayout;
-import com.jgoodies.forms.builder.DefaultFormBuilder;
+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.
@@ -39,7 +42,7 @@ public class AttachFileDialog extends JDialog {
         this.metaData = metaData;
         this.entry = entry;
         this.fieldName = fieldName;
-        this.editor = new FieldTextField(fieldName, (String)entry.getField(fieldName), false);
+        this.editor = new FieldTextField(fieldName, entry.getField(fieldName), false);
 
         initGui();
     }
@@ -49,7 +52,7 @@ public class AttachFileDialog extends JDialog {
         this.metaData = metaData;
         this.entry = entry;
         this.fieldName = fieldName;
-        this.editor = new FieldTextField(fieldName, (String)entry.getField(fieldName), false);
+        this.editor = new FieldTextField(fieldName, entry.getField(fieldName), false);
 
         initGui();
     }
diff --git a/src/java/net/sf/jabref/gui/AutoCompleteListener.java b/src/java/net/sf/jabref/gui/AutoCompleteListener.java
index 7ca9197..9deb062 100644
--- a/src/java/net/sf/jabref/gui/AutoCompleteListener.java
+++ b/src/java/net/sf/jabref/gui/AutoCompleteListener.java
@@ -90,7 +90,7 @@ public class AutoCompleteListener extends KeyAdapter {
                 }
             }
 
-            if ((toSetIn != null) && ((toSetIn.length() < 1) ||
+            if ((toSetIn != null) && ((toSetIn.length() <= 1) ||
                     (ch != toSetIn.charAt(1)))) {
                 // User discontinues the word that was suggested.
                 lastBeginning = lastBeginning + ch;
diff --git a/src/java/net/sf/jabref/gui/AutoCompleter.java b/src/java/net/sf/jabref/gui/AutoCompleter.java
index 8cca0dc..d0bcdac 100644
--- a/src/java/net/sf/jabref/gui/AutoCompleter.java
+++ b/src/java/net/sf/jabref/gui/AutoCompleter.java
@@ -1,10 +1,9 @@
 package net.sf.jabref.gui;
 
-import net.sf.jabref.AuthorList;
-
-import java.util.TreeSet;
-import java.util.HashMap;
 import java.util.StringTokenizer;
+import java.util.TreeSet;
+
+import net.sf.jabref.AuthorList;
 
 /**
  * Created by Morten O. Alver, 16 Feb. 2007
@@ -13,8 +12,7 @@ public class AutoCompleter {
     final int SHORTEST_WORD = 4,
             SHORTEST_TO_COMPLETE = 2;
 
-    private TreeSet words = new TreeSet();
-    private HashMap hm = new HashMap();
+    private TreeSet<String> words = new TreeSet<String>();
     private boolean nameField = false, // Attempt to store entire names?
 	entireField = false; // Set to true if the entire field should be stored 
 		             // suitable e.g. for journal or publisher fields.
diff --git a/src/java/net/sf/jabref/gui/ColorSetupPanel.java b/src/java/net/sf/jabref/gui/ColorSetupPanel.java
index 69cf899..6a5863e 100644
--- a/src/java/net/sf/jabref/gui/ColorSetupPanel.java
+++ b/src/java/net/sf/jabref/gui/ColorSetupPanel.java
@@ -22,7 +22,7 @@ import net.sf.jabref.Globals;
 public class ColorSetupPanel extends JPanel {
 
     private final static int ICON_WIDTH=30, ICON_HEIGHT=20;
-    private ArrayList buttons = new ArrayList();
+    private ArrayList<ColorButton> buttons = new ArrayList<ColorButton>();
 
     public ColorSetupPanel() {
 
@@ -40,8 +40,8 @@ public class ColorSetupPanel extends JPanel {
 
 
 
-        for (Iterator i=buttons.iterator(); i.hasNext();) {
-            ColorButton but = (ColorButton)i.next();
+        for (Iterator<ColorButton> i=buttons.iterator(); i.hasNext();) {
+            ColorButton but = i.next();
             builder.append(but);
             builder.append(but.getDefaultButton());
             builder.append(but.getName());
@@ -58,16 +58,16 @@ public class ColorSetupPanel extends JPanel {
     }
 
     public void setValues() {
-        for (Iterator i=buttons.iterator(); i.hasNext();) {
-            ColorButton but = (ColorButton)i.next();
+        for (Iterator<ColorButton> i=buttons.iterator(); i.hasNext();) {
+            ColorButton but = i.next();
             but.setColor(Globals.prefs.getColor(but.getKey()));
         }
 
     }
 
     public void storeSettings() {
-        for (Iterator i=buttons.iterator(); i.hasNext();) {
-            ColorButton but = (ColorButton)i.next();
+        for (Iterator<ColorButton> i=buttons.iterator(); i.hasNext();) {
+            ColorButton but = i.next();
             Globals.prefs.putColor(but.getKey(), but.getColor());
         }
     }
diff --git a/src/java/net/sf/jabref/gui/DatabasePropertiesDialog.java b/src/java/net/sf/jabref/gui/DatabasePropertiesDialog.java
index f3ea022..6c9cd78 100644
--- a/src/java/net/sf/jabref/gui/DatabasePropertiesDialog.java
+++ b/src/java/net/sf/jabref/gui/DatabasePropertiesDialog.java
@@ -1,19 +1,18 @@
 package net.sf.jabref.gui;
 
-import net.sf.jabref.*;
+import java.awt.BorderLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.Vector;
 
 import javax.swing.*;
 
-import com.jgoodies.forms.builder.DefaultFormBuilder;
+import net.sf.jabref.*;
+
 import com.jgoodies.forms.builder.ButtonBarBuilder;
+import com.jgoodies.forms.builder.DefaultFormBuilder;
 import com.jgoodies.forms.layout.FormLayout;
 
-import java.awt.*;
-import java.awt.event.ActionListener;
-import java.awt.event.ActionEvent;
-import java.util.HashMap;
-import java.util.Vector;
-
 /**
  * Created by IntelliJ IDEA.
  * User: alver
@@ -30,6 +29,8 @@ public class DatabasePropertiesDialog extends JDialog {
     JTextField fileDir = new JTextField(40),
             pdfDir = new JTextField(40), psDir = new JTextField(40);
     String oldFileVal="", 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"), false);
@@ -72,6 +73,10 @@ public class DatabasePropertiesDialog extends JDialog {
         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.addGridded(ok);
@@ -82,6 +87,16 @@ public class DatabasePropertiesDialog extends JDialog {
         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();
@@ -106,37 +121,46 @@ public class DatabasePropertiesDialog extends JDialog {
     public void setValues() {
         encoding.setSelectedItem(panel.getEncoding());
 
-        Vector fileD = metaData.getData(GUIGlobals.FILE_FIELD+"Directory");
+        Vector<String> fileD = metaData.getData(GUIGlobals.FILE_FIELD+"Directory");
         if (fileD == null)
             fileDir.setText("");
         else {
             // Better be a little careful about how many entries the Vector has:
             if (fileD.size() >= 1)
-                fileDir.setText(((String)fileD.get(0)).trim());
+                fileDir.setText((fileD.get(0)).trim());
         }
 
-        Vector pdfD = metaData.getData("pdfDirectory");
+        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(((String)pdfD.get(0)).trim());
+                pdfDir.setText((pdfD.get(0)).trim());
         }
 
-        Vector psD = metaData.getData("psDirectory");
+        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(((String)psD.get(0)).trim());
+                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();
         oldPdfVal = pdfDir.getText();
         oldPsVal = psDir.getText();
+        oldProtectVal = protect.isSelected();
     }
 
     public void storeSettings() {
@@ -144,7 +168,7 @@ public class DatabasePropertiesDialog extends JDialog {
         String newEncoding = (String)encoding.getSelectedItem();
         panel.setEncoding(newEncoding);
 
-        Vector dir = new Vector(1);
+        Vector<String> dir = new Vector<String>(1);
         String text = fileDir.getText().trim();
         if (text.length() > 0) {
             dir.add(text);
@@ -153,7 +177,7 @@ public class DatabasePropertiesDialog extends JDialog {
         else
             metaData.remove(GUIGlobals.FILE_FIELD+"Directory");
 
-        dir = new Vector(1);
+        dir = new Vector<String>(1);
         text = pdfDir.getText().trim();
         if (text.length() > 0) {
             dir.add(text);
@@ -162,7 +186,7 @@ public class DatabasePropertiesDialog extends JDialog {
         else
             metaData.remove("pdfDirectory");
 
-        dir = new Vector(1);
+        dir = new Vector<String>(1);
         text = psDir.getText().trim();
         if (text.length() > 0) {
             dir.add(text);
@@ -171,10 +195,20 @@ public class DatabasePropertiesDialog extends JDialog {
         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)
             || !oldPdfVal.equals(pdfDir.getText())
-            || !oldPsVal.equals(psDir.getText());
+            || !oldPsVal.equals(psDir.getText())
+            || (oldProtectVal != protect.isSelected());
         // ... if so, mark base changed. Prevent the Undo button from removing
         // change marking:
         if (changed)
diff --git a/src/java/net/sf/jabref/gui/EntryCustomizationDialog2.java b/src/java/net/sf/jabref/gui/EntryCustomizationDialog2.java
index 8e05780..4325a79 100644
--- a/src/java/net/sf/jabref/gui/EntryCustomizationDialog2.java
+++ b/src/java/net/sf/jabref/gui/EntryCustomizationDialog2.java
@@ -6,21 +6,18 @@
 
 package net.sf.jabref.gui;
 
-import net.sf.jabref.*;
-import javax.swing.*;
-import javax.swing.event.ListSelectionEvent;
-import javax.swing.event.ListSelectionListener;
 import java.awt.*;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.ArrayList;
-import java.util.HashSet;
+import java.util.*;
 import java.util.List;
-import java.util.Iterator;
-import java.util.Set;
+
+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;
 
@@ -40,11 +37,11 @@ public class EntryCustomizationDialog2 extends JDialog implements ListSelectionL
     protected FieldSetComponent reqComp, optComp;
     protected EntryTypeList typeComp;
     protected JButton ok, cancel, apply, helpButton, delete, importTypes, exportTypes;
-    protected final List preset = java.util.Arrays.asList(BibtexFields.getAllFieldNames());
+    protected final List<String> preset = java.util.Arrays.asList(BibtexFields.getAllFieldNames());
     protected String lastSelected = null;
-    protected Map reqLists = new HashMap(),
-            optLists = new HashMap();
-    protected Set defaulted = new HashSet(), changed = new HashSet();
+    protected Map<String, List<String>> reqLists = new HashMap<String, List<String>>(),
+            optLists = new HashMap<String, List<String>>();
+    protected Set<String> defaulted = new HashSet<String>(), changed = new HashSet<String>();
 
     /** Creates a new instance of EntryCustomizationDialog2 */
     public EntryCustomizationDialog2(JabRefFrame frame) {
@@ -63,8 +60,8 @@ public class EntryCustomizationDialog2 extends JDialog implements ListSelectionL
         main.setLayout(new BorderLayout());
         right.setLayout(new GridLayout(1, 2));
 
-        java.util.List entryTypes = new ArrayList();
-        for (Iterator i=BibtexEntryType.ALL_TYPES.keySet().iterator(); i.hasNext();) {
+        java.util.List<String> entryTypes = new ArrayList<String>();
+        for (Iterator<String> i=BibtexEntryType.ALL_TYPES.keySet().iterator(); i.hasNext();) {
             entryTypes.add(i.next());
         }
 
@@ -75,12 +72,12 @@ public class EntryCustomizationDialog2 extends JDialog implements ListSelectionL
         typeComp.setListSelectionMode(ListSelectionModel.SINGLE_SELECTION);
 
         //typeComp.setEnabled(false);
-        reqComp = new FieldSetComponent(Globals.lang("Required fields"), new ArrayList(), preset, true, true);
+        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(), preset, true, true);
+        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);
@@ -102,6 +99,15 @@ public class EntryCustomizationDialog2 extends JDialog implements ListSelectionL
         bb.addGridded(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;
@@ -131,21 +137,21 @@ public class EntryCustomizationDialog2 extends JDialog implements ListSelectionL
         String s = typeComp.getFirstSelected();
         if (s == null)
             return;
-        Object rl = reqLists.get(s);
+        List<String> rl = reqLists.get(s);
         if (rl == null) {
             BibtexEntryType type = BibtexEntryType.getType(s);
             if (type != null) {
                 String[] rf = type.getRequiredFields(),
                         of = type.getOptionalFields();
-                List req, opt;
+                List<String> req, opt;
                 if (rf != null)
                     req = java.util.Arrays.asList(rf);
                 else
-                    req = new ArrayList();
+                    req = new ArrayList<String>();
                 if (of != null)
                     opt = java.util.Arrays.asList(of);
                 else
-                    opt = new ArrayList();
+                    opt = new ArrayList<String>();
 
                 reqComp.setFields(req);
                 reqComp.setEnabled(true);
@@ -153,15 +159,15 @@ public class EntryCustomizationDialog2 extends JDialog implements ListSelectionL
                 optComp.setEnabled(true);
             } else {
                 // New entry, veintle
-                reqComp.setFields(new ArrayList());
+                reqComp.setFields(new ArrayList<String>());
                 reqComp.setEnabled(true);
-                optComp.setFields(new ArrayList());
+                optComp.setFields(new ArrayList<String>());
                 optComp.setEnabled(true);
                 new FocusRequester(reqComp);
             }
         } else {
-            reqComp.setFields((List)rl);
-            optComp.setFields((List)optLists.get(s));
+            reqComp.setFields(rl);
+            optComp.setFields(optLists.get(s));
         }
 
         lastSelected = s;
@@ -172,19 +178,18 @@ public class EntryCustomizationDialog2 extends JDialog implements ListSelectionL
         valueChanged(new ListSelectionEvent(new JList(), 0, 0, false));
         // Iterate over our map of required fields, and list those types if necessary:
 
-        List types = typeComp.getFields();
-        boolean globalChangesMade = false;
-        for (Iterator i=reqLists.keySet().iterator(); i.hasNext();) {
-            String typeName = (String)i.next();
+        List<String> types = typeComp.getFields();
+        for (Iterator<String> i=reqLists.keySet().iterator(); i.hasNext();) {
+            String typeName = i.next();
             if (!types.contains(typeName))
                 continue;
 
-            List reqFields = (List)reqLists.get(typeName);
-            List optFields = (List)optLists.get(typeName);
+            List<String> reqFields = reqLists.get(typeName);
+            List<String> optFields = optLists.get(typeName);
             String[] reqStr = new String[reqFields.size()];
-            reqFields.toArray(reqStr);
+            reqStr = reqFields.toArray(reqStr);
             String[] optStr = new String[optFields.size()];
-            optFields.toArray(optStr);
+            optStr = optFields.toArray(optStr);
 
             // If this type is already existing, check if any changes have
             // been made
@@ -197,7 +202,6 @@ public class EntryCustomizationDialog2 extends JDialog implements ListSelectionL
                 BibtexEntryType.removeType(nm);
 
                 updateTypesForEntries(nm);
-                globalChangesMade = true;
                 continue;
             }
 
@@ -214,23 +218,21 @@ public class EntryCustomizationDialog2 extends JDialog implements ListSelectionL
                 CustomEntryType typ = new CustomEntryType(Util.nCase(typeName), reqStr, optStr);
                 BibtexEntryType.ALL_TYPES.put(typeName.toLowerCase(), typ);
                 updateTypesForEntries(typ.getName());
-                globalChangesMade = true;
             }
         }
 
 
-        Set toRemove = new HashSet();
-        for (Iterator i=BibtexEntryType.ALL_TYPES.keySet().iterator(); i.hasNext();) {
+        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)) {
-                //System.out.println("Deleted entry type (TODO): "+o);
                 toRemove.add(o);
             }
         }
 
         // Remove those that should be removed:
         if (toRemove.size() > 0) {
-            for (Iterator i=toRemove.iterator(); i.hasNext();)
+            for (Iterator<Object> i=toRemove.iterator(); i.hasNext();)
                 typeDeletion((String)i.next());
         }
 
@@ -283,9 +285,9 @@ protected boolean equalArrays(String[] one, String[] two) {
 public void actionPerformed(ActionEvent e) {
     if (e.getSource() == ok) {
         applyChanges();
-        setVisible(false);
+        dispose();
     } else if (e.getSource() == cancel) {
-        setVisible(false);
+        dispose();
     } else if (e.getSource() == apply) {
         applyChanges();
     } else if (e.getSource() == typeComp) {
@@ -303,26 +305,15 @@ public void actionPerformed(ActionEvent e) {
 private void updateTypesForEntries(String typeName) {
     if (frame.getTabbedPane().getTabCount() == 0)
         return;
-    //messageLabel.setText(Globals.lang("Updating entries..."));
-    BibtexDatabase base;
-    Iterator iter;
     for (int i=0; i<frame.getTabbedPane().getTabCount(); i++) {
         BasePanel bp = (BasePanel)frame.getTabbedPane().getComponentAt(i);
-        boolean anyChanges = false;
 
+        // Invalidate associated cached entry editor
         bp.entryEditors.remove(typeName);
 
-        //bp.rcm.populateTypeMenu(); // Update type menu for change type.
-        base = bp.database();
-        iter = base.getKeySet().iterator();
-        while (iter.hasNext()) {
-            anyChanges = anyChanges |
-                    !(base.getEntryById((String)iter.next())).updateType();
+        for (BibtexEntry entry : bp.database().getEntries()){
+            entry.updateType();
         }
-            /*if (anyChanges) {
-                bp.refreshTable();
-                bp.markBaseChanged();
-            }*/
     }
 
 }
@@ -330,12 +321,8 @@ private void updateTypesForEntries(String typeName) {
 private void updateTables() {
     if (frame.getTabbedPane().getTabCount() == 0)
         return;
-    //messageLabel.setText(Globals.lang("Updating entries..."));
-    BibtexDatabase base;
-    Iterator iter;
     for (int i=0; i<frame.getTabbedPane().getTabCount(); i++) {
-        BasePanel bp = (BasePanel)frame.getTabbedPane().getComponentAt(i);
-        //bp.markBaseChanged();
+        frame.getTabbedPane().getComponentAt(i);
     }
 
 }
@@ -352,15 +339,15 @@ class DefaultListener implements ActionListener {
         if (type != null) {
             String[] rf = type.getRequiredFields(),
                     of = type.getOptionalFields();
-            List req, opt;
+            List<String> req, opt;
             if (rf != null)
                 req = java.util.Arrays.asList(rf);
             else
-                req = new ArrayList();
+                req = new ArrayList<String>();
             if (of != null)
                 opt = java.util.Arrays.asList(of);
             else
-                opt = new ArrayList();
+                opt = new ArrayList<String>();
 
             reqComp.setFields(req);
             reqComp.setEnabled(true);
diff --git a/src/java/net/sf/jabref/gui/EntryTypeList.java b/src/java/net/sf/jabref/gui/EntryTypeList.java
index b0947f4..a186abc 100644
--- a/src/java/net/sf/jabref/gui/EntryTypeList.java
+++ b/src/java/net/sf/jabref/gui/EntryTypeList.java
@@ -6,11 +6,20 @@
 
 package net.sf.jabref.gui;
 
-import net.sf.jabref.*;
+import java.awt.GridBagConstraints;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
 import java.util.List;
-import javax.swing.*;
-import javax.swing.event.*;
-import java.awt.event.*;
+
+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
@@ -22,13 +31,13 @@ public class EntryTypeList extends FieldSetComponent implements ListSelectionLis
     protected JButton def = new JButton(Globals.lang("Default"));
     
     /** Creates a new instance of EntryTypeList */
-    public EntryTypeList(List fields) {
+    public EntryTypeList(List<String> fields) {
         super(Globals.lang("Entry types"), fields, false, true);
         
         con.gridx = 0;
         con.gridy = 2;
-        con.fill = con.VERTICAL;
-        con.anchor = con.EAST;
+        con.fill = GridBagConstraints.VERTICAL;
+        con.anchor = GridBagConstraints.EAST;
         gbl.setConstraints(def, con);
         add(def);
         list.addListSelectionListener(this);
@@ -64,10 +73,6 @@ public class EntryTypeList extends FieldSetComponent implements ListSelectionLis
         for (int i=0; i<selected.length; i++) {
             String typeName = (String)listModel.get(selected[selected.length-1-i]);
             BibtexEntryType type = BibtexEntryType.getType(typeName);
-            // Check if there is a standard type for this name:
-            boolean standardTypeExists = (BibtexEntryType.getStandardType(typeName) != null);
-            
-            //System.out.println(typeName+"\t"+type.toString());
             
             // 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
diff --git a/src/java/net/sf/jabref/gui/FieldSetComponent.java b/src/java/net/sf/jabref/gui/FieldSetComponent.java
index 6154b31..0af4ef8 100644
--- a/src/java/net/sf/jabref/gui/FieldSetComponent.java
+++ b/src/java/net/sf/jabref/gui/FieldSetComponent.java
@@ -6,26 +6,32 @@
 
 package net.sf.jabref.gui;
 
-import net.sf.jabref.Util;
-import net.sf.jabref.Globals;
-import net.sf.jabref.GUIGlobals;
-import java.awt.*;
-import java.awt.event.*;
+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 javax.swing.*;
-import javax.swing.event.ListSelectionListener;
-import java.util.List;
 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/*, ItemListener*/ {
+public class FieldSetComponent extends JPanel implements ActionListener {
 
-    protected Set additionListeners = new HashSet();
+    protected Set<ActionListener> additionListeners = new HashSet<ActionListener>();
     protected JList list;
     protected JScrollPane sp = null;
     protected DefaultListModel listModel;
@@ -36,13 +42,13 @@ public class FieldSetComponent extends JPanel implements ActionListener/*, ItemL
     protected GridBagLayout gbl = new GridBagLayout();
     protected GridBagConstraints con = new GridBagConstraints();
     protected boolean forceLowerCase, changesMade = false;
-    protected Set modelListeners = new HashSet();
+    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 fields, List preset, boolean arrows, boolean forceLowerCase) {
+    public FieldSetComponent(String title, List<String> fields, List<String> preset, boolean arrows, boolean forceLowerCase) {
         this(title, fields, preset, "Add", "Remove", arrows, forceLowerCase);
     }
     
@@ -50,11 +56,11 @@ public class FieldSetComponent extends JPanel implements ActionListener/*, ItemL
      * Creates a new instance of FieldSetComponent without preset selection
      * values. Replaces the JComboBox with a JTextField.
      */
-    public FieldSetComponent(String title, List fields, boolean arrows, boolean forceLowerCase) {
+    public FieldSetComponent(String title, List<String> fields, boolean arrows, boolean forceLowerCase) {
         this(title, fields, null, "Add", "Remove", arrows, forceLowerCase);
     }
     
-    public FieldSetComponent(String title, List fields, List preset, String addText, String removeText, 
+    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));
@@ -63,8 +69,8 @@ public class FieldSetComponent extends JPanel implements ActionListener/*, ItemL
         if (title != null)
             this.title = new JLabel(title);
         
-        for (Iterator i=fields.iterator(); i.hasNext();)
-            listModel.addElement(i.next());
+        for (String field : fields)
+            listModel.addElement(field);
         list = new JList(listModel);
         list.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
         // Set up GUI:
@@ -177,26 +183,15 @@ public class FieldSetComponent extends JPanel implements ActionListener/*, ItemL
         remove.setEnabled(en);
     }
     
-    public void setFields(List fields) {
+    public void setFields(List<String> fields) {
         DefaultListModel newListModel = new DefaultListModel();
-        for (Iterator i=fields.iterator(); i.hasNext();)
-            newListModel.addElement(i.next());
+        for (String field : fields)
+            newListModel.addElement(field);
         this.listModel = newListModel;
-        for (Iterator i=modelListeners.iterator(); i.hasNext();)
-            newListModel.addListDataListener((ListDataListener)i.next());
+        for (Iterator<ListDataListener> i=modelListeners.iterator(); i.hasNext();)
+            newListModel.addListDataListener(i.next());
         list.setModel(newListModel);
     }
-    
-    /*public void itemStateChanged(ItemEvent e) {
-        if (e.getStateChange() == e.DESELECTED)
-            return;
-        //sel.is
-        if (sel.isPopupVisible())
-            return;
-        String s = sel.getSelectedItem().toString();
-        addField(s);
-        sel.getEditor().selectAll();
-    }*/
 
     /**
      * This method is called when a new field should be added to the list. Performs validation of the 
@@ -228,8 +223,8 @@ public class FieldSetComponent extends JPanel implements ActionListener/*, ItemL
     protected void addFieldUncritically(String s) {
         listModel.addElement(s);
         changesMade = true;
-        for (Iterator i=additionListeners.iterator(); i.hasNext();) {
-            ((ActionListener)i.next()).actionPerformed(new ActionEvent(this, 0, s));
+        for (Iterator<ActionListener> i=additionListeners.iterator(); i.hasNext();) {
+            i.next().actionPerformed(new ActionEvent(this, 0, s));
         }
         
     }
@@ -258,9 +253,10 @@ public class FieldSetComponent extends JPanel implements ActionListener/*, ItemL
     /**
      * Return the current list.
      */
-    public List getFields() {
+    @SuppressWarnings("unchecked")
+	public List<String> getFields() {
         Object[] o = listModel.toArray();
-        return java.util.Arrays.asList(o);
+        return (List)java.util.Arrays.asList(o);
     }
     
     /**
diff --git a/src/java/net/sf/jabref/gui/FieldWeightDialog.java b/src/java/net/sf/jabref/gui/FieldWeightDialog.java
index 0e0d633..4fef5e1 100644
--- a/src/java/net/sf/jabref/gui/FieldWeightDialog.java
+++ b/src/java/net/sf/jabref/gui/FieldWeightDialog.java
@@ -1,14 +1,22 @@
 package net.sf.jabref.gui;
 
-import java.util.* ;
+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 java.awt.* ;
-import java.awt.event.* ;
-import javax.swing.* ;
+import javax.swing.*;
 
-import com.jgoodies.forms.builder.* ;
-import com.jgoodies.forms.layout.* ;
-import net.sf.jabref.* ;
+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.
@@ -20,7 +28,7 @@ import net.sf.jabref.* ;
 public class FieldWeightDialog extends JDialog {
 
     JabRefFrame frame;
-    HashMap sliders = new HashMap();
+    HashMap<JSlider, SliderInfo> sliders = new HashMap<JSlider, SliderInfo>();
     JButton ok = new JButton(Globals.lang("OK")),
         cancel = new JButton(Globals.lang("Cancel"));
 
@@ -46,7 +54,7 @@ public class FieldWeightDialog extends JDialog {
         builder.appendSeparator(Globals.lang("Field sizes"));
 
         // We use this list to build an alphabetical list of field names:
-        TreeSet fields = new TreeSet();
+        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++)
@@ -58,8 +66,8 @@ public class FieldWeightDialog extends JDialog {
 
         // --------------
 
-        for (Iterator i=fields.iterator(); i.hasNext();) {
-            String field = (String)i.next();
+        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);
@@ -96,12 +104,12 @@ public class FieldWeightDialog extends JDialog {
     }
 
     public void storeSettings() {
-        for (Iterator i=sliders.keySet().iterator(); i.hasNext();) {
-            JSlider slider = (JSlider)i.next();
-            SliderInfo sInfo = (SliderInfo)sliders.get(slider);
+        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*((double)slider.getValue())/100d;
+                double weight = GUIGlobals.MAX_FIELD_WEIGHT*(slider.getValue())/100d;
                 BibtexFields.setFieldWeight(sInfo.fieldName, weight);
             }
         }
diff --git a/src/java/net/sf/jabref/gui/FileListEditor.java b/src/java/net/sf/jabref/gui/FileListEditor.java
index b1fdc0f..3db9f9f 100644
--- a/src/java/net/sf/jabref/gui/FileListEditor.java
+++ b/src/java/net/sf/jabref/gui/FileListEditor.java
@@ -1,23 +1,56 @@
 package net.sf.jabref.gui;
 
-import net.sf.jabref.*;
-import net.sf.jabref.groups.EntryTableTransferHandler;
-import net.sf.jabref.undo.NamedCompound;
-import net.sf.jabref.undo.UndoableFieldChange;
-import net.sf.jabref.external.*;
-
-import javax.swing.*;
-import java.awt.*;
-import java.awt.dnd.DnDConstants;
-import java.awt.datatransfer.Transferable;
+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.event.*;
-import java.util.*;
-import java.util.List;
+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 net.sf.jabref.BibtexEntry;
+import net.sf.jabref.EntryEditor;
+import net.sf.jabref.FieldEditor;
+import net.sf.jabref.FieldNameLabel;
+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.*;
+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;
@@ -39,9 +72,10 @@ public class FileListEditor extends JTable implements FieldEditor,
     private JScrollPane sPane;
     private JButton add, remove, up, down, auto, download;
     private JPopupMenu menu = new JPopupMenu();
-    private JMenuItem item = new JMenuItem(Globals.lang("Open"));
-
 
+    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) {
@@ -138,12 +172,17 @@ public class FileListEditor extends JTable implements FieldEditor,
             }
         });
 
-        menu.add(item);
-        item.addActionListener(new ActionListener() {
+        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() {
@@ -158,6 +197,9 @@ public class FileListEditor extends JTable implements FieldEditor,
         }
     }
 
+    public FileListTableModel getTableModel() {
+        return tableModel;
+    }
 
     public String getFieldName() {
         return fieldName;
@@ -225,21 +267,6 @@ public class FileListEditor extends JTable implements FieldEditor,
         addEntry("");
     }
 
-    /**
-     * Add the listed files, prompting the user with the entry editor in each case.
-     * @param files A list of File objects.
-     */
-    private void addAll(List files) {
-        for (Iterator i = files.iterator(); i.hasNext();) {
-            File file = (File)i.next();
-            String fileName = file.getAbsolutePath();
-            FileListEntry entry = new FileListEntry("", fileName, null);
-            if (editListEntry(entry))
-                    tableModel.addEntry(tableModel.getRowCount(), entry);
-        }
-        entryEditor.updateField(this);
-    }
-
     private void removeEntries() {
         int[] rows = getSelectedRows();
         if (rows != null)
@@ -281,7 +308,6 @@ public class FileListEditor extends JTable implements FieldEditor,
     private void autoSetLinks() {
         auto.setEnabled(false);
         BibtexEntry entry = entryEditor.getEntry();
-        int tableSize = tableModel.getRowCount();
         JDialog diag = new JDialog(frame, true);
         autoSetLinks(entry, tableModel, metaData, new ActionListener() {
             public void actionPerformed(ActionEvent e) {
@@ -316,12 +342,9 @@ public class FileListEditor extends JTable implements FieldEditor,
                                       final Set<BibtexEntry> changedEntries,
                                       final ArrayList<File> dirs) {
 
-        final ExternalFileType[] types = Globals.prefs.getExternalFileTypeSelection();
-        final JLabel label = new JLabel(Globals.lang("Searching for files"));
         Runnable r = new Runnable() {
 
             public void run() {
-                boolean foundAny = false;
                 ExternalFileType[] types = Globals.prefs.getExternalFileTypeSelection();
                 Collection<String> extensions = new ArrayList<String>();
                 for (int i = 0; i < types.length; i++) {
@@ -336,9 +359,9 @@ public class FileListEditor extends JTable implements FieldEditor,
                 for (Iterator<BibtexEntry> i=result.keySet().iterator(); i.hasNext();) {
                     BibtexEntry anEntry = i.next();
                     FileListTableModel tableModel = new FileListTableModel();
-                    Object oldVal = anEntry.getField(GUIGlobals.FILE_FIELD);
+                    String oldVal = anEntry.getField(GUIGlobals.FILE_FIELD);
                     if (oldVal != null)
-                        tableModel.setContent((String)oldVal);
+                        tableModel.setContent(oldVal);
                     List<File> files = result.get(anEntry);
                     for (File f : files) {
 			f = relativizePath(f, dirs);
@@ -603,22 +626,19 @@ public class FileListEditor extends JTable implements FieldEditor,
             return importData(FileListEditor.this, transferSupport.getTransferable());
         }*/
 
+        @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:
-            int dropRow = -1;
-            if (comp instanceof JTable) {
-                dropRow = ((JTable) comp).getSelectedRow();
-            }
 
             try {
 		
-                List files = null;
+                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) t.getTransferData(DataFlavor.javaFileListFlavor);
+                    files = (List<File>) t.getTransferData(DataFlavor.javaFileListFlavor);
                 }
 
                 if (t.isDataFlavorSupported(urlFlavor)) {
@@ -635,12 +655,11 @@ public class FileListEditor extends JTable implements FieldEditor,
                 }
 
 		        if (files != null) {
-		            final List theFiles = files;
+		            final List<File> theFiles = files;
                     SwingUtilities.invokeLater(new Runnable() {
                         public void run() {
                             //addAll(files);
-                            for (Iterator i=theFiles.iterator(); i.hasNext();) {
-			                    File f = (File)i.next();
+                            for (File f : theFiles){
                                 // Find the file's extension, if any:
                                 String name = f.getAbsolutePath();
                                 String extension = "";
diff --git a/src/java/net/sf/jabref/gui/FileListEntryEditor.java b/src/java/net/sf/jabref/gui/FileListEntryEditor.java
index e2aa34b..d74e55f 100644
--- a/src/java/net/sf/jabref/gui/FileListEntryEditor.java
+++ b/src/java/net/sf/jabref/gui/FileListEntryEditor.java
@@ -1,25 +1,31 @@
 package net.sf.jabref.gui;
 
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-import com.jgoodies.forms.builder.ButtonBarBuilder;
-import com.jgoodies.forms.layout.FormLayout;
+import java.awt.BorderLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
 
 import javax.swing.*;
-import javax.swing.event.DocumentListener;
 import javax.swing.event.DocumentEvent;
+import javax.swing.event.DocumentListener;
 
-import net.sf.jabref.*;
-import net.sf.jabref.external.ExternalFileType;
+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.ExternalFileMenuItem;
+import net.sf.jabref.external.ExternalFileType;
 import net.sf.jabref.external.UnknownExternalFileType;
 
-import java.awt.*;
-import java.awt.event.*;
-import java.io.File;
-import java.io.FileFilter;
-import java.io.IOException;
-import java.util.ArrayList;
+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.
@@ -37,20 +43,20 @@ public class FileListEntryEditor {
     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 JabRefFrame frame;
     private FileListEntry entry;
     private MetaData metaData;
     private boolean okPressed = false, okDisabledExternally = false;
 
     public FileListEntryEditor(JabRefFrame frame, FileListEntry entry, boolean showProgressBar,
                                boolean showOpenButton, MetaData metaData) {
-        this.frame = frame;
         this.entry = entry;
         this.metaData = metaData;
 
@@ -107,6 +113,7 @@ public class FileListEntryEditor {
         bb.addGlue();
         //bb.addGridded(open);
         //bb.addRelatedGap();
+        bb.addRelatedGap();
         bb.addGridded(ok);
         bb.addGridded(cancel);
         bb.addGlue();
@@ -130,6 +137,7 @@ public class FileListEntryEditor {
             };
         cancel.addActionListener(cancelAction);
 
+
         // Key bindings:
         ActionMap am = builder.getPanel().getActionMap();
         InputMap im = builder.getPanel().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
@@ -296,4 +304,6 @@ public class FileListEntryEditor {
             }
         }
     }
+
+
 }
diff --git a/src/java/net/sf/jabref/gui/FileListTableModel.java b/src/java/net/sf/jabref/gui/FileListTableModel.java
index 5f9434a..3317e79 100644
--- a/src/java/net/sf/jabref/gui/FileListTableModel.java
+++ b/src/java/net/sf/jabref/gui/FileListTableModel.java
@@ -1,22 +1,24 @@
 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;
 
-import javax.swing.table.AbstractTableModel;
-import javax.swing.event.TableModelEvent;
-import javax.swing.*;
-import java.util.ArrayList;
-import java.util.Iterator;
-
 /**
  * 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 list = new ArrayList();
+    private final ArrayList<FileListEntry> list = new ArrayList<FileListEntry>();
 
     public FileListTableModel() {
     }
@@ -31,13 +33,13 @@ public class FileListTableModel extends AbstractTableModel {
         return 3;
     }
 
-    public Class getColumnClass(int columnIndex) {
+    public Class<String> getColumnClass(int columnIndex) {
         return String.class;
     }
 
     public Object getValueAt(int rowIndex, int columnIndex) {
         synchronized (list) {
-            FileListEntry entry = (FileListEntry)list.get(rowIndex);
+            FileListEntry entry = list.get(rowIndex);
             switch (columnIndex) {
                 case 0: return entry.getDescription();
                 case 1: return entry.getLink();
@@ -49,7 +51,7 @@ public class FileListTableModel extends AbstractTableModel {
 
     public FileListEntry getEntry(int index) {
         synchronized (list) {
-            return (FileListEntry)list.get(index);
+            return list.get(index);
         }
     }
 
@@ -100,9 +102,9 @@ public class FileListTableModel extends AbstractTableModel {
     private FileListEntry setContent(String value, boolean firstOnly, boolean deduceUnknownTypes) {
         if (value == null)
             value = "";
-        ArrayList newList = new ArrayList();
+        ArrayList<FileListEntry> newList = new ArrayList<FileListEntry>();
         StringBuilder sb = new StringBuilder();
-        ArrayList thisEntry = new ArrayList();
+        ArrayList<String> thisEntry = new ArrayList<String>();
         boolean inXmlChar = false;
         boolean escaped = false;
         for (int i=0; i<value.length(); i++) {
@@ -157,7 +159,6 @@ public class FileListTableModel extends AbstractTableModel {
         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
@@ -166,16 +167,18 @@ public class FileListTableModel extends AbstractTableModel {
      * 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 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);
-        return entry != null ? entry.getType().getIconLabel() : null;
+        if (entry == null || entry.getType()==null )
+            return null;
+        return entry.getType().getIconLabel();
     }
 
     
-    private FileListEntry decodeEntry(ArrayList contents, boolean deduceUnknownType) {
+    private FileListEntry decodeEntry(ArrayList<String> contents, boolean deduceUnknownType) {
         ExternalFileType type = Globals.prefs.getExternalFileTypeByName
                         (getElementIfAvailable(contents, 2));
         if (deduceUnknownType && (type instanceof UnknownExternalFileType)) {
@@ -197,9 +200,10 @@ public class FileListTableModel extends AbstractTableModel {
                 type);
     }
 
-    private String getElementIfAvailable(ArrayList contents, int index) {
+
+    private String getElementIfAvailable(ArrayList<String> contents, int index) {
         if (index < contents.size())
-            return (String)contents.get(index);
+            return contents.get(index);
         else return "";
     }
 
@@ -210,8 +214,8 @@ public class FileListTableModel extends AbstractTableModel {
      */
     public String getStringRepresentation() {
         StringBuilder sb = new StringBuilder();
-        for (Iterator iterator = list.iterator(); iterator.hasNext();) {
-            FileListEntry entry = (FileListEntry) iterator.next();
+        for (Iterator<FileListEntry> iterator = list.iterator(); iterator.hasNext();) {
+            FileListEntry entry = iterator.next();
             sb.append(encodeEntry(entry));
             if (iterator.hasNext())
                 sb.append(';');
@@ -226,8 +230,8 @@ public class FileListTableModel extends AbstractTableModel {
      */
     public String getToolTipHTMLRepresentation() {
         StringBuilder sb = new StringBuilder("<html>");
-        for (Iterator iterator = list.iterator(); iterator.hasNext();) {
-            FileListEntry entry = (FileListEntry) iterator.next();
+        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>");
@@ -258,8 +262,8 @@ public class FileListTableModel extends AbstractTableModel {
 
     public void print() {
         System.out.println("----");
-        for (Iterator iterator = list.iterator(); iterator.hasNext();) {
-            FileListEntry fileListEntry = (FileListEntry) iterator.next();
+        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 9cb0a8d..b726011 100644
--- a/src/java/net/sf/jabref/gui/FirstColumnComparator.java
+++ b/src/java/net/sf/jabref/gui/FirstColumnComparator.java
@@ -1,39 +1,29 @@
 package net.sf.jabref.gui;
 
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.Util;
-
 import java.util.Comparator;
 
-/**
- * Created by IntelliJ IDEA.
- * User: alver
- * Date: Oct 14, 2005
- * Time: 8:25:15 PM
- * To change this template use File | Settings | File Templates.
- */
-public class FirstColumnComparator implements Comparator {
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.BibtexDatabase;
 
-    public int compare(Object o1, Object o2) {
+public class FirstColumnComparator implements Comparator<BibtexEntry> {
+    private BibtexDatabase database;
 
-        BibtexEntry e1 = (BibtexEntry)o1,
-                 e2 = (BibtexEntry)o2;
+    public FirstColumnComparator(BibtexDatabase database) {
 
-        int score1=0, score2=0;
+        this.database = database;
+    }
 
-        //if (Util.isMarked(e1))
-        //    score1 -= 2;
+    public int compare(BibtexEntry e1, BibtexEntry e2) {
 
-        //if (Util.isMarked(e2))
-        //    score2 -= 2;
+		int score1 = 0, score2 = 0;
 
-        if (e1.hasAllRequiredFields())
-            score1++;
+		if (e1.hasAllRequiredFields(database))
+			score1++;
 
-        if (e2.hasAllRequiredFields())
-            score2++;
+		if (e2.hasAllRequiredFields(database))
+			score2++;
 
-        return score1-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 fbe9849..becf121 100644
--- a/src/java/net/sf/jabref/gui/GenFieldsCustomizer.java
+++ b/src/java/net/sf/jabref/gui/GenFieldsCustomizer.java
@@ -1,12 +1,14 @@
 package net.sf.jabref.gui;
 
-import net.sf.jabref.*;
 import java.awt.*;
-import javax.swing.*;
-import javax.swing.border.*;
-import java.awt.event.*;
+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;
 
@@ -156,17 +158,18 @@ public class GenFieldsCustomizer extends JDialog {
 
     void setFieldsText() {
         StringBuffer sb = new StringBuffer();
-        String name = null, fields = null;
+
         EntryEditorTabList tabList = Globals.prefs.getEntryEditorTabList();
         for (int i=0; i<tabList.getTabCount(); i++) {
             sb.append(tabList.getTabName(i));
             sb.append(":");
-            for (Iterator j=tabList.getTabFields(i).iterator(); j.hasNext();) {
-                String field = (String)j.next();
-                sb.append(field);
-                if (j.hasNext())
-                    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");
         }
 
diff --git a/src/java/net/sf/jabref/gui/GlazedEntrySorter.java b/src/java/net/sf/jabref/gui/GlazedEntrySorter.java
index 3b8a86b..e2186b2 100644
--- a/src/java/net/sf/jabref/gui/GlazedEntrySorter.java
+++ b/src/java/net/sf/jabref/gui/GlazedEntrySorter.java
@@ -1,23 +1,3 @@
-package net.sf.jabref.gui;
-
-import net.sf.jabref.*;
-import ca.odell.glazedlists.BasicEventList;
-import ca.odell.glazedlists.SortedList;
-import ca.odell.glazedlists.EventList;
-import ca.odell.glazedlists.event.ListEventAssembler;
-import ca.odell.glazedlists.event.ListEvent;
-import ca.odell.glazedlists.event.ListEventListener;
-
-import java.util.*;
-
-/**
- * Created by IntelliJ IDEA.
- * User: alver
- * Date: Oct 12, 2005
- * Time: 8:54:36 PM
- * To change this template use File | Settings | File Templates.
- */
-public class GlazedEntrySorter implements DatabaseChangeListener {
 /*
 Copyright (C) 2003 Morten O. Alver
 
@@ -44,26 +24,33 @@ Further information about the GNU GPL is available at:
 http://www.gnu.org/copyleft/gpl.ja.html
 
 */
+package net.sf.jabref.gui;
 
-    //TreeSet list;
-    EventList list;
+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;
 
-    Comparator comp;
     String[] idArray;
     BibtexEntry[] entryArray;
-    //static BibtexEntry[] DUMMY = new BibtexEntry[0];
-    private boolean outdated = false;
-    private boolean changed = false;
-
-    public GlazedEntrySorter(Map entries, Comparator comp) {
-        //list = new TreeSet(comp);
-        list = new BasicEventList();
-        //list2 = new SortedList(list, new FieldComparator(Globals.KEY_FIELD));
-        this.comp = comp;
+    
+    public GlazedEntrySorter(Map<String, BibtexEntry> entries) {
+        list = new BasicEventList<BibtexEntry>();
         list.getReadWriteLock().writeLock().lock();
-        Set keySet = entries.keySet();
+        Set<String> keySet = entries.keySet();
         if (keySet != null) {
-            Iterator i = keySet.iterator();
+            Iterator<String> i = keySet.iterator();
             while (i.hasNext()) {
                 list.add(entries.get(i.next()));
             }
@@ -77,20 +64,16 @@ http://www.gnu.org/copyleft/gpl.ja.html
 
     }
 
-    public EventList getTheList() {
+    public EventList<BibtexEntry> getTheList() {
         return list;
     }
 
     public void databaseChanged(DatabaseChangeEvent e) {
         list.getReadWriteLock().writeLock().lock();
         if (e.getType() == DatabaseChangeEvent.ADDED_ENTRY) {
-            //int pos = -Collections.binarySearch(list, e.getEntry(), comp) - 1;
             list.add(e.getEntry());
-            //System.out.println("Added. Size: " + list.size());
-
         } else if (e.getType() == DatabaseChangeEvent.REMOVED_ENTRY) {
             list.remove(e.getEntry());
-            //System.out.println("Removed. Size: " + list.size());
         } else if (e.getType() == DatabaseChangeEvent.CHANGED_ENTRY) {
             int index = list.indexOf(e.getEntry());
             list.set(index, e.getEntry());
diff --git a/src/java/net/sf/jabref/gui/IconComparator.java b/src/java/net/sf/jabref/gui/IconComparator.java
index 9d7a43a..79a5426 100644
--- a/src/java/net/sf/jabref/gui/IconComparator.java
+++ b/src/java/net/sf/jabref/gui/IconComparator.java
@@ -7,7 +7,7 @@ import java.util.Comparator;
 /**
  * Comparator that handles icon columns.
  */
-public class IconComparator implements Comparator {
+public class IconComparator implements Comparator<BibtexEntry> {
 
     private String[] fields;
 
@@ -15,12 +15,10 @@ public class IconComparator implements Comparator {
         this.fields = fields;
     }
 
-    public int compare(Object o1, Object o2) {
-         BibtexEntry e1 = (BibtexEntry)o1,
-                 e2 = (BibtexEntry)o2;
+    public int compare(BibtexEntry e1, BibtexEntry e2) {
 
         for (int i=0; i<fields.length; i++) {
-            Object val1 = e1.getField(fields[i]),
+            String val1 = e1.getField(fields[i]),
                     val2 = e2.getField(fields[i]);
             if (val1 == null) {
                 if (val2 != null)
diff --git a/src/java/net/sf/jabref/gui/ImportInspectionDialog.java b/src/java/net/sf/jabref/gui/ImportInspectionDialog.java
index 6857afa..3d1903b 100644
--- a/src/java/net/sf/jabref/gui/ImportInspectionDialog.java
+++ b/src/java/net/sf/jabref/gui/ImportInspectionDialog.java
@@ -1,131 +1,231 @@
 package net.sf.jabref.gui;
 
-import net.sf.jabref.*;
+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.*;
+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.AuthorList;
+import net.sf.jabref.BasePanel;
+import net.sf.jabref.BibtexDatabase;
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.BibtexFields;
+import net.sf.jabref.CheckBoxMessage;
+import net.sf.jabref.DuplicateCheck;
+import net.sf.jabref.DuplicateResolverDialog;
+import net.sf.jabref.FieldComparator;
+import net.sf.jabref.GUIGlobals;
+import net.sf.jabref.GeneralRenderer;
+import net.sf.jabref.Globals;
+import net.sf.jabref.HelpAction;
+import net.sf.jabref.JabRefFrame;
+import net.sf.jabref.KeyCollisionException;
+import net.sf.jabref.MetaData;
+import net.sf.jabref.PreviewPanel;
+import net.sf.jabref.Util;
 import net.sf.jabref.external.DownloadExternalFile;
 import net.sf.jabref.external.ExternalFileMenuItem;
-import net.sf.jabref.groups.GroupTreeNode;
-import net.sf.jabref.groups.AllEntriesGroup;
 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 javax.swing.*;
-import javax.swing.undo.AbstractUndoableEdit;
-import javax.swing.event.ListSelectionListener;
-import javax.swing.event.ListSelectionEvent;
-import javax.swing.table.*;
-import java.util.*;
-import java.util.List;
-import java.awt.*;
-import java.awt.event.*;
-import java.io.IOException;
-
-import com.jgoodies.forms.builder.ButtonBarBuilder;
-import com.jgoodies.forms.builder.ButtonStackBuilder;
-import com.jgoodies.uif_lite.component.UIFSplitPane;
-import ca.odell.glazedlists.*;
-import ca.odell.glazedlists.event.ListEventListener;
+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.TableComparatorChooser;
-import ca.odell.glazedlists.swing.EventTableModel;
 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
+ * 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: mortenalver $
- * @version $Revision: 2458 $ ($Date: 2007-11-04 15:47:55 +0100 (Sun, 04 Nov 2007) $)
- *
+ * @version $Revision: 2581 $ ($Date: 2007-11-14 01:25:31 +0100 (Mi, 14 Nov
+ *          2007) $)
+ * 
  */
-public class ImportInspectionDialog extends JDialog {
-	
-    private ImportInspectionDialog ths = this;
-    private BasePanel panel;
-    private JabRefFrame frame;
-    private MetaData metaData;
-    private UIFSplitPane contentPane = new UIFSplitPane(UIFSplitPane.VERTICAL_SPLIT);
-    private JTable glTable;
-    private TableComparatorChooser comparatorChooser;
-    private EventSelectionModel selectionModel;
-    private String[] fields;
-    private JProgressBar progressBar = new JProgressBar(JProgressBar.HORIZONTAL);
-    private JButton ok = new JButton(Globals.lang("Ok")),
-        cancel = new JButton(Globals.lang("Cancel")),
-        generate = new JButton(Globals.lang("Generate now"));
-    private EventList entries = new BasicEventList();
-    private SortedList sortedList;
-    private List entriesToDelete = new ArrayList(); // Duplicate resolving may require deletion of old entries.
-    private String undoName;
-    private ArrayList callBacks = new ArrayList();
-    private boolean newDatabase;
-    private JMenu groupsAdd = new JMenu(Globals.lang("Add to group"));
-    private JPopupMenu popup = new JPopupMenu();
-    private JButton selectAll = new JButton(Globals.lang("Select all"));
-    private JButton deselectAll = new JButton(Globals.lang("Deselect all"));
-    private JButton deselectAllDuplicates = new JButton(Globals.lang("Deselect all duplicates"));
-    private JButton stop = new JButton(Globals.lang("Stop"));
-    private JButton delete = new JButton(Globals.lang("Delete"));
-    private JButton help = new JButton(Globals.lang("Help"));
-    private PreviewPanel preview;
-    private boolean generatedKeys = false; // Set to true after keys have been generated.
-    private boolean defaultSelected = true;
-    private Rectangle toRect = new Rectangle(0, 0, 1, 1);
-    private Map groupAdditions = new HashMap();
-    private JCheckBox autoGenerate = new JCheckBox(Globals.lang("Generate keys"), Globals.prefs.getBoolean("generateKeysAfterInspection"));
-    private 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")),
+public class ImportInspectionDialog extends JDialog implements ImportInspector {
+
+    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"));
 
-    private final int
-        DUPL_COL = 1,
-        FILE_COL = 2,
-        PDF_COL = -1,//3,
-        PS_COL = -2,//4,
-        URL_COL = 3,//5,
+    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.
+     * 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
+     * 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) {
+        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(metaData, Globals.prefs.get("preview1"));
+        preview = new PreviewPanel(null, metaData, Globals.prefs.get("preview1"));
 
-        duplLabel.setToolTipText(Globals.lang("Possible duplicate of existing entry. Click to resolve."));
+        duplLabel.setToolTipText(Globals
+            .lang("Possible duplicate of existing entry. Click to resolve."));
 
-        sortedList = new SortedList(entries);
-        EventTableModel tableModelGl = new EventTableModel(sortedList,
-                new EntryTableFormat());
+        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);
@@ -134,11 +234,11 @@ public class ImportInspectionDialog extends JDialog {
         DeleteListener deleteListener = new DeleteListener();
         glTable.getActionMap().put("delete", deleteListener);
 
-        selectionModel = new EventSelectionModel(sortedList);
+        selectionModel = new EventSelectionModel<BibtexEntry>(sortedList);
         glTable.setSelectionModel(selectionModel);
         selectionModel.getSelected().addListEventListener(new EntrySelectionListener());
-        comparatorChooser = new TableComparatorChooser(glTable, sortedList,
-                TableComparatorChooser.MULTIPLE_COLUMN_KEYBOARD);
+        comparatorChooser = new TableComparatorChooser<BibtexEntry>(glTable, sortedList,
+            TableComparatorChooser.MULTIPLE_COLUMN_KEYBOARD);
         setupComparatorChooser();
         glTable.addMouseListener(new TableClickListener());
 
@@ -150,7 +250,7 @@ public class ImportInspectionDialog extends JDialog {
         centerPan.setLayout(new BorderLayout());
 
         contentPane.setTopComponent(new JScrollPane(glTable));
-        contentPane.setBottomComponent(new JScrollPane(preview));
+        contentPane.setBottomComponent(preview);
 
         centerPan.add(contentPane, BorderLayout.CENTER);
         centerPan.add(progressBar, BorderLayout.SOUTH);
@@ -159,8 +259,9 @@ public class ImportInspectionDialog extends JDialog {
         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, true);
+            groupsAdd.setEnabled(false); // Will get enabled if there are
+            // groups that can be added to.
+            insertNodes(groupsAdd, node);
             popup.add(groupsAdd);
         }
 
@@ -168,12 +269,11 @@ public class ImportInspectionDialog extends JDialog {
         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 AttachFile("pdf"));
+        // popup.add(new AttachFile("ps"));
         popup.add(new AttachUrl());
         getContentPane().add(centerPan, BorderLayout.CENTER);
 
-
         ButtonBarBuilder bb = new ButtonBarBuilder();
         bb.addGlue();
         bb.addGridded(ok);
@@ -211,8 +311,8 @@ public class ImportInspectionDialog extends JDialog {
         getContentPane().add(bb.getPanel(), BorderLayout.SOUTH);
 
         // Remember and default to last size:
-        setSize(new Dimension(Globals.prefs.getInt("importInspectionDialogWidth"),
-                Globals.prefs.getInt("importInspectionDialogHeight")));
+        setSize(new Dimension(Globals.prefs.getInt("importInspectionDialogWidth"), Globals.prefs
+            .getInt("importInspectionDialogHeight")));
         addWindowListener(new WindowAdapter() {
 
             public void windowOpened(WindowEvent e) {
@@ -224,9 +324,22 @@ public class ImportInspectionDialog extends JDialog {
                 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);
@@ -234,35 +347,31 @@ public class ImportInspectionDialog extends JDialog {
         progressBar.setValue(current);
     }
 
-    /**
-     * Wrapper for addEntries(List) that takes a single entry.
-     *
-     * @param entry The entry to add.
-     */
+    /* (non-Javadoc)
+	 * @see net.sf.jabref.gui.ImportInspection#addEntry(net.sf.jabref.BibtexEntry)
+	 */
     public void addEntry(BibtexEntry entry) {
-        List list = new ArrayList();
+        List<BibtexEntry> list = new ArrayList<BibtexEntry>();
         list.add(entry);
         addEntries(list);
     }
 
-    /**
-     * Add a List of entries to the table view. The table will update to show the
-     * added entries. Synchronizes on this.entries to avoid conflict with the delete button
-     * which removes entries.
-     *
-     * @param entries
-     */
-    public void addEntries(Collection entries) {
+    /* (non-Javadoc)
+	 * @see net.sf.jabref.gui.ImportInspection#addEntries(java.util.Collection)
+	 */
+    public void addEntries(Collection<BibtexEntry> entries) {
 
-        for (Iterator i = entries.iterator(); i.hasNext();) {
-            BibtexEntry entry = (BibtexEntry) i.next();
-            // We exploit the entry's search status for indicating "Keep" status:
+        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
+            // 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) && (Util.containsDuplicate(panel.database(), entry) != null))
-                || (internalDuplicate(this.entries, entry) != null)) {
+            if (((panel != null) && (DuplicateCheck.containsDuplicate(panel.database(), entry) != null)) ||
+                (internalDuplicate(this.entries, entry) != null)) {
                 entry.setGroupHit(true);
                 deselectAllDuplicates.setEnabled(true);
             }
@@ -273,47 +382,49 @@ public class ImportInspectionDialog extends JDialog {
     }
 
     /**
-     * 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.
+     * 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 entries, BibtexEntry entry) {
-        for (Iterator iterator = entries.iterator(); iterator.hasNext();) {
-            BibtexEntry othEntry = (BibtexEntry) iterator.next();
+    protected BibtexEntry internalDuplicate(Collection<BibtexEntry> entries, BibtexEntry entry) {
+        for (BibtexEntry othEntry : entries) {
             if (othEntry == entry)
                 continue; // Don't compare the entry to itself
-            if (Util.isDuplicate(entry, othEntry, Globals.duplicateThreshold))
+            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.
+     * Removes all selected entries from the table. Synchronizes on this.entries
+     * to prevent conflict with addition of new entries.
      */
+    @SuppressWarnings("unchecked")
     public void removeSelectedEntries() {
         int row = glTable.getSelectedRow();
-        List toRemove = new ArrayList();
+        List<Object> toRemove = new ArrayList<Object>();
         toRemove.addAll(selectionModel.getSelected());
         entries.getReadWriteLock().writeLock().lock();
-        for (Iterator i=toRemove.iterator(); i.hasNext();) {
-            entries.remove(i.next());
+        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);
+            row = Math.min(entries.size() - 1, row);
             glTable.addRowSelectionInterval(row, row);
         }
     }
 
-    /**
-     * When this method is called, the dialog will visually change to indicate
-     * that all entries are in place.
-     */
+    /* (non-Javadoc)
+	 * @see net.sf.jabref.gui.ImportInspection#entryListComplete()
+	 */
     public void entryListComplete() {
         progressBar.setIndeterminate(false);
         progressBar.setVisible(false);
@@ -323,26 +434,24 @@ public class ImportInspectionDialog extends JDialog {
         stop.setEnabled(false);
     }
 
-
     /**
      * This method returns a List containing all entries that are selected
      * (checkbox checked).
-     *
+     * 
      * @return a List containing the selected entries.
      */
-    public List getSelectedEntries() {
-        List selected = new ArrayList();
-        for (Iterator i=entries.iterator(); i.hasNext();) {
-            BibtexEntry entry = (BibtexEntry)i.next();
+    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));
-            }
-        }*/
+        /*
+         * 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;
     }
 
@@ -351,8 +460,8 @@ public class ImportInspectionDialog extends JDialog {
      */
     public void generateKeySelectedEntry() {
         if (selectionModel.getSelected().size() != 1)
-                return;
-        BibtexEntry entry = (BibtexEntry) selectionModel.getSelected().get(0);
+            return;
+        BibtexEntry entry = selectionModel.getSelected().get(0);
         entries.getReadWriteLock().writeLock().lock();
         BibtexDatabase database = null;
         // Relate to the existing database, if any:
@@ -370,18 +479,19 @@ public class ImportInspectionDialog extends JDialog {
         }
         // Generate a unique key:
         LabelPatternUtil.makeLabel(Globals.prefs.getKeyPattern(), database, entry);
-        // Remove the entry from the database again, since we only added it in order to
+        // 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.
+     * 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();
@@ -392,37 +502,39 @@ public class ImportInspectionDialog extends JDialog {
         // ... or create a temporary one:
         else
             database = new BibtexDatabase();
-        List keys = new ArrayList(entries.size());
-        // Iterate over the entries, add them to the database we are working with,
+        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 i = entries.iterator(); i.hasNext();) {
-            BibtexEntry entry = (BibtexEntry) i.next();
-            //if (newDatabase) {
+        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(Globals.prefs.getKeyPattern(), 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
+        // 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 i = entries.iterator(); i.hasNext();) {
-            BibtexEntry entry = (BibtexEntry) i.next();
+        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, boolean add) {
-        final AbstractAction action = getAction(node, add);
+    public void insertNodes(JMenu menu, GroupTreeNode node) {
+        final AbstractAction action = getAction(node);
 
         if (node.getChildCount() == 0) {
             menu.add(action);
@@ -434,7 +546,7 @@ public class ImportInspectionDialog extends JDialog {
         JMenu submenu = null;
         if (node.getGroup() instanceof AllEntriesGroup) {
             for (int i = 0; i < node.getChildCount(); ++i) {
-                insertNodes(menu, (GroupTreeNode) node.getChildAt(i), add);
+                insertNodes(menu, (GroupTreeNode) node.getChildAt(i));
             }
         } else {
             submenu = new JMenu("[" + node.getGroup().getName() + "]");
@@ -444,31 +556,29 @@ public class ImportInspectionDialog extends JDialog {
             submenu.add(action);
             submenu.add(new JPopupMenu.Separator());
             for (int i = 0; i < node.getChildCount(); ++i)
-                insertNodes(submenu, (GroupTreeNode) node.getChildAt(i), add);
+                insertNodes(submenu, (GroupTreeNode) node.getChildAt(i));
             menu.add(submenu);
             if (submenu.isEnabled())
                 menu.setEnabled(true);
         }
     }
 
-    private AbstractAction getAction(GroupTreeNode node, boolean add) {
-        AbstractAction action = add ? (AbstractAction) new AddToGroupAction(node)
-                : (AbstractAction) new RemoveFromGroupAction(node);
+    protected AbstractAction getAction(GroupTreeNode node) {
+        AbstractAction action = new AddToGroupAction(node);
         AbstractGroup group = node.getGroup();
-        action.setEnabled(/*add ? */group.supportsAdd());// && !group.containsAll(selection)
-        //        : group.supportsRemove() && group.containsAny(selection));
+        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.
+     * 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 {
-        private GroupTreeNode node;
+
+        protected GroupTreeNode node;
 
         public AddToGroupAction(GroupTreeNode node) {
             super(node.getGroup().getName());
@@ -478,13 +588,14 @@ public class ImportInspectionDialog extends JDialog {
         public void actionPerformed(ActionEvent event) {
 
             selectionModel.getSelected().getReadWriteLock().writeLock().lock();
-            for (Iterator i=selectionModel.getSelected().iterator(); i.hasNext();) {
-                BibtexEntry entry = (BibtexEntry)i.next();
-                // We store the groups this entry should be added to in a Set in the Map:
-                Set groups = (Set) groupAdditions.get(entry);
+            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();
+                    groups = new HashSet<GroupTreeNode>();
                     groupAdditions.put(entry, groups);
                 }
                 // Add the group:
@@ -494,43 +605,37 @@ public class ImportInspectionDialog extends JDialog {
         }
     }
 
-    class RemoveFromGroupAction extends AbstractAction {
-        private GroupTreeNode node;
-
-        public RemoveFromGroupAction(GroupTreeNode node) {
-            this.node = node;
-        }
-
-        public void actionPerformed(ActionEvent event) {
-        }
-    }
-
     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
+            // 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 i=entries.iterator(); i.hasNext();) {
+                for (Iterator<BibtexEntry> i = entries.iterator(); i.hasNext();) {
 
-                    BibtexEntry entry = (BibtexEntry)i.next();
-                    // Only check entries that are to be imported. Keep status is indicated
+                    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
+                    // 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);
+                            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)
@@ -540,37 +645,36 @@ public class ImportInspectionDialog extends JDialog {
                 }
             }
 
-            // The compund undo action used to contain all changes made by this dialog.
+            // 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 i=entriesToDelete.iterator(); i.hasNext();) {
-                    BibtexEntry entry = (BibtexEntry)i.next();
+                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());
                 }
             }
-            /*panel.undoManager.addEdit(undo);
-            panel.refreshTable();
-            panel.markBaseChanged();*/
 
-
-            // If "Generate keys" is checked, generate keys unless it's already been done:
+            // 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 selected = getSelectedEntries();
+            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 HashMap(), Globals.prefs.get("defaultEncoding"));
+                    panel = new BasePanel(frame, base, null, new HashMap<String, String>(),
+                        Globals.prefs.get("defaultEncoding"));
                 }
 
                 boolean groupingCanceled = false;
@@ -579,24 +683,28 @@ public class ImportInspectionDialog extends JDialog {
                 Util.setAutomaticFields(selected, Globals.prefs.getBoolean("overwriteOwner"),
                     Globals.prefs.getBoolean("overwriteTimeStamp"));
 
-
-                for (Iterator i = selected.iterator(); i.hasNext();) {
-                    BibtexEntry entry = (BibtexEntry) i.next();
-                    //entry.clone();
+                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 groups = (Set) groupAdditions.get(entry);
+                    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
+                            // 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?"),
+                            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);
@@ -606,11 +714,12 @@ public class ImportInspectionDialog extends JDialog {
 
                         // If the key was list, or has been list now, go ahead:
                         if (entry.getField(BibtexFields.KEY_FIELD) != null) {
-                            for (Iterator i2 = groups.iterator(); i2.hasNext();) {
-                                GroupTreeNode node = (GroupTreeNode) i2.next();
+                            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});
+                                    AbstractUndoableEdit undo = node.getGroup().add(
+                                        new BibtexEntry[] { entry });
                                     if (undo instanceof UndoableChangeAssignment)
                                         ((UndoableChangeAssignment) undo).setEditedNode(node);
                                     ce.addEdit(undo);
@@ -625,7 +734,8 @@ public class ImportInspectionDialog extends JDialog {
                     try {
                         entry.setId(Util.createNeutralId());
                         panel.database().insertEntry(entry);
-                        // Let the autocompleters, if any, harvest words from the 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) {
@@ -639,28 +749,31 @@ public class ImportInspectionDialog extends JDialog {
 
             dispose();
             SwingUtilities.invokeLater(new Thread() {
+
                 public void run() {
                     if (newDatabase) {
                         frame.addTab(panel, null, true);
                     }
                     panel.markBaseChanged();
-                    for (Iterator i = callBacks.iterator(); i.hasNext();) {
-                        ((CallBack) i.next()).done(selected.size());
+
+                    if (selected.size() > 0) {
+                        frame.output(Globals.lang("Number of entries successfully imported") +
+                            ": " + selected.size());
+                    } else {
+                        frame.output(Globals.lang("No entries imported."));
                     }
                 }
             });
-
         }
-
     }
 
-    private void signalStopFetching() {
-        for (Iterator i = callBacks.iterator(); i.hasNext();) {
-            ((CallBack) i.next()).stopFetching();
+    protected void signalStopFetching() {
+        for (CallBack c : callBacks) {
+            c.stopFetching();
         }
     }
 
-    private void setWidths() {
+    protected void setWidths() {
         TableColumnModel cm = glTable.getColumnModel();
         cm.getColumn(0).setPreferredWidth(55);
         cm.getColumn(0).setMinWidth(55);
@@ -673,14 +786,13 @@ public class ImportInspectionDialog extends JDialog {
         }
 
         for (int i = 0; i < fields.length; i++) {
-            int width = BibtexFields.getFieldLength( fields[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();
@@ -688,24 +800,26 @@ public class ImportInspectionDialog extends JDialog {
     }
 
     class CancelListener implements ActionListener {
+
         public void actionPerformed(ActionEvent event) {
             signalStopFetching();
             dispose();
-            for (Iterator i = callBacks.iterator(); i.hasNext();) {
-                ((CallBack) i.next()).cancelled();
-            }
+            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.
+            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"));
         }
@@ -716,9 +830,10 @@ public class ImportInspectionDialog extends JDialog {
     }
 
     class MyTable extends JTable {
+
         public MyTable(TableModel model) {
             super(model);
-            //setDefaultRenderer(Boolean.class, );
+            // setDefaultRenderer(Boolean.class, );
         }
 
         public boolean isCellEditable(int row, int col) {
@@ -728,8 +843,7 @@ public class ImportInspectionDialog extends JDialog {
 
     class MyTableModel extends DefaultTableModel {
 
-
-        public Class getColumnClass(int i) {
+        public Class<?> getColumnClass(int i) {
             if (i == 0)
                 return Boolean.class;
             else
@@ -739,7 +853,8 @@ public class ImportInspectionDialog extends JDialog {
     }
 
     class SelectionButton implements ActionListener {
-        private Boolean enable;
+
+        protected Boolean enable;
 
         public SelectionButton(boolean enable) {
             this.enable = Boolean.valueOf(enable);
@@ -752,25 +867,27 @@ public class ImportInspectionDialog extends JDialog {
             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);
+                if (glTable.getValueAt(i, DUPL_COL) != null) {
+                    glTable.setValueAt(Boolean.valueOf(false), i, 0);
                 }
             }
             glTable.repaint();
         }
     }
-    
-    class EntrySelectionListener implements ListEventListener {
 
-        public void listChanged(ListEvent listEvent) {
+    class EntrySelectionListener implements ListEventListener<BibtexEntry> {
+
+        public void listChanged(ListEvent<BibtexEntry> listEvent) {
             if (listEvent.getSourceList().size() == 1) {
-                preview.setEntry((BibtexEntry) listEvent.getSourceList().get(0));
+                preview.setEntry(listEvent.getSourceList().get(0));
                 contentPane.setDividerLocation(0.5f);
                 SwingUtilities.invokeLater(new Runnable() {
+
                     public void run() {
                         preview.scrollRectToVisible(toRect);
                     }
@@ -779,7 +896,6 @@ public class ImportInspectionDialog extends JDialog {
         }
     }
 
-
     /**
      * This class handles clicks on the table that should trigger specific
      * events, like opening the popup menu.
@@ -787,38 +903,37 @@ public class ImportInspectionDialog extends JDialog {
     class TableClickListener implements MouseListener {
 
         public boolean isIconColumn(int col) {
-            return (col == FILE_COL) || (col == PDF_COL) || (col == PS_COL)
-                    || (col == URL_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());
+            final int col = glTable.columnAtPoint(e.getPoint()), row = glTable.rowAtPoint(e
+                .getPoint());
             if (isIconColumn(col)) {
-                BibtexEntry entry = (BibtexEntry)sortedList.get(row);
+                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;
+                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;
                 }
             }
         }
@@ -832,19 +947,22 @@ public class ImportInspectionDialog extends JDialog {
         }
 
         /**
-         * 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.
+         * 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;
+            case FILE_COL:
+                showFileFieldMenu(e);
+                break;
+            default:
+                showOrdinaryRightClickMenu(e);
+                break;
             }
 
         }
@@ -855,42 +973,45 @@ public class ImportInspectionDialog extends JDialog {
 
         /**
          * Show the popup menu for the FILE field.
-         * @param e The mouse event that triggered the popup.
+         * 
+         * @param e
+         *            The mouse event that triggered the popup.
          */
         public void showFileFieldMenu(MouseEvent e) {
             final int row = glTable.rowAtPoint(e.getPoint());
-            BibtexEntry entry = (BibtexEntry)sortedList.get(row);
+            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);
+            fileList.setContent((String) o);
             // If there are one or more links, open the first one:
-            for (int i=0; i<fileList.getRowCount(); i++) {
+            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()));
+                menu.add(new ExternalFileMenuItem(panel.frame(), entry, description, flEntry
+                    .getLink(), flEntry.getType().getIcon(), panel.metaData(), flEntry.getType()));
                 count++;
             }
             if (count == 0) {
                 showOrdinaryRightClickMenu(e);
-            }
-            else
+            } 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.
+         * 
+         * @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 = (BibtexEntry)sortedList.get(row);
+            BibtexEntry entry = sortedList.get(row);
 
             Object link = entry.getField(fieldName);
             try {
@@ -901,9 +1022,9 @@ public class ImportInspectionDialog extends JDialog {
             }
         }
 
-
         public void mouseReleased(MouseEvent e) {
-            // Check if the user has right-clicked. If so, open the right-click menu.
+            // Check if the user has right-clicked. If so, open the right-click
+            // menu.
             if (e.isPopupTrigger()) {
                 showPopup(e);
                 return;
@@ -911,32 +1032,36 @@ public class ImportInspectionDialog extends JDialog {
         }
 
         public void mousePressed(MouseEvent e) {
-            // Check if the user has right-clicked. If so, open the right-click menu.
+            // 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());
+            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 = (BibtexEntry)sortedList.get(row);
-                BibtexEntry other = Util.containsDuplicate(panel.database(), first);
+                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);
+                    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
+                        // 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
+                        // Clear duplicate icon, which is controlled by the
+                        // group hit
                         // field of the entry:
                         entries.getReadWriteLock().writeLock().lock();
                         first.setGroupHit(false);
@@ -957,8 +1082,8 @@ public class ImportInspectionDialog extends JDialog {
                 // 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);
+                    int answer = DuplicateResolverDialog.resolveDuplicate(
+                        ImportInspectionDialog.this, first, other);
                     if (answer == DuplicateResolverDialog.KEEP_UPPER) {
                         entries.remove(other);
                         first.setGroupHit(false);
@@ -973,6 +1098,7 @@ public class ImportInspectionDialog extends JDialog {
     }
 
     class AttachUrl extends JMenuItem implements ActionListener {
+
         public AttachUrl() {
             super(Globals.lang("Attach URL"));
             addActionListener(this);
@@ -981,8 +1107,9 @@ public class ImportInspectionDialog extends JDialog {
         public void actionPerformed(ActionEvent event) {
             if (selectionModel.getSelected().size() != 1)
                 return;
-            BibtexEntry entry = (BibtexEntry) selectionModel.getSelected().get(0);
-            String result = JOptionPane.showInputDialog(ths, Globals.lang("Enter URL"), entry.getField("url"));
+            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("")) {
@@ -1009,13 +1136,13 @@ public class ImportInspectionDialog extends JDialog {
         public void actionPerformed(ActionEvent actionEvent) {
             if (selectionModel.getSelected().size() != 1)
                 return;
-            entry = (BibtexEntry) selectionModel.getSelected().get(0);
+            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);
+                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();
@@ -1032,7 +1159,7 @@ public class ImportInspectionDialog extends JDialog {
         public void downloadComplete(FileListEntry file) {
             ImportInspectionDialog.this.toFront(); // Hack
             FileListTableModel model = new FileListTableModel();
-            String oldVal = (String)entry.getField(GUIGlobals.FILE_FIELD);
+            String oldVal = entry.getField(GUIGlobals.FILE_FIELD);
             if (oldVal != null)
                 model.setContent(oldVal);
             model.addEntry(model.getRowCount(), file);
@@ -1053,25 +1180,28 @@ public class ImportInspectionDialog extends JDialog {
         public void actionPerformed(ActionEvent actionEvent) {
             if (selectionModel.getSelected().size() != 1)
                 return;
-            final BibtexEntry entry = (BibtexEntry) selectionModel.getSelected().get(0);
+            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);
+                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.
+                } else
+                    return; // Can't go on without the bibtex key.
             }
             final FileListTableModel model = new FileListTableModel();
-            String oldVal = (String)entry.getField(GUIGlobals.FILE_FIELD);
+            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:
+            // 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();
@@ -1098,13 +1228,14 @@ public class ImportInspectionDialog extends JDialog {
         public void actionPerformed(ActionEvent actionEvent) {
             if (selectionModel.getSelected().size() != 1)
                 return;
-            entry = (BibtexEntry) selectionModel.getSelected().get(0);
+            entry = selectionModel.getSelected().get(0);
             FileListEntry flEntry = new FileListEntry("", "", null);
-            FileListEntryEditor editor = new FileListEntryEditor(frame, flEntry, false, true, metaData);
-            editor.setVisible(true);                                                 
+            FileListEntryEditor editor = new FileListEntryEditor(frame, flEntry, false, true,
+                metaData);
+            editor.setVisible(true);
             if (editor.okPressed()) {
                 FileListTableModel model = new FileListTableModel();
-                String oldVal = (String)entry.getField(GUIGlobals.FILE_FIELD);
+                String oldVal = entry.getField(GUIGlobals.FILE_FIELD);
                 if (oldVal != null)
                     model.setContent(oldVal);
                 model.addEntry(model.getRowCount(), flEntry);
@@ -1118,7 +1249,7 @@ public class ImportInspectionDialog extends JDialog {
         public void downloadComplete(FileListEntry file) {
             ImportInspectionDialog.this.toFront(); // Hack
             FileListTableModel model = new FileListTableModel();
-            String oldVal = (String)entry.getField(GUIGlobals.FILE_FIELD);
+            String oldVal = entry.getField(GUIGlobals.FILE_FIELD);
             if (oldVal != null)
                 model.setContent(oldVal);
             model.addEntry(model.getRowCount(), file);
@@ -1130,10 +1261,11 @@ public class ImportInspectionDialog extends JDialog {
     }
 
     class AttachFile extends JMenuItem implements ActionListener {
+
         String fileType;
 
         public AttachFile(String fileType) {
-            super(Globals.lang("Attach %0 file", new String[]{fileType.toUpperCase()}));
+            super(Globals.lang("Attach %0 file", new String[] { fileType.toUpperCase() }));
             this.fileType = fileType;
             addActionListener(this);
         }
@@ -1142,12 +1274,15 @@ public class ImportInspectionDialog extends JDialog {
 
             if (selectionModel.getSelected().size() != 1)
                 return;
-            BibtexEntry entry = (BibtexEntry) selectionModel.getSelected().get(0);
-            // Call up a dialog box that provides Browse, Download and auto buttons:
-            AttachFileDialog diag = new AttachFileDialog(ths, metaData, entry, fileType);
-            Util.placeDialog(diag, ths);
+            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:
+            // 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());
@@ -1158,25 +1293,11 @@ public class ImportInspectionDialog extends JDialog {
         }
     }
 
-    public static interface CallBack {
-        // 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 the import.
-        public void cancelled();
-
-        // 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();
-    }
-
-
-    private void setupComparatorChooser() {
+    @SuppressWarnings("unchecked")
+    protected void setupComparatorChooser() {
         // First column:
-        java.util.List comparators = comparatorChooser.getComparatorsForColumn(0);
+        java.util.List<Comparator<BibtexEntry>> comparators = comparatorChooser
+            .getComparatorsForColumn(0);
         comparators.clear();
 
         comparators = comparatorChooser.getComparatorsForColumn(1);
@@ -1187,30 +1308,32 @@ public class ImportInspectionDialog extends JDialog {
             comparators = comparatorChooser.getComparatorsForColumn(i);
             comparators.clear();
             if (i == FILE_COL)
-                comparators.add(new IconComparator(new String[] {GUIGlobals.FILE_FIELD}));
+                comparators.add(new IconComparator(new String[] { GUIGlobals.FILE_FIELD }));
             else if (i == PDF_COL)
-                comparators.add(new IconComparator(new String[] {"pdf"}));
+                comparators.add(new IconComparator(new String[] { "pdf" }));
             else if (i == PS_COL)
-                comparators.add(new IconComparator(new String[] {"ps"}));
+                comparators.add(new IconComparator(new String[] { "ps" }));
             else if (i == URL_COL)
-                comparators.add(new IconComparator(new String[] {"url"}));
+                comparators.add(new IconComparator(new String[] { "url" }));
 
         }
         // Remaining columns:
-        for (int i = PAD; i < PAD+fields.length; i++) {
+        for (int i = PAD; i < PAD + fields.length; i++) {
             comparators = comparatorChooser.getComparatorsForColumn(i);
             comparators.clear();
-            comparators.add(new FieldComparator(fields[i-PAD]));
+            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
-        */
+        /*
+         * // 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();
@@ -1218,24 +1341,29 @@ public class ImportInspectionDialog extends JDialog {
     }
 
     class EntryTable extends JTable {
+
         GeneralRenderer renderer = new GeneralRenderer(Color.white);
+
         public EntryTable(TableModel model) {
             super(model);
         }
+
         public TableCellRenderer getCellRenderer(int row, int column) {
             return column == 0 ? getDefaultRenderer(Boolean.class) : renderer;
         }
 
-        /*public TableCellEditor getCellEditor() {
-            return getDefaultEditor(Boolean.class);
-        } */
+        /*
+         * public TableCellEditor getCellEditor() { return
+         * getDefaultEditor(Boolean.class); }
+         */
 
-        public Class getColumnClass(int col) {
+        public Class<?> getColumnClass(int col) {
             if (col == 0)
                 return Boolean.class;
             else if (col < PAD)
                 return JLabel.class;
-            else return String.class;
+            else
+                return String.class;
         }
 
         public boolean isCellEditable(int row, int column) {
@@ -1243,74 +1371,80 @@ public class ImportInspectionDialog extends JDialog {
         }
 
         public void setValueAt(Object value, int row, int column) {
-            // Only column 0, which is controlled by BibtexEntry.searchHit, is editable:
+            // Only column 0, which is controlled by BibtexEntry.searchHit, is
+            // editable:
             entries.getReadWriteLock().writeLock().lock();
-            BibtexEntry entry = (BibtexEntry)sortedList.get(row);
-            entry.setSearchHit(((Boolean)value).booleanValue());
+            BibtexEntry entry = sortedList.get(row);
+            entry.setSearchHit(((Boolean) value).booleanValue());
             entries.getReadWriteLock().writeLock().unlock();
         }
     }
 
-    class EntryTableFormat implements TableFormat {
+    class EntryTableFormat implements TableFormat<BibtexEntry> {
+
         public int getColumnCount() {
-            return PAD+fields.length;
+            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 Util.nCase(fields[i - PAD]);
             }
             return "";
         }
 
-        public Object getColumnValue(Object object, int i) {
-            BibtexEntry entry = (BibtexEntry)object;
+        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());
-                            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;
+                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];
+            } else {
+                String field = fields[i - PAD];
                 if (field.equals("author") || field.equals("editor")) {
-                    String contents = (String)entry.getField(field);
-                    return (contents != null) ?
-                        AuthorList.fixAuthor_Natbib(contents) : "";
-                }
-                else
+                    String contents = entry.getField(field);
+                    return (contents != null) ? AuthorList.fixAuthor_Natbib(contents) : "";
+                } else
                     return entry.getField(field);
             }
         }
diff --git a/src/java/net/sf/jabref/gui/IsMarkedComparator.java b/src/java/net/sf/jabref/gui/IsMarkedComparator.java
index 4c5e170..6f86602 100644
--- a/src/java/net/sf/jabref/gui/IsMarkedComparator.java
+++ b/src/java/net/sf/jabref/gui/IsMarkedComparator.java
@@ -5,24 +5,14 @@ import net.sf.jabref.Util;
 
 import java.util.Comparator;
 
-/**
- * Created by IntelliJ IDEA.
- * User: alver
- * Date: Oct 14, 2005
- * Time: 8:25:15 PM
- * To change this template use File | Settings | File Templates.
- */
-public class IsMarkedComparator implements Comparator {
+public class IsMarkedComparator implements Comparator<BibtexEntry> {
 
-    public int compare(Object o1, Object o2) {
+	public int compare(BibtexEntry e1, BibtexEntry e2) {
 
-        BibtexEntry e1 = (BibtexEntry)o1,
-                 e2 = (BibtexEntry)o2;
-
-        if (Util.isMarked(e1))
-            return Util.isMarked(e2) ? 0 : -1;
-
-        else return Util.isMarked(e2) ? 1 : 0;
-    }
+		if (Util.isMarked(e1))
+			return Util.isMarked(e2) ? 0 : -1;
+		else
+			return Util.isMarked(e2) ? 1 : 0;
+	}
 
 }
diff --git a/src/java/net/sf/jabref/gui/MainTable.java b/src/java/net/sf/jabref/gui/MainTable.java
index ed59247..02c3259 100644
--- a/src/java/net/sf/jabref/gui/MainTable.java
+++ b/src/java/net/sf/jabref/gui/MainTable.java
@@ -1,29 +1,27 @@
 package net.sf.jabref.gui;
 
-import net.sf.jabref.*;
-import net.sf.jabref.search.SearchMatcher;
-import net.sf.jabref.search.HitOrMissComparator;
-import net.sf.jabref.groups.EntryTableTransferHandler;
+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 javax.swing.*;
 import javax.swing.plaf.TableUI;
 import javax.swing.table.TableCellRenderer;
-import javax.swing.table.TableModel;
 import javax.swing.table.TableColumnModel;
 
-import ca.odell.glazedlists.SortedList;
+import net.sf.jabref.*;
+import net.sf.jabref.groups.EntryTableTransferHandler;
+import net.sf.jabref.search.HitOrMissComparator;
 import ca.odell.glazedlists.EventList;
-import ca.odell.glazedlists.gui.AbstractTableComparatorChooser;
-import ca.odell.glazedlists.matchers.Matcher;
+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.TableComparatorChooser;
 import ca.odell.glazedlists.swing.EventTableModel;
-
-import java.awt.*;
-import java.awt.event.ActionListener;
-import java.awt.event.ActionEvent;
-import java.util.Comparator;
+import ca.odell.glazedlists.swing.TableComparatorChooser;
 
 /**
  * The central table which displays the bibtex entries.
@@ -36,14 +34,15 @@ import java.util.Comparator;
 public class MainTable extends JTable {
 	
     private MainTableFormat tableFormat;
-    private SortedList sortedForMarking, sortedForTable, sortedForSearch, sortedForGrouping;
+    private BasePanel panel;
+    private SortedList<BibtexEntry> sortedForMarking, sortedForTable, sortedForSearch, sortedForGrouping;
     private boolean tableColorCodes, showingFloatSearch=false, showingFloatGrouping=false;
-    private EventSelectionModel selectionModel;
-    private TableComparatorChooser comparatorChooser;
+    private EventSelectionModel<BibtexEntry> selectionModel;
+    private TableComparatorChooser<BibtexEntry> comparatorChooser;
     private JScrollPane pane;
-    private Comparator searchComparator, groupComparator,
+    private Comparator<BibtexEntry> searchComparator, groupComparator,
             markingComparator = new IsMarkedComparator();
-    private Matcher searchMatcher, groupMatcher;
+    private Matcher<BibtexEntry> searchMatcher, groupMatcher;
 
     // Constants used to define how a cell should be rendered.
     public static final int REQUIRED = 1, OPTIONAL = 2,
@@ -59,19 +58,20 @@ public class MainTable extends JTable {
     }
 
 
-    public MainTable(MainTableFormat tableFormat, EventList list, JabRefFrame frame,
+    public MainTable(MainTableFormat tableFormat, EventList<BibtexEntry> list, JabRefFrame frame,
                      BasePanel panel) {
         super();
         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(list, null);
+        sortedForTable = new SortedList<BibtexEntry>(list, null);
         // This SortedList applies afterwards, and floats marked entries:
-        sortedForMarking = new SortedList(sortedForTable, null);
+        sortedForMarking = new SortedList<BibtexEntry>(sortedForTable, null);
         // This SortedList applies afterwards, and can float search hits:
-        sortedForSearch = new SortedList(sortedForMarking, null);
+        sortedForSearch = new SortedList<BibtexEntry>(sortedForMarking, null);
         // This SortedList applies afterwards, and can float grouping hits:
-        sortedForGrouping = new SortedList(sortedForSearch, null);
+        sortedForGrouping = new SortedList<BibtexEntry>(sortedForSearch, null);
 
 
         searchMatcher = null;
@@ -79,11 +79,11 @@ public class MainTable extends JTable {
         searchComparator = null;//new HitOrMissComparator(searchMatcher);
         groupComparator = null;//new HitOrMissComparator(groupMatcher);
 
-        EventTableModel tableModel = new EventTableModel(sortedForGrouping, tableFormat);
+        EventTableModel<BibtexEntry> tableModel = new EventTableModel<BibtexEntry>(sortedForGrouping, tableFormat);
         setModel(tableModel);
 
         tableColorCodes = Globals.prefs.getBoolean("tableColorCodesOn");
-        selectionModel = new EventSelectionModel(sortedForGrouping);
+        selectionModel = new EventSelectionModel<BibtexEntry>(sortedForGrouping);
         setSelectionModel(selectionModel);
         pane = new JScrollPane(this);
         pane.getViewport().setBackground(Globals.prefs.getColor("tableBackground"));
@@ -91,7 +91,8 @@ public class MainTable extends JTable {
         comparatorChooser = new MyTableComparatorChooser(this, sortedForTable,
                 TableComparatorChooser.MULTIPLE_COLUMN_KEYBOARD);
         
-        final EventList selected = getSelected();
+        // TODO: Figure out, whether this call is needed.
+        getSelected();
 
         // enable DnD
         setDragEnabled(true);
@@ -124,7 +125,7 @@ public class MainTable extends JTable {
      * 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 m) {
+    public void showFloatSearch(Matcher<BibtexEntry> m) {
         showingFloatSearch = true;
         searchMatcher = m;
         searchComparator = new HitOrMissComparator(m);
@@ -146,7 +147,7 @@ public class MainTable extends JTable {
      * 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 m) {
+    public void showFloatGrouping(Matcher<BibtexEntry> m) {
         showingFloatGrouping = true;
         groupMatcher = m;
         groupComparator = new HitOrMissComparator(m);
@@ -168,10 +169,10 @@ public class MainTable extends JTable {
         refreshSorting();
     }
 
-    public EventList getTableRows() {
+    public EventList<BibtexEntry> getTableRows() {
         return sortedForGrouping;
     }
-    public void addSelectionListener(ListEventListener listener) {
+    public void addSelectionListener(ListEventListener<BibtexEntry> listener) {
         getSelected().addListEventListener(listener);
     }
 
@@ -262,12 +263,12 @@ public class MainTable extends JTable {
     }
 
     public BibtexEntry getEntryAt(int row) {
-        return (BibtexEntry)sortedForGrouping.get(row);
+        return sortedForGrouping.get(row);
     }
 
     public BibtexEntry[] getSelectedEntries() {
         final BibtexEntry[] BE_ARRAY = new BibtexEntry[0];
-        return (BibtexEntry[]) getSelected().toArray(BE_ARRAY);
+        return getSelected().toArray(BE_ARRAY);
     }
 
     /**
@@ -276,11 +277,12 @@ public class MainTable extends JTable {
      * columns, but this is where the Comparators are defined. Also, the ComparatorChooser
      * is initialized with the sort order defined in Preferences.
      */
-    private void setupComparatorChooser() {
+    @SuppressWarnings("unchecked")
+	private void setupComparatorChooser() {
         // First column:
-        java.util.List comparators = comparatorChooser.getComparatorsForColumn(0);
+        List<Comparator<BibtexEntry>> comparators = comparatorChooser.getComparatorsForColumn(0);
         comparators.clear();
-        comparators.add(new FirstColumnComparator());
+        comparators.add(new FirstColumnComparator(panel.database()));
 
         // Icon columns:
         for (int i = 1; i < tableFormat.padleft; i++) {
@@ -317,7 +319,7 @@ public class MainTable extends JTable {
 
     public int getCellStatus(int row, int col) {
         try {
-            BibtexEntry be = (BibtexEntry)sortedForGrouping.get(row);
+            BibtexEntry be = sortedForGrouping.get(row);
             BibtexEntryType type = be.getType();
             String columnName = tableFormat.getColumnName(col).toLowerCase();
             if (columnName.equals(BibtexFields.KEY_FIELD) || type.isRequired(columnName)) {
@@ -333,7 +335,7 @@ public class MainTable extends JTable {
         }
     }
 
-    public EventList getSelected() {
+    public EventList<BibtexEntry> getSelected() {
         return selectionModel.getSelected();
     }
 
@@ -346,21 +348,14 @@ public class MainTable extends JTable {
         return tableFormat.getIconTypeForColumn(column);
     }
 
-    private boolean nonZeroField(int row, String field) {
-        BibtexEntry be = (BibtexEntry)sortedForGrouping.get(row);
-        Object o = be.getField(field);
-        return ((o == null) || !o.equals("0"));
-    }
-
-    private boolean matches(int row, Matcher m) {
-        Object o = sortedForGrouping.get(row);
-        return m.matches(o);
+    private boolean matches(int row, Matcher<BibtexEntry> m) {
+        return m.matches(sortedForGrouping.get(row));
     }
 
     private boolean isComplete(int row) {
         try {
-            BibtexEntry be = (BibtexEntry)sortedForGrouping.get(row);
-            return be.hasAllRequiredFields();
+            BibtexEntry be = sortedForGrouping.get(row);
+            return be.hasAllRequiredFields(panel.database());
         } catch (NullPointerException ex) {
             //System.out.println("Exception: isComplete");
             return true;
@@ -369,7 +364,7 @@ public class MainTable extends JTable {
 
     private boolean isMarked(int row) {
         try {
-            BibtexEntry be = (BibtexEntry)sortedForGrouping.get(row);
+            BibtexEntry be = sortedForGrouping.get(row);
             return Util.isMarked(be);
         } catch (NullPointerException ex) {
             //System.out.println("Exception: isMarked");
@@ -505,8 +500,8 @@ public class MainTable extends JTable {
         }
     }
 
-    class MyTableComparatorChooser extends TableComparatorChooser {
-        public MyTableComparatorChooser(JTable table, SortedList list,
+    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
@@ -518,12 +513,6 @@ public class MainTable extends JTable {
                 }
             });
         }
-/*
-        protected void columnClicked(int i, int i1) {
-
-            super.columnClicked(i, i1);
-            refreshSorting();
-        }*/
     }
 
     /**
@@ -545,9 +534,10 @@ public class MainTable extends JTable {
      * @param index The column number.
      * @return The Comparator, or null if none is set.
      */
-    public Comparator getComparatorForColumn(int index) {
-        java.util.List l = comparatorChooser.getComparatorsForColumn(index);
-        return l.size() == 0 ? null : (Comparator)l.get(0);
+    @SuppressWarnings("unchecked")
+	public Comparator<BibtexEntry> getComparatorForColumn(int index) {
+        List<Comparator<BibtexEntry>> l = comparatorChooser.getComparatorsForColumn(index);
+        return l.size() == 0 ? null : l.get(0);
     }
 
     /**
@@ -556,11 +546,11 @@ public class MainTable extends JTable {
      * @return The sort column number.
      */
     public int getSortingColumn(int number) {
-        java.util.List l = comparatorChooser.getSortingColumns();
+        List<Integer> l = comparatorChooser.getSortingColumns();
         if (l.size() <= number)
             return -1;
         else
-            return ((Integer)l.get(number)).intValue();
+            return (l.get(number)).intValue();
     }
 
     /**
@@ -570,7 +560,7 @@ public class MainTable extends JTable {
      * Note: The returned List must not be modified from the outside
      * @return The sorted list of entries.
      */
-    public SortedList getSortedForTable() {
+    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 179b460..3a900fb 100644
--- a/src/java/net/sf/jabref/gui/MainTableFormat.java
+++ b/src/java/net/sf/jabref/gui/MainTableFormat.java
@@ -15,8 +15,6 @@ import net.sf.jabref.Util;
 import ca.odell.glazedlists.gui.TableFormat;
 import ca.odell.glazedlists.matchers.Matcher;
 
-import javax.swing.*;
-
 /**
  * Created by IntelliJ IDEA.
  * User: alver
@@ -24,7 +22,7 @@ import javax.swing.*;
  * Time: 7:37:48 PM
  * To change this template use File | Settings | File Templates.
  */
-public class MainTableFormat implements TableFormat {
+public class MainTableFormat implements TableFormat<BibtexEntry> {
 
     public static final String[]
             PDF = {"pdf", "ps"}
@@ -39,7 +37,7 @@ public class MainTableFormat implements TableFormat {
     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 iconCols = new HashMap();
+    private HashMap<Integer, String[]> iconCols = new HashMap<Integer, String[]>();
     int[] nameCols = null;
     boolean namesAsIs, abbr_names, namesNatbib, namesFf, namesLf, namesLastOnly, showShort;
 
@@ -94,9 +92,8 @@ public class MainTableFormat implements TableFormat {
         return -1;
     }
 
-    public Object getColumnValue(Object object, int col) {
+    public Object getColumnValue(BibtexEntry be, int col) {
         Object o;
-        BibtexEntry be = (BibtexEntry) object;
         String[] iconType = getIconTypeForColumn(col); // If non-null, indicates an icon column's type.
         if (col == 0) {
             o = "#";// + (row + 1);
@@ -112,7 +109,7 @@ public class MainTableFormat implements TableFormat {
 
             // 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((String)be.getField(GUIGlobals.FILE_FIELD));
+                o = FileListTableModel.getFirstLabel(be.getField(GUIGlobals.FILE_FIELD));
             } else
                 o = GUIGlobals.getTableIcon(iconType[hasField]);
         } else if (columns[col - padleft].equals(GUIGlobals.TYPE_HEADER)) {
@@ -180,7 +177,7 @@ public class MainTableFormat implements TableFormat {
         // 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.
-        Vector tmp = new Vector(2, 1);
+        Vector<Integer> tmp = new Vector<Integer>(2, 1);
         for (int i = 0; i < columns.length; i++) {
             if (columns[i].equals("author")
                     || columns[i].equals("editor")) {
@@ -189,7 +186,7 @@ public class MainTableFormat implements TableFormat {
         }
         nameCols = new int[tmp.size()];
         for (int i = 0; i < nameCols.length; i++) {
-            nameCols[i] = ((Integer) tmp.elementAt(i)).intValue();
+            nameCols[i] = tmp.elementAt(i).intValue();
         }
     }
 
@@ -199,23 +196,21 @@ public class MainTableFormat implements TableFormat {
 
 
 
-    static class NoSearchMatcher implements Matcher {
-        public boolean matches(Object object) {
+    static class NoSearchMatcher implements Matcher<BibtexEntry> {
+        public boolean matches(BibtexEntry object) {
             return true;
         }
     }
 
-    static class SearchMatcher implements Matcher {
-        private String field = BibtexFields.SEARCH;
+    static class SearchMatcher implements Matcher<BibtexEntry> {
         private SearchRuleSet ruleSet;
-        private Hashtable searchOptions;
+        private Hashtable<String, String> searchOptions;
 
-        public SearchMatcher(SearchRuleSet ruleSet, Hashtable searchOptions) {
+        public SearchMatcher(SearchRuleSet ruleSet, Hashtable<String, String> searchOptions) {
             this.ruleSet = ruleSet;
             this.searchOptions = searchOptions;
         }
-        public boolean matches(Object object) {
-            BibtexEntry entry = (BibtexEntry)object;
+        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 82b7b94..268cda8 100644
--- a/src/java/net/sf/jabref/gui/MainTableSelectionListener.java
+++ b/src/java/net/sf/jabref/gui/MainTableSelectionListener.java
@@ -1,23 +1,42 @@
 package net.sf.jabref.gui;
 
-import ca.odell.glazedlists.event.ListEventListener;
-import ca.odell.glazedlists.event.ListEvent;
-import ca.odell.glazedlists.EventList;
-import ca.odell.glazedlists.SortedList;
-import net.sf.jabref.*;
-import net.sf.jabref.external.ExternalFileMenuItem;
-
-import javax.swing.*;
-import java.awt.event.*;
+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 java.util.Comparator;
-import java.util.List;
+
+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.FieldComparator;
+import net.sf.jabref.FocusRequester;
+import net.sf.jabref.GUIGlobals;
+import net.sf.jabref.Globals;
+import net.sf.jabref.PreviewPanel;
+import net.sf.jabref.PreviewPrefsTab;
+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.SortedList;
+import ca.odell.glazedlists.event.ListEvent;
+import ca.odell.glazedlists.event.ListEventListener;
 
 /**
  * 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, MouseListener,
+public class MainTableSelectionListener implements ListEventListener<BibtexEntry>, MouseListener,
         KeyListener, FocusListener {
 
     PreviewPanel[] previewPanel = null;
@@ -25,7 +44,7 @@ public class MainTableSelectionListener implements ListEventListener, MouseListe
     PreviewPanel preview;
     MainTable table;
     BasePanel panel;
-    EventList tableRows;
+    EventList<BibtexEntry> tableRows;
     private boolean previewActive = Globals.prefs.getBoolean("previewEnabled");
     private boolean workingOnPreview = false;
 
@@ -34,7 +53,6 @@ public class MainTableSelectionListener implements ListEventListener, MouseListe
     // key strokes cycle between all entries starting with the same letter:
     private int[] lastPressed = new int[20];
     private int lastPressedCount = 0;
-    private int lastQuickJumpRow = -1;
     private long lastPressedTime = 0;
     private long QUICK_JUMP_TIMEOUT = 2000;
 
@@ -49,13 +67,15 @@ public class MainTableSelectionListener implements ListEventListener, MouseListe
     }
 
     private void instantiatePreviews() {
-        previewPanel = new PreviewPanel[]
-                {new PreviewPanel(panel.database(), panel.metaData(), Globals.prefs.get("preview0")),
-                        new PreviewPanel(panel.database(), panel.metaData(), Globals.prefs.get("preview1"))};
-        BibtexEntry testEntry = PreviewPrefsTab.getTestEntry();
-        previewPanel[0].setEntry(testEntry);
-        previewPanel[1].setEntry(testEntry);
-    }
+		previewPanel = new PreviewPanel[] {
+			new PreviewPanel(panel.database(), null, panel, panel.metaData(), Globals.prefs
+				.get("preview0")),
+			new PreviewPanel(panel.database(), null, panel, panel.metaData(), Globals.prefs
+				.get("preview1")) };
+		BibtexEntry testEntry = PreviewPrefsTab.getTestEntry();
+		previewPanel[0].setEntry(testEntry);
+		previewPanel[1].setEntry(testEntry);
+	}
 
     public void updatePreviews() {
         try {
@@ -66,9 +86,8 @@ public class MainTableSelectionListener implements ListEventListener, MouseListe
         }
     }
 
-    public void listChanged(ListEvent e) {
-        //System.out.println(e);
-        EventList selected = e.getSourceList();
+    public void listChanged(ListEvent<BibtexEntry> e) {
+        EventList<BibtexEntry> selected = e.getSourceList();
         Object newSelected = null;
         while (e.next()) {
             if (e.getType() == ListEvent.INSERT) {
@@ -125,9 +144,9 @@ public class MainTableSelectionListener implements ListEventListener, MouseListe
             t.start();
             return;
         }
-        EventList list = table.getSelected();
+        EventList<BibtexEntry> list = table.getSelected();
         // Check if the entry to preview is still selected:
-        if ((list.size() != 1) || ((BibtexEntry)list.get(0) != toShow)) {
+        if ((list.size() != 1) || (list.get(0) != toShow)) {
             return;
         }
         final int mode = panel.getMode();
@@ -153,7 +172,7 @@ public class MainTableSelectionListener implements ListEventListener, MouseListe
 
     public void editSignalled() {
         if (table.getSelected().size() == 1) {
-            editSignalled((BibtexEntry) table.getSelected().get(0));
+            editSignalled(table.getSelected().get(0));
         }
     }
 
@@ -168,12 +187,13 @@ public class MainTableSelectionListener implements ListEventListener, MouseListe
     }
 
     public void mouseReleased(MouseEvent e) {
-        // First find the column on which the user has clicked.
-        final int col = table.columnAtPoint(e.getPoint()),
-                row = table.rowAtPoint(e.getPoint());
+        // First find the row on which the user has clicked.
+        final int row = table.rowAtPoint(e.getPoint());
+
 
         // Check if the user has right-clicked. If so, open the right-click menu.
         if (e.isPopupTrigger()) {
+            final int col = table.columnAtPoint(e.getPoint());
             // Check if the user has clicked on an icon cell to open url or pdf.
             final String[] iconType = table.getIconTypeForColumn(col);
             
@@ -193,7 +213,7 @@ public class MainTableSelectionListener implements ListEventListener, MouseListe
         // A double click on an entry should open the entry's editor.
         if (e.getClickCount() == 2) {
 
-            BibtexEntry toShow = (BibtexEntry) tableRows.get(row);
+            BibtexEntry toShow = tableRows.get(row);
             editSignalled(toShow);
         }
 
@@ -222,7 +242,7 @@ public class MainTableSelectionListener implements ListEventListener, MouseListe
             Object value = table.getValueAt(row, col);
             if (value == null) return; // No icon here, so we do nothing.
 
-            final BibtexEntry entry = (BibtexEntry) tableRows.get(row);
+            final BibtexEntry entry = tableRows.get(row);
 
             // Get the icon type. Corresponds to the field name.
             int hasField = -1;
@@ -239,7 +259,7 @@ public class MainTableSelectionListener implements ListEventListener, MouseListe
                     panel.output(Globals.lang("External viewer called") + ".");
 
                     Object link = entry.getField(fieldName);
-                    if (iconType == null) {
+                    if (link == null) {
                         Globals.logger("Error: no link to " + fieldName + ".");
                         return; // There is an icon, but the field is not set.
                     }
@@ -259,7 +279,10 @@ public class MainTableSelectionListener implements ListEventListener, MouseListe
                                         (panel.frame(), entry, "",
                                         flEntry.getLink(), flEntry.getType().getIcon(),
                                         panel.metaData(), flEntry.getType());
-                                item.actionPerformed(null);
+                                boolean success = item.openLink();
+                                if (!success) {
+                                    panel.output(Globals.lang("Unable to open link."));
+                                }
                             }
                         } else {
                             Util.openExternalViewer(panel.metaData(), (String)link, fieldName);
@@ -303,7 +326,7 @@ public class MainTableSelectionListener implements ListEventListener, MouseListe
      *  this table cell.
      */
     private void showIconRightClickMenu(MouseEvent e, int row, String[] iconType) {
-        BibtexEntry entry = (BibtexEntry) tableRows.get(row);
+        BibtexEntry entry = tableRows.get(row);
         JPopupMenu menu = new JPopupMenu();
         int count = 0;
 
@@ -374,7 +397,7 @@ public class MainTableSelectionListener implements ListEventListener, MouseListe
             panel.hideBottomComponent();
         } else {
             if (table.getSelected().size() > 0 ) {
-                updatePreview((BibtexEntry) table.getSelected().get(0), false);
+                updatePreview(table.getSelected().get(0), false);
             }
         }
     }
@@ -388,7 +411,7 @@ public class MainTableSelectionListener implements ListEventListener, MouseListe
             this.preview = previewPanel[activePreview];
 
             if (table.getSelected().size() > 0) {
-                updatePreview((BibtexEntry) table.getSelected().get(0), true);
+                updatePreview(table.getSelected().get(0), true);
             }
         }
     }
@@ -404,7 +427,7 @@ public class MainTableSelectionListener implements ListEventListener, MouseListe
             int sortingColumn = table.getSortingColumn(0);
             if (sortingColumn < 0)
                 return;
-            Comparator comp = table.getComparatorForColumn(sortingColumn);
+            Comparator<BibtexEntry> comp = table.getComparatorForColumn(sortingColumn);
             int piv = 1;
             while (((sortingColumn = table.getSortingColumn(piv)) >= 0)
                 && ((comp = table.getComparatorForColumn(sortingColumn)) != null)
@@ -417,7 +440,7 @@ public class MainTableSelectionListener implements ListEventListener, MouseListe
             // Ok, after all of this we should have either found a field name to go by
             String field = ((FieldComparator)comp).getFieldName();
             System.out.println(String.valueOf(e.getKeyChar())+" "+field);
-            SortedList list = table.getSortedForTable();
+            SortedList<BibtexEntry> list = table.getSortedForTable();
             BibtexEntry testEntry = new BibtexEntry("0");
             testEntry.setField(field, String.valueOf(e.getKeyChar()));
             int i = list.sortIndex(testEntry);
@@ -472,7 +495,6 @@ public class MainTableSelectionListener implements ListEventListener, MouseListe
                                 // We found a match:
                                 table.setRowSelectionInterval(i, i);
                                 table.ensureVisible(i);
-                                lastQuickJumpRow = i;
                                 return;
                             }
                         }
diff --git a/src/java/net/sf/jabref/gui/SearchResultsDialog.java b/src/java/net/sf/jabref/gui/SearchResultsDialog.java
new file mode 100644
index 0000000..b34cc08
--- /dev/null
+++ b/src/java/net/sf/jabref/gui/SearchResultsDialog.java
@@ -0,0 +1,405 @@
+package net.sf.jabref.gui;
+
+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;
+import net.sf.jabref.*;
+import net.sf.jabref.external.ExternalFileMenuItem;
+
+import javax.swing.*;
+import javax.swing.table.TableColumnModel;
+import java.awt.*;
+import java.awt.event.*;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.io.IOException;
+
+/**
+ * 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 String title;
+    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 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);
+
+        preview = new PreviewPanel(null, new MetaData(), Globals.prefs.get("preview1"));
+
+        sortedEntries = new SortedList<BibtexEntry>(entries, new EntryComparator(false, true, "author"));
+        model = new EventTableModel(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 =
+                new TableComparatorChooser<BibtexEntry>(entryTable, sortedEntries,
+                TableComparatorChooser.MULTIPLE_COLUMN_KEYBOARD);
+        setupComparatorChooser(tableSorter);
+        JScrollPane sp = new JScrollPane(entryTable);
+
+        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);
+        
+        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);
+    }
+
+    /**
+     * 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<BibtexEntry>> 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++) {
+            // 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 = (BibtexEntry)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 {
+
+        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(Object ob, int column) {
+            BibtexEntry entry = (BibtexEntry)ob;
+            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
+                return entry.getField(fields[column-PAD]);
+        }
+
+        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 ff2a1e7..324dd0f 100644
--- a/src/java/net/sf/jabref/gui/SortTabsAction.java
+++ b/src/java/net/sf/jabref/gui/SortTabsAction.java
@@ -1,21 +1,22 @@
 package net.sf.jabref.gui;
 
-import net.sf.jabref.JabRefFrame;
-import net.sf.jabref.BasePanel;
-import net.sf.jabref.Globals;
-import net.sf.jabref.MnemonicAwareAction;
-
-import javax.swing.*;
 import java.awt.event.ActionEvent;
-import java.util.TreeMap;
 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 {
+public class SortTabsAction extends MnemonicAwareAction implements Comparator<String> {
     private JabRefFrame frame;
 
     public SortTabsAction(JabRefFrame frame) {
@@ -27,21 +28,21 @@ public class SortTabsAction extends MnemonicAwareAction implements Comparator {
     public void actionPerformed(ActionEvent e) {
         JTabbedPane tabbedPane = frame.getTabbedPane();
        // Make a sorted Map that compares case-insensitively:
-        TreeMap map = new TreeMap(this);
+        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 i=map.keySet().iterator(); i.hasNext();) {
-            String title = (String)i.next();
-            BasePanel panel = (BasePanel)map.get(title);
+        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(Object o1, Object o2) {
-        return ((String)o1).toLowerCase().compareTo(((String)o2).toLowerCase());
+    public int compare(String o1, String o2) {
+        return o1.toLowerCase().compareTo(o2.toLowerCase());
     }
 }
diff --git a/src/java/net/sf/jabref/gui/components/JPanelXBoxPreferredHeight.java b/src/java/net/sf/jabref/gui/components/JPanelXBoxPreferredHeight.java
index cdf5c7d..a3612a8 100644
--- a/src/java/net/sf/jabref/gui/components/JPanelXBoxPreferredHeight.java
+++ b/src/java/net/sf/jabref/gui/components/JPanelXBoxPreferredHeight.java
@@ -1,6 +1,7 @@
 package net.sf.jabref.gui.components;
 
-import java.awt.*;
+import java.awt.Component;
+import java.awt.Dimension;
 
 public class JPanelXBoxPreferredHeight extends JPanelXBox {
 	public JPanelXBoxPreferredHeight() {
diff --git a/src/java/net/sf/jabref/gui/components/JPanelXBoxPreferredSize.java b/src/java/net/sf/jabref/gui/components/JPanelXBoxPreferredSize.java
index 0fecca4..445d16a 100644
--- a/src/java/net/sf/jabref/gui/components/JPanelXBoxPreferredSize.java
+++ b/src/java/net/sf/jabref/gui/components/JPanelXBoxPreferredSize.java
@@ -1,6 +1,7 @@
 package net.sf.jabref.gui.components;
 
-import java.awt.*;
+import java.awt.Component;
+import java.awt.Dimension;
 
 public class JPanelXBoxPreferredSize extends JPanelXBox {
 	public JPanelXBoxPreferredSize() {
diff --git a/src/java/net/sf/jabref/gui/components/JPanelYBox.java b/src/java/net/sf/jabref/gui/components/JPanelYBox.java
index f25f17c..8091a7d 100644
--- a/src/java/net/sf/jabref/gui/components/JPanelYBox.java
+++ b/src/java/net/sf/jabref/gui/components/JPanelYBox.java
@@ -1,6 +1,7 @@
 package net.sf.jabref.gui.components;
 
-import javax.swing.*;
+import javax.swing.BoxLayout;
+import javax.swing.JPanel;
 
 /**
  * A JPanel that by default uses a BoxLayout.Y_AXIS
diff --git a/src/java/net/sf/jabref/gui/components/JPanelYBoxPreferredSize.java b/src/java/net/sf/jabref/gui/components/JPanelYBoxPreferredSize.java
index 1fb0551..1ecebde 100644
--- a/src/java/net/sf/jabref/gui/components/JPanelYBoxPreferredSize.java
+++ b/src/java/net/sf/jabref/gui/components/JPanelYBoxPreferredSize.java
@@ -1,6 +1,7 @@
 package net.sf.jabref.gui.components;
 
-import java.awt.*;
+import java.awt.Component;
+import java.awt.Dimension;
 
 public class JPanelYBoxPreferredSize extends JPanelYBox {
 	public JPanelYBoxPreferredSize() {
diff --git a/src/java/net/sf/jabref/gui/date/DatePickerButton.java b/src/java/net/sf/jabref/gui/date/DatePickerButton.java
index 0f31742..f6f9b7b 100644
--- a/src/java/net/sf/jabref/gui/date/DatePickerButton.java
+++ b/src/java/net/sf/jabref/gui/date/DatePickerButton.java
@@ -32,21 +32,24 @@
 // function : wrapper and service class for the DatePicker handling at the
 //            EntryEditor
 //
-// todo     :
-//
 // modified :  r.nagel 25.04.2006
 //             check NullPointer at the actionPerformed methode
 
 package net.sf.jabref.gui.date ;
 
-import java.awt.event.* ;
-import java.awt.*;
-import javax.swing.* ;
+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 com.michaelbaranov.microba.calendar.* ;
-import net.sf.jabref.* ;
+import net.sf.jabref.FieldEditor;
+import net.sf.jabref.FocusRequester;
+import net.sf.jabref.Util;
 
-import java.util.*;
+import com.michaelbaranov.microba.calendar.DatePicker;
 
 public class DatePickerButton implements ActionListener {
     private DatePicker datePicker = new DatePicker();
diff --git a/src/java/net/sf/jabref/imports/AppendDatabaseAction.java b/src/java/net/sf/jabref/imports/AppendDatabaseAction.java
index 888716b..177622d 100644
--- a/src/java/net/sf/jabref/imports/AppendDatabaseAction.java
+++ b/src/java/net/sf/jabref/imports/AppendDatabaseAction.java
@@ -1,23 +1,22 @@
 package net.sf.jabref.imports;
 
-import net.sf.jabref.imports.ParserResult;
-import net.sf.jabref.imports.OpenDatabaseAction;
+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.*;
-import net.sf.jabref.groups.GroupTreeNode;
+import net.sf.jabref.groups.AbstractGroup;
 import net.sf.jabref.groups.AllEntriesGroup;
 import net.sf.jabref.groups.ExplicitGroup;
-import net.sf.jabref.groups.AbstractGroup;
+import net.sf.jabref.groups.GroupTreeNode;
 import net.sf.jabref.undo.NamedCompound;
 import net.sf.jabref.undo.UndoableInsertEntry;
 import net.sf.jabref.undo.UndoableInsertString;
 
-import javax.swing.*;
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.Enumeration;
-import java.util.List;
-
 /**
  * Created by IntelliJ IDEA.
  * User: alver
@@ -28,7 +27,7 @@ import java.util.List;
 public class AppendDatabaseAction extends BaseAction {
     private JabRefFrame frame;
     private BasePanel panel;
-    private List filesToOpen = new ArrayList();
+    private List<File> filesToOpen = new ArrayList<File>();
 
     public AppendDatabaseAction(JabRefFrame frame, BasePanel panel) {
         this.frame = frame;
@@ -68,8 +67,8 @@ public class AppendDatabaseAction extends BaseAction {
                 boolean importGroups, boolean importSelectorWords) {
         if (filesToOpen.size() == 0)
             return;
-        for (Iterator i = filesToOpen.iterator(); i.hasNext();) {
-            File file = (File)i.next();
+        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?
@@ -87,14 +86,15 @@ public class AppendDatabaseAction extends BaseAction {
         }
     }
 
-    public static void mergeFromBibtex(JabRefFrame frame, BasePanel panel, ParserResult pr,
+    @SuppressWarnings("unchecked")
+	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 appendedEntries = new ArrayList();
-          ArrayList originalEntries = new ArrayList();
+          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"));
@@ -103,9 +103,9 @@ public class AppendDatabaseAction extends BaseAction {
           if (importEntries) { // Add entries
               boolean overwriteOwner = Globals.prefs.getBoolean("overwriteOwner");
               boolean overwriteTimeStamp = Globals.prefs.getBoolean("overwriteTimeStamp");
-              Iterator i = fromDatabase.getKeySet().iterator();
-              while (i.hasNext()) {
-                  originalEntry = fromDatabase.getEntryById((String) i.next());
+
+        	  for (String key : fromDatabase.getKeySet()){
+        	      originalEntry = fromDatabase.getEntryById(key);
                   BibtexEntry be = (BibtexEntry) (originalEntry.clone());
                   be.setId(Util.createNeutralId());
                   Util.setAutomaticFields(be, overwriteOwner, overwriteTimeStamp);
@@ -117,13 +117,8 @@ public class AppendDatabaseAction extends BaseAction {
           }
 
           if (importStrings) {
-              BibtexString bs;
-              int pos = 0;
-              Iterator i = fromDatabase.getStringKeySet().iterator();
-              for (; i.hasNext();) {
-                  bs = (BibtexString) (fromDatabase.getString(i.next()).clone());
+              for (BibtexString bs : fromDatabase.getStringValues()){
                   if (!database.hasStringLabel(bs.getName())) {
-                      //pos = toDatabase.getStringCount();
                       database.addString(bs);
                       ce.addEdit(new UndoableInsertString(panel, database, bs));
                   }
@@ -141,7 +136,7 @@ public class AppendDatabaseAction extends BaseAction {
                               AbstractGroup.INDEPENDENT); // JZTODO lyrics
                       newGroups.setGroup(group);
                       for (int i = 0; i < appendedEntries.size(); ++i)
-                          group.addEntry((BibtexEntry) appendedEntries.get(i));
+                          group.addEntry(appendedEntries.get(i));
                   }
 
                   // groupsSelector is always created, even when no groups
@@ -154,27 +149,27 @@ public class AppendDatabaseAction extends BaseAction {
                   GroupTreeNode node;
                   ExplicitGroup group;
                   BibtexEntry entry;
-                  for (Enumeration e = newGroups.preorderEnumeration(); e.hasMoreElements();) {
-                      node = (GroupTreeNode) e.nextElement();
-                      if (!(node.getGroup() instanceof ExplicitGroup))
-                          continue;
-                      group = (ExplicitGroup) node.getGroup();
-                      for (int i = 0; i < originalEntries.size(); ++i) {
-                          entry = (BibtexEntry) originalEntries.get(i);
-                          if (group.contains(entry)) {
-                              group.removeEntry(entry);
-                              group.addEntry((BibtexEntry) appendedEntries.get(i));
-                          }
-                      }
-                  }
+                  
+                  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) {
-              Iterator i = meta.iterator();
-              while (i.hasNext()) {
-                  String s = (String) i.next();
+        	  for (String s : meta){
                   if (s.startsWith(Globals.SELECTOR_META_PREFIX)) {
                       panel.metaData().putData(s, meta.getData(s));
                   }
diff --git a/src/java/net/sf/jabref/imports/AuthorDialog.java b/src/java/net/sf/jabref/imports/AuthorDialog.java
deleted file mode 100644
index a5cb4ba..0000000
--- a/src/java/net/sf/jabref/imports/AuthorDialog.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package net.sf.jabref.imports;
-
-import net.sf.jabref.*;
-import javax.swing.*;
-import java.beans.*;
-
-public class AuthorDialog extends JDialog {
-
-    boolean[] checked;
-    JCheckBox[] checkBox;
-    JOptionPane optionPane;
-    int count, piv = 0;
-
-
-    public AuthorDialog(JFrame frame, MedlineFetcher mf, String ids[]) {
-	super(frame, Globals.lang("Pick titles"),true);
-
-	count = ids.length;
-	checked=new boolean[count];
-    }
-
-    public boolean[] showDialog(){
-	pack();
-	setVisible(true);
-	return checked;
-    }
-
-}
diff --git a/src/java/net/sf/jabref/imports/BibTeXMLHandler.java b/src/java/net/sf/jabref/imports/BibTeXMLHandler.java
index 167ceae..1bb6d0b 100644
--- a/src/java/net/sf/jabref/imports/BibTeXMLHandler.java
+++ b/src/java/net/sf/jabref/imports/BibTeXMLHandler.java
@@ -1,28 +1,14 @@
 package net.sf.jabref.imports;
 
-import org.xml.sax.*;
-import org.xml.sax.helpers.*;
-import java.util.*;
-import net.sf.jabref.*;
-/*
-  Copyright (C) 2000-2004 E.L. Willighagen <egonw at sci.kun.nl>
-
-  This program is free software; you can redistribute it and/or modify
-  it under the terms of the GNU General Public License as published by
-  the Free Software Foundation; either version 2 of the License, or (at
-  your option) any later version.
-
-  This program is distributed in the hope that it will be useful, but
-  WITHOUT ANY WARRANTY; without even the implied warranty of
-  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-  General Public License for more details.
-
-  You 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.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
@@ -32,19 +18,18 @@ import net.sf.jabref.*;
  */
 public class BibTeXMLHandler extends DefaultHandler {
 
-    private ArrayList bibitems;
+    private ArrayList<BibtexEntry> bibitems;
 
     private BibtexEntry b; // the entry being read
 
     // XML parsing stuff
-    private String name; // the current element name
     private String currentChars;
 
     public BibTeXMLHandler() {
         super();
     }
 
-    public ArrayList getItems(){ return bibitems;}
+    public ArrayList<BibtexEntry> getItems(){ return bibitems;}
 
     // SAX parsing methods
 
@@ -52,7 +37,7 @@ public class BibTeXMLHandler extends DefaultHandler {
         String systemId) {}
 
     public void startDocument() {
-        bibitems = new ArrayList();
+        bibitems = new ArrayList<BibtexEntry>();
     }
 
     public void endDocument() {
@@ -65,7 +50,6 @@ public class BibTeXMLHandler extends DefaultHandler {
 
     public void startElement(String uri, String local, String raw, Attributes atts) {
         String name = raw;
-        this.name = name;
         if (name.equals("bibtex:entry")) {
             String articleID = null;
             for (int i = 0; i < atts.getLength(); i++) {
diff --git a/src/java/net/sf/jabref/imports/BiblioscapeImporter.java b/src/java/net/sf/jabref/imports/BiblioscapeImporter.java
index a7c3aec..ed5970b 100644
--- a/src/java/net/sf/jabref/imports/BiblioscapeImporter.java
+++ b/src/java/net/sf/jabref/imports/BiblioscapeImporter.java
@@ -1,16 +1,13 @@
 package net.sf.jabref.imports;
 
-import java.io.InputStream;
 import java.io.BufferedReader;
 import java.io.IOException;
-import java.util.List;
-import java.util.Vector;
-import java.util.Map;
-import java.util.ArrayList;
-import java.util.HashMap;
+import java.io.InputStream;
+import java.util.*;
+
 import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.Globals;
 import net.sf.jabref.BibtexFields;
+import net.sf.jabref.Globals;
 
 /**
  * Imports a Biblioscape Tag File. The format is described on
@@ -46,13 +43,13 @@ public class BiblioscapeImporter extends ImportFormat {
      * Parse the entries in the source, and return a List of BibtexEntry
      * objects.
      */
-    public List importEntries(InputStream stream) throws IOException {
+    public List<BibtexEntry> importEntries(InputStream stream) throws IOException {
 
-        ArrayList bibItems = new ArrayList();
+        ArrayList<BibtexEntry> bibItems = new ArrayList<BibtexEntry>();
         BufferedReader in = new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
         String line;
-        HashMap hm = new HashMap();
-        HashMap lines = new HashMap();
+        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
@@ -65,11 +62,9 @@ public class BiblioscapeImporter extends ImportFormat {
           String address = null;
           String titleST = null;
           String titleTI = null;
-          Vector comments = new Vector();
+          Vector<String> comments = new Vector<String>();
           // add item
-          Object[] l = lines.entrySet().toArray();
-          for (int i = 0; i < l.length; ++i){
-            Map.Entry entry = (Map.Entry) l[i];
+          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()
diff --git a/src/java/net/sf/jabref/imports/BibteXMLImporter.java b/src/java/net/sf/jabref/imports/BibteXMLImporter.java
index e3fdc15..f7900dc 100644
--- a/src/java/net/sf/jabref/imports/BibteXMLImporter.java
+++ b/src/java/net/sf/jabref/imports/BibteXMLImporter.java
@@ -1,13 +1,16 @@
 package net.sf.jabref.imports;
 
-import java.util.regex.Pattern;
 import java.io.BufferedReader;
+import java.io.IOException;
 import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.regex.Pattern;
+
 import javax.xml.parsers.SAXParser;
 import javax.xml.parsers.SAXParserFactory;
-import java.io.IOException;
-import java.util.List;
-import java.util.ArrayList;
+
+import net.sf.jabref.BibtexEntry;
 
 /**
  * Importer for the Refer/Endnote format.
@@ -54,9 +57,9 @@ public class BibteXMLImporter extends ImportFormat {
      * Parse the entries in the source, and return a List of BibtexEntry
      * objects.
      */
-    public List importEntries(InputStream stream) throws IOException {
+    public List<BibtexEntry> importEntries(InputStream stream) throws IOException {
 
-	ArrayList bibItems = new ArrayList();
+	ArrayList<BibtexEntry> bibItems = new ArrayList<BibtexEntry>();
 
 	// Obtain a factory object for creating SAX parsers
 	SAXParserFactory parserFactory = SAXParserFactory.newInstance();
diff --git a/src/java/net/sf/jabref/imports/BibtexParser.java b/src/java/net/sf/jabref/imports/BibtexParser.java
index 5981ee5..c19fa52 100644
--- a/src/java/net/sf/jabref/imports/BibtexParser.java
+++ b/src/java/net/sf/jabref/imports/BibtexParser.java
@@ -34,9 +34,8 @@ import java.io.Reader;
 import java.io.StringReader;
 import java.util.Collection;
 import java.util.HashMap;
-import java.util.Iterator;
-import java.util.regex.Pattern;
 import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 import net.sf.jabref.BibtexDatabase;
 import net.sf.jabref.BibtexEntry;
@@ -77,7 +76,9 @@ public class BibtexParser {
 
 	private BibtexDatabase _db;
 
-	private HashMap _meta, entryTypes;
+	private HashMap<String, String> _meta;
+	
+	private HashMap<String, BibtexEntryType> entryTypes;
 
 	private boolean _eof = false;
 
@@ -118,7 +119,7 @@ public class BibtexParser {
 	 * 
 	 * @return Returns null if an error occurred, returns an empty collection if no entries where found. 
 	 */
-	public static Collection fromString(String bibtexString){
+	public static Collection<BibtexEntry> fromString(String bibtexString){
 		StringReader reader = new StringReader(bibtexString);
 		BibtexParser parser = new BibtexParser(reader); 
 		try {
@@ -138,11 +139,11 @@ public class BibtexParser {
 	 * @return The bibtexentry or null if non was found or an error occurred.
 	 */
 	public static BibtexEntry singleFromString(String bibtexString) {
-		Collection c = fromString(bibtexString);
+		Collection<BibtexEntry> c = fromString(bibtexString);
 		if (c == null){
 			return null;
 		}
-		return (BibtexEntry)c.iterator().next();
+		return c.iterator().next();
 	}	
 	
 	/**
@@ -237,8 +238,8 @@ public class BibtexParser {
 			return _pr;
 
         _db = new BibtexDatabase(); // Bibtex related contents.
-		_meta = new HashMap(); // Metadata in comments for Bibkeeper.
-		entryTypes = new HashMap(); // To store custem entry types parsed.
+		_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, _meta, entryTypes);
 
         // First see if we can find the version number of the JabRef version that
@@ -444,7 +445,9 @@ public class BibtexParser {
 		BibtexEntry result = new BibtexEntry(id, tp);
 		skipWhitespace();
 		consume('{', '(');
-		skipWhitespace();
+        int c = peek();
+        if ((c != '\n') && (c != '\r'))
+            skipWhitespace();
 		String key = null;
 		boolean doAgain = true;
 		while (doAgain) {
@@ -458,7 +461,7 @@ public class BibtexParser {
 				// 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 =.
-				char c = (char) peek();
+				c = (char) peek();
 				if (Character.isWhitespace(c) || (c == '{') || (c == '\"')) {
 					String fieldName = ex.getMessage().trim().toLowerCase();
 					String cont = parseFieldContent();
@@ -475,13 +478,12 @@ public class BibtexParser {
 
 		if ((key != null) && key.equals(""))
 			key = null;
-		// System.out.println("Key: "+key);
-		if (result != null)
-			result.setField(BibtexFields.KEY_FIELD, key);
+
+		result.setField(BibtexFields.KEY_FIELD, key);
 		skipWhitespace();
 
 		while (true) {
-			int c = peek();
+			c = peek();
 			if ((c == '}') || (c == ')')) {
 				break;
 			}
@@ -848,8 +850,10 @@ public class BibtexParser {
 
 	private boolean consumeUncritically(char expected) throws IOException {
 		int c;
-		while (((c = read()) != expected) && (c != -1) && (c != 65535))
-			;
+		while (((c = read()) != expected) && (c != -1) && (c != 65535)){
+		    // do nothing
+		}
+			
 		if ((c == -1) || (c == 65535))
 			_eof = true;
 
@@ -864,16 +868,15 @@ public class BibtexParser {
 
 		if ((c != expected1) && (c != expected2)) {
 			throw new RuntimeException("Error in line " + line + ": Expected " + expected1 + " or "
-				+ expected2 + " but received " + (int) c);
+				+ expected2 + " but received " + c);
 
 		}
 
 	}
 
 	public void checkEntryTypes(ParserResult _pr) {
-		for (Iterator i = _db.getKeySet().iterator(); i.hasNext();) {
-			Object key = i.next();
-			BibtexEntry be = (BibtexEntry) _db.getEntryById((String) key);
+		
+		for (BibtexEntry be : _db.getEntries()){
 			if (be.getType() instanceof UnknownEntryType) {
 				// Look up the unknown type name in our map of parsed types:
 
diff --git a/src/java/net/sf/jabref/imports/BiomailImporter.java b/src/java/net/sf/jabref/imports/BiomailImporter.java
index 2cf440b..edf5f0b 100644
--- a/src/java/net/sf/jabref/imports/BiomailImporter.java
+++ b/src/java/net/sf/jabref/imports/BiomailImporter.java
@@ -59,8 +59,8 @@ public class BiomailImporter extends ImportFormat {
      * Parse the entries in the source, and return a List of BibtexEntry
      * objects.
      */
-    public List importEntries(InputStream stream) throws IOException {
-        ArrayList bibitems = new ArrayList();
+    public List<BibtexEntry> importEntries(InputStream stream) throws IOException {
+        ArrayList<BibtexEntry> bibitems = new ArrayList<BibtexEntry>();
         StringBuffer sb = new StringBuffer();
 
         BufferedReader in =
@@ -91,7 +91,7 @@ public class BiomailImporter extends ImportFormat {
         String[] entries = sb.toString().split("::");
 
         // skip the first entry as it is either empty or has document header
-        HashMap hm = new HashMap();
+        HashMap<String, String> hm = new HashMap<String, String>();
 
         for (int i = 0; i < entries.length; i++) {
             String[] fields = entries[i].split(" ## ");
@@ -100,7 +100,6 @@ public class BiomailImporter extends ImportFormat {
                 fields = entries[i].split("\n");
 
             String Type = "";
-            String PT = "";
             String pages = "";
             String shortauthor = "";
             String fullauthor = "";
@@ -118,7 +117,7 @@ public class BiomailImporter extends ImportFormat {
                 value = value.trim();
 
                 if (beg.equals("PT  - ")) {
-                    PT = value.replaceAll("JOURNAL ARTICLE", "article").replaceAll("Journal Article", "article");
+                    // 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))
diff --git a/src/java/net/sf/jabref/imports/CheckForNewEntryTypesAction.java b/src/java/net/sf/jabref/imports/CheckForNewEntryTypesAction.java
index c8974d5..c8d4bc8 100644
--- a/src/java/net/sf/jabref/imports/CheckForNewEntryTypesAction.java
+++ b/src/java/net/sf/jabref/imports/CheckForNewEntryTypesAction.java
@@ -1,14 +1,14 @@
 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;
 
-import javax.swing.*;
-import java.util.Iterator;
-import java.util.Arrays;
-import java.util.HashMap;
-
 /**
  * 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.
@@ -17,8 +17,8 @@ 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 i = pr.getEntryTypes().keySet().iterator(); i.hasNext();) {
-            String typeName = ((String) i.next()).toLowerCase();
+        for (Iterator<String> i = pr.getEntryTypes().keySet().iterator(); i.hasNext();) {
+            String typeName = (i.next()).toLowerCase();
             if (BibtexEntryType.ALL_TYPES.get(typeName) != null)
                 i.remove();
         }
@@ -40,12 +40,10 @@ public class CheckForNewEntryTypesAction implements PostOpenAction {
                 Globals.lang("Custom entry types"),
                 JOptionPane.YES_NO_OPTION,
                 JOptionPane.QUESTION_MESSAGE);
+        
         if (answer == JOptionPane.YES_OPTION) {
             // Import
-            HashMap et = pr.getEntryTypes();
-            for (Iterator i = et.keySet().iterator(); i.hasNext();) {
-                BibtexEntryType typ = (BibtexEntryType) et.get(i.next());
-                //System.out.println(":"+typ.getName()+"\n"+typ.toString());
+            for (BibtexEntryType typ : pr.getEntryTypes().values()){
                 BibtexEntryType.ALL_TYPES.put(typ.getName().toLowerCase(), typ);
             }
 
diff --git a/src/java/net/sf/jabref/imports/CiteSeerCitationHandler.java b/src/java/net/sf/jabref/imports/CiteSeerCitationHandler.java
index 3507e6b..a3a5404 100644
--- a/src/java/net/sf/jabref/imports/CiteSeerCitationHandler.java
+++ b/src/java/net/sf/jabref/imports/CiteSeerCitationHandler.java
@@ -2,35 +2,26 @@ package net.sf.jabref.imports;
 
 
 
-import java.util.Hashtable;
+import java.util.Map;
 
 import org.xml.sax.Attributes;
 import org.xml.sax.SAXException;
 import org.xml.sax.helpers.DefaultHandler;
 
-/*
- * Created on Jun 13, 2004
- *
- * To change the template for this generated file go to
- * Window>Preferences>Java>Code Generation>Code and Comments
- */
-
 /**
  * @author mspiegel
  *
- * To change the template for this generated type comment go to
- * Window>Preferences>Java>Code Generation>Code and Comments
  */
 public class CiteSeerCitationHandler extends DefaultHandler {
 
 	protected boolean correctDirection;
 	protected boolean getCitation;
-	protected Hashtable citationList;
+	protected Map<String, Boolean> citationList;
 
 	/**
 	 * @param identifierVector
 	 */
-	public CiteSeerCitationHandler(Hashtable citationHashTable) {
+	public CiteSeerCitationHandler(Map<String, Boolean> citationHashTable) {
 		citationList = citationHashTable;		
 	}
 
diff --git a/src/java/net/sf/jabref/imports/CiteSeerEntryFetcher.java b/src/java/net/sf/jabref/imports/CiteSeerEntryFetcher.java
new file mode 100644
index 0000000..b340f02
--- /dev/null
+++ b/src/java/net/sf/jabref/imports/CiteSeerEntryFetcher.java
@@ -0,0 +1,121 @@
+package net.sf.jabref.imports;
+
+import java.io.InputStream;
+import java.net.HttpURLConnection;
+import java.net.URL;
+
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+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.helpers.DefaultHandler;
+
+/**
+ * Fetcher for CiteSeer http://citeseer.ist.psu.edu/
+ * 
+ */
+public class CiteSeerEntryFetcher implements EntryFetcher {
+
+    final static String OAI_URL = "http://cs1.ist.psu.edu/cgi-bin/oai.cgi?verb=GetRecord&metadataPrefix=oai_citeseer&identifier=oai:CiteSeerPSU:";
+
+    protected SAXParser saxParser;
+
+    protected boolean stop;
+
+    public boolean processQuery(String query, ImportInspector dialog, OutputPrinter frame) {
+
+        stop = false;
+
+        String[] ids = query.trim().split("[;,\\s]+");
+
+        for (int i = 0; i < ids.length; i++) {
+
+            if (stop)
+                break;
+
+            // Try to import based on the id:
+            String id = ids[i];
+
+            // Clean IDs
+            id = id.replaceAll("(http://citeseer.ist.psu.edu/|\\.html|oai:CiteSeerPSU:)", "");
+
+            // Can only fetch for numerical IDs
+            if (!id.matches("^\\d+$")) {
+            	frame.showMessage(Globals.lang(
+                    "Citeseer only supports numerical ids, '%0' is invalid.\n"
+                        + "See the help for further information.", id), Globals
+                    .lang("Fetch Citeseer"), JOptionPane.INFORMATION_MESSAGE);
+                continue;
+            }
+
+            // Create an empty entry
+            BibtexEntry entry = new BibtexEntry(Util.createNeutralId(), BibtexEntryType
+                .getType("article"));
+            entry.setField("citeseerurl", id);
+
+            try {
+                URL citeseerUrl = new URL(OAI_URL + id);
+                HttpURLConnection citeseerConnection = (HttpURLConnection) citeseerUrl
+                    .openConnection();
+                InputStream inputStream = citeseerConnection.getInputStream();
+
+                DefaultHandler handlerBase = new CiteSeerEntryFetcherHandler(entry);
+
+                if (saxParser == null)
+                    saxParser = SAXParserFactory.newInstance().newSAXParser();
+
+                saxParser.parse(inputStream, handlerBase);
+
+                /* Correct line breaks and spacing */
+                for (String name : entry.getAllFields()) {
+                    entry.setField(name, OAI2Fetcher.correctLineBreaks(entry.getField(name)
+                        .toString()));
+                }
+
+                dialog.addEntry(entry);
+                dialog.setProgress(i + 1, ids.length);
+            } catch (Exception e) {
+            	frame.showMessage(Globals
+                    .lang("Error fetching from Citeseer:\n" + e.getLocalizedMessage()), Globals
+                    .lang("Fetch Citeseer"), JOptionPane.ERROR_MESSAGE);
+            }
+
+            return true;
+        }
+        return false;
+    }
+
+    public String getHelpPage() {
+        return GUIGlobals.citeSeerHelp;
+    }
+
+    public URL getIcon() {
+        return GUIGlobals.getIconUrl("citeseer");
+    }
+
+    public String getKeyName() {
+        return "Fetch CiteSeer";
+    }
+
+    public JPanel getOptionsPanel() {
+        // No Options
+        return null;
+    }
+
+    public String getTitle() {
+        return "Fetch CiteSeer by ID";
+    }
+
+    public void stopFetching() {
+        stop = true;
+    }
+
+}
diff --git a/src/java/net/sf/jabref/imports/CiteSeerEntryFetcherHandler.java b/src/java/net/sf/jabref/imports/CiteSeerEntryFetcherHandler.java
new file mode 100644
index 0000000..3458a4b
--- /dev/null
+++ b/src/java/net/sf/jabref/imports/CiteSeerEntryFetcherHandler.java
@@ -0,0 +1,82 @@
+/*
+ * Created on Jun 29, 2004
+ *
+ * To change the template for this generated file go to
+ * Window>Preferences>Java>Code Generation>Code and Comments
+ */
+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;
+
+/**
+ * SAXHandler used with CiteSeerEntryFetcher.
+ */
+public class CiteSeerEntryFetcherHandler extends DefaultHandler {
+
+    BibtexEntry entry = null;
+
+    String nextField = null;
+
+    boolean nextAssign = false;
+
+    String newAuthors = null;
+
+    int citeseerCitationCount = 0;
+
+    public CiteSeerEntryFetcherHandler(BibtexEntry be) {
+        entry = be;
+    }
+
+    public void characters(char[] ch, int start, int length) {
+        if (nextAssign == true) {
+            String target = new String(ch, start, length);
+            if (nextField.equals("title")) {
+                entry.setField(nextField, target);
+            } else if (nextField.equals("year")) {
+                entry.setField(nextField, String.valueOf(target.substring(0, 4)));
+            } else if (nextField.equals("citeseerurl")) {
+                entry.setField(nextField, target);
+            }
+            nextAssign = false;
+        }
+    }
+
+    public void startElement(String name, String localName, String qName, Attributes attrs)
+        throws SAXException {
+        if (qName.equals("oai_citeseer:relation")) {
+            for (int i = 0; i < attrs.getLength(); i++) {
+                String attrName = attrs.getQName(i);
+                String attrValue = attrs.getValue(i);
+                if (attrName.equals("type") && attrValue.equals("Is Referenced By")) {
+                    citeseerCitationCount++;
+                }
+            }
+        } else if (qName.equals("oai_citeseer:author")) {
+            if (newAuthors == null) {
+                newAuthors = attrs.getValue("name");
+            } else {
+                newAuthors = newAuthors + " and " + attrs.getValue("name");
+            }
+        } else if (qName.equals("dc:title")) {
+            nextField = "title";
+            nextAssign = true;
+        } else if (qName.equals("dc:date")) {
+            nextField = "year";
+            nextAssign = true;
+        } else if (qName.equals("dc:identifier")) {
+            nextField = "citeseerurl";
+            nextAssign = true;
+        }
+    }
+
+    public void endDocument() {
+        if (newAuthors != null) {
+            entry.setField("author", newAuthors);
+        }
+        entry.setField("citeseercitationcount", String.valueOf(citeseerCitationCount));
+    }
+}
\ No newline at end of file
diff --git a/src/java/net/sf/jabref/imports/CiteSeerFetcher.java b/src/java/net/sf/jabref/imports/CiteSeerFetcher.java
index e540d23..502e55d 100644
--- a/src/java/net/sf/jabref/imports/CiteSeerFetcher.java
+++ b/src/java/net/sf/jabref/imports/CiteSeerFetcher.java
@@ -14,29 +14,38 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.net.HttpURLConnection;
 import java.net.URL;
-import java.util.Enumeration;
+import java.util.HashMap;
 import java.util.Hashtable;
 import java.util.Iterator;
+import java.util.Map;
 import java.util.TreeSet;
 import java.util.Vector;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
+
 import javax.swing.BorderFactory;
-import javax.swing.JPanel;
 import javax.swing.JLabel;
 import javax.swing.JOptionPane;
+import javax.swing.JPanel;
 import javax.swing.JProgressBar;
 import javax.swing.SwingUtilities;
 import javax.xml.parsers.ParserConfigurationException;
 import javax.xml.parsers.SAXParser;
 import javax.xml.parsers.SAXParserFactory;
 
+import net.sf.jabref.BibtexDatabase;
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.GUIGlobals;
+import net.sf.jabref.Globals;
+import net.sf.jabref.KeyCollisionException;
+import net.sf.jabref.SidePaneComponent;
+import net.sf.jabref.SidePaneManager;
+import net.sf.jabref.Util;
+import net.sf.jabref.undo.NamedCompound;
+
 import org.xml.sax.SAXException;
 import org.xml.sax.helpers.DefaultHandler;
 
-import net.sf.jabref.*;
-import net.sf.jabref.undo.NamedCompound;
-
 /**
  * @author mspiegel
  *
@@ -159,9 +168,9 @@ public class CiteSeerFetcher extends SidePaneComponent {
 
 	class ShowBadIdentifiersDialog implements Runnable {
 
-	    Hashtable rejectedEntries;
+	    Hashtable<Integer, BibtexEntry> rejectedEntries;
 	    
-	    ShowBadIdentifiersDialog(Hashtable entries) {
+	    ShowBadIdentifiersDialog(Hashtable<Integer, BibtexEntry> entries) {
 	        rejectedEntries = entries;
 	    }
 	    
@@ -175,10 +184,10 @@ public class CiteSeerFetcher extends SidePaneComponent {
             	int i;
                 String rowNumbers = "";
                 String oneRowOfNumbers = "";
-                TreeSet rowSet = new TreeSet(rejectedEntries.keySet());
+                TreeSet<Integer> rowSet = new TreeSet<Integer>(rejectedEntries.keySet());
                 int rowSize = rowSet.size();
                 for(i=0; (i < rowSize - 1) && (i < 100); i++) {
-                    Integer next = (Integer) rowSet.first();
+                    Integer next = rowSet.first();
                     if (oneRowOfNumbers.equals(""))
                         oneRowOfNumbers = next.toString();
                     else {
@@ -196,7 +205,7 @@ public class CiteSeerFetcher extends SidePaneComponent {
             	if (i == 100) {
             		rowNumbers = rowNumbers + "..";
             	} else {
-            		rowNumbers = rowNumbers + " "+Globals.lang("and")+" " + ((Integer)rowSet.first()).toString();
+            		rowNumbers = rowNumbers + " "+Globals.lang("and")+" " + rowSet.first().toString();
             	}
                 JOptionPane.showMessageDialog(panel.frame(),
                         Globals.lang("Couldn't parse the 'citeseerurl' field of the following entries") + ':' + '\n' + 
@@ -369,7 +378,6 @@ public class CiteSeerFetcher extends SidePaneComponent {
 		progressBar.setMinimum(0);
 		progressBar.setMaximum(100);
 		progressBar.setValue(100);
-//	    progressBar.setString(null);
 	}
 
 
@@ -379,13 +387,12 @@ public class CiteSeerFetcher extends SidePaneComponent {
 	 */
 	public int populate(BibtexDatabase newDatabase, BibtexDatabase targetDatabase) {
 		int errorCode = 0;
-		Iterator targetIterator = targetDatabase.getKeySet().iterator();
+		Iterator<String> targetIterator = targetDatabase.getKeySet().iterator();
 		boolean abortOperation = false;
 		String currentKey;
 		BibtexEntry currentEntry;
-		Enumeration newEntryEnum;
-		Hashtable citationHashTable = new Hashtable();
-		Hashtable rejectedEntries = new Hashtable();
+		Map<String, Boolean> citationHashTable = new HashMap<String, Boolean>();
+		Hashtable<Integer, BibtexEntry> rejectedEntries = new Hashtable<Integer, BibtexEntry>();
 		InitializeProgressBar initializeProgressBar = new InitializeProgressBar();
 		InitializeProgressBarTwo initializeProgressBarTwo = new InitializeProgressBarTwo();
 		UpdateProgressBarMaximum updateMaximum = new UpdateProgressBarMaximum(targetDatabase.getEntryCount());		
@@ -397,7 +404,7 @@ public class CiteSeerFetcher extends SidePaneComponent {
 		UpdateProgressStatus progressStatus = new UpdateProgressStatus(Globals.lang("Fetching Identifiers"));
 		SwingUtilities.invokeLater(progressStatus);
 		while (targetIterator.hasNext() && !abortOperation) {
-			currentKey = (String) targetIterator.next();
+			currentKey = targetIterator.next();
 			currentEntry = targetDatabase.getEntryById(currentKey);
 			abortOperation = generateIdentifierList(currentEntry, citationHashTable, rejectedEntries);
 			UpdateProgressBarValue updateValue = new UpdateProgressBarValue(++identifierCounter);			
@@ -415,7 +422,6 @@ public class CiteSeerFetcher extends SidePaneComponent {
 		progressStatus = new UpdateProgressStatus(Globals.lang("Fetching Citations"));
 		SwingUtilities.invokeLater(progressStatus);		
 		generateCitationList(citationHashTable, newDatabase);
-		newEntryEnum = citationHashTable.elements();
 		progressStatus = new UpdateProgressStatus(Globals.lang("Done"));
 		SwingUtilities.invokeLater(progressStatus);
 		if (abortOperation)
@@ -424,16 +430,15 @@ public class CiteSeerFetcher extends SidePaneComponent {
 	}
 
 
-	private Hashtable generateCitationList(Hashtable citationHashTable, BibtexDatabase database)
+	private Map<String, Boolean> generateCitationList(Map<String, Boolean> citationHashTable, BibtexDatabase database)
 	 {
 		try {
 			NamedCompound dummyNamedCompound = new NamedCompound(Globals.lang("Import Data from CiteSeer Database"));
 			BooleanAssign dummyBoolean = new BooleanAssign(false);
 			if ((citationHashTable != null) && (citationHashTable.size() > 0)) {
 			    int citationCounter=0;
-			    for (Enumeration e = citationHashTable.keys() ; e.hasMoreElements() ;) {
-			        String key = (String) e.nextElement();
-					String id = Util.createNeutralId();
+			    for (String key : citationHashTable.keySet()){
+			    	String id = Util.createNeutralId();
 					BibtexEntry newEntry = new BibtexEntry(id);
 					StringBuffer citeseerURLString = new StringBuffer();
 					citeseerURLString.append(OAI_URL);
@@ -463,7 +468,7 @@ public class CiteSeerFetcher extends SidePaneComponent {
 	}
 
 	public static String generateCanonicalNumber(BibtexEntry be) {
-	    return(generateCanonicalNumber((String) be.getField("citeseerurl")));
+	    return(generateCanonicalNumber(be.getField("citeseerurl")));
 	}
 	
     public static String generateCanonicalNumber(String link) {
@@ -497,10 +502,10 @@ public class CiteSeerFetcher extends SidePaneComponent {
 	}	
 
     public static String generateCanonicalURL(BibtexEntry be) {
-        return(generateCanonicalURL((String) be.getField("citeseerurl")));
+        return(generateCanonicalURL(be.getField("citeseerurl")));
 	}
 	
-	private boolean generateIdentifierList(BibtexEntry currentEntry, Hashtable citationHashTable, Hashtable rejectedEntries)
+	private boolean generateIdentifierList(BibtexEntry currentEntry, Map<String, Boolean> citationHashTable, Hashtable<Integer, BibtexEntry> rejectedEntries)
 		{
                   boolean abortOperation = false;
                   String identifier = generateCanonicalIdentifier(currentEntry);                  
@@ -533,16 +538,16 @@ public class CiteSeerFetcher extends SidePaneComponent {
 	public boolean importCiteSeerEntries(int[] clickedOn, NamedCompound citeseerNamedCompound) {
 	  	boolean newValues = false;
 	  	boolean abortOperation = false;
-	  	Vector clickedVector = new Vector();
-		Hashtable rejectedEntries = new Hashtable();		
+	  	Vector<Integer> clickedVector = new Vector<Integer>();
+		Hashtable<Integer, BibtexEntry> rejectedEntries = new Hashtable<Integer, BibtexEntry>();		
 		for(int i=0; i < clickedOn.length; i++)
 			clickedVector.add(new Integer(clickedOn[i]));
-		Iterator clickedIterator = clickedVector.iterator();
+		Iterator<Integer> clickedIterator = clickedVector.iterator();
 		BooleanAssign overwriteAll = new BooleanAssign(false);
 		BooleanAssign overwriteNone = new BooleanAssign(false);
 
 		while (clickedIterator.hasNext() && !abortOperation) {
-			int currentIndex = ((Integer) clickedIterator.next()).intValue();
+			int currentIndex = clickedIterator.next().intValue();
 			BooleanAssign newValue = new BooleanAssign(false);
 			BibtexEntry be = panel.mainTable.getEntryAt(currentIndex);
 			abortOperation = importCiteSeerEntry(be, citeseerNamedCompound, overwriteAll, overwriteNone, newValue, rejectedEntries);
@@ -566,9 +571,9 @@ public class CiteSeerFetcher extends SidePaneComponent {
 	 *
 	 */
 	public boolean importCiteSeerEntry(BibtexEntry be, NamedCompound citeseerNC, BooleanAssign overwriteAll, 
-			BooleanAssign overwriteNone, BooleanAssign newValue, Hashtable rejectedEntries) {
+			BooleanAssign overwriteNone, BooleanAssign newValue, Hashtable<Integer, BibtexEntry> rejectedEntries) {
 	    boolean abortOperation = false;
-		SAXParserFactory factory = SAXParserFactory.newInstance();
+		
     	String identifier = generateCanonicalIdentifier(be);			 
 		try {
 			if (identifier != null) {
diff --git a/src/java/net/sf/jabref/imports/CiteSeerFetcherPanel.java b/src/java/net/sf/jabref/imports/CiteSeerFetcherPanel.java
deleted file mode 100644
index 0560ca8..0000000
--- a/src/java/net/sf/jabref/imports/CiteSeerFetcherPanel.java
+++ /dev/null
@@ -1,207 +0,0 @@
-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.Hashtable;
-
-import javax.swing.BorderFactory;
-import javax.swing.JButton;
-import javax.swing.JFrame;
-import javax.swing.JOptionPane;
-import javax.swing.JPanel;
-import javax.swing.JTextField;
-
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.BibtexEntryType;
-import net.sf.jabref.BibtexFields;
-import net.sf.jabref.GUIGlobals;
-import net.sf.jabref.Globals;
-import net.sf.jabref.HelpAction;
-import net.sf.jabref.SidePaneComponent;
-import net.sf.jabref.SidePaneManager;
-import net.sf.jabref.Util;
-import net.sf.jabref.gui.ImportInspectionDialog;
-import net.sf.jabref.undo.NamedCompound;
-
-/**
- * <p>Title: </p>
- * <p>Description: </p>
- * <p>Copyright: Copyright (c) 2003</p>
- * <p>Company: </p>
- *
- * @author not attributable
- * @version 1.0
- */
-
-public class CiteSeerFetcherPanel extends SidePaneComponent implements ActionListener {
-
-
-    String idList;
-    JTextField tf = new JTextField();
-    JPanel pan = new JPanel();
-    GridBagLayout gbl = new GridBagLayout();
-    GridBagConstraints con = new GridBagConstraints();
-    CiteSeerFetcher citeSeerFetcher;
-    AuthorDialog authorDialog;
-    JFrame jFrame; // invisible dialog holder
-    JButton go = new JButton(Globals.lang("Fetch")),
-    helpBut = new JButton(GUIGlobals.getImage("helpSmall"));
-    HelpAction help;
-    CiteSeerFetcherPanel ths = this;
-
-    public CiteSeerFetcherPanel(SidePaneManager p0, final CiteSeerFetcher fetcher) {
-        super(p0, GUIGlobals.getIconUrl("citeseer"), Globals.lang("Fetch CiteSeer"));
-
-        help = new HelpAction(Globals.helpDiag, GUIGlobals.citeSeerHelp, "Help");
-
-        this.citeSeerFetcher = fetcher;
-        helpBut.addActionListener(help);
-        helpBut.setMargin(new Insets(0, 0, 0, 0));
-        tf.setPreferredSize(new Dimension(1,tf.getPreferredSize().height));
-        //add(hd, BorderLayout.NORTH);
-        //ok.setToolTipText(Globals.lang("Fetch Medline"));
-        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;
-        //gbl.setConstraints(header, con);
-        //add(header);
-        con.weighty = 1;
-        con.insets = new Insets(0, 0, 0, 0);
-        //    pan.setLayout(gbl);
-        con.fill = GridBagConstraints.BOTH;
-        gbl.setConstraints(tf, con);
-        main.add(tf);
-        con.weighty = 0;
-        con.gridwidth = 1;
-        gbl.setConstraints(go, con);
-        main.add(go);
-        con.gridwidth = GridBagConstraints.REMAINDER;
-        gbl.setConstraints(helpBut, con);
-        main.add(helpBut);
-        main.setBorder(BorderFactory.createEmptyBorder(1, 1, 1, 1));
-        add(main, BorderLayout.CENTER);
-        go.addActionListener(this);
-        tf.addActionListener(this);
-    }
-
-    public JTextField getTextField() {
-        return tf;
-    }
-
-    public void actionPerformed(ActionEvent e) {
-        if (citeSeerFetcher.activateImportFetcher()) {
-            (new Thread() {
-
-                BibtexEntry entry;
-
-                class Update implements ImportInspectionDialog.CallBack {
-
-                    // 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) {
-                        if (entriesImported > 0)
-                            panel.output(Globals.lang("Completed import from CiteSeer."));
-                        else
-                            panel.output(Globals.lang("No entries imported."));
-                    }
-
-                    public void cancelled() {
-                        panel.output(Globals.lang("%0 import cancelled.", "CiteSeer"));
-                    }
-
-                    public void stopFetching() {
-                    }
-
-                    /*public void run() {
-                        citeSeerFetcher.endImportCiteSeerProgress();
-                        if (addedEntries != null)
-                            panel.markBaseChanged();
-                        panel.refreshTable();
-// Select the entries that were added:
-                        if (addedEntries.size() > 0) {
-                            BibtexEntry[] toSelect = new BibtexEntry[addedEntries.size()];
-                            toSelect = (BibtexEntry[]) addedEntries.toArray(toSelect);
-
-                            panel.selectEntries(toSelect, 0);
-                            if (toSelect.length == 1)
-                                panel.showEntry(toSelect[0]);
-//else
-//    panel.updateViewToSelected();
-                        }
-                        panel.output(Globals.lang("Completed Import Fields from CiteSeer."));
-                    } */
-
-                }
-
-                public void run() {
-
-                    // Open the inspection dialog... we will fill it as the entries come in:
-                    ImportInspectionDialog diag = null;
-                    if (Globals.prefs.getBoolean("useImportInspectionDialog")) {
-                        diag = new ImportInspectionDialog(panel.frame(), panel,
-                            BibtexFields.DEFAULT_INSPECTION_FIELDS, Globals.lang("Fetch CiteSeer"), false);
-                        diag.addCallBack(new Update());
-                        Util.placeDialog(diag, panel.frame());
-                        diag.setVisible(true);
-                        diag.setProgress(0, 1);
-                    }
-                    NamedCompound undoEdit =
-                            new NamedCompound(Globals.lang("CiteSeer import entries")),
-                            // Use a dummy UndoEdit to avoid storing the information on
-                            // every field change, since we are importing new entries:
-                            dummyCompound = new NamedCompound(Globals.lang("Ok"));
-                    BooleanAssign overwriteAll = new BooleanAssign(true),
-                            overwriteNone = new BooleanAssign(false),
-                            newValue = new BooleanAssign(false);
-                    Hashtable rejectedEntries = new Hashtable();
-                    String text = tf.getText().replaceAll(",", ";");
-                    String[] ids = text.split(";");
-                    BibtexEntry[] entries = new BibtexEntry[ids.length];
-                    citeSeerFetcher.activateImportFetcher();
-
-                    for (int i = 0; i < entries.length; i++) {
-                        // Create the entry:
-                        entries[i] = new BibtexEntry(Util.createNeutralId(), BibtexEntryType.getType("article"));
-                        // Set its citeseerurl field:
-                        entries[i].setField("citeseerurl", ids[i].trim());
-                        // Try to import based on the id:
-                        boolean newValues = citeSeerFetcher.importCiteSeerEntry
-                                (entries[i], dummyCompound, overwriteAll, overwriteNone,
-                                        newValue, rejectedEntries);
-
-                        // What we do with the entry depends on whether we are using the inspection window:
-                        if (diag != null) {
-                            diag.addEntry(entries[i]);
-                            diag.setProgress(i+1, entries.length);
-                        } else {
-                            // Do nothing. We will add the entries afterwards (?)
-                        }
-                    }
-                    citeSeerFetcher.deactivateImportFetcher();
-
-                    if (diag != null) {
-                        // Signal that we are done. The ImportInspectionDialog will add the entries for us.
-                        diag.entryListComplete();
-                    } else {
-                        panel.frame().addBibEntries(Arrays.asList(entries), null, false);
-                        (new Update()).done(entries.length);
-                    }
-                }
-            }).start();
-        } else {
-            JOptionPane.showMessageDialog(panel.frame(),
-                    Globals.lang("A CiteSeer import operation is currently in progress.") + "  " +
-                    Globals.lang("Please wait until it has finished."),
-                    Globals.lang("CiteSeer Import Error"),
-                    JOptionPane.WARNING_MESSAGE);
-        }
-    }
-}
-
diff --git a/src/java/net/sf/jabref/imports/CiteSeerUndoHandler.java b/src/java/net/sf/jabref/imports/CiteSeerUndoHandler.java
index e4ebf87..cf6833f 100644
--- a/src/java/net/sf/jabref/imports/CiteSeerUndoHandler.java
+++ b/src/java/net/sf/jabref/imports/CiteSeerUndoHandler.java
@@ -117,7 +117,7 @@ public class CiteSeerUndoHandler extends DefaultHandler {
         if (nextAssign == true) {
             String target = new String(ch, start, length);        
             if (nextField.equals("title")) {
-                if (makeOverwriteChoice((String) bibEntry.getField(nextField),
+                if (makeOverwriteChoice(bibEntry.getField(nextField),
                         target, nextField)) {
                     UndoableFieldChange fieldChange = new UndoableFieldChange(
                             bibEntry, nextField, bibEntry.getField(nextField),
@@ -126,7 +126,7 @@ public class CiteSeerUndoHandler extends DefaultHandler {
                     bibEntry.setField(nextField, target);
                 }
             } else if (nextField.equals("year")) {
-                if (makeOverwriteChoice((String) bibEntry.getField(nextField),
+                if (makeOverwriteChoice(bibEntry.getField(nextField),
                         String.valueOf(target.substring(0, 4)), nextField)) {
                     UndoableFieldChange fieldChange = new UndoableFieldChange(
                             bibEntry, nextField, bibEntry.getField(nextField),
@@ -136,7 +136,7 @@ public class CiteSeerUndoHandler extends DefaultHandler {
                             .substring(0, 4)));
                 }
             } else if (nextField.equals("citeseerurl")) {
-                if (makeOverwriteChoice((String) bibEntry.getField(nextField),
+                if (makeOverwriteChoice(bibEntry.getField(nextField),
                         target, nextField)) {
                     UndoableFieldChange fieldChange = new UndoableFieldChange(
                             bibEntry, nextField, bibEntry.getField(nextField),
@@ -199,7 +199,7 @@ public class CiteSeerUndoHandler extends DefaultHandler {
 
     public void endDocument() {
         if (newAuthors != null) {
-            if (makeOverwriteChoice((String) bibEntry.getField("author"),
+            if (makeOverwriteChoice(bibEntry.getField("author"),
                     newAuthors, "author")) {
                 UndoableFieldChange fieldChange = new UndoableFieldChange(
                         bibEntry, "author", bibEntry.getField("author"), newAuthors);
@@ -207,7 +207,7 @@ public class CiteSeerUndoHandler extends DefaultHandler {
                 bibEntry.setField("author", newAuthors);
             }
         }
-        Integer newCount = new Integer(citeseerCitationCount);
+        String newCount = new Integer(citeseerCitationCount).toString();
         UndoableFieldChange fieldChange = new UndoableFieldChange(
                 bibEntry, "citeseercitationcount", 
 				bibEntry.getField("citeseercitationcount"), 
diff --git a/src/java/net/sf/jabref/imports/CopacImporter.java b/src/java/net/sf/jabref/imports/CopacImporter.java
index 20e752e..c7d0e2a 100644
--- a/src/java/net/sf/jabref/imports/CopacImporter.java
+++ b/src/java/net/sf/jabref/imports/CopacImporter.java
@@ -20,7 +20,7 @@ import net.sf.jabref.BibtexFields;
  * http://copac.ac.uk/faq/#format
  * 
  * @author $Author: coezbek $
- * @version $Revision: 1933 $ ($Date: 2007-02-06 17:27:22 +0100 (Tue, 06 Feb 2007) $)
+ * @version $Revision: 2209 $ ($Date: 2007-08-01 20:23:38 +0200 (Wed, 01 Aug 2007) $)
  * 
  */
 public class CopacImporter extends ImportFormat {
@@ -63,13 +63,13 @@ public class CopacImporter extends ImportFormat {
 	 * Parse the entries in the source, and return a List of BibtexEntry
 	 * objects.
 	 */
-	public List importEntries(InputStream stream) throws IOException {
+	public List<BibtexEntry> importEntries(InputStream stream) throws IOException {
 		if (stream == null)
 			throw new IOException("No stream given.");
 
 		BufferedReader in = new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
 
-		List entries = new LinkedList();
+		List<String> entries = new LinkedList<String>();
 
 		{ // Preprocess entries
 			String str;
@@ -100,9 +100,9 @@ public class CopacImporter extends ImportFormat {
 				entries.add(sb.toString());
 		}
 
-		List results = new LinkedList();
+		List<BibtexEntry> results = new LinkedList<BibtexEntry>();
 
-		Iterator it = entries.iterator();
+		Iterator<String> it = entries.iterator();
 		while (it.hasNext()) {
 
 			// Copac does not contain enough information on the type of the
diff --git a/src/java/net/sf/jabref/imports/CsaImporter.java b/src/java/net/sf/jabref/imports/CsaImporter.java
index d57bad0..1e930e4 100644
--- a/src/java/net/sf/jabref/imports/CsaImporter.java
+++ b/src/java/net/sf/jabref/imports/CsaImporter.java
@@ -75,11 +75,11 @@ public class CsaImporter extends ImportFormat {
     }
 
     // append to the "note" field
-    private void addNote(HashMap hm, String note) {
+    private void addNote(HashMap<String, String> hm, String note) {
 
         StringBuffer notebuf = new StringBuffer();
         if (hm.get("note") != null) {
-            notebuf.append((String)hm.get("note"));
+            notebuf.append(hm.get("note"));
             notebuf.append("\n");
         }
         notebuf.append(note);
@@ -87,7 +87,7 @@ public class CsaImporter extends ImportFormat {
     }
 
     // parse the date from the Source field
-    private String parseDate(HashMap hm, String fstr) {
+    private String parseDate(HashMap<String, String> hm, String fstr) {
 
         // find LAST matching date in string
         int match = -1;
@@ -154,7 +154,7 @@ public class CsaImporter extends ImportFormat {
 
         // check if journal year matches PY field
         if (hm.get("year") != null) {
-            String oyear = (String)hm.get("year");
+            String oyear = hm.get("year");
             if (!year.equals(oyear)) {
                 note.setLength(0);
                 note.append("Source Year: ");
@@ -195,10 +195,10 @@ public class CsaImporter extends ImportFormat {
      * Parse the entries in the source, and return a List of BibtexEntry
      * objects.
      */
-    public List importEntries(InputStream stream) throws IOException {
-        ArrayList bibitems = new ArrayList();
+    public List<BibtexEntry> importEntries(InputStream stream) throws IOException {
+        ArrayList<BibtexEntry> bibitems = new ArrayList<BibtexEntry>();
         StringBuffer sb = new StringBuffer();
-        HashMap hm = new HashMap();
+        HashMap<String, String> hm = new HashMap<String, String>();
 
         BufferedReader in =
             new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
@@ -206,7 +206,6 @@ public class CsaImporter extends ImportFormat {
         String Type = null;
         String str;
         boolean first = true;
-        int rline = 1;
         line = 1;
         str = readLine(in);
         while (true) {
@@ -221,7 +220,7 @@ public class CsaImporter extends ImportFormat {
                     // post-process Journal article
                     if (Type.equals("article") &&
                         hm.get("booktitle") != null) {
-                        String booktitle = (String)hm.get("booktitle");
+                        String booktitle = hm.get("booktitle");
                         hm.remove("booktitle");
                         hm.put("journal", booktitle);
                     }
@@ -240,7 +239,6 @@ public class CsaImporter extends ImportFormat {
                 if (str == null)
                     break;	// end of file
                 str = readLine(in);
-                rline = line;
                 continue;
             }
 
@@ -281,7 +279,6 @@ public class CsaImporter extends ImportFormat {
                                               ": DN out of order");
                     }
                     first = false;
-                    rline = fline; // save start of record
                 } else if (first == true) {
                     throw new IOException("format error at line " + fline +
                                               ": missing DN");
@@ -343,7 +340,7 @@ public class CsaImporter extends ImportFormat {
                 else if (fabbr.equals("PY")) {
                     ftype = "year";
                     if (hm.get("year") != null) {
-                        String oyear = (String)hm.get("year");
+                        String oyear = hm.get("year");
                         if (!fstr.equals(oyear)) {
                             StringBuffer note = new StringBuffer();
                             note.append("Source Year: ");
diff --git a/src/java/net/sf/jabref/imports/CustomImportList.java b/src/java/net/sf/jabref/imports/CustomImportList.java
index fdc7708..6e2ced3 100644
--- a/src/java/net/sf/jabref/imports/CustomImportList.java
+++ b/src/java/net/sf/jabref/imports/CustomImportList.java
@@ -30,6 +30,7 @@ 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;
 
@@ -39,14 +40,14 @@ import net.sf.jabref.JabRefPreferences;
  * <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 {
+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 {
+  public class Importer implements Comparable<Importer> {
     
     private String name;
     private String cliId;
@@ -113,8 +114,8 @@ public class CustomImportList extends TreeSet {
       return name.hashCode();
     }
     
-    public int compareTo(Object o) {
-      return this.getName().compareTo( ((Importer)o).getName() );
+    public int compareTo(Importer o) {
+      return this.getName().compareTo( o.getName() );
     }
     
     public String toString() {
@@ -123,7 +124,7 @@ public class CustomImportList extends TreeSet {
     
     public ImportFormat getInstance() throws MalformedURLException, ClassNotFoundException, InstantiationException, IllegalAccessException {
       URLClassLoader cl = new URLClassLoader(new URL[] {getBasePathUrl()});
-      Class clazz = Class.forName(className, true, cl);
+      Class<?> clazz = Class.forName(className, true, cl);
       ImportFormat importFormat = (ImportFormat)clazz.newInstance();
       importFormat.setIsCustomImporter(true);
       return importFormat;
@@ -174,7 +175,7 @@ public class CustomImportList extends TreeSet {
 
   public void store() {
     purgeAll();
-    Importer[] importers = (Importer[])this.toArray(new Importer[]{});
+    Importer[] importers = this.toArray(new Importer[]{});
     for (int i = 0; i < importers.length; i++) {
       Globals.prefs.putStringArray("customImportFormat"+i, importers[i].getAsStringArray());
     }
diff --git a/src/java/net/sf/jabref/imports/EndnoteImporter.java b/src/java/net/sf/jabref/imports/EndnoteImporter.java
index 14c91de..089712f 100644
--- a/src/java/net/sf/jabref/imports/EndnoteImporter.java
+++ b/src/java/net/sf/jabref/imports/EndnoteImporter.java
@@ -1,17 +1,14 @@
 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.io.InputStream;
 import java.util.ArrayList;
 import java.util.HashMap;
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.Globals;
-import net.sf.jabref.Util;
-import net.sf.jabref.AuthorList;
-import net.sf.jabref.BibtexFields;
+import java.util.List;
+import java.util.regex.Pattern;
+
+import net.sf.jabref.*;
 
 /**
  * Importer for the Refer/Endnote format.
@@ -59,8 +56,8 @@ public class EndnoteImporter extends ImportFormat {
      * Parse the entries in the source, and return a List of BibtexEntry
      * objects.
      */
-    public List importEntries(InputStream stream) throws IOException {
-    ArrayList bibitems = new ArrayList();
+    public List<BibtexEntry> importEntries(InputStream stream) throws IOException {
+    ArrayList<BibtexEntry> bibitems = new ArrayList<BibtexEntry>();
     StringBuffer sb = new StringBuffer();
     BufferedReader in = new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
     String ENDOFRECORD = "__EOREOR__";
@@ -82,7 +79,7 @@ public class EndnoteImporter extends ImportFormat {
     }
 
     String[] entries = sb.toString().split(ENDOFRECORD);
-    HashMap hm = new HashMap();
+    HashMap<String, String> hm = new HashMap<String, String>();
     String author = "", Type = "", editor = "", artnum = "";
     for (int i = 0; i < entries.length; i++){
         hm.clear();
@@ -203,7 +200,8 @@ public class EndnoteImporter extends ImportFormat {
         // create one here
         b.setField(hm);
         //if (hm.isEmpty())
-        if (b.getAllFields().length > 0) bibitems.add(b);
+        if (b.getAllFields().size() > 0)
+        	bibitems.add(b);
 
     }
     return bibitems;
diff --git a/src/java/net/sf/jabref/imports/EntryFetcher.java b/src/java/net/sf/jabref/imports/EntryFetcher.java
index 11347f5..09d1c85 100644
--- a/src/java/net/sf/jabref/imports/EntryFetcher.java
+++ b/src/java/net/sf/jabref/imports/EntryFetcher.java
@@ -4,63 +4,82 @@ import java.net.URL;
 
 import javax.swing.JPanel;
 
-import net.sf.jabref.JabRefFrame;
+import net.sf.jabref.OutputPrinter;
 import net.sf.jabref.gui.ImportInspectionDialog;
 
 /**
  * Implement this interface to add another fetcher (something that grabs records
  * from the Web for JabRef). Have a look at the existing implemenations
- * OAI2Fetcher and IEEEXploreFetcher.
+ * 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.
-	 * 
-	 * @param query
-	 *            The query text.
-	 * @param dialog
-	 *            The dialog to add imported entries to.
-	 * @param frame
-	 *            The application frame.
-	 */
-	public void processQuery(String query, ImportInspectionDialog dialog,
-			JabRefFrame frame);
+    /**
+     * 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 fetcher 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 fetcher
-	 * 
-	 * @return The title
-	 */
-	public String getTitle();
+    /**
+     * The title for this fetcher, displayed in the menu and in the side pane.
+     * 
+     * @return The title
+     */
+    public String getTitle();
 
-	/**
-	 * Get the name of the key binding for this fetcher, if any.
-	 * 
-	 * @return The name of the key binding
-	 */
-	public String getKeyName();
+    /**
+     * Get the name of the key binding for this fetcher, 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 fetcher.
-	 * 
-	 * @return The icon URL
-	 */
-	public URL getIcon();
+    /**
+     * Get the appropriate icon URL for this fetcher.
+     * 
+     * @return The icon URL
+     */
+    public URL getIcon();
 
-	/**
-	 * Get the name of the help page for this fetcher.
-	 * 
-	 * @return The name of the help file
-	 */
-	public String getHelpPage();
+    /**
+     * Get the name of the help page for this fetcher.
+     * 
+     * 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 fetcher does not have
+     *         any help.
+     */
+    public String getHelpPage();
 
-	/**
-	 * If this fetcher 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 fetcher
-	 */
-	public JPanel getOptionsPanel();
+    /**
+     * If this fetcher 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 fetcher or null if this fetcher does not
+     *         have any options.
+     */
+    public JPanel getOptionsPanel();
 }
diff --git a/src/java/net/sf/jabref/imports/GeneralFetcher.java b/src/java/net/sf/jabref/imports/GeneralFetcher.java
index e39ef09..eccbdca 100644
--- a/src/java/net/sf/jabref/imports/GeneralFetcher.java
+++ b/src/java/net/sf/jabref/imports/GeneralFetcher.java
@@ -1,15 +1,31 @@
 package net.sf.jabref.imports;
 
-import net.sf.jabref.*;
-import net.sf.jabref.undo.NamedCompound;
-import net.sf.jabref.gui.ImportInspectionDialog;
-
-import javax.swing.*;
-import java.awt.event.ActionListener;
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
 import java.awt.event.ActionEvent;
-import java.awt.*;
-import java.util.Hashtable;
-import java.util.Arrays;
+import java.awt.event.ActionListener;
+
+import javax.swing.AbstractAction;
+import javax.swing.Action;
+import javax.swing.BorderFactory;
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+
+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.ImportInspectionDialog;
 
 /**
  * <p>Title: </p>
@@ -101,11 +117,22 @@ public class GeneralFetcher extends SidePaneComponent implements ActionListener
     public void actionPerformed(ActionEvent e) {
         if (tf.getText().trim().length() == 0)
             return;
-        ImportInspectionDialog dialog = new ImportInspectionDialog(frame, frame.basePanel(),
+        final ImportInspectionDialog dialog = new ImportInspectionDialog(frame, frame.basePanel(),
                 BibtexFields.DEFAULT_INSPECTION_FIELDS, fetcher.getTitle(), false);
         dialog.addCallBack(fetcher);
         Util.placeDialog(dialog, frame);
-        fetcher.processQuery(tf.getText().trim(), dialog, frame);
+        dialog.setVisible(true);
+        
+        new Thread(new Runnable(){
+            public void run(){
+                
+                if (fetcher.processQuery(tf.getText().trim(), dialog, frame)){
+                    dialog.entryListComplete();
+                } else {
+                    dialog.dispose();
+                }
+            }
+        }).start();
     }
 
     class FetcherAction extends AbstractAction {
diff --git a/src/java/net/sf/jabref/imports/IEEEXploreFetcher.java b/src/java/net/sf/jabref/imports/IEEEXploreFetcher.java
index ce4bf67..3e46871 100644
--- a/src/java/net/sf/jabref/imports/IEEEXploreFetcher.java
+++ b/src/java/net/sf/jabref/imports/IEEEXploreFetcher.java
@@ -1,9 +1,17 @@
 package net.sf.jabref.imports;
 
 import java.awt.BorderLayout;
-import java.io.*;
-import java.net.*;
-import java.util.ArrayList;
+import java.io.BufferedInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.PrintWriter;
+import java.net.ConnectException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLConnection;
+import java.net.URLEncoder;
 import java.util.List;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
@@ -12,14 +20,19 @@ import javax.swing.JCheckBox;
 import javax.swing.JOptionPane;
 import javax.swing.JPanel;
 
-import net.sf.jabref.*;
-import net.sf.jabref.gui.ImportInspectionDialog;
+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 net.sf.jabref.journals.JournalAbbreviations;
 
-public class IEEEXploreFetcher implements Runnable, EntryFetcher {
 
-    ImportInspectionDialog dialog = null;
-    JabRefFrame frame = null;
+public class IEEEXploreFetcher implements EntryFetcher {
+
+    ImportInspector dialog = null;
+    OutputPrinter status;
     HTMLConverter htmlConverter = new HTMLConverter();
     JournalAbbreviations journalAbbrev = new JournalAbbreviations("/resource/IEEEJournalList.txt");
     private String terms;
@@ -32,13 +45,8 @@ public class IEEEXploreFetcher implements Runnable, EntryFetcher {
     private JCheckBox fetchAstracts = new JCheckBox(Globals.lang("Include abstracts"), false);
     private boolean fetchingAbstracts = false;
     private boolean fetchRis = true;
-    //private static final int MAX_ABSTRACT_FETCH = 5;
     private static final int MAX_RIS_FETCH = 25;
 
-    public IEEEXploreFetcher() {
-    }
-
-
     //Pattern hitsPattern = Pattern.compile("Your search matched <strong>(\\d+)</strong>");
     Pattern hitsPattern = Pattern.compile(".*Your search matched <strong>(\\d+)</strong>.*");
     Pattern maxHitsPattern = Pattern.compile(".*A maximum of <strong>(\\d+)</strong>.*");
@@ -58,24 +66,7 @@ public class IEEEXploreFetcher implements Runnable, EntryFetcher {
 
     String abbrvPattern = ".*[^,] '?\\d+\\)?";
     Pattern acceptedPatterns = Pattern.compile("(.*) : (Accepted.*)");
-    /*Pattern entryPattern1 = Pattern.compile(".*<strong>(.+)</strong><br>\\s+(.+)<br>"
-                +"\\s+<A href='(.+)'>(.+)</A><br>\\s+Volume (.+), \\s*"
-                +"(.+)? (\\d\\d\\d\\d)\\s+Page\\(s\\):.*");
 
-    Pattern entryPattern2 = Pattern.compile(".*<strong>(.+)</strong><br>\\s+(.+)<br>"
-                    +"\\s+<A href='(.+)'>(.+)</A><br>\\s+Volume (.+), \\s+Issue (\\d+), \\s*"
-                    +"(.+)? (\\d\\d\\d\\d)\\s+Page\\(s\\):.*");
-
-
-    Pattern entryPattern3 = Pattern.compile(".*<strong>(.+)</strong><br>\\s+(.+)<br>"
-                    +"\\s+<A href='(.+)'>(.+)</A><br>\\s+Volume (.+), \\s+Issue (\\d+), " +
-                    "\\s+Part (\\d+), \\s*" //"[\\s-\\d]+"
-                    +"(.+)? (\\d\\d\\d\\d)\\s+Page\\(s\\):.*");
-
-    Pattern entryPattern4 = Pattern.compile(".*<strong>(.+)</strong><br>\\s+(.+)<br>"
-                    +"\\s+<A href='(.+)'>(.+)</A><br>\\s*" //[\\s-\\da-z]+"
-                    +"(.+)? (\\d\\d\\d\\d)\\s+Page\\(s\\):.*");
-    */
     Pattern abstractLinkPattern = Pattern.compile(
             "<a href=\"(.+)\" class=\"bodyCopySpaced\">Abstract</a>");
 
@@ -89,58 +80,12 @@ public class IEEEXploreFetcher implements Runnable, EntryFetcher {
         return pan;
     }
 
-    public void processQuery(String query, ImportInspectionDialog dialog, JabRefFrame frame) {
+    public boolean processQuery(String query, ImportInspector dialog, OutputPrinter status) {
         this.dialog = dialog;
-        this.frame =frame;
+        this.status = status;
         this.terms = query;
         piv = 0;
-        (new Thread(this)).start();
-    }
-
-
-
-    public String getTitle() {
-        return Globals.menuTitle("Search IEEEXplore");
-    }
-
-
-    public URL getIcon() {
-        return GUIGlobals.getIconUrl("www");
-    }
-
-    public String getHelpPage() {
-        return "IEEEXploreHelp.html";
-    }
-
-    public String getKeyName() {
-        return "Search IEEEXplore";
-    }
-
-    // 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) {
-        //System.out.println("Number of entries parsed: "+parsed);
-        //System.out.println("Parsing failed for "+unparseable+" entries");
-    }
-
-    // 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;
-    }
-
-    /**
-     * The code that runs the actual search and fetch operation.
-     */
-    public void run() {
-        frame.block();
+        // frame.block();
         shouldContinue = true;
         parsed = 0;
         unparseable = 0;
@@ -156,51 +101,25 @@ public class IEEEXploreFetcher implements Runnable, EntryFetcher {
             String page = getResults(url);
             //hits = getNumberOfHits(page, "Your search matched", hitsPattern);
 
-            frame.unblock();
+            // frame.unblock();
             if (page.indexOf("You have entered an invalid search") >= 0) {
-                dialog.dispose();
-                JOptionPane.showMessageDialog(frame, Globals.lang("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;
+                return false;
             }
             
-            
-            
             if (page.indexOf("No results") >= 0) {
-                dialog.dispose();
-                JOptionPane.showMessageDialog(frame, Globals.lang("No entries found for the search string '%0'",
+                status.showMessage(Globals.lang("No entries found for the search string '%0'",
                         terms),
                         Globals.lang("Search IEEEXplore"), JOptionPane.INFORMATION_MESSAGE);
-                return;
+                return false;
             }
             hits = getNumberOfHits(page, "Your search matched", hitsPattern);
-            /*if (hits == 0) {
-                dialog.dispose();
-                JOptionPane.showMessageDialog(frame, Globals.lang("No entries found for the search string '%0'",
-                        terms),
-                        Globals.lang("Search IEEEXplore"), JOptionPane.INFORMATION_MESSAGE);
-                return;
-            } else {
-                fetchingAbstracts = fetchAstracts.isSelected();
-                if (fetchingAbstracts && (hits > MAX_ABSTRACT_FETCH)) {
-                    fetchingAbstracts = false;
-                    JOptionPane.showMessageDialog(frame,
-                            Globals.lang("%0 entries found. To reduce server load, abstracts "
-                            +"will only be downloaded for searches returning %1 hits or less.",
-                                    new String[] {String.valueOf(hits), String.valueOf(MAX_ABSTRACT_FETCH)}),
-                            Globals.lang("Search IEEEXplore"), JOptionPane.INFORMATION_MESSAGE);
-                }
-                dialog.setVisible(true);
-            }
-            */
 
             int maxHits = getNumberOfHits(page, "A maximum of", maxHitsPattern);
             //String page = getResultsFromFile(new File("/home/alver/div/temp50.txt"));
 
-            //List entries = new ArrayList();
-            //System.out.println("Number of hits: "+hits);
-            //System.out.println("Maximum returned: "+maxHits);
             if (hits > maxHits)
                 hits = maxHits;
             
@@ -208,7 +127,7 @@ public class IEEEXploreFetcher implements Runnable, EntryFetcher {
             
             if (hits > MAX_RIS_FETCH) {
                 if (fetchingAbstracts == true) {
-                    JOptionPane.showMessageDialog(frame,
+                    status.showMessage(
                         Globals.lang("%0 entries found. To reduce server load, "
                         +"only %1 will be downloaded.",
                                 new String[] {String.valueOf(hits), String.valueOf(MAX_RIS_FETCH)}),
@@ -219,18 +138,13 @@ public class IEEEXploreFetcher implements Runnable, EntryFetcher {
                     fetchRis = false;
                 }
             }
-            dialog.setVisible(true);
 
-           //parse(dialog, page, 0, 51);
-            //dialog.setProgress(perPage/2, hits);
             parse(dialog, page, 0, 1);
             int firstEntry = perPage;
             while (shouldContinue && (firstEntry < hits)) {
-                //System.out.println("Fetching from: "+firstEntry);
                 address = makeUrl(firstEntry);
-                //System.out.println(address);
                 page = getResults(new URL(address));
-                //dialog.setProgress(firstEntry+perPage/2, hits);
+
                 if (!shouldContinue)
                     break;
 
@@ -238,19 +152,39 @@ public class IEEEXploreFetcher implements Runnable, EntryFetcher {
                 firstEntry += perPage;
 
             }
-            dialog.entryListComplete();
+            return true;
         } catch (MalformedURLException e) {
             e.printStackTrace();
         } catch (ConnectException e) {
-            JOptionPane.showMessageDialog(frame, Globals.lang("Connection to IEEEXplore failed"),
+            status.showMessage(Globals.lang("Connection to IEEEXplore failed"),
                     Globals.lang("Search IEEExplore"), JOptionPane.ERROR_MESSAGE);
         } catch (IOException e) {
             e.printStackTrace();
-        } finally {
-            frame.unblock(); // We call this to ensure no lockup.
         }
+        return false;
+    }
+        
+    public String getTitle() {
+        return Globals.menuTitle("Search IEEEXplore");
+    }
 
+    public URL getIcon() {
+        return GUIGlobals.getIconUrl("www");
+    }
 
+    public String getHelpPage() {
+        return "IEEEXploreHelp.html";
+    }
+
+    public String getKeyName() {
+        return "Search 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) {
@@ -263,25 +197,20 @@ public class IEEEXploreFetcher implements Runnable, EntryFetcher {
 
     int piv = 0;
 
-    private void parse(ImportInspectionDialog dialog, String text, int startIndex, int firstEntryNumber) {
+    private void parse(ImportInspector dialog, String text, int startIndex, int firstEntryNumber) {
         piv = startIndex;
         int entryNumber = firstEntryNumber;
-        List<BibtexEntry> entries = new ArrayList<BibtexEntry>();
+        
         BibtexEntry entry;
         while (((entry = parseNextEntry(text, piv, entryNumber)) != null)
             && (shouldContinue)) {
             if (entry.getField("title") != null) {
-                entries.add(entry);
-                dialog.addEntries(entries);
+                dialog.addEntry(entry);
                 dialog.setProgress(parsed+unparseable, hits);
-                entries.clear();
                 parsed++;
             }
             entryNumber++;
-            //break;
         }
-
-
     }
 
     private BibtexEntry parseEntryRis(String number, boolean abs, boolean isStandard)
@@ -321,7 +250,7 @@ public class IEEEXploreFetcher implements Runnable, EntryFetcher {
             if (isStandard == true) {
                 entry.setType(BibtexEntryType.getType("standard"));
                 entry.setField("organization", "IEEE");
-                String stdNumber = (String)entry.getField("journal");
+                String stdNumber = entry.getField("journal");
                 String[] parts = stdNumber.split("Std ");
                 if (parts.length == 2) {
                     stdNumber = parts[1];
@@ -339,7 +268,7 @@ public class IEEEXploreFetcher implements Runnable, EntryFetcher {
                 entry.clearField("journal");
                 entry.clearField("booktitle");
                 
-                String title = (String)entry.getField("title");
+                String title = entry.getField("title");
                 entry.setField("title", title);
             }
             return entry;
@@ -353,7 +282,7 @@ public class IEEEXploreFetcher implements Runnable, EntryFetcher {
         if (entry.getType().getName() == "Standard")
             return entry;
         // clean up month
-        String month = (String)entry.getField("month");
+        String month = entry.getField("month");
         // hash or map TODO
         entry.setField("month", month);
         // clean up publication field
@@ -366,7 +295,7 @@ public class IEEEXploreFetcher implements Runnable, EntryFetcher {
         } else {
             sourceField = "booktitle";
         }
-        String fullName = (String)entry.getField(sourceField);
+        String fullName = entry.getField(sourceField);
         if (fullName == null) {
             System.err.println("Null publication");
             return null;
@@ -460,7 +389,7 @@ public class IEEEXploreFetcher implements Runnable, EntryFetcher {
             fullName = fullName.trim();
             
             fullName = fullName.replaceAll("^[tT]he ", "").replaceAll("^\\d{4} ", "").replaceAll("[,.]$", "");
-            String year = (String)entry.getField("year");
+            String year = entry.getField("year");
             fullName = fullName.replaceAll(", " + year + "\\.?", "");
             //System.out.println(fullName);
             
@@ -513,7 +442,7 @@ public class IEEEXploreFetcher implements Runnable, EntryFetcher {
                 return entry;
             }
             */
-            BibtexEntryType type = null;
+            BibtexEntryType type = BibtexEntryType.getType("article");
             String sourceField = null;
             if (text.indexOf("JNL") >= 0) {
                 type = BibtexEntryType.getType("article");
@@ -625,90 +554,7 @@ public class IEEEXploreFetcher implements Runnable, EntryFetcher {
                         entry.setField("year", ms5.group(2));
                     }
                 }
-            }
-            /*if (m1.find()) {
-                m = m1;
-                // Title:
-                entry.setField("title", convertHTMLChars(m.group(1)));
-                // Author:
-                tmp = convertHTMLChars(m.group(2));
-                if (tmp.charAt(tmp.length()-1) == ';')
-                    tmp= tmp.substring(0, tmp.length()-1);
-                entry.setField("author", tmp.replaceAll("; ", " and "));
-                // Publication:
-                tmp = m.group(4);
-                entry.setField(sourceField, convertHTMLChars(tmp));
-                // Volume:
-                entry.setField("volume", convertHTMLChars(m.group(5)));
-                // Month:
-                entry.setField("month", convertHTMLChars(m.group(6)));
-                // Year
-                entry.setField("year", m.group(7));
-
-            }
-            else if (m2.find()) {
-                m = m2;
-                // Title:
-                entry.setField("title", convertHTMLChars(m.group(1)));
-                // Author:
-                tmp = convertHTMLChars(m.group(2));
-                if (tmp.charAt(tmp.length()-1) == ';')
-                    tmp= tmp.substring(0, tmp.length()-1);
-                entry.setField("author", tmp.replaceAll("; ", " and "));
-                // Publication:
-                tmp = m.group(4);
-                entry.setField(sourceField, convertHTMLChars(tmp));
-                // Volume:
-                entry.setField("volume", convertHTMLChars(m.group(5)));
-                // Number:
-                entry.setField("number", convertHTMLChars(m.group(6)));
-                // Month:
-                entry.setField("month", convertHTMLChars(m.group(7)));
-                // Year:
-                entry.setField("year", m.group(8));
-
-            }
-            else if (m3.find()) {
-                m = m3;
-                // Title:
-                entry.setField("title", convertHTMLChars(m.group(1)));
-                // Author:
-                tmp = convertHTMLChars(m.group(2));
-                if (tmp.charAt(tmp.length()-1) == ';')
-                    tmp= tmp.substring(0, tmp.length()-1);
-                entry.setField("author", tmp.replaceAll("; ", " and "));
-                // Publication:
-                tmp = m.group(4);
-                entry.setField(sourceField, convertHTMLChars(tmp));
-                // Volume:
-                entry.setField("volume", convertHTMLChars(m.group(5)));
-                // Number:
-                entry.setField("number", convertHTMLChars(m.group(6)));
-                // Month:
-                entry.setField("month", convertHTMLChars(m.group(8)));
-                // Year
-                entry.setField("year", m.group(9));
-
-            }
-            else if (m4.find()) {
-                m = m4;
-                // Title:
-                entry.setField("title", convertHTMLChars(m.group(1)));
-                // Author:
-                tmp = convertHTMLChars(m.group(2));
-                if (tmp.charAt(tmp.length()-1) == ';')
-                    tmp= tmp.substring(0, tmp.length()-1);
-                entry.setField("author", tmp.replaceAll("; ", " and "));
-                // Publication:
-                tmp = m.group(4);
-                entry.setField(sourceField, convertHTMLChars(tmp));
-                // Month:
-                entry.setField("month", convertHTMLChars(m.group(5)));
-                // Year
-                entry.setField("year", m.group(6));
-
-            }*/
-               else {
+            } else {
                 System.err.println("---no structure match---");
                 System.err.println(text);
                 unparseable++;
@@ -817,7 +663,6 @@ public class IEEEXploreFetcher implements Runnable, EntryFetcher {
         return sb.toString();
     }
 
-
     /**
      * Download and parse the web page containing an entry's Abstract:
      * @param link
@@ -827,9 +672,6 @@ public class IEEEXploreFetcher implements Runnable, EntryFetcher {
     public String fetchAbstract(String link) throws IOException {
         URL url = new URL(link);
         String page = getResults(url);
-        //System.out.println(link);
-
-        //System.out.println("Fetched abstract page.");
 
         String marker = "Abstract</span><br>";
         int index = page.indexOf(marker);
diff --git a/src/java/net/sf/jabref/imports/ImportCustomizationDialog.java b/src/java/net/sf/jabref/imports/ImportCustomizationDialog.java
index 24719a9..178063d 100644
--- a/src/java/net/sf/jabref/imports/ImportCustomizationDialog.java
+++ b/src/java/net/sf/jabref/imports/ImportCustomizationDialog.java
@@ -26,21 +26,22 @@
  */
 package net.sf.jabref.imports;
 
-import javax.swing.JDialog;
-import java.awt.*;
-import net.sf.jabref.*;
-import javax.swing.*;
-import java.awt.event.ActionListener;
+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 com.jgoodies.forms.builder.ButtonBarBuilder;
-import com.jgoodies.forms.layout.Sizes;
 
 /**
  * Dialog to manage custom importers.
@@ -298,7 +299,7 @@ public class ImportCustomizationDialog extends JDialog {
     }
 
     public CustomImportList.Importer getImporter(int rowIndex) {
-      CustomImportList.Importer[] importers = (CustomImportList.Importer[])Globals.prefs.customImports.toArray(new CustomImportList.Importer[] {});
+      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 f70e640..d6e84f9 100644
--- a/src/java/net/sf/jabref/imports/ImportFileFilter.java
+++ b/src/java/net/sf/jabref/imports/ImportFileFilter.java
@@ -7,7 +7,7 @@ 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 {
+public class ImportFileFilter extends FileFilter implements Comparable<ImportFileFilter> {
     private ImportFormat format;
     private String name;
 
@@ -32,7 +32,7 @@ public class ImportFileFilter extends FileFilter implements Comparable {
         return name;
     }
 
-    public int compareTo(Object o) {
-        return name.compareTo(((ImportFileFilter)o).name);
+    public int compareTo(ImportFileFilter o) {
+        return name.compareTo(o.name);
     }
 }
\ No newline at end of file
diff --git a/src/java/net/sf/jabref/imports/ImportFormat.java b/src/java/net/sf/jabref/imports/ImportFormat.java
index b6d4267..3b77661 100644
--- a/src/java/net/sf/jabref/imports/ImportFormat.java
+++ b/src/java/net/sf/jabref/imports/ImportFormat.java
@@ -1,9 +1,11 @@
 package net.sf.jabref.imports;
 
-import java.io.InputStream;
 import java.io.IOException;
+import java.io.InputStream;
 import java.util.List;
 
+import net.sf.jabref.BibtexEntry;
+
 /**
  * Role of an importer for JabRef.
  * 
@@ -15,7 +17,7 @@ import java.util.List;
  * </li></ol>
  * </p>
  */
-public abstract class ImportFormat implements Comparable {
+public abstract class ImportFormat implements Comparable<ImportFormat> {
 
     private boolean isCustomImporter;
     
@@ -35,7 +37,7 @@ public abstract class ImportFormat implements Comparable {
      * Parse the entries in the source, and return a List of BibtexEntry
      * objects.
      */
-    public abstract List importEntries(InputStream in) throws IOException;
+    public abstract List<BibtexEntry> importEntries(InputStream in) throws IOException;
 
 
     /**
@@ -143,9 +145,8 @@ public abstract class ImportFormat implements Comparable {
      *  (non-Javadoc)
      * @see java.lang.Comparable#compareTo(java.lang.Object)
      */
-    public int compareTo(Object o) {
+    public int compareTo(ImportFormat importer) {
       int result = 0;
-      ImportFormat importer = (ImportFormat)o;
       if (getIsCustomImporter() == importer.getIsCustomImporter()) {
         result = getFormatName().compareTo(importer.getFormatName());
       } else {
diff --git a/src/java/net/sf/jabref/imports/ImportFormatReader.java b/src/java/net/sf/jabref/imports/ImportFormatReader.java
index 27edf4a..c0ee120 100644
--- a/src/java/net/sf/jabref/imports/ImportFormatReader.java
+++ b/src/java/net/sf/jabref/imports/ImportFormatReader.java
@@ -24,30 +24,22 @@
  */
 package net.sf.jabref.imports;
 
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.Reader;
-import java.util.Iterator;
-import java.util.List;
-import java.util.SortedSet;
-import java.util.TreeSet;
-
-import net.sf.jabref.BibtexDatabase;
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.Globals;
-import net.sf.jabref.KeyCollisionException;
-import net.sf.jabref.Util;
+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 defalt order of import formats */
-  private SortedSet formats = new TreeSet();
+  /** all import formats, in the default order of import formats */
+  private SortedSet<ImportFormat> formats = new TreeSet<ImportFormat>();
 
   public ImportFormatReader() {
     super();
@@ -61,7 +53,6 @@ public class ImportFormatReader {
     formats.add(new CsaImporter());   
     formats.add(new IsiImporter());
     formats.add(new EndnoteImporter());
-    formats.add(new MedlineImporter());
     formats.add(new BibteXMLImporter());
     formats.add(new BiblioscapeImporter());
     formats.add(new SixpackImporter());
@@ -76,12 +67,25 @@ public class ImportFormatReader {
     formats.add(new PdfXmpImporter());
     formats.add(new CopacImporter());
     formats.add(new MsBibImporter());
-    
-    // add all custom importers
-    for (Iterator i = Globals.prefs.customImports.iterator(); i.hasNext(); ) {
-      CustomImportList.Importer importer = (CustomImportList.Importer)i.next();
 
-      try {
+    /**
+     * 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) {
@@ -101,24 +105,22 @@ public class ImportFormatReader {
    * @return  Import Format or <code>null</code> if none matches
    */
   public ImportFormat getByCliId(String cliId) {
-    ImportFormat result = null;
-    for (Iterator i = formats.iterator(); i.hasNext() && result == null; ) {
-      ImportFormat format = (ImportFormat)i.next();
+    for (ImportFormat format : formats){
       if (format.getCLIId().equals(cliId)) {
-        result = format;
+        return format;
       }
     }
-    return result;
+    return null;
   }
   
-  public List importFromStream(String format, InputStream in)
+  public List<BibtexEntry> importFromStream(String format, InputStream in)
     throws IOException {
     ImportFormat importer = getByCliId(format);
 
     if (importer == null)
       throw new IllegalArgumentException("Unknown import format: " + format);
 
-    List res = importer.importEntries(in);
+    List<BibtexEntry> res = importer.importEntries(in);
 
     // Remove all empty entries
     if (res != null)
@@ -127,7 +129,7 @@ public class ImportFormatReader {
     return res;
   }
 
-  public List importFromFile(String format, String filename)
+  public List<BibtexEntry> importFromFile(String format, String filename)
     throws IOException {
     ImportFormat importer = getByCliId(format);
 
@@ -137,8 +139,8 @@ public class ImportFormatReader {
     return importFromFile(importer, filename);
   }
 
-    public List importFromFile(ImportFormat importer, String filename) throws IOException {
-        List result = null;
+    public List<BibtexEntry> importFromFile(ImportFormat importer, String filename) throws IOException {
+        List<BibtexEntry> result = null;
         InputStream stream = null;
 
         try {
@@ -163,19 +165,18 @@ public class ImportFormatReader {
         return result;
     }
 
-  public static BibtexDatabase createDatabase(List bibentries) {
+  public static BibtexDatabase createDatabase(Collection<BibtexEntry> bibentries) {
     purgeEmptyEntries(bibentries);
 
     BibtexDatabase database = new BibtexDatabase();
 
-    for (Iterator i = bibentries.iterator(); i.hasNext();) {
-      BibtexEntry entry = (BibtexEntry) i.next();
+    for (Iterator<BibtexEntry> i = bibentries.iterator(); i.hasNext();) {
+      BibtexEntry entry = i.next();
 
       try {
         entry.setId(Util.createNeutralId());
         database.insertEntry(entry);
       } catch (KeyCollisionException ex) {
-        //ignore
         System.err.println("KeyCollisionException [ addBibEntries(...) ]");
       }
     }
@@ -190,10 +191,9 @@ public class ImportFormatReader {
    * 
    * @return all custom importers, elements are of type InputFormat
    */
-  public SortedSet getCustomImportFormats() {
-    SortedSet result = new TreeSet();
-    for (Iterator i = this.formats.iterator(); i.hasNext(); ) {
-      ImportFormat format = (ImportFormat)i.next();
+  public SortedSet<ImportFormat> getCustomImportFormats() {
+    SortedSet<ImportFormat> result = new TreeSet<ImportFormat>();
+    for (ImportFormat format : formats){
       if (format.getIsCustomImporter()) {
         result.add(format);  
       }
@@ -208,25 +208,26 @@ public class ImportFormatReader {
    * 
    * @return all custom importers, elements are of type InputFormat
    */
-  public SortedSet getBuiltInInputFormats() {
-    SortedSet result = new TreeSet();
-    for (Iterator i = this.formats.iterator(); i.hasNext(); ) {
-      ImportFormat format = (ImportFormat)i.next();
-      if (!format.getIsCustomImporter()) {
-        result.add(format);  
-      }
-    }
-    return result;    
-  }
+  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 getImportFormats() {
+	 * 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;
   }
 
@@ -240,8 +241,7 @@ public class ImportFormatReader {
   public String getImportFormatList() {
     StringBuffer sb = new StringBuffer();
 
-    for (Iterator i = this.formats.iterator(); i.hasNext();) {
-      ImportFormat imFo = (ImportFormat)i.next();
+    for (ImportFormat imFo : formats){
       int pad = Math.max(0, 14 - imFo.getFormatName().length());
       sb.append("  ");
       sb.append(imFo.getFormatName());
@@ -378,7 +378,7 @@ public class ImportFormatReader {
   public static BibtexDatabase import_File(String format, String filename)
     throws IOException {
     BibtexDatabase database = null;
-    List bibentries = null;
+    List<BibtexEntry> bibentries = null;
     File f = new File(filename);
 
     if (!f.exists())
@@ -400,10 +400,10 @@ public class ImportFormatReader {
     // Add entries to database.
     database = new BibtexDatabase();
 
-    Iterator it = bibentries.iterator();
+    Iterator<BibtexEntry> it = bibentries.iterator();
 
     while (it.hasNext()) {
-      BibtexEntry entry = (BibtexEntry) it.next();
+      BibtexEntry entry = it.next();
 
       try {
         entry.setId(Util.createNeutralId());
@@ -422,76 +422,65 @@ public class ImportFormatReader {
    * 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(List entries) {
-    for (Iterator i = entries.iterator(); i.hasNext();) {
-      BibtexEntry entry = (BibtexEntry) i.next();
-
-      // Get all fields of the entry:
-      Object[] o = entry.getAllFields();
+  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 (o.length == 0)
+      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. Returns an Object array
-   * with two elements, 0: the name of the format used, 1: a List of entries.
-   */
-  public Object[] importUnknownFormat(String filename) {
-    Object entryList = null;
-    String usedFormat = null;
-    int bestResult = 0;
-
-      /**String lastImport = Globals.prefs.get("lastAutodetectedImport");
-      for (Iterator i = getImportFormats().iterator(); i.hasNext();) {
-			ImportFormat imFo = (ImportFormat) i.next();
-      **/    
-
-    // Cycle through all importers:
-		for (Iterator i = getImportFormats().iterator(); i.hasNext();) {
-			ImportFormat imFo = (ImportFormat) i.next();
-
-			try {
-				// System.out.println("Trying format: "+imFo.getFormatName());
-				List entries = importFromFile(imFo, filename);
-
-				if (entries != null)
-					purgeEmptyEntries(entries);
-
-				int entryCount = ((entries != null) ? entries.size() : 0);
-
-				// System.out.println("Entries: "+entryCount);
-				// BibtexDatabase base = importFile(formats[i], filename);
-				if (entryCount > bestResult) {
-					bestResult = entryCount;
-					usedFormat = imFo.getFormatName();
-					entryList = entries;
-					// System.out.println("Looks good: "+imFo.getFormatName());
-				}
-			} catch (Exception e) {
-			}
+	 * 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) throws IOException {
+
+		Pair<String, ParserResult> result = null;
+		
+		// Cycle through all importers:
+		int bestResult = 0;
+
+        for (ImportFormat imFo : getImportFormats()) {
+
+            try {
+                List<BibtexEntry> entries = importFromFile(imFo, filename);
+
+                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:
+		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);
 		}
-      //System.out.println("Used format: "+usedFormat);
-    // Finally, if all else fails, see if it is a BibTeX file:
-    if (entryList == null) {
-	try {
-	    ParserResult pr = OpenDatabaseAction.loadDatabase(new File(filename), Globals.prefs.get("defaultEncoding"));
-	    if ((pr.getDatabase().getEntryCount() > 0)
-		|| (pr.getDatabase().getStringCount() > 0)) {
-		entryList = pr;
-        pr.setFile(new File(filename));
-            
-        usedFormat = BIBTEX_FORMAT;
-	    }
-	} catch (Throwable ex) {
-	    //ex.printStackTrace();
-	}
-	
-    }
 
-    return new Object[] { usedFormat, entryList };
-  }
+		return null;
+	}
 }
diff --git a/src/java/net/sf/jabref/imports/ImportFormats.java b/src/java/net/sf/jabref/imports/ImportFormats.java
index 62b6ed3..cac3787 100644
--- a/src/java/net/sf/jabref/imports/ImportFormats.java
+++ b/src/java/net/sf/jabref/imports/ImportFormats.java
@@ -1,15 +1,18 @@
 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;
-import net.sf.jabref.BibtexEntry;
-
-import javax.swing.*;
-import javax.swing.filechooser.FileFilter;
-import java.util.*;
-import java.awt.event.ActionEvent;
-import java.io.File;
 
 /**
  * Created by IntelliJ IDEA.
@@ -21,30 +24,23 @@ import java.io.File;
 public class ImportFormats {
 
     public static JFileChooser createImportFileChooser(String currentDir) {
-        SortedSet builtImporters = Globals.importFormatReader.getBuiltInInputFormats();
-        SortedSet customImporters = Globals.importFormatReader.getCustomImportFormats();
-        SortedSet importers = new TreeSet();
-        for (Iterator i = builtImporters.iterator(); i.hasNext();) {
-            importers.add(i.next());
-        }
-        for (Iterator i = customImporters.iterator(); i.hasNext();) {
-            importers.add(i.next());
-        }
+
+        SortedSet<ImportFormat> importers = Globals.importFormatReader.getImportFormats();
+        
         String lastUsedFormat = Globals.prefs.get("lastUsedImport");
         FileFilter defaultFilter = null;
         JFileChooser fc = new JFileChooser(currentDir);
-        TreeSet filters = new TreeSet();
-        for (Iterator i = importers.iterator(); i.hasNext();) {
-            ImportFormat format = (ImportFormat)i.next();
+        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 (Iterator i=filters.iterator(); i.hasNext();) {
-            fc.addChoosableFileFilter((ImportFileFilter)i.next());
+        for (ImportFileFilter filter : filters){
+            fc.addChoosableFileFilter(filter);
         }
-        //fc.setAcceptAllFileFilterUsed(false);
+
         if (defaultFilter != null)
             fc.setFileFilter(defaultFilter);
         else
@@ -72,6 +68,8 @@ public class ImportFormats {
 
                 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) {
@@ -82,13 +80,11 @@ public class ImportFormats {
                 if (file == null)
                     return;
                 FileFilter ff = fc.getFileFilter();
-                ImportFileFilter iff = null;
                 ImportFormat format = null;
                 if (ff instanceof ImportFileFilter)
                     format = ((ImportFileFilter)ff).getImportFormat();
 
                 try {
-                    String path = file.getPath();
                     if (!file.exists()) {
                         // Warn that the file doesn't exists:
                         JOptionPane.showMessageDialog(frame,
@@ -114,7 +110,7 @@ public class ImportFormats {
                 }
 
             }
-        };
+        }
 
         return new ImportAction(frame, openInNew);
     }
diff --git a/src/java/net/sf/jabref/imports/ImportInspectionCommandLine.java b/src/java/net/sf/jabref/imports/ImportInspectionCommandLine.java
new file mode 100644
index 0000000..4ecfa0f
--- /dev/null
+++ b/src/java/net/sf/jabref/imports/ImportInspectionCommandLine.java
@@ -0,0 +1,52 @@
+/*
+ * Created on 01.12.2007
+ *
+ * To change the template for this generated file go to
+ * Window>Preferences>Java>Code Generation>Code and Comments
+ */
+package net.sf.jabref.imports;
+
+import java.util.Collection;
+import java.util.LinkedList;
+import java.util.List;
+
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.Globals;
+import net.sf.jabref.OutputPrinter;
+
+public class ImportInspectionCommandLine implements ImportInspector {
+
+    List<BibtexEntry> entries = new LinkedList<BibtexEntry>();
+
+    public void addEntry(BibtexEntry entry) {
+        entries.add(entry);
+    }
+
+    public void setProgress(int current, int max) {
+        status.setStatus(Globals.lang("Progress: %0 of %1", String.valueOf(current), String
+            .valueOf(max)));
+    }
+
+    OutputPrinter status = new OutputPrinter() {
+
+        public void setStatus(String s) {
+            System.out.println(s);
+        }
+
+        public void showMessage(Object message, String title, int msgType) {
+            System.out.println(title + ": " + message);
+        }
+
+        public void showMessage(String message) {
+            System.out.println(message);
+        }
+    };
+
+    public Collection<BibtexEntry> query(String query, EntryFetcher fetcher) {
+        entries.clear();
+        if (fetcher.processQuery(query, ImportInspectionCommandLine.this, status)) {
+            return entries;
+        }
+        return null;
+    }
+}
diff --git a/src/java/net/sf/jabref/imports/ImportInspector.java b/src/java/net/sf/jabref/imports/ImportInspector.java
new file mode 100644
index 0000000..56b9ab6
--- /dev/null
+++ b/src/java/net/sf/jabref/imports/ImportInspector.java
@@ -0,0 +1,37 @@
+package net.sf.jabref.imports;
+
+import net.sf.jabref.BibtexEntry;
+
+/**
+ * An ImportInspector can be passed to a EntryFetcher and will receive entries
+ * as they are fetched from somewhere.
+ * 
+ * Currently there are two implementations: ImportInspectionDialog and
+ * ImportInspectionCommandLine
+ * 
+ */
+public interface ImportInspector {
+
+    /**
+     * Notify the ImportInspector about the progress of the operation.
+     * 
+     * The Inspector for instance could display a progress bar with the given
+     * values.
+     * 
+     * @param current
+     *            A number that is related to the work already done.
+     * 
+     * @param max
+     *            A current estimate for the total amount of work to be done.
+     */
+    void setProgress(int current, int max);
+
+    /**
+     * Add the given entry to the list of entries managed by the inspector.
+     * 
+     * @param entry
+     *            The entry to add.
+     */
+    void addEntry(BibtexEntry entry);
+
+}
\ No newline at end of file
diff --git a/src/java/net/sf/jabref/imports/ImportMenuItem.java b/src/java/net/sf/jabref/imports/ImportMenuItem.java
index 15d9db2..52c3c64 100644
--- a/src/java/net/sf/jabref/imports/ImportMenuItem.java
+++ b/src/java/net/sf/jabref/imports/ImportMenuItem.java
@@ -1,23 +1,41 @@
 package net.sf.jabref.imports;
 
-import net.sf.jabref.*;
-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.gui.ImportInspectionDialog;
-
-import javax.swing.*;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 import java.io.File;
 import java.io.IOException;
-import java.util.List;
 import java.util.ArrayList;
-import java.util.Iterator;
+import java.util.Collection;
 import java.util.HashMap;
+import java.util.List;
 
-// TODO: could separate the "menu item" functionality from the importing functionality
+import javax.swing.JMenuItem;
+import javax.swing.JOptionPane;
+
+import net.sf.jabref.AbstractWorker;
+import net.sf.jabref.BasePanel;
+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.DuplicateCheck;
+import net.sf.jabref.DuplicateResolverDialog;
+import net.sf.jabref.Globals;
+import net.sf.jabref.JabRefFrame;
+import net.sf.jabref.KeyCollisionException;
+import net.sf.jabref.Util;
+import net.sf.jabref.gui.ImportInspectionDialog;
+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;
@@ -60,7 +78,7 @@ public class ImportMenuItem extends JMenuItem implements ActionListener {
     }
     
 
-    class MyWorker extends AbstractWorker implements ImportInspectionDialog.CallBack {
+    class MyWorker extends AbstractWorker {
         String[] filenames = null, formatName = null;
         ParserResult bibtexResult = null; // Contains the merged import results
         boolean fileOk = false;
@@ -70,14 +88,9 @@ public class ImportMenuItem extends JMenuItem implements ActionListener {
                     new File(Globals.prefs.get("workingDirectory")),
                     (importer != null ? importer.getExtensions() : null), true);
 
-            /*if ((filenames != null) && !(new File(filename)).exists()) {
-               JOptionPane.showMessageDialog(frame, Globals.lang("File not found") + ": '" + filename + "'",
-                       Globals.lang("Error"), JOptionPane.ERROR_MESSAGE);
-           } else*/
             if ((filenames != null) && (filenames.length > 0)) {
                 frame.block();
                 frame.output(Globals.lang("Starting import"));
-                //frame.output(Globals.lang("Importing file") + ": '" + filename + "'");
                 fileOk = true;
                 
                 Globals.prefs.put("workingDirectory", filenames[0]);
@@ -89,24 +102,32 @@ public class ImportMenuItem extends JMenuItem implements ActionListener {
                 return;
 
             // We import all files and collect their results:
-            List imports = new ArrayList();
-            for (int i = 0; i < filenames.length; i++) {
-                String filename = filenames[i];
-                if (importer != null)
-                    // Specific importer:
-                    try {
-                        imports.add(new Object[] { importer.getFormatName(),
-                                Globals.importFormatReader.importFromFile(importer, filename)});
-                    } catch (IOException e) {
-                        // No entries found...
-                    }
-                else
-                    // Unknown format:
-                    imports.add(Globals.importFormatReader.importUnknownFormat(filename));
-            }
+			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));
+
+						imports.add(new Pair<String, ParserResult>(importer
+							.getFormatName(), pr));
+					} else {
+						// Unknown format:
+						imports.add(Globals.importFormatReader
+							.importUnknownFormat(filename));
+					}
+				} catch (IOException e) {
+					// No entries found...
+                    e.printStackTrace();
+                }
+			}
 
-            // 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.
+            // 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);
         }
 
@@ -120,6 +141,7 @@ public class ImportMenuItem extends JMenuItem implements ActionListener {
                 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):
@@ -130,7 +152,6 @@ public class ImportMenuItem extends JMenuItem implements ActionListener {
                                 BibtexFields.DEFAULT_INSPECTION_FIELDS,
                                 Globals.lang("Import"), openInNew);
                         diag.addEntries(bibtexResult.getDatabase().getEntries());
-                        diag.addCallBack(this);
                         diag.entryListComplete();
                         Util.placeDialog(diag, frame);
                         diag.setVisible(true);
@@ -138,13 +159,12 @@ public class ImportMenuItem extends JMenuItem implements ActionListener {
                     } else {
                         boolean generateKeys = Globals.prefs.getBoolean("generateKeysAfterInspection");
                         NamedCompound ce = new NamedCompound(Globals.lang("Import entries"));
-                        for (Iterator i = bibtexResult.getDatabase().getEntries().iterator();
-                             i.hasNext();) {
-                            BibtexEntry entry = (BibtexEntry) i.next();
+                        
+                        for (BibtexEntry entry : bibtexResult.getDatabase().getEntries()){
                             try {
                                 // Check if the entry is a duplicate of an existing one:
                                 boolean keepEntry = true;
-                                BibtexEntry duplicate = Util.containsDuplicate(toAddTo, entry);
+                                BibtexEntry duplicate = DuplicateCheck.containsDuplicate(toAddTo, entry);
                                 if (duplicate != null) {
                                     int answer = DuplicateResolverDialog.resolveDuplicateInImport
                                             (frame, duplicate, entry);
@@ -175,7 +195,11 @@ public class ImportMenuItem extends JMenuItem implements ActionListener {
                             }
                         }
                         ce.end();
-                        panel.undoManager.addEdit(ce);
+                        if (ce.hasEdits()) {
+                            panel.undoManager.addEdit(ce);
+                            panel.markBaseChanged();
+                        }
+
                     }
 
                 }
@@ -183,7 +207,7 @@ public class ImportMenuItem extends JMenuItem implements ActionListener {
                 else {
                     frame.addTab(bibtexResult.getDatabase(), bibtexResult.getFile(),
                             bibtexResult.getMetaData(), Globals.prefs.get("defaultEncoding"), true);
-                    done(bibtexResult.getDatabase().getEntryCount());
+                    frame.output(Globals.lang("Imported entries") + ": " + bibtexResult.getDatabase().getEntryCount());
                 }
 
 
@@ -197,112 +221,57 @@ public class ImportMenuItem extends JMenuItem implements ActionListener {
             }
             frame.unblock();
         }
-
-        public void done(int entriesImported) {
-
-            /*
-            final BasePanel panel = (BasePanel) frame.getTabbedPane().getSelectedComponent();
-            BibtexDatabase toAddTo = panel.database();
-
-            // Add the strings, if any:
-            for (Iterator i = bibtexResult.getDatabase().getStringKeySet().iterator(); i.hasNext();) {
-                BibtexString s = bibtexResult.getDatabase().getString(i.next());
-                try {
-                    toAddTo.addString(s);
-                } catch (KeyCollisionException e) {
-                    e.printStackTrace();
-                }
-
-            }
-
-
-            if ((panel != null) && (bibtexResult.getDatabase().getEntryCount() == 1)) {
-                SwingUtilities.invokeLater(new Runnable() {
-                    public void run() {
-                        panel.highlightEntry((BibtexEntry)
-                                bibtexResult.getDatabase().getEntries().
-                                        iterator().next());
-                    }
-                });
-
-
-            }
-            */
-            frame.output(Globals.lang("Imported entries") + ": " + entriesImported);
-
-        }
-
-        public void cancelled() {
-            frame.output(Globals.lang("Import cancelled."));
-        }
-
-
-        // 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() {
-            // No process to stop.
-        }
     }
 
-
-
-    public static ParserResult mergeImportResults(List imports) {
+    public static ParserResult mergeImportResults(List<Pair<String, ParserResult>> imports) {
         BibtexDatabase database = new BibtexDatabase();
         ParserResult directParserResult = null;
         boolean anythingUseful = false;
 
-        for (Iterator iterator = imports.iterator(); iterator.hasNext();) {
-            Object[] o = (Object[]) iterator.next();
-            if (o[1] instanceof List) {
-                List entries = (List) o[1];
-                anythingUseful = anythingUseful | (entries.size() > 0);
-                Util.setAutomaticFields(entries, Globals.prefs.getBoolean("overwriteOwner"),
-                        Globals.prefs.getBoolean("overwriteTimeStamp")); // set timestamp and owner
-                for (Iterator j = entries.iterator(); j.hasNext();) {
-                    BibtexEntry entry = (BibtexEntry) j.next();
-                    try {
-                        entry.setId(Util.createNeutralId());
-                        database.insertEntry(entry);
-                    } catch (KeyCollisionException e) {
-                        e.printStackTrace();
-                    }
-                }
-            } else if (o[1] instanceof ParserResult) {
-                // Bibtex result. We must merge it into our main base.
-                ParserResult pr = (ParserResult) o[1];
+        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 (Iterator j = pr.getDatabase().getEntries().iterator(); j.hasNext();) {
-                    BibtexEntry entry = (BibtexEntry) j.next();
-                    try {
-                        database.insertEntry(entry);
-                    } catch (KeyCollisionException e) {
-                        e.printStackTrace(); // This should never happen
-                    }
+                for (BibtexEntry entry : pr.getDatabase().getEntries()) {
+                    database.insertEntry(entry);
                 }
+                
                 // Merge strings:
-                for (Iterator j = pr.getDatabase().getStringKeySet().iterator(); j.hasNext();) {
-                    BibtexString bs = (BibtexString)
-                            (pr.getDatabase().getString(j.next()).clone());
-
+                for (BibtexString bs : pr.getDatabase().getStringValues()){
                     try {
-                        database.addString(bs);
+                        database.addString((BibtexString)bs.clone());
                     } catch (KeyCollisionException e) {
-                        // This means a duplicate string name exists, so it's not
+                        // 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")); // set timestamp and owner
+
+                for (BibtexEntry entry : entries){
+					database.insertEntry(entry);
+				}
+			}
         }
 
         if (!anythingUseful)
@@ -312,7 +281,7 @@ public class ImportMenuItem extends JMenuItem implements ActionListener {
             return directParserResult;
         } else {
 
-            ParserResult pr = new ParserResult(database, new HashMap(), new HashMap());
+            ParserResult pr = new ParserResult(database, new HashMap<String, String>(), 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 a90b7b4..bae6af4 100644
--- a/src/java/net/sf/jabref/imports/InspecImporter.java
+++ b/src/java/net/sf/jabref/imports/InspecImporter.java
@@ -63,8 +63,8 @@ public class InspecImporter extends ImportFormat {
      * Parse the entries in the source, and return a List of BibtexEntry
      * objects.
      */
-    public List importEntries(InputStream stream) throws IOException {
-        ArrayList bibitems = new ArrayList();
+    public List<BibtexEntry> importEntries(InputStream stream) throws IOException {
+        ArrayList<BibtexEntry> bibitems = new ArrayList<BibtexEntry>();
         StringBuffer sb = new StringBuffer();
         BufferedReader in = new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
         String str;
@@ -77,7 +77,7 @@ public class InspecImporter extends ImportFormat {
         in.close();
         String[] entries = sb.toString().split("__::__");
         String Type = "";
-        HashMap h = new HashMap();
+        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();
diff --git a/src/java/net/sf/jabref/imports/IsiImporter.java b/src/java/net/sf/jabref/imports/IsiImporter.java
index 3190b77..2afae26 100644
--- a/src/java/net/sf/jabref/imports/IsiImporter.java
+++ b/src/java/net/sf/jabref/imports/IsiImporter.java
@@ -25,7 +25,6 @@ import net.sf.jabref.util.CaseChanger;
  * <li>http://wos.isitrial.com/help/helpprn.html</li>
  * </ul>
  * 
- * Todo:
  * <ul>
  * <li>Check compatibility with other ISI2Bib tools like:
  * http://www-lab.imr.tohoku.ac.jp/~t-nissie/computer/software/isi/ or
@@ -35,7 +34,7 @@ import net.sf.jabref.util.CaseChanger;
  * </ul>
  * 
  * @author $Author: mortenalver $
- * @version $Revision: 1751 $ ($Date: 2006-09-05 23:50:23 +0200 (Tue, 05 Sep 2006) $)
+ * @version $Revision: 2484 $ ($Date: 2007-11-13 18:57:36 +0100 (Tue, 13 Nov 2007) $)
  * 
  */
 public class IsiImporter extends ImportFormat {
@@ -86,14 +85,14 @@ public class IsiImporter extends ImportFormat {
 
 	static Pattern subsupPattern = Pattern.compile("/(sub|sup)\\s+(.*?)\\s*/");
 
-	static public void processSubSup(HashMap map) {
+	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((String) map.get(subsup[i]));
+				Matcher m = subsupPattern.matcher(map.get(subsup[i]));
 				StringBuffer sb = new StringBuffer();
 
 				while (m.find()) {
@@ -117,7 +116,7 @@ public class IsiImporter extends ImportFormat {
 		}
 	}
 
-	static public void processCapitalization(HashMap map) {
+	static public void processCapitalization(HashMap<String, String> map) {
 
 		String[] subsup = { "title", "journal", "publisher" };
 
@@ -125,7 +124,7 @@ public class IsiImporter extends ImportFormat {
 
 			if (map.containsKey(subsup[i])) {
 
-				String s = (String) map.get(subsup[i]);
+				String s = map.get(subsup[i]);
 
 				if (s.toUpperCase().equals(s)) {
 					s = CaseChanger.changeCase(s, CaseChanger.UPPER_EACH_FIRST);
@@ -139,12 +138,12 @@ public class IsiImporter extends ImportFormat {
 	 * Parse the entries in the source, and return a List of BibtexEntry
 	 * objects.
 	 */
-	public List importEntries(InputStream stream) throws IOException {
+	public List<BibtexEntry> importEntries(InputStream stream) throws IOException {
 		if (stream == null) {
 			throw new IOException("No stream given.");
 		}
 
-		ArrayList bibitems = new ArrayList();
+		ArrayList<BibtexEntry> bibitems = new ArrayList<BibtexEntry>();
 		StringBuffer sb = new StringBuffer();
 
 		BufferedReader in = new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
@@ -178,7 +177,7 @@ public class IsiImporter extends ImportFormat {
 
 		String[] entries = sb.toString().split("::");
 
-		HashMap hm = new HashMap();
+		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++) {
@@ -223,7 +222,7 @@ public class IsiImporter extends ImportFormat {
 
 					// if there is already someone there then append with "and"
 					if (hm.get("author") != null)
-						author = (String) hm.get("author") + " and " + author;
+						author = hm.get("author") + " and " + author;
 
 					hm.put("author", author);
 				} else if (beg.equals("TI"))
@@ -233,7 +232,7 @@ public class IsiImporter extends ImportFormat {
 				else if (beg.equals("ID") || beg.equals("KW")) {
 				
 					value = value.replaceAll("EOLEOL", " ");
-					String existingKeywords = (String) hm.get("keywords");
+					String existingKeywords = hm.get("keywords");
 					if (existingKeywords != null && existingKeywords.indexOf(value) == -1) {
 						existingKeywords += ", " + value;
 					} else {
@@ -307,14 +306,14 @@ public class IsiImporter extends ImportFormat {
 			// id assumes an existing database so don't
 
 			// Remove empty fields:
-			ArrayList toRemove = new ArrayList();
-			for (Iterator it = hm.keySet().iterator(); it.hasNext();) {
+			ArrayList<Object> toRemove = new ArrayList<Object>();
+			for (Iterator<String> it = hm.keySet().iterator(); it.hasNext();) {
 				Object key = it.next();
-				String content = (String) hm.get(key);
+				String content = hm.get(key);
 				if ((content == null) || (content.trim().length() == 0))
 					toRemove.add(key);
 			}
-			for (Iterator iterator = toRemove.iterator(); iterator.hasNext();) {
+			for (Iterator<Object> iterator = toRemove.iterator(); iterator.hasNext();) {
 				hm.remove(iterator.next());
 
 			}
diff --git a/src/java/net/sf/jabref/imports/JSTORFetcher.java b/src/java/net/sf/jabref/imports/JSTORFetcher.java
new file mode 100644
index 0000000..a8db063
--- /dev/null
+++ b/src/java/net/sf/jabref/imports/JSTORFetcher.java
@@ -0,0 +1,224 @@
+package net.sf.jabref.imports;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.UnsupportedEncodingException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLConnection;
+import java.net.URLEncoder;
+import java.util.Collection;
+import java.util.StringTokenizer;
+
+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;
+
+/**
+ * This class fetches up to 200 citations from JStor by a given search query. It
+ * communicates with jstor via HTTP and Cookies. The fetcher automates the
+ * following steps:
+ * <ol>
+ * <li>Do a basic search on www.jstor.org</li>
+ * <li>Save the first 200 hits</li>
+ * <li>Download the saved citations as bibtex</li>
+ * <li>Parse it with the BibtexParser</li>
+ * <li>Import the BibtexEntrys via the ImportInspectionDialog</li>
+ * </ol>
+ * 
+ * @author Juliane Doege, Tobias Langner
+ */
+public class JSTORFetcher implements EntryFetcher {
+
+    /**
+     * cookies can't save more than 200 citations
+     */
+    protected static int MAX_CITATIONS = 200;
+
+    /**
+     * Cookie key for Jstor ticket (authentication)
+     */
+    protected static final String COOKIE_TICKET = "Jstor_Ticket";
+
+    /**
+     * location where the ticket is obtained
+     * 
+     */
+    protected static final String URL_TICKET = "http://www.jstor.org/search";
+
+    /**
+     * Cookie key for citations to be fetched
+     * 
+     */
+    protected static final String COOKIE_CITATIONS = "Jstor_citations0";
+
+    /**
+     * location where to obtain the citations cookie
+     * 
+     */
+    protected static final String URL_BIBTEX = "http://www.jstor.org/browse/citations.txt?exportFormat=bibtex&exportAction=Display&frame=noframe&dpi=3&config=jstor&viewCitations=1&View=View";
+
+    public String getHelpPage() {
+        return "JSTOR.html";
+    }
+
+    public URL getIcon() {
+        return GUIGlobals.getIconUrl("www");
+    }
+
+    public String getKeyName() {
+        return "Search JSTOR";
+    }
+
+    public JPanel getOptionsPanel() {
+        // No Options panel
+        return null;
+    }
+
+    public String getTitle() {
+        return Globals.menuTitle("Search JSTOR");
+    }
+    
+    public void stopFetching() {
+        // cannot be interrupted
+    }
+
+    public boolean processQuery(String query, ImportInspector dialog, OutputPrinter status) {
+
+        try {
+            // First open a ticket with JStor
+            String ticket = openTicket();
+
+            // Then execute the query
+            String citations = getCitations(ticket, query);
+
+            // Last retrieve the Bibtex-entries of the citations found
+            Collection<BibtexEntry> entries = getBibtexEntries(ticket, citations);
+            
+            if (entries.size() == 0){
+                status.showMessage(Globals.lang("No entries found for the search string '%0'",
+                        query),
+                        Globals.lang("Search JSTOR"), JOptionPane.INFORMATION_MESSAGE);
+                return false;
+            }
+            
+            for (BibtexEntry entry : entries){
+                dialog.addEntry(entry);
+            }
+            return true;
+        } catch (IOException e) {
+            status.showMessage(Globals.lang("Error while fetching from JSTOR") + ": " + e.getMessage());
+        }
+        return false;
+    }
+
+    /**
+     * Given a ticket an a list of citations, retrieve BibtexEntries from JStor
+     * 
+     * @param ticket
+     *            A valid ticket as returned by openTicket()
+     * @param citations
+     *            A list of citations as returned by getCitations()
+     * @return A collection of BibtexEntries parsed from the bibtex returned by
+     *         JStor.
+     * @throws IOException
+     *             Most probably related to a problem connecting to JStor.
+     */
+    protected Collection<BibtexEntry> getBibtexEntries(String ticket, String citations)
+        throws IOException {
+        try {
+            URL url = new URL(URL_BIBTEX);
+            URLConnection conn = url.openConnection();
+            conn.setRequestProperty("Cookie", ticket + "; " + citations);
+            conn.connect();
+
+            BibtexParser parser = new BibtexParser(new BufferedReader(new InputStreamReader(conn
+                .getInputStream())));
+            return parser.parse().getDatabase().getEntries();
+        } catch (MalformedURLException e) {
+            // Propagate...
+            throw new RuntimeException(e);
+        }
+    }
+
+    /**
+     * 
+     * @return a Jstor ticket ID
+     * @throws IOException
+     */
+    protected String openTicket() throws IOException {
+        URL url = new URL(URL_TICKET);
+        URLConnection conn = url.openConnection();
+        return getCookie(COOKIE_TICKET, conn);
+    }
+
+    /**
+     * requires a valid JStor Ticket ID
+     * 
+     * @param query
+     *            The search term to query JStor for.
+     * @param ticket
+     *            JStor ticket
+     * @return cookie value of the key JSTORFetcher.COOKIE_CITATIONS. null if
+     *         search is empty or ticket is invalid
+     * @throws IOException
+     */
+    protected String getCitations(String ticket, String query) throws IOException {
+        String urlQuery;
+        try {
+            urlQuery = "http://www.jstor.org/search/BasicResults?hp=" + MAX_CITATIONS +
+                "&si=1&gw=jtx&jtxsi=1&jcpsi=1&artsi=1&Query=" + URLEncoder.encode(query, "UTF-8") +
+                "&wc=on&citationAction=saveAll";
+        } catch (UnsupportedEncodingException e) {
+            throw new RuntimeException(e);
+        }
+
+        URL url = new URL(urlQuery);
+        URLConnection conn = url.openConnection();
+        conn.setRequestProperty("Cookie", ticket);
+        return getCookie(COOKIE_CITATIONS, conn);
+    }
+
+    /**
+     * evaluates the 'Set-Cookie'-Header of a HTTP response
+     * 
+     * @param name
+     *            key of a cookie value
+     * @param conn
+     *            URLConnection
+     * @return cookie value referenced by the key. null if key not found
+     * @throws IOException
+     */
+    public static String getCookie(String name, URLConnection conn) throws IOException {
+
+        for (int i = 0;; i++) {
+            String headerName = conn.getHeaderFieldKey(i);
+            String headerValue = conn.getHeaderField(i);
+
+            if (headerName == null && headerValue == null) {
+                // No more headers
+                break;
+            }
+            if (headerName != null && headerName.equals("Set-Cookie")) {
+                if (headerValue.startsWith(name)) {
+                    // several key-value-pairs are separated by ';'
+                    StringTokenizer st = new StringTokenizer(headerValue, "; ");
+                    while (st.hasMoreElements()) {
+                        String token = st.nextToken();
+                        if (token.startsWith(name)) {
+                            return token;
+                        }
+                    }
+                }
+            }
+
+        }
+        return null;
+    }
+
+}
diff --git a/src/java/net/sf/jabref/imports/JstorImporter.java b/src/java/net/sf/jabref/imports/JstorImporter.java
index 7bf1ae7..f1a5d85 100644
--- a/src/java/net/sf/jabref/imports/JstorImporter.java
+++ b/src/java/net/sf/jabref/imports/JstorImporter.java
@@ -44,8 +44,8 @@ public class JstorImporter extends ImportFormat {
      * Parse the entries in the source, and return a List of BibtexEntry
      * objects.
      */
-    public List importEntries(InputStream stream) throws IOException {
-    ArrayList bibitems = new ArrayList();
+    public List<BibtexEntry> importEntries(InputStream stream) throws IOException {
+    ArrayList<BibtexEntry> bibitems = new ArrayList<BibtexEntry>();
     String s = "";
     BufferedReader in = new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
     while ((s != null) && !s.startsWith("Item Type"))
diff --git a/src/java/net/sf/jabref/imports/MedlineFetcher.java b/src/java/net/sf/jabref/imports/MedlineFetcher.java
index d625383..e63f613 100644
--- a/src/java/net/sf/jabref/imports/MedlineFetcher.java
+++ b/src/java/net/sf/jabref/imports/MedlineFetcher.java
@@ -1,403 +1,118 @@
 package net.sf.jabref.imports;
 
-import java.util.ArrayList;
-import java.net.*;
-import javax.swing.*;
-import java.awt.*;
-import java.awt.event.ActionListener;
-import javax.xml.parsers.SAXParserFactory;
-import javax.xml.parsers.SAXParser;
-import java.awt.event.ActionEvent;
-import java.awt.event.FocusAdapter;
-import java.awt.event.FocusEvent;
-import java.util.Iterator;
-import java.util.regex.Pattern;
+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 net.sf.jabref.*;
-import net.sf.jabref.undo.NamedCompound;
-import net.sf.jabref.undo.UndoableInsertEntry;
-import java.io.*;
-import net.sf.jabref.HelpAction;
-import net.sf.jabref.gui.ImportInspectionDialog;
+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;
 
 /**
- * <p>Title: </p>
- * <p>Description: </p>
- * <p>Copyright: Copyright (c) 2003</p>
- * <p>Company: </p>
- * @author not attributable
- * @version 1.0
+ * Fetch or search from Pubmed http://www.ncbi.nlm.nih.gov/sites/entrez/
+ * 
  */
+public class MedlineFetcher implements EntryFetcher {
 
-public class MedlineFetcher extends SidePaneComponent implements Runnable,
-        ImportInspectionDialog.CallBack {
+    protected class SearchResult {
 
-    /**@class SearchResult
-     *        nested class.
-     */
-    public class SearchResult {
-        public int count;
-        public int retmax;
-        public int retstart;
-        public String ids = "";
-    public ArrayList idList = new ArrayList();
-        public SearchResult()
-            {
-                count = 0;
-                retmax = 0;
-                retstart = 0;
-            }
+        public int count = 0;
 
-        public void addID(String id)
-        {
+        public int retmax = 0;
 
-        idList.add(id);
-                if(!ids.equals(""))
-                    ids += ","+id;
-                else
-                    ids = id;
-            }
-    }
-    final int PACING = 20;
-    final int MAX_TO_FETCH = 10;
-    boolean keepOn = true;
-    String idList;
-    JTextField tf = new JTextField();
-    JPanel pan = new JPanel();
-    GridBagLayout gbl = new GridBagLayout();
-    GridBagConstraints con = new GridBagConstraints();
-    MedlineFetcher ths = this;
-    AuthorDialog authorDialog;
-    JFrame jFrame; // invisible dialog holder
-    JButton go = new JButton(Globals.lang("Fetch")),
-        helpBut = new JButton(GUIGlobals.getImage("helpSmall"));
-    HelpAction help;
-
-    public MedlineFetcher(SidePaneManager p0) {
-        super(p0, GUIGlobals.getIconUrl("medline"), Globals.lang("Fetch Medline"));
-
-        help = new HelpAction(Globals.helpDiag, GUIGlobals.medlineHelp, "Help");
-        helpBut.addActionListener(help);
-        helpBut.setMargin(new Insets(0,0,0,0));
-        tf.setPreferredSize(new Dimension(1,tf.getPreferredSize().height));
-        //add(hd, BorderLayout.NORTH);
-        //ok.setToolTipText(Globals.lang("Fetch Medline"));
-        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 = 1;
-        con.fill = GridBagConstraints.BOTH;
-        gbl.setConstraints(tf, con);
-        main.add(tf);
-        con.weighty = 0;
-        con.gridwidth = 1;
-        gbl.setConstraints(go, con);
-        main.add(go);
-        con.gridwidth = GridBagConstraints.REMAINDER;
-        gbl.setConstraints(helpBut, con);
-        main.add(helpBut);
-        ActionListener listener = new ActionListener() {
-                public void actionPerformed(ActionEvent e) {
-                    (new Thread(ths)).start(); // Run fetch in thread.
-                }
-            };
-        main.setBorder(BorderFactory.createEmptyBorder(1,1,1,1));
-        add(main, BorderLayout.CENTER);
-        go.addActionListener(listener);
-        tf.addActionListener(listener);
-        tf.addFocusListener(new FocusAdapter() {
-            public void focusGained(FocusEvent event) {
-                if (!event.isTemporary() && (tf.getText().length()>0)) {
-                    tf.selectAll();
-                }
-            }
-        });
-    }
-
-    public JTextField getTextField() {
-        return tf;
-    }
+        public int retstart = 0;
 
-    public void fetchById() {
-        //if(idList==null || idList.trim().equals(""))//if user pressed cancel
-        //  return;
-        Pattern p = Pattern.compile("\\d+[,\\d+]*");
-        //System.out.println(""+p+"\t"+idList);
-        Matcher m = p.matcher( idList );
-        if ( m.matches() ) {
-            panel.frame().output(Globals.lang("Fetching Medline by ID..."));
-
-            ArrayList bibs = fetchMedline(idList);
-            if ((bibs != null) && (bibs.size() > 0)) {
-                //if (panel.prefs().getBoolean("useOwner")) {
-                //    Util.setDefaultOwner(bibs, panel.prefs().get("defaultOwner"));
-                //}
-                tf.setText("");
-                /*NamedCompound ce = new NamedCompound("fetch Medline");
-                Iterator i = bibs.iterator();
-                while (i.hasNext()) {
-                    try {
-                        BibtexEntry be = (BibtexEntry) i.next();
-                        String id = Util.createId(be.getType(), panel.database());
-                        be.setId(id);
-                        entries.add(be);
-                        //panel.database().insertEntry(be);
-                        //ce.addEdit(new UndoableInsertEntry(panel.database(), be, panel));
-                    }
-                    catch (KeyCollisionException ex) {
-                    }
-                    }*/
-                //ce.end();
-
-        panel.frame().addImportedEntries(panel, bibs, null, false, this);
+        public String ids = "";
 
-        /*
-                int importedEntries = panel.frame().addBibEntries(bibs, null, false);
-        if (importedEntries == 0) {
-            return; // Nothing to refresh!
-        }
-        panel.markBaseChanged();
-                panel.refreshTable();
-        if (bibs.size() > 0) {
-            BibtexEntry[] entries = (BibtexEntry[])bibs.toArray(new BibtexEntry[0]);
-            panel.selectEntries(entries, 0);
-            if (entries.length == 1)
-                panel.showEntry(entries[0]);
-            //else
-            //    panel.updateViewToSelected();
-        }*/
-
-                //panel.undoManager.addEdit(ce);
-            } else
-                panel.output(Globals.lang("No Medline entries found."));
-        } else {
-            JOptionPane.showMessageDialog(panel.frame(),Globals.lang("Please enter a semicolon or comma separated list of Medline IDs (numbers)."),Globals.lang("Input error"),JOptionPane.ERROR_MESSAGE);
+        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;
 
-//==================================================
-//
-//==================================================
-  public static ArrayList fetchMedline(String id)
-  {
-    ArrayList bibItems=null;
-    try {
-
-      String baseUrl = "http://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=pubmed&retmode=xml&rettype=citation&id=" + id;
-
-      URL url = new URL( baseUrl );
-      HttpURLConnection data = (HttpURLConnection)url.openConnection();
-
-
-       /* Reader un = new InputStreamReader(data.getInputStream());
-        int c;
-        while ((c=un.read()) != -1) {
-          System.out.print((char)c);
-        }*/
-
-
-        // 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
-        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( data.getInputStream(), handler);
-        /*FileOutputStream out = new FileOutputStream(new File("/home/alver/ut.txt"));
-        System.out.println("#####");
-        InputStream is = data.getInputStream();
-        int c;
-        while ((c = is.read()) != -1) {
-            out.write((char)c);
-        }
-        System.out.println("#####");
-        out.close();*/
-        // When you're done, report the results stored by your handler object
-        bibItems = handler.getItems();
+    OutputPrinter frame;
 
-    }
-    catch(javax.xml.parsers.ParserConfigurationException e1){ e1.printStackTrace(); }
-    catch(org.xml.sax.SAXException e2){ e2.printStackTrace(); }
-    catch(java.io.IOException e3){ e3.printStackTrace(); }
-    return bibItems;
-}
+    ImportInspector dialog;
 
-   public void run() {
-
-        idList = tf.getText().replace(';', ',');
-
-        //if(idList==null || idList.trim().equals(""))//if user pressed cancel
-        //    return;
-        Pattern p1 = Pattern.compile("\\d+[,\\d+]*"),
-            p2 = Pattern.compile(".+[,.+]*");
-
-         Matcher m1 = p1.matcher( idList ),
-             m2 = p2.matcher( idList );
-         if ( m1.matches() ) {
-             panel.frame().output(Globals.lang("Fetching Medline by id ..."));
-             idList = tf.getText().replace(';', ',');
-             fetchById();
-             //System.out.println("Fetch by id");
-         }
-         else if ( m2.matches() ) {
-            panel.frame().output(Globals.lang("Fetching Medline by term ..."));
-
-            // my stuff
-            //---------------------------
-            String searchTerm = setupTerm(idList); // fix the syntax
-            SearchResult result = getIds(searchTerm ,0,1); // get the ids from entrez
-            // prompt the user to number articles to retrieve
-            if (result.count == 0) {
-                JOptionPane.showMessageDialog(panel.frame(), Globals.lang("No references found"));
-                return;
-            }
-            String question =
-                Globals.lang("References found")+": "
-                + Integer.toString(result.count)+"  "
-                + Globals.lang("Number of references to fetch?");
-            String strCount =
-                JOptionPane.showInputDialog(question,
-                                            Integer.toString(result.count));
-
-            // for strCount ...
-            if((strCount == null) || strCount.equals(""))
-                return;
-            int count;
-        try {
-            count = Integer.parseInt(strCount);
-        } catch (NumberFormatException ex) {
-            panel.output("");
-            return;
-        }
-
-        ImportInspectionDialog diag = new ImportInspectionDialog(panel.frame(), panel,
-                BibtexFields.DEFAULT_INSPECTION_FIELDS, Globals.lang("Fetch Medline"), false);
-        Util.placeDialog(diag, panel.frame());
-         diag.setDefaultSelected(false); // Make sure new entries are not selected by default.
-
-             // diag.setProgress(0, count);
-        diag.setVisible(true);
-        keepOn = true;
-         diag.addCallBack(new ImportInspectionDialog.CallBack() {
-             public void done(int entriesImported) {
-                 if (entriesImported > 0) {
-                 panel.output(Globals.lang("Medline entries fetched")+": "+entriesImported);
-                 panel.markBaseChanged();
-             } else
-                 panel.output(Globals.lang("No Medline entries found."));
-            }
-
-             public void cancelled() {
-                 panel.output(Globals.lang("%0 import cancelled.", "Medline"));
-             }
-
-
-             public void stopFetching() {
-                // Make sure the fetch loop exits at next iteration.
-                keepOn = false;
-             }
-         });
-            for (int jj = 0; jj < count; jj+=PACING) {
-            if (!keepOn)
-                break;
-                    // get the ids from entrez
-                    result = getIds(searchTerm,jj,PACING);
-
-            /*String[] test = getTitles((String[])result.idList.toArray(new String[0]));
-            for (int pelle=0; pelle<test.length; pelle++) {
-                System.out.println(": "+test[pelle]);
-            } */
-
-            final ArrayList bibs = fetchMedline(result.ids);
-            if (!keepOn)
-                break;
-            diag.addEntries(bibs);
-            diag.setProgress(jj+PACING, count);
-            }
-         diag.entryListComplete();
-         }
-   }
-    public String setupTerm(String in){
-        Pattern part1=Pattern.compile(", ");
-        Pattern part2=Pattern.compile(",");
-        Pattern part3=Pattern.compile(" ");
+    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("+");
+        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;
     }
 
-    // this 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>");
-        Matcher idMatcher;
-        Matcher countMatcher;
-        Matcher retMaxMatcher;
-        Matcher retStartMatcher;
+    /**
+     * 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();
-        //System.out.println(medlineUrl+term);
-        try{
-            URL ncbi = new URL(medlineUrl+term);
+        try {
+            URL ncbi = new URL(medlineUrl + term);
             // get the ids
-            HttpURLConnection ncbiCon=(HttpURLConnection)ncbi.openConnection();
-            BufferedReader in =
-                new BufferedReader
-                (new InputStreamReader
-                 ( ncbi.openStream()));
+            BufferedReader in = new BufferedReader(new InputStreamReader(ncbi.openStream()));
             String inLine;
-            while ((inLine=in.readLine())!=null){
+            while ((inLine = in.readLine()) != null) {
 
                 // get the count
-                idMatcher=idPattern.matcher(inLine);
-                if (idMatcher.find()){
+                Matcher idMatcher = idPattern.matcher(inLine);
+                if (idMatcher.find()) {
                     result.addID(idMatcher.group(1));
                 }
-                retMaxMatcher=retMaxPattern.matcher(inLine);
-                if (idMatcher.find()){
-                    result.retmax=Integer.parseInt(retMaxMatcher.group(1));
+                Matcher retMaxMatcher = retMaxPattern.matcher(inLine);
+                if (idMatcher.find()) {
+                    result.retmax = Integer.parseInt(retMaxMatcher.group(1));
                 }
-                retStartMatcher=retStartPattern.matcher(inLine);
-                if (retStartMatcher.find()){
-                    result.retstart=Integer.parseInt(retStartMatcher.group(1));
+                Matcher retStartMatcher = retStartPattern.matcher(inLine);
+                if (retStartMatcher.find()) {
+                    result.retstart = Integer.parseInt(retStartMatcher.group(1));
                 }
-                countMatcher=countPattern.matcher(inLine);
-                if (doCount && countMatcher.find()){
-                    result.count=Integer.parseInt(countMatcher.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
+        } catch (MalformedURLException e) { // new URL() failed
             System.out.println("bad url");
             e.printStackTrace();
-        }
-        catch (IOException e) {               // openConnection() failed
+        } catch (IOException e) { // openConnection() failed
             System.out.println("connection failed");
             e.printStackTrace();
 
@@ -405,80 +120,108 @@ public class MedlineFetcher extends SidePaneComponent implements Runnable,
         return result;
     }
 
-    public String[] getTitles(String[] idArrayList) {
-      String[] titles = new String[Math.min(MAX_TO_FETCH, idArrayList.length)];
-        String temp;
-        for (int i=0; i<Math.min(MAX_TO_FETCH, idArrayList.length); i++){
-            temp=getOneCitation(idArrayList[i]);
-            titles[i]=getVitalData(temp);
-        }
-        return titles;
+    public void stopFetching() {
+        shouldContinue = false;
     }
 
-        // get the xml for an entry
-    public String getOneCitation(String id){
-        String baseUrl="http://eutils.ncbi.nlm.nih.gov/entrez/eutils";
-        String retrieveUrl = baseUrl+"/efetch.fcgi?db=pubmed&retmode=xml&rettype=citation&id=";
-        StringBuffer sb=new StringBuffer();
-        try{
-            URL ncbi = new URL(retrieveUrl+id);
-            HttpURLConnection ncbiCon=(HttpURLConnection)ncbi.openConnection();
-            BufferedReader in =
-                new BufferedReader
-                (new InputStreamReader
-                 ( ncbi.openStream()));
-            String inLine;
-            while ((inLine=in.readLine())!=null){
-
-                sb.append(inLine);
-            }
-
-        }
-        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();
+    public String getHelpPage() {
+        return GUIGlobals.medlineHelp;
+    }
 
-        }
-        return sb.toString();
+    public URL getIcon() {
+        return GUIGlobals.getIconUrl("www");
     }
 
-        // parse out the titles from the xml
-    public String getVitalData(String sb){
-        StringBuffer result=new StringBuffer();
-        Pattern articleTitle=Pattern.compile("<ArticleTitle>(.+)</ArticleTitle>");
-        Pattern authorName=Pattern.compile("<Author>(.+)</Author>");
-        Matcher matcher;
-        matcher=articleTitle.matcher(sb);
-        if (matcher.find())
-        result.append("Title: ").append(matcher.group(1));
-
-        //matcher=authorName.matcher(sb);
-        //while (matcher.find())
-        //   result.append("\tAuthor: "+matcher.group(1));
-        return result.toString();
+    public String getKeyName() {
+        return "Fetch Medline";
     }
 
-    // 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) {
-        panel.output(Globals.lang("Medline entries fetched")+": "+entriesImported);
+    public JPanel getOptionsPanel() {
+        // No Option Panel
+        return null;
     }
 
-    public void cancelled() {
-        panel.output(Globals.lang("%0 import cancelled.", "Medline"));
+    public String getTitle() {
+        return Globals.menuTitle("Search Medline");
     }
 
+    public boolean processQuery(String query, ImportInspector dialog, OutputPrinter frame) {
 
-    // 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() {
-        //To change body of implemented methods use File | Settings | File Templates.
-    }
+        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);
+
+            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);
+                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 6c1af6b..0ca167e 100644
--- a/src/java/net/sf/jabref/imports/MedlineHandler.java
+++ b/src/java/net/sf/jabref/imports/MedlineHandler.java
@@ -1,13 +1,3 @@
-package net.sf.jabref.imports;
-import java.util.ArrayList;
-import java.util.TreeSet;
-import java.util.Iterator;
-
-import org.xml.sax.*;
-import org.xml.sax.helpers.*;
-import net.sf.jabref.*;
-
-
 /*
   Copyright (C) 2002-2003 Morten O. Alver & Nizar N. Batada
   All programs in this directory and
@@ -33,10 +23,21 @@ import net.sf.jabref.*;
   http://www.gnu.org/copyleft/gpl.ja.html
 
 */
+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 bibitems= new ArrayList();
+    ArrayList<BibtexEntry> bibitems= new ArrayList<BibtexEntry>();
     boolean inTitle=false,			inYear = false,
 		inJournal = false,			inMonth = false,
 		inVolume = false,			inAuthorList = false,
@@ -46,19 +47,19 @@ public class MedlineHandler extends DefaultHandler
 		inIssue = false,			inPubDate = false,
 		inUrl=false, inForename=false, inAbstractText=false, inMedlineDate=false,
 		inPubMedID=false, inDescriptorName=false,inDoi=false,inPii=false,
-        inAffiliation=false;
+        inAffiliation=false, inMeshHeader=false, inQualifierName=false;
     String title="", journal="", keywords ="",author="",
 		lastName="",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="";
-    ArrayList authors=new ArrayList();
-    TreeSet descriptors = new TreeSet(); // To gather keywords
+		pubmedid="",doi="",pii="", majorTopic = "", minorTopics = "";
+    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 getItems(){ return bibitems;}
+    public ArrayList<BibtexEntry> getItems(){ return bibitems;}
 
     public MedlineHandler(){
 		super();
@@ -79,11 +80,17 @@ public class MedlineHandler extends DefaultHandler
 		else if(localName.equals("AuthorList")){
 			inAuthorList=true;
 			authors.clear();}
-		else if(localName.equals("DescriptorName")){
-			//keyword="";
+        else if (localName.equals("MeshHeading")) {
+            inMeshHeader = true;
+            majorTopic = "";
+            minorTopics = "";
+        }
+        else if(localName.equals("DescriptorName")){
 			inDescriptorName=true;
-			//descriptorName="";
 		}
+        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")){
@@ -106,10 +113,7 @@ public class MedlineHandler extends DefaultHandler
 		else if(localName.equals("AbstractText")){ inAbstractText=true;}
 		else if(localName.equals("ArticleId")){
 			for (int i = 0; i < atts.getLength(); i++) {
-				String name = atts.getQName(i);
-				String type = atts.getType(i);
 				String value = atts.getValue(i);
-				//System.out.println("name:" + name + " type: " + type + " value: " + value);
 				if(value.equals("doi"))
 					inDoi=true;
 				else if(value.equals("pii"))
@@ -156,8 +160,8 @@ public class MedlineHandler extends DefaultHandler
 			
 			// Build a string from the collected keywords:
             StringBuffer sb = new StringBuffer();
-            for (Iterator iterator = descriptors.iterator(); iterator.hasNext();) {
-                String s = (String) iterator.next();
+            for (Iterator<String> iterator = descriptors.iterator(); iterator.hasNext();) {
+                String s = iterator.next();
                 sb.append(s);
                 if (iterator.hasNext())
                     sb.append(KEYWORD_SEPARATOR);
@@ -211,7 +215,9 @@ public class MedlineHandler extends DefaultHandler
 			abstractText="";
             affiliation="";
             pubmedid="";
-			month="";volume="";lastname="";initials="";number="";page="";medlineID="";url="";
+            majorTopic = "";
+            minorTopics = "";
+            month="";volume="";lastname="";initials="";number="";page="";medlineID="";url="";
 			MedlineDate="";
             descriptors.clear();
         }
@@ -243,7 +249,15 @@ public class MedlineHandler extends DefaultHandler
 			lastname = "";
 		}
 		else if(localName.equals("DescriptorName")) inDescriptorName=false;
-		else if(localName.equals("LastName")){inLastName=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("ForeName")||localName.equals("FirstName")){ inForename=false;}
 		else if(localName.equals("Issue")){ inIssue = false;}
 		else if(localName.equals("MedlinePgn")){inMedlinePgn=false;}//pagenumber
@@ -276,8 +290,15 @@ public class MedlineHandler extends DefaultHandler
 		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(inDescriptorName)
-            descriptors.add(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);
diff --git a/src/java/net/sf/jabref/imports/MedlineImporter.java b/src/java/net/sf/jabref/imports/MedlineImporter.java
index 293af92..488e161 100644
--- a/src/java/net/sf/jabref/imports/MedlineImporter.java
+++ b/src/java/net/sf/jabref/imports/MedlineImporter.java
@@ -1,15 +1,22 @@
 package net.sf.jabref.imports;
 
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
 import java.io.InputStream;
+import java.net.URL;
+import java.net.URLConnection;
+import java.util.ArrayList;
+import java.util.List;
+
 import javax.xml.parsers.SAXParser;
 import javax.xml.parsers.SAXParserFactory;
-import java.io.IOException;
-import java.util.List;
-import java.util.ArrayList;
+
+import net.sf.jabref.BibtexEntry;
 
 /**
  * Importer for the Refer/Endnote format.
- *
+ * 
  * check here for details on the format
  * http://www.ecst.csuchico.edu/~jacobsd/bib/formats/endnote.html
  */
@@ -19,55 +26,91 @@ public class MedlineImporter extends ImportFormat {
      * Return the name of this import format.
      */
     public String getFormatName() {
-	return "Medline";
+        return "Medline";
     }
 
     /*
-     *  (non-Javadoc)
+     * (non-Javadoc)
+     * 
      * @see net.sf.jabref.imports.ImportFormat#getCLIId()
      */
     public String getCLIId() {
-      return "medline";
+        return "medline";
     }
-    
+
     /**
      * Check whether the source is in the correct format for this importer.
      */
     public boolean isRecognizedFormat(InputStream in) throws IOException {
-	return true;
+        return true;
+    }
+
+    /**
+     * 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) {
+        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());
+        } catch (IOException e) {
+            return new ArrayList<BibtexEntry>();
+        }
     }
 
     /**
      * Parse the entries in the source, and return a List of BibtexEntry
      * objects.
      */
-    public List importEntries(InputStream stream) 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 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);
-	    
-	    // When you're done, report the results stored by your handler object
-	    bibItems = handler.getItems();
-	}catch (javax.xml.parsers.ParserConfigurationException e1){
-	}catch (org.xml.sax.SAXException e2){
-	}catch (java.io.IOException e3){
-	}
-	
-	return bibItems;
-	
+    public List<BibtexEntry> importEntries(InputStream stream) 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) {
+            e1.printStackTrace();
+        } catch (org.xml.sax.SAXException e2) {
+            e2.printStackTrace();
+        } catch (java.io.IOException e3) {
+            e3.printStackTrace();
+        }
+
+        return bibItems;
     }
-    
+
 }
diff --git a/src/java/net/sf/jabref/imports/MsBibImporter.java b/src/java/net/sf/jabref/imports/MsBibImporter.java
index 38b7a17..f741279 100644
--- a/src/java/net/sf/jabref/imports/MsBibImporter.java
+++ b/src/java/net/sf/jabref/imports/MsBibImporter.java
@@ -1,12 +1,16 @@
 package net.sf.jabref.imports;
 
-import java.util.List;
-import java.util.ArrayList;
-import java.io.InputStream;
 import java.io.IOException;
-import net.sf.jabref.msbib.*;
-import javax.xml.parsers.*;
-import org.w3c.dom.*;
+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.msbib.MSBibDatabase;
+
+import org.w3c.dom.Document;
 
 
 /**
@@ -59,11 +63,11 @@ public class MsBibImporter extends ImportFormat {
 		return "msbib";
 	}
 
-    public List importEntries(InputStream in) throws IOException {
+    public List<BibtexEntry> importEntries(InputStream in) throws IOException {
 
         MSBibDatabase dbase = new MSBibDatabase();
 
-        List entries = dbase.importEntries(in);
+        List<BibtexEntry> entries = dbase.importEntries(in);
 
         return entries;
     }
diff --git a/src/java/net/sf/jabref/imports/OAI2Fetcher.java b/src/java/net/sf/jabref/imports/OAI2Fetcher.java
index 3e07a39..0f27a87 100644
--- a/src/java/net/sf/jabref/imports/OAI2Fetcher.java
+++ b/src/java/net/sf/jabref/imports/OAI2Fetcher.java
@@ -1,9 +1,7 @@
 package net.sf.jabref.imports;
 
-import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.InputStream;
-import java.io.Reader;
 import java.io.UnsupportedEncodingException;
 import java.net.HttpURLConnection;
 import java.net.URL;
@@ -20,9 +18,8 @@ import net.sf.jabref.BibtexEntry;
 import net.sf.jabref.BibtexEntryType;
 import net.sf.jabref.GUIGlobals;
 import net.sf.jabref.Globals;
-import net.sf.jabref.JabRefFrame;
+import net.sf.jabref.OutputPrinter;
 import net.sf.jabref.Util;
-import net.sf.jabref.gui.ImportInspectionDialog;
 
 import org.xml.sax.SAXException;
 import org.xml.sax.helpers.DefaultHandler;
@@ -35,14 +32,14 @@ import org.xml.sax.helpers.DefaultHandler;
  * @author Ulrich Stärk
  * @author Christian Kopf
  * 
- * @version $Revision: 2456 $ ($Date: 2007-11-01 21:35:20 +0100 (Thu, 01 Nov 2007) $)
+ * @version $Revision: 2552 $ ($Date: 2007-12-04 22:58:54 +0100 (Tue, 04 Dec 2007) $)
  * 
  */
-public class OAI2Fetcher implements EntryFetcher, Runnable {
+public class OAI2Fetcher implements EntryFetcher {
 
     public static final String OAI2_ARXIV_PREFIXIDENTIFIER = "oai%3AarXiv.org%3A";
 
-    public static final String OAI2_ARXIV_HOST = "arxiv.org";
+    public static final String OAI2_ARXIV_HOST = "export.arxiv.org";
 
     public static final String OAI2_ARXIV_SCRIPT = "oai2";
 
@@ -68,14 +65,11 @@ public class OAI2Fetcher implements EntryFetcher, Runnable {
 
     private boolean shouldContinue = true;
 
-    private String query;
-
-    private ImportInspectionDialog dialog;
-
-    private JabRefFrame frame;
-
-    /* some archives - like arxive.org - might expect of you to wait some time */
+    private OutputPrinter status;
 
+    /**
+     * some archives - like arxive.org - might expect of you to wait some time 
+     */
     private boolean shouldWait() {
         return waitTime > 0;
     }
@@ -137,7 +131,7 @@ public class OAI2Fetcher implements EntryFetcher, Runnable {
     public String constructUrl(String key) {
         String identifier = "";
         try {
-            identifier = URLEncoder.encode((String) key, "UTF-8");
+            identifier = URLEncoder.encode(key, "UTF-8");
         } catch (UnsupportedEncodingException e) {
             return "";
         }
@@ -158,6 +152,11 @@ public class OAI2Fetcher implements EntryFetcher, Runnable {
      * @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('/');
         
@@ -203,23 +202,30 @@ public class OAI2Fetcher implements EntryFetcher, Runnable {
             saxParser.parse(inputStream, handlerBase);
             
             /* Correct line breaks and spacing */
-            Object[] fields = be.getAllFields();
-            for (int i = 0; i < fields.length; i++){
-                String name = fields[i].toString();
+            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));
                 
-                be.setField(name, correctLineBreaks(be.getField(name).toString()));
+                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) {
-            JOptionPane.showMessageDialog(frame, Globals.lang(
+            status.showMessage(Globals.lang(
                 "An Exception ocurred while accessing '%0'", url)
                 + "\n\n" + e.toString(), Globals.lang(getKeyName()), JOptionPane.ERROR_MESSAGE);
         } catch (SAXException e) {
-            JOptionPane.showMessageDialog(frame, Globals.lang(
+            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){
-            JOptionPane.showMessageDialog(frame, Globals.lang(
+            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);
         } 
@@ -248,34 +254,19 @@ public class OAI2Fetcher implements EntryFetcher, Runnable {
         return Globals.menuTitle(getKeyName());
     }
 
-    public void processQuery(String query, ImportInspectionDialog dialog, JabRefFrame frame) {
-        this.query = query;
-        this.dialog = dialog;
-        this.frame = frame;
-        (new Thread(this)).start();
-    }
-
-    public void cancelled() {
-        shouldContinue = false;
-    }
-
-    public void done(int entriesImported) {
-        // do nothing
-    }
+    public boolean processQuery(String query, ImportInspector dialog, OutputPrinter status) {
 
-    public void stopFetching() {
-        shouldContinue = false;
-    }
+        this.status = status;
 
-    public void run() {
         try {
-            dialog.setVisible(true);
             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
@@ -285,13 +276,13 @@ public class OAI2Fetcher implements EntryFetcher, Runnable {
                     long elapsed = new Date().getTime() - lastCall.getTime();
 
                     while (elapsed < waitTime) {
-                        frame.output(Globals.lang("Waiting for ArXiv...") + ((waitTime - elapsed) / 1000) + " s");
+                        status.setStatus(Globals.lang("Waiting for ArXiv...") + ((waitTime - elapsed) / 1000) + " s");
                         Thread.sleep(1000);
                         elapsed = new Date().getTime() - lastCall.getTime();
                     }
                 }
 
-                frame.output(Globals.lang("Processing ") + key);
+                status.setStatus(Globals.lang("Processing ") + key);
 
                 /* the cancel button has been hit */
                 if (!shouldContinue)
@@ -310,12 +301,16 @@ public class OAI2Fetcher implements EntryFetcher, Runnable {
                 /* update the dialogs progress bar */
                 dialog.setProgress(i + 1, keys.length);
             }
-            /* inform the inspection dialog, that we're done */
-            dialog.entryListComplete();
-            frame.output("");
+            
+            return true;
         } catch (Exception e) {
-            frame.output(Globals.lang("Error while fetching from OIA2")+ ": " + e.getMessage());
+            status.setStatus(Globals.lang("Error while fetching from OIA2")+ ": " + 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 742d6e9..14ed270 100644
--- a/src/java/net/sf/jabref/imports/OAI2Handler.java
+++ b/src/java/net/sf/jabref/imports/OAI2Handler.java
@@ -13,7 +13,7 @@ import org.xml.sax.helpers.DefaultHandler;
  * @author Christian Kopf
  * @author Christopher Oezbek
  * 
- * @version $Revision: 1935 $ ($Date: 2007-02-09 11:06:36 +0100 (Fri, 09 Feb 2007) $)
+ * @version $Revision: 2488 $ ($Date: 2007-11-14 01:25:31 +0100 (Wed, 14 Nov 2007) $)
  * 
  */
 public class OAI2Handler extends DefaultHandler {
@@ -73,7 +73,7 @@ public class OAI2Handler extends DefaultHandler {
 			pages = pages.replaceAll(" ", "");
 			entry.setField("pages", pages);
 		} else if (qualifiedName.equals("datestamp")) {
-			String year = (String) entry.getField("year");
+			String year = entry.getField("year");
 			if (year == null || year.equals("")) {
 				entry.setField("year", content.replaceFirst("-.*", ""));
 			}
diff --git a/src/java/net/sf/jabref/imports/OpenDatabaseAction.java b/src/java/net/sf/jabref/imports/OpenDatabaseAction.java
index ebbc7af..dd049e3 100644
--- a/src/java/net/sf/jabref/imports/OpenDatabaseAction.java
+++ b/src/java/net/sf/jabref/imports/OpenDatabaseAction.java
@@ -1,13 +1,27 @@
 package net.sf.jabref.imports;
 
-import net.sf.jabref.*;
+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 javax.swing.JOptionPane;
+import javax.swing.SwingUtilities;
+
+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.MnemonicAwareAction;
+import net.sf.jabref.Util;
 import net.sf.jabref.external.FileLinksUpgradeWarning;
 
-import javax.swing.*;
-import java.io.*;
-import java.awt.event.*;
-import java.util.*;
-
 // The action concerned with opening an existing database.
 
 public class OpenDatabaseAction extends MnemonicAwareAction {
@@ -38,7 +52,7 @@ public class OpenDatabaseAction extends MnemonicAwareAction {
     }
 
     public void actionPerformed(ActionEvent e) {
-        List filesToOpen = new ArrayList();
+        List<File> filesToOpen = new ArrayList<File>();
         //File fileToOpen = null;
 
         if (showDialog) {
@@ -68,10 +82,10 @@ public class OpenDatabaseAction extends MnemonicAwareAction {
         int initialCount = filesToOpen.size(), removed = 0;
         
         // Check if any of the files are already open:
-        for (Iterator iterator = filesToOpen.iterator(); iterator.hasNext();) {
-            File file = (File) iterator.next();
+        for (Iterator<File> iterator = filesToOpen.iterator(); iterator.hasNext();) {
+            File file = iterator.next();
             for (int i=0; i<frame.getTabbedPane().getTabCount(); i++) {
-                BasePanel bp = (BasePanel)frame.baseAt(i);
+                BasePanel bp = frame.baseAt(i);
                 if ((bp.getFile() != null) && bp.getFile().equals(file)) {
                     iterator.remove();
                     removed++;
@@ -89,16 +103,16 @@ public class OpenDatabaseAction extends MnemonicAwareAction {
         // Run the actual open in a thread to prevent the program
         // locking until the file is loaded.
         if (filesToOpen.size() > 0) {
-            final List theFiles = Collections.unmodifiableList(filesToOpen);
+            final List<File> theFiles = Collections.unmodifiableList(filesToOpen);
             (new Thread() {
                 public void run() {
-                    for (Iterator i=theFiles.iterator(); i.hasNext();)
-                        openIt((File)i.next(), true);
+                    for (Iterator<File> i=theFiles.iterator(); i.hasNext();)
+                        openIt(i.next(), true);
 
                 }
             }).start();
-            for (Iterator i=theFiles.iterator(); i.hasNext();)
-                frame.getFileHistory().newFile(((File)i.next()).getPath());
+            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:
@@ -133,7 +147,7 @@ public class OpenDatabaseAction extends MnemonicAwareAction {
                 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 = loadDatabase(file, encoding);
+                final ParserResult pr = loadDatabase(file, encoding);
 
                 if ((pr == null) || (pr == ParserResult.INVALID_FORMAT)) {
                     JOptionPane.showMessageDialog(null, Globals.lang("Error opening file" + " '" + fileName + "'"),
@@ -143,14 +157,19 @@ public class OpenDatabaseAction extends MnemonicAwareAction {
                     return;
                 }
 
-                BasePanel panel = addNewDatabase(pr, file, raisePanel);
-
+                final BasePanel panel = addNewDatabase(pr, file, raisePanel);
+                
                 // 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:
-                performPostOpenActions(panel, pr, true);
+                SwingUtilities.invokeLater(new Runnable() {
+                    public void run() {
+                        performPostOpenActions(panel, pr, true);
+                    }
+                });
+
 
             } catch (Exception ex) {
                 //ex.printStackTrace();
@@ -182,7 +201,7 @@ public class OpenDatabaseAction extends MnemonicAwareAction {
 
         String fileName = file.getPath();
         BibtexDatabase db = pr.getDatabase();
-        HashMap meta = pr.getMetaData();
+        HashMap<String, String> meta = pr.getMetaData();
 
         if (pr.hasWarnings()) {
             final String[] wrns = pr.warnings();
@@ -295,9 +314,13 @@ public class OpenDatabaseAction extends MnemonicAwareAction {
                     //    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');
+                    while (reader.read() != '\n'){
+                        // keep reading
+                    }
                     // If the next line starts with something like "% ", handle this:
-                    while (((c =reader.read()) == '%') || (Character.isWhitespace((char)c)));
+                    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))
diff --git a/src/java/net/sf/jabref/imports/OvidImporter.java b/src/java/net/sf/jabref/imports/OvidImporter.java
index 122a36b..9822e42 100644
--- a/src/java/net/sf/jabref/imports/OvidImporter.java
+++ b/src/java/net/sf/jabref/imports/OvidImporter.java
@@ -63,8 +63,8 @@ public class OvidImporter extends ImportFormat {
      * Parse the entries in the source, and return a List of BibtexEntry
      * objects.
      */
-    public List importEntries(InputStream stream) throws IOException {
-    ArrayList bibitems = new ArrayList();
+    public List<BibtexEntry> importEntries(InputStream stream) throws IOException {
+    ArrayList<BibtexEntry> bibitems = new ArrayList<BibtexEntry>();
     StringBuffer sb = new StringBuffer();
     BufferedReader in = new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
     String line;
@@ -79,7 +79,7 @@ public class OvidImporter extends ImportFormat {
     String items[] = sb.toString().split("<[0-9]+>");
 
     for (int i = 1; i < items.length; i++){
-        HashMap h = new HashMap();
+        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');
@@ -152,7 +152,7 @@ public class OvidImporter extends ImportFormat {
             }
             // Add double hyphens to page ranges:
             if (h.get("pages") != null) {
-                h.put("pages", ((String)h.get("pages")).replaceAll("-", "--"));
+                h.put("pages", h.get("pages").replaceAll("-", "--"));
             }
 
         } else if (fieldName.equals("Abstract")) {
@@ -170,24 +170,24 @@ public class OvidImporter extends ImportFormat {
 
         // Now we need to check if a book entry has given editors in the author field;
         // if so, rearrange:
-        String auth = (String)h.get("author");
+        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 = (String)h.get("author");
+        auth = h.get("author");
         if (auth != null)
             h.put("author", fixNames(auth));
-        auth = (String)h.get("editor");
+        auth = h.get("editor");
         if (auth != null)
             h.put("editor", fixNames(auth));
 
 
 
         // Set the entrytype properly:
-        String entryType = h.containsKey("entrytype") ? (String)h.get("entrytype") : "other";
+        String entryType = h.containsKey("entrytype") ? h.get("entrytype") : "other";
         h.remove("entrytype");
         if (entryType.equals("book")) {
             if (h.containsKey("chaptertitle")) {
diff --git a/src/java/net/sf/jabref/imports/ParserResult.java b/src/java/net/sf/jabref/imports/ParserResult.java
index 5f483a1..3eaa97a 100644
--- a/src/java/net/sf/jabref/imports/ParserResult.java
+++ b/src/java/net/sf/jabref/imports/ParserResult.java
@@ -27,16 +27,19 @@ http://www.gnu.org/copyleft/gpl.ja.html
 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;
 
 public class ParserResult {
 
     public static ParserResult INVALID_FORMAT = new ParserResult(null, null, null);
     private BibtexDatabase base;
-    private HashMap metaData, entryTypes;
+    private HashMap<String, String> metaData;
+    private HashMap<String, BibtexEntryType> entryTypes;
     private File file = null;
     private ArrayList<String> warnings = new ArrayList<String>();
     private String encoding = null; // Which encoding was used?
@@ -46,10 +49,14 @@ public class ParserResult {
     private int jabrefMajorVersion = 0, jabrefMinorVersion = 0; // Numeric version representation
     private boolean toOpenTab = false;
 
-    public ParserResult(BibtexDatabase base, HashMap metaData, HashMap entryTypes) {
-	this.base = base;
-	this.metaData = metaData;
-	this.entryTypes = entryTypes;
+    public ParserResult(Collection<BibtexEntry> entries){
+    	this(ImportFormatReader.createDatabase(entries), null, new HashMap<String, BibtexEntryType>());
+    }
+    
+    public ParserResult(BibtexDatabase base, HashMap<String, String> metaData, HashMap<String, BibtexEntryType> entryTypes) {
+		this.base = base;
+		this.metaData = metaData;
+		this.entryTypes = entryTypes;
     }
 
     /**
@@ -102,12 +109,12 @@ public class ParserResult {
     	return base;
     }
 
-    public HashMap getMetaData() {
+    public HashMap<String, String> getMetaData() {
 	return metaData;
     }
 
-    public HashMap getEntryTypes() {
-	return entryTypes;
+    public HashMap<String, BibtexEntryType> getEntryTypes() {
+    	return entryTypes;
     }
 
     public File getFile() {
@@ -152,7 +159,7 @@ public class ParserResult {
     public String[] warnings() {
       String[] s = new String[warnings.size()];
       for (int i=0; i<warnings.size(); i++)
-        s[i] = (String)warnings.get(i);
+        s[i] = warnings.get(i);
       return s;
     }
 
diff --git a/src/java/net/sf/jabref/imports/PdfXmpImporter.java b/src/java/net/sf/jabref/imports/PdfXmpImporter.java
index a8edeb3..c395675 100644
--- a/src/java/net/sf/jabref/imports/PdfXmpImporter.java
+++ b/src/java/net/sf/jabref/imports/PdfXmpImporter.java
@@ -4,6 +4,7 @@ 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.util.XMPUtil;
 
@@ -11,7 +12,7 @@ import net.sf.jabref.util.XMPUtil;
  * Wraps the XMPUtility function to be used as an ImportFormat.
  * 
  * @author $Author: coezbek $
- * @version $Revision: 1699 $ ($Date: 2006-08-13 15:17:52 +0200 (Sun, 13 Aug 2006) $)
+ * @version $Revision: 2209 $ ($Date: 2007-08-01 20:23:38 +0200 (Wed, 01 Aug 2007) $)
  * 
  */
 public class PdfXmpImporter extends ImportFormat {
@@ -23,7 +24,7 @@ public class PdfXmpImporter extends ImportFormat {
 	/**
 	 * Returns a list of all BibtexEntries found in the inputstream.
 	 */
-	public List importEntries(InputStream in) throws IOException {
+	public List<BibtexEntry> importEntries(InputStream in) throws IOException {
 		return XMPUtil.readXMP(in);
 	}
 
diff --git a/src/java/net/sf/jabref/imports/RepecNepImporter.java b/src/java/net/sf/jabref/imports/RepecNepImporter.java
index 7993171..2e317ba 100644
--- a/src/java/net/sf/jabref/imports/RepecNepImporter.java
+++ b/src/java/net/sf/jabref/imports/RepecNepImporter.java
@@ -25,23 +25,16 @@
 
  */
 package net.sf.jabref.imports;
-import java.io.InputStream;
 import java.io.BufferedReader;
 import java.io.IOException;
+import java.io.InputStream;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
-import java.util.Arrays;
-import java.util.Calendar;
-import java.util.Collection;
-import java.util.Date;
-import java.util.GregorianCalendar;
-import java.util.List;
-import java.util.ArrayList;
+import java.util.*;
+
 import net.sf.jabref.BibtexEntry;
 import net.sf.jabref.BibtexEntryType;
 import net.sf.jabref.Util;
-import net.sf.jabref.imports.ImportFormat;
-import net.sf.jabref.imports.ImportFormatReader;
 
 
 /**
@@ -166,7 +159,7 @@ import net.sf.jabref.imports.ImportFormatReader;
  */
 public class RepecNepImporter extends ImportFormat {
 
-  private final static Collection recognizedFields = Arrays.asList(new String[]{"Keywords", "JEL", "Date", "URL", "By"});
+  private final static Collection<String> recognizedFields = Arrays.asList(new String[]{"Keywords", "JEL", "Date", "URL", "By"});
   
   private int line = 0;
   private String lastLine = "";
@@ -228,7 +221,7 @@ public class RepecNepImporter extends ImportFormat {
     return startOfMessage.indexOf("NEP: New Economics Papers") >= 0 || startOfMessage.indexOf("nep.repec.org") >= 0;
   }
 
-  private boolean startsWithKeyword(Collection keywords) {
+  private boolean startsWithKeyword(Collection<String> keywords) {
     boolean result = this.lastLine.indexOf(':') > 0;
     if (result) {
       String possibleKeyword = this.lastLine.substring(0, this.lastLine.indexOf(':'));
@@ -430,8 +423,8 @@ public class RepecNepImporter extends ImportFormat {
    *  (non-Javadoc)
    * @see net.sf.jabref.imports.ImportFormat#importEntries(java.io.InputStream)
    */
-  public List importEntries(InputStream stream) throws IOException {    
-  	ArrayList bibitems = new ArrayList();
+  public List<BibtexEntry> importEntries(InputStream stream) throws IOException {    
+  	ArrayList<BibtexEntry> bibitems = new ArrayList<BibtexEntry>();
     String paperNoStr = null;
     this.line = 0;
     
diff --git a/src/java/net/sf/jabref/imports/RisImporter.java b/src/java/net/sf/jabref/imports/RisImporter.java
index 32d1670..78c8314 100644
--- a/src/java/net/sf/jabref/imports/RisImporter.java
+++ b/src/java/net/sf/jabref/imports/RisImporter.java
@@ -60,8 +60,8 @@ public class RisImporter extends ImportFormat {
      * Parse the entries in the source, and return a List of BibtexEntry
      * objects.
      */
-    public List importEntries(InputStream stream) throws IOException {
-    ArrayList bibitems = new ArrayList();
+    public List<BibtexEntry> importEntries(InputStream stream) throws IOException {
+    ArrayList<BibtexEntry> bibitems = new ArrayList<BibtexEntry>();
     StringBuffer sb = new StringBuffer();
     BufferedReader in = new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
     String str;
@@ -75,7 +75,7 @@ public class RisImporter extends ImportFormat {
     for (int i = 0; i < entries.length - 1; i++){
             String type = "", author = "", editor = "", startPage = "", endPage = "",
                 comment = "";
-            HashMap hm = new HashMap();
+            HashMap<String, String> hm = new HashMap<String, String>();
 
         String[] fields = entries[i].split("\n");
 
@@ -162,7 +162,7 @@ public class RisImporter extends ImportFormat {
             else if (lab.equals("KW")){
             if (!hm.containsKey("keywords")) hm.put("keywords", val);
             else{
-                String kw = (String) hm.get("keywords");
+                String kw = hm.get("keywords");
                 hm.put("keywords", kw + ", " + val);
             }
             }
@@ -194,14 +194,14 @@ public class RisImporter extends ImportFormat {
                         .getEntryType(type)); // id assumes an existing database so don't
 
         // Remove empty fields:
-        ArrayList toRemove = new ArrayList();
-        for (Iterator it = hm.keySet().iterator(); it.hasNext();) {
+        ArrayList<Object> toRemove = new ArrayList<Object>();
+        for (Iterator<String> it = hm.keySet().iterator(); it.hasNext();) {
             Object key = it.next();
-            String content = (String)hm.get(key);
+            String content = hm.get(key);
             if ((content == null) || (content.trim().length() == 0))
                 toRemove.add(key);
         }
-        for (Iterator iterator = toRemove.iterator(); iterator.hasNext();) {
+        for (Iterator<Object> iterator = toRemove.iterator(); iterator.hasNext();) {
             hm.remove(iterator.next());
 
         }
diff --git a/src/java/net/sf/jabref/imports/SPIRESBibtexFilterReader.java b/src/java/net/sf/jabref/imports/SPIRESBibtexFilterReader.java
new file mode 100644
index 0000000..1f224e6
--- /dev/null
+++ b/src/java/net/sf/jabref/imports/SPIRESBibtexFilterReader.java
@@ -0,0 +1,76 @@
+package net.sf.jabref.imports;
+
+import java.io.Reader;
+import java.io.BufferedReader;
+import java.io.FilterReader;
+import java.io.IOException;
+import java.util.regex.Matcher;
+
+/**
+ * 
+ * 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
new file mode 100644
index 0000000..5ac1304
--- /dev/null
+++ b/src/java/net/sf/jabref/imports/SPIRESFetcher.java
@@ -0,0 +1,219 @@
+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.OutputPrinter;
+import net.sf.jabref.BibtexDatabase;
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.GUIGlobals;
+import net.sf.jabref.Globals;
+import net.sf.jabref.imports.BibtexParser;
+
+/**
+ * 
+ * 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((String) 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((String) 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 "Fetch 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 4a6bcf4..bf93fea 100644
--- a/src/java/net/sf/jabref/imports/ScifinderImporter.java
+++ b/src/java/net/sf/jabref/imports/ScifinderImporter.java
@@ -45,8 +45,8 @@ public class ScifinderImporter extends ImportFormat {
      * Parse the entries in the source, and return a List of BibtexEntry
      * objects.
      */
-    public List importEntries(InputStream stream) throws IOException {
-    ArrayList bibitems = new ArrayList();
+    public List<BibtexEntry> importEntries(InputStream stream) throws IOException {
+    ArrayList<BibtexEntry> bibitems = new ArrayList<BibtexEntry>();
     StringBuffer sb = new StringBuffer();
     BufferedReader in = new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
     String str;
@@ -55,7 +55,7 @@ public class ScifinderImporter extends ImportFormat {
     }
 
     String[] entries = sb.toString().split("START_RECORD");
-    HashMap hm = new HashMap();
+    HashMap<String, String> hm = new HashMap<String, String>();
     for (int i = 1; i < entries.length; i++){
         String[] fields = entries[i].split("FIELD ");
         String Type = "";
diff --git a/src/java/net/sf/jabref/imports/SilverPlatterImporter.java b/src/java/net/sf/jabref/imports/SilverPlatterImporter.java
index 53faa46..4cd7fe8 100644
--- a/src/java/net/sf/jabref/imports/SilverPlatterImporter.java
+++ b/src/java/net/sf/jabref/imports/SilverPlatterImporter.java
@@ -61,8 +61,8 @@ public class SilverPlatterImporter extends ImportFormat {
      * Parse the entries in the source, and return a List of BibtexEntry
      * objects.
      */
-    public List importEntries(InputStream stream) throws IOException {
-        ArrayList bibitems = new ArrayList();
+    public List<BibtexEntry> importEntries(InputStream stream) throws IOException {
+        ArrayList<BibtexEntry> bibitems = new ArrayList<BibtexEntry>();
         BufferedReader in = new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
         boolean isChapter = false;
         String str;
@@ -75,7 +75,7 @@ public class SilverPlatterImporter extends ImportFormat {
         in.close();
         String[] entries = sb.toString().split("__::__");
         String Type = "";
-        HashMap h = new HashMap();
+        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]+"'");
diff --git a/src/java/net/sf/jabref/imports/SixpackImporter.java b/src/java/net/sf/jabref/imports/SixpackImporter.java
index 41823b7..1a8fbb8 100644
--- a/src/java/net/sf/jabref/imports/SixpackImporter.java
+++ b/src/java/net/sf/jabref/imports/SixpackImporter.java
@@ -45,10 +45,10 @@ public class SixpackImporter extends ImportFormat {
      * Parse the entries in the source, and return a List of BibtexEntry
      * objects.
      */
-    public List importEntries(InputStream stream) throws IOException {
+    public List<BibtexEntry> importEntries(InputStream stream) throws IOException {
 
 	final String SEPARATOR = new String(new char[] { 0, 48 });
-	HashMap fI = new HashMap();
+	HashMap<String, String> fI = new HashMap<String, String>();
 	fI.put("id", "bibtexkey");
 	fI.put("au", "author");
 	fI.put("ti", "title");
@@ -77,7 +77,7 @@ public class SixpackImporter extends ImportFormat {
 	fI.put("cr", "crossref");
     fI.put("fi", "file");
 
-	ArrayList bibitems = new ArrayList();
+	ArrayList<BibtexEntry> bibitems = new ArrayList<BibtexEntry>();
 	BufferedReader in = new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
 	in.readLine();
     String ln = in.readLine();
@@ -107,7 +107,7 @@ public class SixpackImporter extends ImportFormat {
 		entry = new BibtexEntry(Util.createNeutralId(), typ);
 		String fld;
 		for (int i = 0; i < Math.min(fieldDef.length, fields.length); i++){
-		    fld = (String) fI.get(fieldDef[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(", ",
diff --git a/src/java/net/sf/jabref/imports/TextAnalyzer.java b/src/java/net/sf/jabref/imports/TextAnalyzer.java
index ff0cad0..7c227a9 100644
--- a/src/java/net/sf/jabref/imports/TextAnalyzer.java
+++ b/src/java/net/sf/jabref/imports/TextAnalyzer.java
@@ -1,10 +1,13 @@
 package net.sf.jabref.imports;
 
-import java.util.TreeSet;
-import net.sf.jabref.*;
 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;
@@ -19,7 +22,7 @@ public class TextAnalyzer {
 
   public void guessBibtexFields(String text) {
 
-      TreeSet usedParts = new TreeSet();
+      TreeSet<Substring> usedParts = new TreeSet<Substring>();
 
       text = "  "+text+"  ";
 
@@ -129,10 +132,10 @@ public class TextAnalyzer {
 
       // Then try to find title and authors.
       Substring ss;
-      Vector free = new Vector();
+      Vector<String> free = new Vector<String>();
       int piv = 0;
-      for (Iterator i=usedParts.iterator(); i.hasNext();) {
-        ss = (Substring)i.next();
+      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())));
@@ -143,11 +146,8 @@ public class TextAnalyzer {
         free.add(clean(text.substring(piv)));
       }
       Util.pr("Free parts:");
-      for (Iterator i=free.iterator(); i.hasNext();) {
-        String part = (String)i.next();
-        int dots = part.split("\\.").length - 1;
-
-        Util.pr(": '"+i.next()+"'");
+      for (String s : free){
+        Util.pr(": '"+s+"'");
       }
     }
 
@@ -192,17 +192,24 @@ public class TextAnalyzer {
       return s.substring(left, Math.min(right+1, s.length()));
     }
 
-    private class Substring implements Comparable {
-      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(Object o) {
-        Substring other = (Substring)o;
-        return (new Integer(begin)).compareTo(new Integer(other.begin()));
-      }
-        }
+    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/ZipFileChooser.java b/src/java/net/sf/jabref/imports/ZipFileChooser.java
index 5a50182..e54d038 100644
--- a/src/java/net/sf/jabref/imports/ZipFileChooser.java
+++ b/src/java/net/sf/jabref/imports/ZipFileChooser.java
@@ -26,24 +26,35 @@
  */
 package net.sf.jabref.imports;
 
-import javax.swing.JDialog;
-import java.awt.*;
-import net.sf.jabref.*;
-
-import javax.swing.*;
-import java.awt.event.ActionListener;
+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.List;
 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.
@@ -144,7 +155,6 @@ class ZipFileChooser extends JDialog {
     }
   }
 
-  private CustomImportList.Importer selectedImporter = null;
   private JButton okButton = new JButton(Globals.lang("Ok"));
   private JButton cancelButton = new JButton(Globals.lang("Cancel"));
 
@@ -172,15 +182,15 @@ class ZipFileChooser extends JDialog {
    * @return  entries that can be selected
    */
   private ZipEntry[] getSelectableZipEntries(ZipFile zipFile) {
-    List entries = new ArrayList();
-    Enumeration e = zipFile.entries();
+    List<ZipEntry> entries = new ArrayList<ZipEntry>();
+    Enumeration<? extends ZipEntry> e = zipFile.entries();
     while (e.hasMoreElements()) {
-      ZipEntry entry = (ZipEntry)e.nextElement();
+      ZipEntry entry = e.nextElement();
       if (!entry.isDirectory() && entry.getName().endsWith(".class")) {
         entries.add(entry); 
       }
     }
-    return (ZipEntry[])entries.toArray(new ZipEntry[]{});
+    return entries.toArray(new ZipEntry[]{});
   }
   
   /**
diff --git a/src/java/net/sf/jabref/journals/JournalAbbreviations.java b/src/java/net/sf/jabref/journals/JournalAbbreviations.java
index 0dd0a1f..5f598d7 100644
--- a/src/java/net/sf/jabref/journals/JournalAbbreviations.java
+++ b/src/java/net/sf/jabref/journals/JournalAbbreviations.java
@@ -1,22 +1,24 @@
 package net.sf.jabref.journals;
 
-import net.sf.jabref.util.CaseChanger;
-import net.sf.jabref.FieldEditor;
-import net.sf.jabref.Globals;
-import net.sf.jabref.EntryEditor;
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.undo.UndoableFieldChange;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.*;
+import java.net.URL;
+import java.util.*;
 
-import javax.swing.*;
+import javax.swing.JButton;
+import javax.swing.JComponent;
 import javax.swing.table.DefaultTableModel;
 import javax.swing.table.TableModel;
-import javax.swing.undo.UndoManager;
 import javax.swing.undo.CompoundEdit;
-import java.io.*;
-import java.util.*;
-import java.awt.event.ActionListener;
-import java.awt.event.ActionEvent;
-import java.net.URL;
+import javax.swing.undo.UndoManager;
+
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.EntryEditor;
+import net.sf.jabref.FieldEditor;
+import net.sf.jabref.Globals;
+import net.sf.jabref.undo.UndoableFieldChange;
+import net.sf.jabref.util.CaseChanger;
 
 /**
  * Created by IntelliJ IDEA.
@@ -30,10 +32,10 @@ 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 fullNameKeyed = new TreeMap();
-    HashMap abbrNameKeyed = new HashMap();
-    HashMap abbrNoDotsToAbbr = new HashMap();
-    TreeMap all = new TreeMap();
+    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>();
     CaseChanger caseChanger = new CaseChanger();
 
     public JournalAbbreviations() {
@@ -52,7 +54,7 @@ public class JournalAbbreviations {
      * Get an iterator for the known journals in alphabetical order.
      * @return Iterator for journal full names
      */
-    public Iterator fullNameIterator() {
+    public Iterator<String> fullNameIterator() {
         return fullNameKeyed.keySet().iterator();
     }
 
@@ -82,13 +84,13 @@ public class JournalAbbreviations {
         String s = journalName.toLowerCase();
         String abbr;
         if (fullNameKeyed.containsKey(s)) {
-            abbr = (String)fullNameKeyed.get(s);
+            abbr = fullNameKeyed.get(s);
         }
         else if (abbrNameKeyed.containsKey(s)) {
             abbr = journalName;
         }
         else if (abbrNoDotsToAbbr.containsKey(s)) {
-            abbr = (String)abbrNoDotsToAbbr.get(s);
+            abbr = abbrNoDotsToAbbr.get(s);
         } else
             return null;
 
@@ -243,7 +245,7 @@ public class JournalAbbreviations {
     }
 
 
-    public Map getJournals() {
+    public Map<String, String> getJournals() {
         return Collections.unmodifiableMap(all);
     }
 
@@ -293,8 +295,8 @@ public class JournalAbbreviations {
     public TableModel getTableModel() {
         Object[][] cells = new Object[fullNameKeyed.size()][2];
         int row = 0;
-        for (Iterator i=fullNameIterator(); i.hasNext();) {
-            String name = (String)i.next();
+        for (Iterator<String> i=fullNameIterator(); i.hasNext();) {
+            String name = i.next();
             cells[row][0] = getFullName(name);
             cells[row][1] = getAbbreviatedName(name, true);
             row++;
diff --git a/src/java/net/sf/jabref/journals/ManageJournalsPanel.java b/src/java/net/sf/jabref/journals/ManageJournalsPanel.java
index 5c0cb9b..9cb73b3 100644
--- a/src/java/net/sf/jabref/journals/ManageJournalsPanel.java
+++ b/src/java/net/sf/jabref/journals/ManageJournalsPanel.java
@@ -1,29 +1,30 @@
 package net.sf.jabref.journals;
 
-import net.sf.jabref.*;
-import net.sf.jabref.net.URLDownload;
-
-import javax.swing.*;
-import javax.swing.table.AbstractTableModel;
-
-import com.jgoodies.forms.layout.FormLayout;
-import com.jgoodies.forms.layout.CellConstraints;
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-import com.jgoodies.forms.builder.ButtonBarBuilder;
-import com.jgoodies.forms.builder.ButtonStackBuilder;
-
+import java.awt.BorderLayout;
+import java.awt.Dimension;
 import java.awt.event.*;
-import java.awt.*;
 import java.io.File;
 import java.io.FileNotFoundException;
 import java.io.FileWriter;
 import java.io.IOException;
-import java.util.Map;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.Collections;
-import java.net.URL;
 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.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.
@@ -45,7 +46,7 @@ public class ManageJournalsPanel extends JPanel{
     JTextField nameTf = new JTextField(),
         newNameTf = new JTextField(),
         abbrTf = new JTextField();
-    java.util.List externals = new ArrayList(); // To hold references to external journal lists.
+    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"));
@@ -229,8 +230,8 @@ public class ManageJournalsPanel extends JPanel{
     private void buildExternalsPanel() {
 
         DefaultFormBuilder builder = new DefaultFormBuilder(new FormLayout("fill:pref:grow",""));
-        for (Iterator i=externals.iterator(); i.hasNext();) {
-            ExternalFileEntry efe = (ExternalFileEntry)i.next();
+        for (Iterator<ExternalFileEntry> i=externals.iterator(); i.hasNext();) {
+            ExternalFileEntry efe = i.next();
             builder.append(efe.getPanel());
             builder.nextLine();
         }
@@ -327,8 +328,8 @@ public class ManageJournalsPanel extends JPanel{
             FileWriter fw = null;
             try {
                 fw = new FileWriter(f, false);
-                for (Iterator i=tableModel.getJournals().iterator(); i.hasNext();) {
-                    JournalEntry entry = (JournalEntry)i.next();
+                for (Iterator<JournalEntry> i=tableModel.getJournals().iterator(); i.hasNext();) {
+                    JournalEntry entry = i.next();
                     fw.write(entry.name);
                     fw.write(" = ");
                     fw.write(entry.abbreviation);
@@ -354,9 +355,9 @@ public class ManageJournalsPanel extends JPanel{
         }
 
         // Store the list of external files set up:
-        ArrayList extFiles = new ArrayList();
-        for (Iterator i=externals.iterator(); i.hasNext();) {
-            ExternalFileEntry efe = (ExternalFileEntry)i.next();
+        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());
             }
@@ -364,7 +365,7 @@ public class ManageJournalsPanel extends JPanel{
         if (extFiles.size() == 0)
             Globals.prefs.put("externalJournalLists", "");
         else {
-            String[] list = (String[])extFiles.toArray(new String[extFiles.size()]);
+            String[] list = extFiles.toArray(new String[extFiles.size()]);
             Globals.prefs.putStringArray("externalJournalLists", list);
         }
 
@@ -434,24 +435,22 @@ public class ManageJournalsPanel extends JPanel{
     class AbbreviationsTableModel extends AbstractTableModel implements ActionListener {
 
         String[] names = new String[] {Globals.lang("Journal name"), Globals.lang("Abbreviation")};
-        ArrayList journals = null;
+        ArrayList<JournalEntry> journals = null;
 
         public AbbreviationsTableModel() {
 
 
         }
 
-        public void setJournals(Map journals) {
-            this.journals = new ArrayList();
-            for (Iterator i=journals.keySet().iterator(); i.hasNext();) {
-                String journal = (String)i.next(),
-                        abbr = (String)journals.get(journal);
-                this.journals.add(new JournalEntry(journal, abbr));
+        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 getJournals() {
+        public ArrayList<JournalEntry> getJournals() {
             return journals;
         }
 
@@ -465,13 +464,13 @@ public class ManageJournalsPanel extends JPanel{
 
         public Object getValueAt(int row, int col) {
             if (col == 0)
-                return ((JournalEntry)journals.get(row)).name;
+                return journals.get(row).name;
             else
-                return ((JournalEntry)journals.get(row)).abbreviation;
+                return journals.get(row).abbreviation;
         }
 
         public void setValueAt(Object object, int row, int col) {
-            JournalEntry entry = (JournalEntry)journals.get(row);
+            JournalEntry entry = journals.get(row);
             if (col == 0)
                 entry.name = (String)object;
             else
@@ -594,15 +593,14 @@ public class ManageJournalsPanel extends JPanel{
         public String getValue() { return tf.getText(); }
     }
 
-    class JournalEntry implements Comparable {
+    class JournalEntry implements Comparable<JournalEntry> {
         String name, abbreviation;
         public JournalEntry(String name, String abbreviation) {
             this.name = name;
             this.abbreviation = abbreviation;
         }
-        public int compareTo(Object other) {
-            JournalEntry entry = (JournalEntry)other;
-            return this.name.compareTo(entry.name);
+        public int compareTo(JournalEntry other) {
+            return this.name.compareTo(other.name);
         }
     }
 }
diff --git a/src/java/net/sf/jabref/label/ArticleLabelRule.java b/src/java/net/sf/jabref/label/ArticleLabelRule.java
index fa2fc7f..755ef2f 100644
--- a/src/java/net/sf/jabref/label/ArticleLabelRule.java
+++ b/src/java/net/sf/jabref/label/ArticleLabelRule.java
@@ -26,21 +26,23 @@
 */
 package net.sf.jabref.label;
 
-import net.sf.jabref.*;
+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 = (String) (oldEntry.getField(BibtexFields.KEY_FIELD)) ;
+        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=(String)oldEntry.getField("author");
+            author=oldEntry.getField("author");
             String[] tokens= author.split("\\band\\b");
             if( tokens.length > 0){ // if author is empty
                 if(tokens[0].indexOf(",") > 0)
diff --git a/src/java/net/sf/jabref/label/BookLabelRule.java b/src/java/net/sf/jabref/label/BookLabelRule.java
index ea2cd5c..3d09b3a 100644
--- a/src/java/net/sf/jabref/label/BookLabelRule.java
+++ b/src/java/net/sf/jabref/label/BookLabelRule.java
@@ -23,68 +23,48 @@ 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;
-import net.sf.jabref.Globals;
-import java.util.StringTokenizer ;
-import net.sf.jabref.BibtexFields;
 
 public class BookLabelRule extends DefaultLabelRule {
 
     // this is the rule used handle articles
     // we try (first author)/(year)
-    public String applyRule(BibtexEntry oldEntry){
-        String oldLabel = (String) (oldEntry.getField(BibtexFields.KEY_FIELD)) ;
-        String newLabel = "" ;
-
+    public String applyRule(BibtexEntry oldEntry) {
+        String newLabel = "";
 
-        StringTokenizer authorTokens = null ;
+        StringTokenizer authorTokens = null;
         // use the author token
-        try{
-            if((String) oldEntry.getField("author")!= null){
-                authorTokens= new StringTokenizer((String) oldEntry.getField("author"),",") ;
-            }else
-            if((String) oldEntry.getField("editor")!= null){
-                authorTokens= new StringTokenizer((String) oldEntry.getField("editor"),",") ;
+        try {
+            if (oldEntry.getField("author") != null) {
+                authorTokens = new StringTokenizer(oldEntry.getField("author"),
+                    ",");
+            } else if (oldEntry.getField("editor") != null) {
+                authorTokens = new StringTokenizer(oldEntry.getField("editor"),
+                    ",");
             }
-            newLabel += authorTokens.nextToken().toLowerCase() ;
-        }catch(Throwable t){
-                        System.out.println("error getting author/editor: "+t) ;
+            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")) ;
+        try {
+            if (oldEntry.getField("year") != null) {
+                newLabel += String.valueOf(oldEntry.getField("year"));
             }
-        }catch(Throwable t){
-                        System.out.println("error getting author: "+t) ;
+        } catch (Throwable t) {
+            System.out.println("error getting author: " + t);
         }
 
-        newLabel += "book" ;
+        newLabel += "book";
 
-        //	oldEntry.setField(Globals.KEY_FIELD,newLabel) ;
         return newLabel;
     }
 
-
-//    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") ;
-//        BookLabelRule rule = new BookLabelRule() ;
-//        entry = rule.applyRule(entry) ;
-////        System.out.println(entry.getField("journal") );
-//        System.out.println(entry.getField(BibtexBaseFrame.KEY_PROPERTY) );
-//
-//    }
-
 }
-
-
-
diff --git a/src/java/net/sf/jabref/label/DefaultLabelRule.java b/src/java/net/sf/jabref/label/DefaultLabelRule.java
index a8c2914..f772fff 100644
--- a/src/java/net/sf/jabref/label/DefaultLabelRule.java
+++ b/src/java/net/sf/jabref/label/DefaultLabelRule.java
@@ -27,7 +27,6 @@ http://www.gnu.org/copyleft/gpl.ja.html
 package net.sf.jabref.label;
 
 import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.Globals;
 import net.sf.jabref.BibtexFields;
 
 public class DefaultLabelRule implements LabelRule {
@@ -35,7 +34,7 @@ public class DefaultLabelRule implements LabelRule {
 
     // the default rule is that oit simply returns what it was given
     public String applyRule(BibtexEntry oldEntry){
-        return (String)oldEntry.getField(BibtexFields.KEY_FIELD);
+        return oldEntry.getField(BibtexFields.KEY_FIELD);
     }
 
 
diff --git a/src/java/net/sf/jabref/label/IncollectionLabelRule.java b/src/java/net/sf/jabref/label/IncollectionLabelRule.java
index ea99d7f..db4f965 100644
--- a/src/java/net/sf/jabref/label/IncollectionLabelRule.java
+++ b/src/java/net/sf/jabref/label/IncollectionLabelRule.java
@@ -26,8 +26,6 @@ http://www.gnu.org/copyleft/gpl.ja.html
 */
 package net.sf.jabref.label;
 
-import net.sf.jabref.*;
-import java.util.StringTokenizer ; 
 
 public class IncollectionLabelRule extends ArticleLabelRule {
 
diff --git a/src/java/net/sf/jabref/label/InproceedingsLabelRule.java b/src/java/net/sf/jabref/label/InproceedingsLabelRule.java
index 7f7787a..10639a4 100644
--- a/src/java/net/sf/jabref/label/InproceedingsLabelRule.java
+++ b/src/java/net/sf/jabref/label/InproceedingsLabelRule.java
@@ -26,22 +26,21 @@ http://www.gnu.org/copyleft/gpl.ja.html
 */
 package net.sf.jabref.label;
 
-import net.sf.jabref.*;
-import java.util.StringTokenizer ;
+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 oldLabel = (String) (oldEntry.getField(BibtexFields.KEY_FIELD)) ;
         String newLabel = "" ;
 
-
         StringTokenizer authorTokens = null ;
         // use the author token
         try{
-            authorTokens= new StringTokenizer((String) oldEntry.getField("author"),",") ;
+            authorTokens= new StringTokenizer(oldEntry.getField("author"),",") ;
             newLabel += authorTokens.nextToken().toLowerCase().replaceAll(" ","").replaceAll("\\.","")   ;
         }catch(Throwable t){
                         System.out.println("error getting author: "+t) ;
@@ -61,13 +60,13 @@ public class InproceedingsLabelRule extends DefaultLabelRule {
         try{
 
           if(oldEntry.getField("booktitle") != null) {
-            authorTokens = new StringTokenizer( ((String) oldEntry.getField("booktitle")).replaceAll(","," ").replaceAll("/"," ")) ;
+            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.isKeyWord(tempString))  {
+                if(tempString.trim().length() > 3 && !KeyWord.getKeyWord().isKeyWord(tempString))  {
                     done = true ;
                 }
                 else{
diff --git a/src/java/net/sf/jabref/label/KeyWord.java b/src/java/net/sf/jabref/label/KeyWord.java
index 55d03d9..81b8ee7 100644
--- a/src/java/net/sf/jabref/label/KeyWord.java
+++ b/src/java/net/sf/jabref/label/KeyWord.java
@@ -23,71 +23,52 @@ 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.Hashtable ; 
-
-public class KeyWord{
-
-   
-    private KeyWord(){
-        // puts all keywords in 
-        setKeyWords() ; 
-    }
-
-    private static void setKeyWords(){
-        keyWordTable.put("society","society") ; 
-        keyWordTable.put("transaction","transaction") ; 
-        keyWordTable.put("transactions","transactions") ; 
-        keyWordTable.put( "journal" , "journal" )  ; 
-        keyWordTable.put( "review" , "review" )  ; 
-        keyWordTable.put( "revue" , "revue" )  ; 
-        keyWordTable.put( "communication" , "communication" )  ; 
-        keyWordTable.put( "communications" , "communications" )  ; 
-        keyWordTable.put( "letters" , "letters" )  ; 
-        keyWordTable.put( "advances" , "advances" )  ; 
-        keyWordTable.put( "proceedings" , "proceedings" )  ; 
-        keyWordTable.put( "proceeding" , "proceeding" )  ; 
-        keyWordTable.put( "international" , "international" )  ; 
-        keyWordTable.put( "joint" , "joint" )  ; 
-        keyWordTable.put( "conference" , "conference" )  ; 
-    }
-
-
-    // accessors, if users, or anyone would want to change these defaults
-    // later
-    public static void addKeyWord(String newKeyWord){
-		keyWordTable.put(newKeyWord,newKeyWord) ; 
-    }
-
-    public static String removeKeyWord(String newKeyWord){
-		return (String) keyWordTable.remove(newKeyWord) ; 
-
-    }
-
-    
-   public static boolean isKeyWord(String matchWord){
-       if(keyWordTable.size()==0){
-		   setKeyWords() ; 
-       }
-       if(keyWordTable.containsKey(matchWord.toLowerCase())) {
-            return true ; 
-       }
-       return false ; 
-   }
-
-   public static boolean isKeyWordMatchCase(String matchWord){
-       if(keyWordTable.size()==0){
-		   setKeyWords() ; 
-       }
-       if(keyWordTable.containsKey(matchWord)) {
-            return true ; 
-       }
-       return false ; 
-   }
-
-   private static Hashtable keyWordTable = new Hashtable() ; 
+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 514233b..3eac0dc 100644
--- a/src/java/net/sf/jabref/label/LabelMaker.java
+++ b/src/java/net/sf/jabref/label/LabelMaker.java
@@ -26,8 +26,12 @@ http://www.gnu.org/copyleft/gpl.ja.html
 */
 package net.sf.jabref.label;
 
-import net.sf.jabref.*;
-import java.util.Hashtable ;
+import java.util.Hashtable;
+
+import net.sf.jabref.BibtexDatabase;
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.BibtexEntryType;
+import net.sf.jabref.Util;
 
 
 /**
@@ -39,7 +43,7 @@ public class LabelMaker {
     public BibtexEntry applyRule(BibtexEntry newEntry, BibtexDatabase base){
 	String newKey = "";
         if(ruleTable.containsKey(newEntry.getType().getName())){
-            newKey = ((LabelRule)ruleTable.get(newEntry.getType().getName())).applyRule(newEntry) ;
+            newKey = ruleTable.get(newEntry.getType().getName()).applyRule(newEntry) ;
         }
         else{
 		newKey = applyDefaultRule(newEntry) ;
@@ -54,7 +58,7 @@ public class LabelMaker {
 	    char c = 'b';
 	    String modKey = newKey+"a";
 	    while (base.setCiteKeyForEntry(newEntry.getId(), modKey))
-		modKey = newKey+((char)(c++));	    
+		modKey = newKey+((c++));	    
 	}
 
 	//newEntry.setField(Globals.KEY_FIELD, newKey);
@@ -78,7 +82,7 @@ public class LabelMaker {
     }
 
     protected LabelRule defaultRule = new ArticleLabelRule() ;
-    protected Hashtable ruleTable = new Hashtable() ;
+    protected Hashtable<String, LabelRule> ruleTable = new Hashtable<String, LabelRule>() ;
 
 }
 
diff --git a/src/java/net/sf/jabref/labelPattern/LabelPattern.java b/src/java/net/sf/jabref/labelPattern/LabelPattern.java
index 5d1e8d2..35a032e 100644
--- a/src/java/net/sf/jabref/labelPattern/LabelPattern.java
+++ b/src/java/net/sf/jabref/labelPattern/LabelPattern.java
@@ -7,94 +7,102 @@ 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 small table, where an entry type is associated with a label pattern (an
+ * <code>ArrayList</code>). A parent LabelPattern can be set.
  * 
- * A parent LabelPattern can be set. 
  * @author Ulrik Stervbo (ulriks AT ruc.dk)
  */
-public class LabelPattern extends Hashtable{
-	/**
-	 * 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, 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 
-	 * parent.
-	 *  
-	 * @param key a <code>String</code>
-	 * @return the object for the given key
-	 * @throws NullPointerException
-	 */
-	public final ArrayList getValue(String key){
-		Object _obj = get(key); // throws the NullPointerException
-		// Test to see if we found anything
-		if(_obj == null){
-			if(parent != null){
-				_obj = parent.getValue(key);
-			}
-			if(_obj == null){
-			    // Not found - return the default value
-			    return LabelPatternUtil.DEFAULT_LABELPATTERN;
-			}
-		}
+public class LabelPattern extends Hashtable<String, ArrayList<String>> {
 
-		return (ArrayList)_obj;
-	}
+    /**
+     * The parent of this LabelPattern.
+     */
+    protected LabelPattern parent = null;
 
-        /**
-         * Checks whether this pattern is customized or the default value.
-         */
-        public final boolean isDefaultValue(String key) {
-            Object _obj = get(key);
-            return _obj == 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 parent.
+     * 
+     * @param key
+     *            a <code>String</code>
+     * @return the object for the given key
+     * @throws NullPointerException
+     */
+    public final ArrayList<String> getValue(String key) {
+        ArrayList<String> result = get(key); // throws the
+                                                // NullPointerException
+        // Test to see if we found anything
+        if (result == null) {
+            if (parent != null) {
+                result = parent.getValue(key);
+            }
+            if (result == null) {
+                // Not found - return the default value
+                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;
+    }
 }
diff --git a/src/java/net/sf/jabref/labelPattern/LabelPatternUtil.java b/src/java/net/sf/jabref/labelPattern/LabelPatternUtil.java
index 275c0c2..c44cd8a 100644
--- a/src/java/net/sf/jabref/labelPattern/LabelPatternUtil.java
+++ b/src/java/net/sf/jabref/labelPattern/LabelPatternUtil.java
@@ -19,47 +19,45 @@ import net.sf.jabref.export.layout.format.RemoveLatexCommands;
  */
 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 DEFAULT_LABELPATTERN;
-  static {
-      updateDefaultPattern();
-  }
-  //"[auth][year]");
-
-  private static BibtexDatabase _db;
-
-  public static void updateDefaultPattern() {
-      DEFAULT_LABELPATTERN = split(Globals.prefs.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 firlds 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 second item is the spacer character (a <code>String</code>).
-   */
-  public static ArrayList split(String labelPattern) {
-    // A holder for fields of the entry to be used for the key
-    ArrayList _alist = new ArrayList();
-
-    // 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());
+    // 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();
     }
-    return _alist;
 
-    /*
+    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 second item is the spacer character (a <code>String</code>).
+     */
+    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
@@ -93,358 +91,312 @@ public class LabelPatternUtil {
        }
 
        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.
-   * @param table a <code>LabelPattern</code>
-   * @param database a <code>BibtexDatabase</code>
-   * @param _entry a <code>BibtexEntry</code>
-   * @return modified Bibtexentry
-   */
-  public static BibtexEntry makeLabel(LabelPattern table,
-                                      BibtexDatabase database,
-                                      BibtexEntry _entry) {
-    _db = database;
-    ArrayList _al;
-    String _spacer, _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 corrosponding to the type
-      _al = table.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 = val.split(":");
-        val = parts[0];
-        //int _mi = val.indexOf(":");
-            //if(_mi != -1 && _mi != val.length()-1 && _mi != 0) { // ":" is in val and isn't first or last character
-                //modifier=val.substring(_mi+1);
-                //val=val.substring(0,_mi);
-            //}
-            StringBuffer _sbvalue = new StringBuffer();
-
-            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;
-                  if(val.startsWith("pure")) {
-                    // remove the "pure" prefix so the remaining code in this section functions correctly
-                    val = val.substring(4);
-                    System.out.println("val is now "+val);
-                    authString = _entry.getField("author").toString(); // use even if empty
-                    System.out.println("Got authString " + authString);
-                  } else {
-                    if (_entry.getField("author") == null || _entry.getField("author").toString().equals("")) {
-                      authString = _entry.getField("editor").toString();
-                    } else {
-                      authString = _entry.getField("author").toString();
-                    }
-                  }
-
-                  // Gather all author-related checks, so we don't have to check all all the time.
-                  if (val.equals("auth")) {
-                    _sbvalue.append(firstAuthor(authString));
-                  }
-                  else if (val.equals("authors")) {
-                    _sbvalue.append(allAuthors(authString));
-                  }
-                  // Last author's last name
-                  else if (val.equals("authorLast")) {
-                     _sbvalue.append(lastAuthor(authString));
-                  }
-                  else if (val.equals("authorIni")) {
-                    _sbvalue.append(oneAuthorPlusIni(authString));
-                  }
-                  else if (val.matches("authIni[\\d]+")) {
-                    int num = Integer.parseInt(val.substring(7));
-                                        _sbvalue.append(authIniN(authString,num));
-                  }
-                  else if (val.equals("auth.auth.ea")) {
-                    _sbvalue.append(authAuthEa(authString));
-                  }
-                  else if (val.equals("auth.etal")) {
-                    _sbvalue.append(authEtal(authString));
-                  }
-
-                  else if (val.equals("authshort")) {
-                    _sbvalue.append(authshort(authString));
-                  }
-                  else if (val.matches("auth[\\d]+_[\\d]+")) {
-                    String[] nums = val.substring(4).split("_");
-                    _sbvalue.append(authN_M(authString,
-                                            Integer.parseInt(nums[0]),
-                                            Integer.parseInt(nums[1]) - 1));
-                  }
-                  // authN.  First N chars of the first author's last name.
-                  else if (val.matches("auth\\d+")) {
-                    int num = Integer.parseInt(val.substring(4));
-                    String fa = firstAuthor(authString);
-                    if ( num > fa.length() )
-                      num = fa.length();
-                    _sbvalue.append(fa.substring(0,num));
-                  }
-                  else if (val.matches("authors\\d+")) {
-                    _sbvalue.append(NAuthors(authString,Integer.parseInt(val.substring(7))));
-                  }
-
-                  else {
-                    // This "auth" business was a dead end, so just use it literally:
-                    _sbvalue.append(_entry.getField(val).toString());
-                  }
-                }
-                else if (val.startsWith("ed")) {
-                  // Gather all markers starting with "ed" here, so we don't have to check all all the time.
-                  if (val.equals("edtr")) {
-                    _sbvalue.append(firstAuthor(_entry.getField("editor").toString()));
-                  }
-                  else if (val.equals("editors")) {
-                    _sbvalue.append(allAuthors(_entry.getField("editor").toString()));
-                  }
-                  else if (val.equals("editorIni")) {
-                      _sbvalue.append(oneAuthorPlusIni(_entry.getField("editor").toString()));
-                  }
-                  else if (val.matches("edtrIni[\\d]+")) {
-                    int num = Integer.parseInt(val.substring(7));
-                                        _sbvalue.append(authIniN(_entry.getField("editor").toString(),num));
-                  }
-                  else if (val.matches("edtr[\\d]+_[\\d]+")) {
-                    String[] nums = val.substring(4).split("_");
-                    _sbvalue.append(authN_M(_entry.getField("editor").toString(), Integer.parseInt(nums[0]),
-                                            Integer.parseInt(nums[1])-1));
-                  }
-                  else if (val.equals("edtr.edtr.ea")) {
-                    _sbvalue.append(authAuthEa(_entry.getField("editor").toString()));
-                  }
-                  else if (val.equals("edtrshort")) {
-                    _sbvalue.append(authshort(_entry.getField("editor").toString()));
-                  }
-                  // 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 ( num > fa.length() )
-                      num = fa.length();
-                    _sbvalue.append(fa.substring(0,num));
-                  }
-                  // Last editor's last name
-                  else if (val.equals("editorLast")) {
-                      _sbvalue.append(lastAuthor((String)(_entry.getField("editor"))));
-                  }
-                  else {
-                    // This "ed" business was a dead end, so just use it literally:
-                    _sbvalue.append(_entry.getField(val).toString());
-                  }
-                }
-                else if (val.equals("firstpage")) {
-                  _sbvalue.append(firstPage(_entry.getField("pages").toString()));
-                }
-
-                else if (val.equals("lastpage")) {
-                  _sbvalue.append(lastPage(_entry.getField("pages").toString()));
-                }
-                else if (val.equals("shorttitle")) {
-                  _sbvalue.append(getTitleWords(3, _entry));
-                }
-                else if (val.equals("shortyear")) {
-                  String ss = _entry.getField("year").toString();
-                  if (ss.startsWith("in") || ss.startsWith("sub")) {
-                    _sbvalue.append("IP");
-                  }
-                  else if (ss.length() > 2) {
-                    _sbvalue.append(ss.substring(ss.length() - 2));
-                  }
-                  else {
-                    _sbvalue.append(ss);
-                  }
-                }
-
-                else if(val.equals("veryshorttitle")) {
-                  _sbvalue.append(getTitleWords(1, _entry));
-                }
-
-               else if (val.matches("keyword\\d+")) {
-                    int num = Integer.parseInt(val.substring(7));
-                    String kw = _entry.getField("keywords").toString();
-                    if (kw != null) {
-                        String[] keywords = kw.split("[,;]\\s*");
-                        if ((num > 0) && (num < keywords.length))
-                            _sbvalue.append(keywords[num-1].trim());
-                    }
-               }
+    }
 
-                // we havent seen any special demands
-                else {
-                  _sbvalue.append(_entry.getField(val).toString());
+    /**
+     * Generates a BibTeX label according to the pattern for a given entry type, and
+     * returns the <code>Bibtexentry</code> with the unique label.
+     * @param table a <code>LabelPattern</code>
+     * @param database a <code>BibtexDatabase</code>
+     * @param _entry a <code>BibtexEntry</code>
+     * @return modified Bibtexentry
+     */
+    public static BibtexEntry makeLabel(LabelPattern table,
+        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 corrosponding to the type
+            _al = table.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 = val.split(":");
+                    
+                    String label = makeLabel(_entry, parts[0]);
+                    
+                    // apply modifier if present
+                    if (parts.length > 1)
+                        for (int j = 1; j < parts.length; j++) {
+                            String modifier = parts[j];
+
+                            if (modifier.equals("lower")) {
+                                label = label.toLowerCase();
+                            } 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 {
+                                Globals
+                                    .logger("Key generator warning: unknown modifier '"
+                                        + modifier + "'.");
+                            }
+                        }
+
+                    _sb.append(label);
+
+                } else {
+                    _sb.append(val);
                 }
             }
-            catch (NullPointerException ex) {
-                    //Globals.logger("Key generator warning: field '" + val + "' empty.");
-            }
-            // apply modifier if present
-        if (parts.length > 1) for (int j=1; j<parts.length; j++) {
-            String modifier = parts[j];
+        } catch (Exception e) {
+            System.err.println(e);
+        }
 
-            if(modifier.equals("lower")) {
-                String tmp = _sbvalue.toString().toLowerCase();
-                _sbvalue = new StringBuffer(tmp);
-                    }
-            else if (modifier.equals("abbr")) {
-                // Abbreviate - that is,
-                //System.out.println(_sbvalue.toString());
-                StringBuffer abbr = new StringBuffer();
-                String[] words = _sbvalue.toString().replaceAll("[\\{\\}']","")
-                        .split("[ \r\n\"]");//split("\\b");
-                for (int word=0; word<words.length; word++)
-                    if (words[word].length() > 0)
-                        abbr.append(words[word].charAt(0));
-                _sbvalue = abbr;
-            }
-            else {
-                        Globals.logger("Key generator warning: unknown modifier '"+modifier+"'.");
-                    }
-            }
 
-        _sb.append(_sbvalue);
+        // 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();
         }
-        else {
-          _sb.append(val);
+        if (forceLower) {
+            _label = _label.toLowerCase();
         }
-      }
-    }
 
-    catch (Exception e) {
-      System.err.println(e);
-    }
+        String oldKey = _entry.getCiteKey();
+        int occurences = _db.getNumberOfKeyOccurences(_label);
 
-    /**
-     * Edited by Morten Alver 2004.02.04.
-     *
-     * We now have a system for easing key duplicate prevention, so
-     * I am changing this method to conform to it.
-     *
+        if ((oldKey != null) && oldKey.equals(_label))
+            occurences--; // No change, so we can accept one dupe.
 
-        // here we make sure the key is unique
-       _label = makeLabelUnique(_sb.toString());
-       _entry.setField(Globals.KEY_FIELD, _label);
-       return _entry;
-     */
+        if (occurences == 0) {
+            // No dupes found, so we can just go ahead.
+            if (!_label.equals(oldKey))
+                _db.setCiteKeyForEntry(_entry.getId(), _label);
 
-    // Remove all illegal characters from the key.
-    _label = Util.checkLegalKey(_sb.toString());
+        } else {
+            // The key is already in use, so we must modify it.
+            int number = 0;
 
-    // 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);
-    }
+            String moddedKey = _label + getAddition(number);
+            occurences = _db.getNumberOfKeyOccurences(moddedKey);
 
-    if (forceUpper) {
-      _label = _label.toUpperCase();
-    }
-    if (forceLower) {
-      _label = _label.toLowerCase();
-    }
+            if ((oldKey != null) && oldKey.equals(moddedKey))
+                occurences--;
 
+            while (occurences > 0) {
+                number++;
+                moddedKey = _label + getAddition(number);
 
-    String oldKey = _entry.getCiteKey();
-    int occurences = _db.getNumberOfKeyOccurences(_label);
-    if ((oldKey != null) && oldKey.equals(_label))
-        occurences--; // No change, so we can accept one dupe.
+                occurences = _db.getNumberOfKeyOccurences(moddedKey);
+                if ((oldKey != null) && oldKey.equals(moddedKey))
+                    occurences--;
+            }
 
-    // Try new keys until we get a unique one:
-    //if (_db.setCiteKeyForEntry(_entry.getId(), _label)) {
+            if (!moddedKey.equals(oldKey)) {
+                _db.setCiteKeyForEntry(_entry.getId(), moddedKey);
+            }
+        }
 
-    if (occurences == 0) {
-        // No dupes found, so we can just go ahead.
-        if (!_label.equals(oldKey))
-            _db.setCiteKeyForEntry(_entry.getId(), _label);
-        
+        return _entry;
+        /** End of edit, Morten Alver 2004.02.04.  */
     }
-    else {
-
-        // The key is already in use, so we must modify it.
-        int number = 0;
 
-        String moddedKey = _label+getAddition(number);
-        occurences = _db.getNumberOfKeyOccurences(moddedKey);
-        if ((oldKey != null) && oldKey.equals(moddedKey))
-            occurences--;
-        while (occurences > 0) {
-            number++;
-            moddedKey = _label+getAddition(number);
+    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");
+                    }
+                }
 
-            occurences = _db.getNumberOfKeyOccurences(moddedKey);
-            if ((oldKey != null) && oldKey.equals(moddedKey))
-                occurences--;
-        }
+                // 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);
+                }
+                // Last author's last name
+                else if (val.equals("authorLast")) {
+                   return lastAuthor(authString);
+                } else if (val.equals("authorIni")) {
+                    return oneAuthorPlusIni(authString);
+                } else if (val.matches("authIni[\\d]+")) {
+                    int num = Integer.parseInt(val.substring(7));
+                    return authIniN(authString, num);
+                } else if (val.equals("auth.auth.ea")) {
+                    return authAuthEa(authString);
+                } else if (val.equals("auth.etal")) {
+                    return authEtal(authString);
+                } else if (val.equals("authshort")) {
+                    return authshort(authString);
+                } else if (val.matches("auth[\\d]+_[\\d]+")) {
+                    String[] nums = val.substring(4).split("_");
+                    return authN_M(authString, Integer.parseInt(nums[0]),
+                        Integer.parseInt(nums[1]) - 1);
+                } else if (val.matches("auth\\d+")) {
+                    // authN. First N chars of the first author's last
+                    // name.
 
-        /*
-        char c = 'b';
-        String modKey = _label + "a";
-        occurences = _db.getNumberOfKeyOccurences(modKey);
-        if ((oldKey != null) && oldKey.equals(modKey))
-            occurences--;
-        //while (_db.setCiteKeyForEntry(_entry.getId(), modKey)) {
-        while (occurences > 0) {
-            modKey = _label + ( (char) (c++));
-
-            occurences = _db.getNumberOfKeyOccurences(modKey);
-            if ((oldKey != null) && oldKey.equals(modKey))
-                occurences--;
+                    int num = Integer.parseInt(val.substring(4));
+                    String fa = firstAuthor(authString);
+                    if (num > fa.length())
+                        num = fa.length();
+                    return fa.substring(0, num);
+                } else if (val.matches("authors\\d+")) {
+                    return NAuthors(authString, Integer.parseInt(val
+                        .substring(7)));
+                } 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")) {
+                    return oneAuthorPlusIni(_entry.getField("editor")
+                        .toString());
+                } else if (val.matches("edtrIni[\\d]+")) {
+                    int num = Integer.parseInt(val.substring(7));
+                    return authIniN(_entry.getField("editor").toString(), num);
+                } else if (val.matches("edtr[\\d]+_[\\d]+")) {
+                    String[] nums = val.substring(4).split("_");
+                    return authN_M(_entry.getField("editor").toString(),
+                        Integer.parseInt(nums[0]),
+                        Integer.parseInt(nums[1]) - 1);
+                } else if (val.equals("edtr.edtr.ea")) {
+                    return authAuthEa(_entry.getField("editor").toString());
+                } else if (val.equals("edtrshort")) {
+                    return authshort(_entry.getField("editor").toString());
+                }
+                // 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 (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) {
+                    String[] keywords = kw.split("[,;]\\s*");
+                    if ((num > 0) && (num < keywords.length))
+                        sb.append(keywords[num - 1].trim());
+                }
+                return sb.toString();
+            } else {
+                // we havent seen any special demands
+                return getField(_entry, val);
+            }
+        } catch (NullPointerException ex) {
+            return "";
         }
-        */
 
-        if (!moddedKey.equals(oldKey))  {
-            _db.setCiteKeyForEntry(_entry.getId(), moddedKey);
-        }
     }
-    
-    return _entry;
-    /** End of edit, Morten Alver 2004.02.04.  */
 
-  }
+    /**
+     * 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.
+     * 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) {
-        String s = "";
         if (number >= CHARS.length()) {
             int lastChar = number % CHARS.length();
             return getAddition(number/CHARS.length()-1) + CHARS.substring(lastChar, lastChar+1);
@@ -454,342 +406,404 @@ public class LabelPatternUtil {
 
 
     static String getTitleWords(int number, BibtexEntry _entry) {
-    String ss = (new RemoveLatexCommands()).format(_entry.getField("title").toString());
-    StringBuffer _sbvalue = new StringBuffer(),
+        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))) {
-        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;
+        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))) {
+                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++;
         }
-      }
 
-      // If we get here, the word was accepted.
-      if (_sbvalue.length() > 0)
-        _sbvalue.append(" ");
-      _sbvalue.append(word);
-      words++;
+        return _sbvalue.toString();
     }
 
-    return _sbvalue.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;
+    /**
+     * 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 sur name of an author/editor
-   */
-  private static String firstAuthor(String authorField) {
-    String[] tokens = AuthorList.fixAuthorForAlphabetization(authorField).split("\\band\\b");
-    if (tokens.length > 0) { // if author is empty
-      String[] firstAuthor = tokens[0].replaceAll("\\s+", " ").split(" ");
-      return firstAuthor[0];
+    }
 
+    /**
+     * 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
+     * 
+     * @throws NullPointerException
+     *             if authorField == null
+     */
+    public static String firstAuthor(String authorField) {
+        AuthorList al = AuthorList.getAuthorList(authorField);
+        if (al.size() == 0)
+            return "";
+        return al.getAuthor(0).getLast();
     }
-    else return "";
-  }
+
 
     /**
-       * 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) {
+     * 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];
+            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;
-  }
-
-  /**
-   * 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;
+
+    /**
+     * 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;
     }
-    String[] firstAuthor = tokens[0].replaceAll("\\s+", " ").split(" ");
-    author = firstAuthor[0].substring(0,
-                                      (int) 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++;
+
+    /**
+     * 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";
     }
-    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 "";
+
+    /**
+     * 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;
+
     }
-    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 "";
+
+    /**
+     * 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();
     }
-    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);
-    StringBuffer author = new StringBuffer();
-
-    String[] tokens = authorField.split("\\band\\b");
-    if ((tokens.length <= m) || (n<0) || (m<0)) {
-      return "";
+
+    /**
+     * 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);
     }
-    String lastName = (tokens[m].split(","))[0].trim();
-    //System.out.println(lastName);
-    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("+");
 
+    /**
+     * 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();
     }
 
-    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 fist N authors get mentioned.
-   * 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
-   * E.g. authIni4 gives: a) NMEB, b) NeME, c) NeMa, d) Newt
-   */
-  private static String authIniN(String authorField, int n) {
-    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();
+    /**
+     * 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);
     }
 
-    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++;
+
+    /**
+     * 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);
     }
 
-    if (author.length() <= n)
-      return author.toString();
-    else
-      return author.toString().substring(0, n);
-  }
-
-
-  /**
-   * Split the pages field into two and return the first one
-   * @param pages a <code>String</code>
-   * @return the first page number
-   */
-  private static String firstPage(String pages) {
-    String[] _pages = pages.split("-");
-    return _pages[0];
-  }
-
-  /**
-   * Split the pages field into two and return the last one
-   * @param pages a <code>String</code>
-   * @return the last page number
-   */
-  private static String lastPage(String pages) {
-    String[] _pages = pages.split("-");
-    return _pages[1];
-  }
+    /**
+     * 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);
+    }
 
 }
diff --git a/src/java/net/sf/jabref/mods/MODSDatabase.java b/src/java/net/sf/jabref/mods/MODSDatabase.java
index 74bdc30..0806db3 100644
--- a/src/java/net/sf/jabref/mods/MODSDatabase.java
+++ b/src/java/net/sf/jabref/mods/MODSDatabase.java
@@ -1,44 +1,48 @@
 /*
  * Created on Oct 23, 2004
  *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
  */
 package net.sf.jabref.mods;
-import net.sf.jabref.*;
-import java.util.*;
-import javax.xml.parsers.*;
-import org.w3c.dom.*;
+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
  *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
  */
 public class MODSDatabase {
-	protected Set entries;
+	protected Set<MODSEntry> entries;
 	
 	public MODSDatabase() {
 		// maybe make this sorted later...
-		entries = new HashSet();
+		entries = new HashSet<MODSEntry>();
 	}
 	
 	public MODSDatabase(BibtexDatabase bibtex) {
-		Set keySet = bibtex.getKeySet();
-        addEntries(bibtex, keySet);
+        addEntries(bibtex, bibtex.getKeySet());
     }
 
-    public MODSDatabase(BibtexDatabase bibtex, Set keySet) {
+    public MODSDatabase(BibtexDatabase bibtex, Set<String> keySet) {
         if (keySet == null)
             keySet = bibtex.getKeySet();
         addEntries(bibtex, keySet);
     }
 
-
-    private void addEntries(BibtexDatabase database, Set keySet) {
-        entries = new HashSet();
-        for(Iterator iter = keySet.iterator(); iter.hasNext(); ) {
-			BibtexEntry entry = database.getEntryById((String)iter.next());
+    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);
 		}
@@ -55,8 +59,8 @@ public class MODSDatabase {
 	   		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 iter = entries.iterator(); iter.hasNext(); ) {
-	   			MODSEntry entry = (MODSEntry) iter.next();
+	   		for(Iterator<MODSEntry> iter = entries.iterator(); iter.hasNext(); ) {
+	   			MODSEntry entry = iter.next();
 	   			Node node = entry.getDOMrepresentation(result);
 	   			modsCollection.appendChild(node);
 	   		}
diff --git a/src/java/net/sf/jabref/mods/MODSEntry.java b/src/java/net/sf/jabref/mods/MODSEntry.java
index 8995322..0dc1229 100644
--- a/src/java/net/sf/jabref/mods/MODSEntry.java
+++ b/src/java/net/sf/jabref/mods/MODSEntry.java
@@ -1,26 +1,32 @@
 package net.sf.jabref.mods;
-import net.sf.jabref.*;
-import net.sf.jabref.export.layout.format.*;
-import net.sf.jabref.export.layout.*;
-
-import javax.xml.parsers.*;
-import javax.xml.transform.*;
-import javax.xml.transform.dom.*;
-import javax.xml.transform.stream.*;
-import org.w3c.dom.*;
+import java.io.StringWriter;
 import java.util.*;
-import java.io.*;
+
+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
  *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
  */
 public class MODSEntry {
 	protected String entryType = "mods"; // could also be relatedItem
 	protected String id;
-	protected List authors = null;
-	protected List editors = null;
+	protected List<PersonName> authors = null;
+
 	// should really be handled with an enum
 	protected String issuance = "monographic";
 	protected PageNumbers pages = null;
@@ -36,18 +42,18 @@ public class MODSEntry {
 	protected String number;
 	protected String volume;
 	protected String genre = null;
-	protected Set handledExtensions;
+	protected Set<String> handledExtensions;
 	
 	protected MODSEntry host;
-	Map extensionFields;
+	Map<String, String> extensionFields;
 	
 	public static String BIBTEX = "bibtex_";
 	
 	private final boolean CHARFORMAT = false;
 	
 	public MODSEntry() {
-		extensionFields = new HashMap();
-		handledExtensions = new HashSet();
+		extensionFields = new HashMap<String, String>();
+		handledExtensions = new HashSet<String>();
 	
 	}
 	
@@ -94,14 +100,14 @@ public class MODSEntry {
 		{
 			host = new MODSEntry();
 			host.entryType = "relatedItem";
-			host.title = (String) bibtex.getField("booktitle");
-			host.publisher = (String) bibtex.getField("publisher");
-			host.number = (String) bibtex.getField("number");
+			host.title = bibtex.getField("booktitle");
+			host.publisher = bibtex.getField("publisher");
+			host.number = bibtex.getField("number");
 			if (bibtex.getField("pages") != null)
-				host.volume = (String) bibtex.getField("volume");
+				host.volume = bibtex.getField("volume");
 			host.issuance = "continuing";
 			if (bibtex.getField("pages") != null)
-				host.pages = new PageNumbers((String) bibtex.getField("pages"));
+				host.pages = new PageNumbers(bibtex.getField("pages"));
 		}
 		
 		populateExtensionFields(bibtex);
@@ -109,17 +115,16 @@ public class MODSEntry {
 	}
 	
 	protected void populateExtensionFields(BibtexEntry e) {
-		Object fields [] = e.getAllFields();
-		for(int i = 0; i < fields.length; i++) {
-			String field = (String) fields[i];
-			String value = (String) e.getField(field);
+		
+		for (String field : e.getAllFields()){
+			String value = e.getField(field);
 			field = BIBTEX + field;
 			extensionFields.put(field, value);
 		}
 	}
 	
-	protected List getAuthors(String authors) {
-		List result = new LinkedList();
+	protected List<PersonName> getAuthors(String authors) {
+		List<PersonName> result = new LinkedList<PersonName>();
 		LayoutFormatter chars = new XMLChars();
 		
 		if (authors.indexOf(" and ") == -1) {
@@ -154,21 +159,19 @@ public class MODSEntry {
 	// must be from http://www.loc.gov/marc/sourcecode/genre/genrelist.html
 	protected String getMODSgenre(BibtexEntry bibtex) {
 		String bibtexType = bibtex.getType().getName();
-		String result;
-		if (bibtexType.equals("Mastersthesis"))
-			result = "theses";
-		else
-			result = "conference publication";
-		// etc...
+		/**
+		 * <pre> String result; if (bibtexType.equals("Mastersthesis")) result =
+		 * "theses"; else result = "conference publication"; // etc... </pre>
+		 */
 		return bibtexType;		
 	}
 	
-	public Document getDOMrepresentation() {
-		Document result = null;
+	public Node getDOMrepresentation() {
+		Node result = null;
 		try {
 			DocumentBuilder d = DocumentBuilderFactory.newInstance().newDocumentBuilder();
 			
-		//	result = getDOMrepresentation(d);
+			result = getDOMrepresentation(d.newDocument());
 		}
 		catch (Exception e) 
 		{
@@ -179,7 +182,6 @@ public class MODSEntry {
 		
 	
 	public Element getDOMrepresentation(Document d) {
-		Node result = null;
 	   	try {
 	   		Element mods = d.createElement(entryType);
 	   		mods.setAttribute("version", "3.0");
@@ -193,8 +195,8 @@ public class MODSEntry {
 		   		mods.appendChild(titleInfo);
 	   		}
 	   		if (authors != null) {
-	   			for(Iterator iter = authors.iterator(); iter.hasNext();) {
-	   				PersonName name = (PersonName) iter.next();
+	   			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) {
@@ -263,11 +265,10 @@ public class MODSEntry {
 	   		}
 	   		
 	   		/* now generate extension fields for unhandled data */
-	   		for(Iterator iter = extensionFields.entrySet().iterator(); iter.hasNext(); ) {
+	   		for(Map.Entry<String, String> theEntry : extensionFields.entrySet()){
 	   			Element extension = d.createElement("extension");
-	   			Map.Entry theEntry = (Map.Entry) iter.next();
-	   			String field = (String) theEntry.getKey();
-	   			String value = (String) theEntry.getValue();
+	   			String field = theEntry.getKey();
+	   			String value = theEntry.getValue();
 	   			if (handledExtensions.contains(field))
 	   				continue;
 	   			Element theData = d.createElement(field);
@@ -319,6 +320,7 @@ public class MODSEntry {
 
 	/*
 	 * render as XML
+	 * 
 	 */
 	public String toString() {
 		StringWriter sresult = new StringWriter();
diff --git a/src/java/net/sf/jabref/mods/PageNumbers.java b/src/java/net/sf/jabref/mods/PageNumbers.java
index 3bc0c02..a7db178 100644
--- a/src/java/net/sf/jabref/mods/PageNumbers.java
+++ b/src/java/net/sf/jabref/mods/PageNumbers.java
@@ -2,27 +2,18 @@
  * Created on Oct 29, 2004
  * Updated on May 03, 2007
  *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
  */
 package net.sf.jabref.mods;
-import net.sf.jabref.export.layout.format.*;
-import net.sf.jabref.export.layout.*;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
-import javax.xml.parsers.*;
-import javax.xml.transform.*;
-import javax.xml.transform.dom.*;
-import javax.xml.transform.stream.*;
-import org.w3c.dom.*;
-import java.util.*;
-import java.io.*;
-import java.util.regex.*;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
 /**
  * @author Michael Wrighton
  * @author S M Mahbub Murshed
  *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
  */
 public class PageNumbers {
 	String freeform = null;
diff --git a/src/java/net/sf/jabref/mods/PersonName.java b/src/java/net/sf/jabref/mods/PersonName.java
index 1d87831..a643eb9 100644
--- a/src/java/net/sf/jabref/mods/PersonName.java
+++ b/src/java/net/sf/jabref/mods/PersonName.java
@@ -2,8 +2,6 @@
  * Created on Oct 25, 2004
  * Updated on May 03, 2007
  *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
  */
 package net.sf.jabref.mods;
 
@@ -16,9 +14,6 @@ import net.sf.jabref.AuthorList;
 /**
  * @author Michael Wrighton, S M Mahbub Murshed
  *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- * 
  * S M Mahbub Murshed : added few functions for convenience. May 15, 2007
  */
 public class PersonName {
@@ -41,21 +36,21 @@ public class PersonName {
 
     protected void parseName(String author) {
             // TODO: replace special characters
-            Vector v = new Vector();
+            Vector<String> v = new Vector<String>();
             String authorMod = AuthorList.fixAuthor_firstNameFirst(author);
 
             WSITools.tokenize(v, authorMod, " \n\r");
 
             if (v.size() == 1)
-                surname = (String) v.get(0);
+                surname = v.get(0);
             else if (v.size() == 2) {
-                givenName = (String) v.get(0);
-                surname = (String) v.get(1);
+                givenName = v.get(0);
+                surname = v.get(1);
             }
             else {
-                givenName = (String) v.get(0);
-                middleName = (String) v.get(1);
-                surname = (String) v.get(2);
+                givenName = v.get(0);
+                middleName = v.get(1);
+                surname = v.get(2);
             }
     }
 
diff --git a/src/java/net/sf/jabref/msbib/MSBibDatabase.java b/src/java/net/sf/jabref/msbib/MSBibDatabase.java
index 784fb42..bb15b8b 100644
--- a/src/java/net/sf/jabref/msbib/MSBibDatabase.java
+++ b/src/java/net/sf/jabref/msbib/MSBibDatabase.java
@@ -4,12 +4,20 @@
  * */
 
 package net.sf.jabref.msbib;
-import net.sf.jabref.*;
-import java.util.*;
-import java.io.InputStream;
 import java.io.IOException;
-import javax.xml.parsers.*;
-import org.w3c.dom.*;
+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
@@ -25,11 +33,11 @@ import org.w3c.dom.*;
  * May 15, 2007 - Added suport for import
  */
 public class MSBibDatabase {
-	protected Set entries;
+	protected Set<MSBibEntry> entries;
 	
 	public MSBibDatabase() {
 		// maybe make this sorted later...
-		entries = new HashSet();
+		entries = new HashSet<MSBibEntry>();
 	}
 	
 	public MSBibDatabase(InputStream stream) throws IOException {
@@ -37,19 +45,19 @@ public class MSBibDatabase {
     }
 
 	public MSBibDatabase(BibtexDatabase bibtex) {
-		Set keySet = bibtex.getKeySet();
+		Set<String> keySet = bibtex.getKeySet();
         addEntries(bibtex, keySet);
     }
 
-    public MSBibDatabase(BibtexDatabase bibtex, Set keySet) {
+    public MSBibDatabase(BibtexDatabase bibtex, Set<String> keySet) {
         if (keySet == null)
             keySet = bibtex.getKeySet();
         addEntries(bibtex, keySet);
     }
 
-    public List importEntries(InputStream stream) throws IOException {
-    	entries = new HashSet();	
-    	ArrayList bibitems = new ArrayList();
+    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.
@@ -81,10 +89,10 @@ public class MSBibDatabase {
    		return bibitems;
     }
 
-    private void addEntries(BibtexDatabase database, Set keySet) {
-        entries = new HashSet();
-        for(Iterator iter = keySet.iterator(); iter.hasNext(); ) {
-			BibtexEntry entry = database.getEntryById((String)iter.next());
+    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);
 		}
@@ -101,8 +109,8 @@ public class MSBibDatabase {
 	   		msbibCollection.setAttribute("xmlns", "http://schemas.openxmlformats.org/officeDocument/2006/bibliography");
 	   		msbibCollection.setAttribute("xmlns:b", "http://schemas.openxmlformats.org/officeDocument/2006/bibliography");	   			   		 
 	   		
-	   		for(Iterator iter = entries.iterator(); iter.hasNext(); ) {
-	   			MSBibEntry entry = (MSBibEntry) iter.next();
+	   		for(Iterator<MSBibEntry> iter = entries.iterator(); iter.hasNext(); ) {
+	   			MSBibEntry entry = iter.next();
 	   			Node node = entry.getDOMrepresentation(result);
 	   			msbibCollection.appendChild(node);
 	   		}
diff --git a/src/java/net/sf/jabref/msbib/MSBibEntry.java b/src/java/net/sf/jabref/msbib/MSBibEntry.java
index 1120846..2ae9e56 100644
--- a/src/java/net/sf/jabref/msbib/MSBibEntry.java
+++ b/src/java/net/sf/jabref/msbib/MSBibEntry.java
@@ -3,19 +3,34 @@
  * Updated on May 03, 2007
  * */
 package net.sf.jabref.msbib;
-import net.sf.jabref.*;
-import net.sf.jabref.export.layout.format.*;
-import net.sf.jabref.export.layout.*;
-import net.sf.jabref.mods.*;
-
-import javax.xml.parsers.*;
-import javax.xml.transform.*;
-import javax.xml.transform.dom.*;
-import javax.xml.transform.stream.*;
-import org.w3c.dom.*;
-import java.util.*;
-import java.io.*;
-import java.util.regex.*;
+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
@@ -43,21 +58,21 @@ public class MSBibEntry {
 	protected String GUID = null;
 	protected int LCID = -1;
 
-	protected List authors = null;
-	protected List bookAuthors = null;
-	protected List editors = null;
-	protected List translators = null;
-	protected List producerNames = null;
-	protected List composers = null;
-	protected List conductors = null;
-	protected List performers = null;
-	protected List writers = null;
-	protected List directors = null;
-	protected List compilers = null;
-	protected List interviewers = null;
-	protected List interviewees = null;
-	protected List inventors = null;
-	protected List counsels = null;
+	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;
@@ -458,8 +473,8 @@ public class MSBibEntry {
 		return language;
 	}
 	
-	protected List getSpecificAuthors(String type, Element authors, String _bcol) {
-		List result = null;
+	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;
@@ -470,7 +485,7 @@ public class MSBibEntry {
 		if(person.getLength()<=0)
 			return result;
 
-		result = new LinkedList();
+		result = new LinkedList<PersonName>();
 		for(int i=0;i<person.getLength();i++)
 		{
 			NodeList firstName  = ((Element)(person.item(i))).getElementsByTagName(_bcol+"First");
@@ -507,15 +522,11 @@ public class MSBibEntry {
 		counsels = getSpecificAuthors("Counsel",authorsElem,_bcol);		
 	}
 
-	protected List getAuthors(String authors) {
-		List result = new LinkedList();
-		LayoutFormatter chars = new XMLChars();
+	protected List<PersonName> getAuthors(String authors) {
+		List<PersonName> result = new LinkedList<PersonName>();
 		
 		if (authors.indexOf(" and ") == -1)
 		{
-//			if(FORMATXML)
-//				result.add(new PersonName(chars.format(authors)));
-//			else
 				result.add(new PersonName(authors));
 		}
         else
@@ -523,9 +534,6 @@ public class MSBibEntry {
             String[] names = authors.split(" and ");
             for (int i=0; i<names.length; i++)
             {
-//            	if(FORMATXML)
-//            		result.add(new PersonName(chars.format(names[i])));
-//            	else
             		result.add(new PersonName(names[i]));
             }
         }
@@ -588,12 +596,12 @@ public class MSBibEntry {
 		return result;
 	}
 	
-	public Document getDOMrepresentation() {
-		Document result = null;
+	public Node getDOMrepresentation() {
+		Node result = null;
 		try {
 			DocumentBuilder d = DocumentBuilderFactory.newInstance().newDocumentBuilder();
 			
-		//	result = getDOMrepresentation(d);
+			result = getDOMrepresentation(d.newDocument());
 		}
 		catch (Exception e) 
 		{
@@ -601,29 +609,6 @@ public class MSBibEntry {
 		}
 		return result;
 	}
-	
-//	private String healXML(String value)
-//	{
-//		String healedValue = value;
-//
-////		if(value.contains("A net energy gain"))
-////			System.out.println(value);
-////		restore converted html-char
-//		Pattern p = Pattern.compile("&#([0-9A-Fa-f]{2,4});");
-//		// Pattern p = Pattern.compile("&#(\\d{1,4});");
-//		Matcher m = p.matcher(healedValue);
-//		while (m.find())
-//		{
-//			int n = Integer.parseInt(m.group(1),16);
-//			char ch = Character.forDigit(n,10);
-//			System.out.println(m.group(1));
-//			System.out.println(""+n);
-//			System.out.println(""+ch);			
-//			healedValue = healedValue.replaceAll("\\&#"+m.group(1)+";",""+ch);
-//		}
-//		
-//		return healedValue;
-//	}
 
 	public void addField(Document d,Element parent, String name, String value) {
 		if(value == null)
@@ -639,13 +624,13 @@ public class MSBibEntry {
 		parent.appendChild(elem);
 	}
 
-	public void addAuthor(Document d, Element allAuthors, String entryName, List authorsLst) {
+	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 iter = authorsLst.iterator(); iter.hasNext();) {
-			PersonName name = (PersonName) iter.next();
+		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());
@@ -699,7 +684,7 @@ public class MSBibEntry {
 	}
 
 	public Element getDOMrepresentation(Document d) {
-		Node result = null;		
+	
 	   	try {
 	   		Element msbibEntry = d.createElement(bcol+"Source");
 
@@ -800,7 +785,7 @@ public class MSBibEntry {
 	   	// return null;
 	   }
 	
-	protected void parseSingleStandardNumber(String type,String bibtype, String standardNum, HashMap hm) {
+	protected void parseSingleStandardNumber(String type,String bibtype, String standardNum, HashMap<String, String> hm) {
 		// teste using http://www.javaregex.com/test.html
 		Pattern p = Pattern.compile(":"+type+":(.[^:]+)");
 		Matcher m = p.matcher(standardNum);
@@ -808,7 +793,7 @@ public class MSBibEntry {
 			hm.put(bibtype,m.group(1));
 	}
 
-	protected void parseStandardNumber(String standardNum, HashMap hm) {
+	protected void parseStandardNumber(String standardNum, HashMap<String, String> hm) {
 		if(standardNumber == null)
 			return;
 		parseSingleStandardNumber("ISBN","ISBN",standardNum,hm);
@@ -817,13 +802,13 @@ public class MSBibEntry {
 		parseSingleStandardNumber("MRN","mrnumber",standardNum,hm);
 	}
 
-	public void addAuthor(HashMap hm, String type, List authorsLst) {
+	public void addAuthor(HashMap<String, String> hm, String type, List<PersonName> authorsLst) {
 		if(authorsLst == null)
 			return;
 		String allAuthors = "";
 		boolean First = true;
-		for(Iterator iter = authorsLst.iterator(); iter.hasNext();) {
-			PersonName name = (PersonName) iter.next();
+		for(Iterator<PersonName> iter = authorsLst.iterator(); iter.hasNext();) {
+			PersonName name = iter.next();
 			if(First == false)
 				allAuthors += " and ";
 			allAuthors += name.getFullname();
@@ -977,7 +962,7 @@ public class MSBibEntry {
 //		else
 //			entry.setType(BibtexEntryType.MISC);
 
-		HashMap hm = new HashMap();
+		HashMap<String, String> hm = new HashMap<String, String>();
 		
 		if(tag != null)
 			hm.put("bibtexkey",tag);
@@ -1143,6 +1128,8 @@ public class MSBibEntry {
 
 	/*
 	 * render as XML
+	 * 
+	 * TODO This is untested.
 	 */
 	public String toString() {
 		StringWriter sresult = new StringWriter();
diff --git a/src/java/net/sf/jabref/net/URLDownload.java b/src/java/net/sf/jabref/net/URLDownload.java
index 099e22f..cb5ec32 100644
--- a/src/java/net/sf/jabref/net/URLDownload.java
+++ b/src/java/net/sf/jabref/net/URLDownload.java
@@ -5,13 +5,7 @@
 package net.sf.jabref.net;
 
 import java.awt.Component;
-import java.io.BufferedInputStream;
-import java.io.BufferedOutputStream;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
+import java.io.*;
 import java.net.URL;
 import java.net.URLConnection;
 
@@ -64,7 +58,6 @@ public class URLDownload {
       {
         InputStream _in = new ProgressMonitorInputStream(parent, "Downloading " + source.toString(), in);
         byte[] buffer = new byte[512];
-        int reps=0;
         while(true)
         {
             int bytesRead = _in.read(buffer);
diff --git a/src/java/net/sf/jabref/plugin/PluginCore.java b/src/java/net/sf/jabref/plugin/PluginCore.java
new file mode 100644
index 0000000..c94ada4
--- /dev/null
+++ b/src/java/net/sf/jabref/plugin/PluginCore.java
@@ -0,0 +1,185 @@
+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 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"));
+
+            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/SidePanePlugin.java b/src/java/net/sf/jabref/plugin/SidePanePlugin.java
new file mode 100644
index 0000000..89dd867
--- /dev/null
+++ b/src/java/net/sf/jabref/plugin/SidePanePlugin.java
@@ -0,0 +1,25 @@
+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
new file mode 100644
index 0000000..941a806
--- /dev/null
+++ b/src/java/net/sf/jabref/plugin/core/JabRefPlugin.java
@@ -0,0 +1,43 @@
+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;
+		}
+	}
+}
\ No newline at end of file
diff --git a/src/java/net/sf/jabref/plugin/core/generated/_JabRefPlugin.java b/src/java/net/sf/jabref/plugin/core/generated/_JabRefPlugin.java
new file mode 100644
index 0000000..d3c1b88
--- /dev/null
+++ b/src/java/net/sf/jabref/plugin/core/generated/_JabRefPlugin.java
@@ -0,0 +1,355 @@
+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 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 59b354e..6cfe151 100644
--- a/src/java/net/sf/jabref/remote/RemoteListener.java
+++ b/src/java/net/sf/jabref/remote/RemoteListener.java
@@ -1,18 +1,22 @@
 package net.sf.jabref.remote;
 
-import net.sf.jabref.JabRef;
-import net.sf.jabref.BasePanel;
-import net.sf.jabref.Globals;
-import net.sf.jabref.gui.ImportInspectionDialog;
-import net.sf.jabref.imports.ParserResult;
-
-import java.net.*;
 import java.io.IOException;
-import java.io.OutputStream;
 import java.io.InputStream;
-import java.util.Vector;
-import java.util.List;
+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;
 
 /**
  * Created by IntelliJ IDEA.
@@ -21,7 +25,7 @@ import java.util.ArrayList;
  * Time: 8:11:58 PM
  * To change this template use File | Settings | File Templates.
  */
-public class RemoteListener extends Thread implements ImportInspectionDialog.CallBack {
+public class RemoteListener extends Thread {
 
     private JabRef jabref;
     private ServerSocket socket;
@@ -53,8 +57,6 @@ public class RemoteListener extends Thread implements ImportInspectionDialog.Cal
                     active = false;
                     return;
                 }
-                //byte[] address = socket.getInetAddress().getAddress();
-                //System.out.println("Connection: "+address[0]+" "+address[1]+" "+address[2]+" "+address[3]);
 
                 OutputStream out = newSocket.getOutputStream();
                 InputStream in = newSocket.getInputStream();
@@ -72,10 +74,10 @@ public class RemoteListener extends Thread implements ImportInspectionDialog.Cal
                         continue;
                     }
                     String[] args = sb.toString().split("\n");
-                    Vector loaded = jabref.processArguments(args, false);
+                    Vector<ParserResult> loaded = jabref.processArguments(args, false);
 
                     for (int i=0; i<loaded.size(); i++) {
-                        ParserResult pr = (ParserResult) loaded.elementAt(i);
+                        ParserResult pr = loaded.elementAt(i);
                         if (!pr.toOpenTab()) {
                             jabref.jrf.addTab(pr.getDatabase(), pr.getFile(), pr.getMetaData(), pr.getEncoding(), (i == 0));
                         } else {
@@ -85,8 +87,8 @@ public class RemoteListener extends Thread implements ImportInspectionDialog.Cal
                                 // 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 entries = new ArrayList(pr.getDatabase().getEntries());
-                                jabref.jrf.addImportedEntries(panel, entries, "", false, this);
+                                List<BibtexEntry> entries = new ArrayList<BibtexEntry>(pr.getDatabase().getEntries());
+                                jabref.jrf.addImportedEntries(panel, entries, "", false);
                             }
                         }
                     }
@@ -174,23 +176,4 @@ public class RemoteListener extends Thread implements ImportInspectionDialog.Cal
             return 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) {
-        jabref.jrf.output(Globals.lang("Imported entries"));
-    }
-
-    // This method is called by the dialog when the user has cancelled the import.
-    public void cancelled() {
-
-    }
-
-    // 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() {
-
-    }
 }
diff --git a/src/java/net/sf/jabref/search/BasicSearch.java b/src/java/net/sf/jabref/search/BasicSearch.java
index 3d10e0b..cbecdfe 100644
--- a/src/java/net/sf/jabref/search/BasicSearch.java
+++ b/src/java/net/sf/jabref/search/BasicSearch.java
@@ -1,16 +1,15 @@
 package net.sf.jabref.search;
 
-import net.sf.jabref.SearchRule;
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.export.layout.format.RemoveBrackets;
-
-import java.util.Map;
 import java.util.ArrayList;
-import java.util.Iterator;
 import java.util.HashMap;
+import java.util.Map;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.SearchRule;
+import net.sf.jabref.export.layout.format.RemoveBrackets;
+
 /**
  * Search rule for simple search.
  */
@@ -27,35 +26,27 @@ public class BasicSearch implements SearchRule {
         this.regExp = regExp;
     }
 
-    private static void print(ArrayList list) {
-        for (Iterator i = list.iterator(); i.hasNext();) {
-            String s = (String) i.next();
-            System.out.print("'"+s+"' ");
-        }
-        System.out.println();
-    }
-
     public int applyRule(String query, BibtexEntry bibtexEntry) {
-        HashMap map = new HashMap();
+        HashMap<String, String> map = new HashMap<String, String>();
         map.put("1", query);
         return applyRule(map, bibtexEntry);
     }
 
-    public int applyRule(Map searchStrings, BibtexEntry bibtexEntry) {
+    public int applyRule(Map<String, String> searchStrings, BibtexEntry bibtexEntry) {
 
         int flags = 0;
-        String searchString = (String) searchStrings.values().iterator().next();
+        String searchString = searchStrings.values().iterator().next();
         if (!caseSensitive) {
             searchString = searchString.toLowerCase();
             flags = Pattern.CASE_INSENSITIVE;
         }
 
-        ArrayList words = parseQuery(searchString);
+        ArrayList<String> words = parseQuery(searchString);
 
         if (regExp) {
             pattern = new Pattern[words.size()];
             for (int i = 0; i < pattern.length; i++) {
-                pattern[i] = Pattern.compile((String)words.get(i), flags);
+                pattern[i] = Pattern.compile(words.get(i), flags);
             }
         }
 
@@ -65,9 +56,9 @@ public class BasicSearch implements SearchRule {
 
         Object fieldContentAsObject;
         String fieldContent;
-        Object[] fields = bibtexEntry.getAllFields();
-        for (int i = 0; i < fields.length; i++) {
-            fieldContentAsObject = bibtexEntry.getField(fields[i].toString());
+        
+        for (String field : bibtexEntry.getAllFields()){
+            fieldContentAsObject = bibtexEntry.getField(field);
             if (fieldContentAsObject != null) {
                 fieldContent = removeBrackets.format(fieldContentAsObject.toString());
                 if (!caseSensitive)
@@ -77,7 +68,7 @@ public class BasicSearch implements SearchRule {
                 // those words for which we already have a match:
                 for (int j=0; j<words.size(); j++) {
                     if (!regExp) {
-                        String s = (String) words.get(j);
+                        String s = words.get(j);
                         matchFound[index] = matchFound[index]
                             || (fieldContent.indexOf(s) >= 0);
                     } else {
@@ -101,9 +92,9 @@ public class BasicSearch implements SearchRule {
         return 1; // Matched all words.
     }
 
-    private ArrayList parseQuery(String query) {
+    private ArrayList<String> parseQuery(String query) {
         StringBuffer sb = new StringBuffer();
-        ArrayList result = new ArrayList();
+        ArrayList<String> result = new ArrayList<String>();
         int c;
         boolean escaped = false, quoted = false;
         for (int i=0; i<query.length(); i++) {
diff --git a/src/java/net/sf/jabref/search/HitOrMissComparator.java b/src/java/net/sf/jabref/search/HitOrMissComparator.java
index 2ba25dd..636e49b 100644
--- a/src/java/net/sf/jabref/search/HitOrMissComparator.java
+++ b/src/java/net/sf/jabref/search/HitOrMissComparator.java
@@ -1,20 +1,22 @@
 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 {
-    private Matcher hitOrMiss;
+public class HitOrMissComparator implements Comparator<BibtexEntry> {
+    private Matcher<BibtexEntry> hitOrMiss;
 
-    public HitOrMissComparator(Matcher hitOrMiss) {
+    public HitOrMissComparator(Matcher<BibtexEntry> hitOrMiss) {
         this.hitOrMiss = hitOrMiss;
     }
 
-    public int compare(Object o1, Object o2) {
+    public int compare(BibtexEntry o1, BibtexEntry o2) {
         if (hitOrMiss == null)
             return 0;
         
diff --git a/src/java/net/sf/jabref/search/NoSearchMatcher.java b/src/java/net/sf/jabref/search/NoSearchMatcher.java
index 24d2e50..5f20f84 100644
--- a/src/java/net/sf/jabref/search/NoSearchMatcher.java
+++ b/src/java/net/sf/jabref/search/NoSearchMatcher.java
@@ -1,18 +1,17 @@
 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.
+ * Matcher that accepts all entries. Used for filtering when so search is
+ * active.
  */
-public class NoSearchMatcher implements Matcher {
-    public static final Matcher INSTANCE = new NoSearchMatcher();
-
-    private NoSearchMatcher() {
-        
-    }
+public class NoSearchMatcher implements Matcher<BibtexEntry> {
+	public static final Matcher<BibtexEntry> INSTANCE = new NoSearchMatcher();
 
-    public boolean matches(Object object) {
-        return true;
-    }
+	public boolean matches(BibtexEntry object) {
+		return true;
+	}
 }
diff --git a/src/java/net/sf/jabref/search/SearchExpression.java b/src/java/net/sf/jabref/search/SearchExpression.java
index 2978290..a85d49f 100644
--- a/src/java/net/sf/jabref/search/SearchExpression.java
+++ b/src/java/net/sf/jabref/search/SearchExpression.java
@@ -6,39 +6,42 @@
 
 package net.sf.jabref.search;
 
-import antlr.RecognitionException;
-import antlr.TokenStreamException;
-import antlr.collections.AST;
 import java.io.StringReader;
-import java.util.*;
 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 searchOptions)
-		throws TokenStreamException, RecognitionException, PatternSyntaxException
-	{
+
+	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().toString()))); // supports only single entry
+		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 searchStrings, BibtexEntry bibtexEntry) {
+
+	public int applyRule(Map<String, String> searchStrings, BibtexEntry bibtexEntry) {
 		try {
-			return treeParser.apply(ast,bibtexEntry);
+			return treeParser.apply(ast, bibtexEntry);
 		} catch (RecognitionException e) {
 			return 0; // this should never occur
-		} //catch (NullPointerException ex) { return 0; } // Just testing (Morten)
+		}
 	}
 }
-
diff --git a/src/java/net/sf/jabref/search/SearchExpressionLexer.java b/src/java/net/sf/jabref/search/SearchExpressionLexer.java
index e297535..f9e34b9 100644
--- a/src/java/net/sf/jabref/search/SearchExpressionLexer.java
+++ b/src/java/net/sf/jabref/search/SearchExpressionLexer.java
@@ -3,29 +3,26 @@
 package net.sf.jabref.search;
 
 import java.io.InputStream;
-import antlr.TokenStreamException;
-import antlr.TokenStreamIOException;
-import antlr.TokenStreamRecognitionException;
-import antlr.CharStreamException;
-import antlr.CharStreamIOException;
-import antlr.ANTLRException;
 import java.io.Reader;
 import java.util.Hashtable;
-import antlr.CharScanner;
-import antlr.InputBuffer;
+
+import antlr.ANTLRHashString;
 import antlr.ByteBuffer;
 import antlr.CharBuffer;
-import antlr.Token;
-import antlr.CommonToken;
-import antlr.RecognitionException;
+import antlr.CharStreamException;
+import antlr.CharStreamIOException;
+import antlr.InputBuffer;
+import antlr.LexerSharedInputState;
 import antlr.NoViableAltForCharException;
-import antlr.MismatchedCharException;
+import antlr.RecognitionException;
+import antlr.Token;
 import antlr.TokenStream;
-import antlr.ANTLRHashString;
-import antlr.LexerSharedInputState;
+import antlr.TokenStreamException;
+import antlr.TokenStreamIOException;
+import antlr.TokenStreamRecognitionException;
 import antlr.collections.impl.BitSet;
-import antlr.SemanticException;
 
+ at SuppressWarnings({"unchecked", "unused", "null"})
 public class SearchExpressionLexer extends antlr.CharScanner implements SearchExpressionLexerTokenTypes, TokenStream
  {
 public SearchExpressionLexer(InputStream in) {
@@ -37,11 +34,12 @@ public SearchExpressionLexer(Reader in) {
 public SearchExpressionLexer(InputBuffer ib) {
 	this(new LexerSharedInputState(ib));
 }
+
 public SearchExpressionLexer(LexerSharedInputState state) {
 	super(state);
 	caseSensitiveLiterals = false;
 	setCaseSensitive(false);
-	literals = new Hashtable();
+	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));
@@ -106,7 +104,7 @@ tryAgain:
 					}
 				else {
 					if (LA(1)==EOF_CHAR) {uponEOF(); _returnToken = makeToken(Token.EOF_TYPE);}
-				else {throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn());}
+				else {throw new NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
 				}
 				}
 				if ( _returnToken==null ) continue tryAgain; // found SKIP token
@@ -132,6 +130,7 @@ tryAgain:
 	public final void mWS(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException {
 		int _ttype; Token _token=null; int _begin=text.length();
 		_ttype = WS;
+		
 		int _saveIndex;
 		
 		{
@@ -148,7 +147,7 @@ tryAgain:
 		}
 		default:
 		{
-			throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn());
+			throw new NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());
 		}
 		}
 		}
@@ -297,7 +296,7 @@ tryAgain:
 				mLETTER(false);
 			}
 			else {
-				if ( _cnt33>=1 ) { break _loop33; } else {throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn());}
+				if ( _cnt33>=1 ) { break _loop33; } else {throw new NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
 			}
 			
 			_cnt33++;
diff --git a/src/java/net/sf/jabref/search/SearchExpressionParser.java b/src/java/net/sf/jabref/search/SearchExpressionParser.java
index a2d02d4..3c089db 100644
--- a/src/java/net/sf/jabref/search/SearchExpressionParser.java
+++ b/src/java/net/sf/jabref/search/SearchExpressionParser.java
@@ -3,15 +3,7 @@
 package net.sf.jabref.search;
 import java.io.StringReader;
 
-import antlr.ASTFactory;
-import antlr.ASTPair;
-import antlr.NoViableAltException;
-import antlr.ParserSharedInputState;
-import antlr.RecognitionException;
-import antlr.Token;
-import antlr.TokenBuffer;
-import antlr.TokenStream;
-import antlr.TokenStreamException;
+import antlr.*;
 import antlr.collections.AST;
 import antlr.collections.impl.ASTArray;
 import antlr.collections.impl.BitSet;
@@ -82,7 +74,7 @@ public SearchExpressionParser(ParserSharedInputState state) {
 		astFactory.addASTChild(currentAST, var_s_AST);
 		match(STRING);
 		if ( inputState.guessing==0 ) {
-			quotedRegularExpression_AST = (AST)currentAST.root;
+			quotedRegularExpression_AST = currentAST.root;
 			
 							quotedRegularExpression_AST = astFactory.make((new ASTArray(2)).add(new RegExNode(RegularExpression,var_s.getText(),caseSensitive,regex)).add(quotedRegularExpression_AST));
 						
@@ -91,7 +83,7 @@ public SearchExpressionParser(ParserSharedInputState state) {
 				quotedRegularExpression_AST.getFirstChild() : quotedRegularExpression_AST;
 			currentAST.advanceChildToEnd();
 		}
-		quotedRegularExpression_AST = (AST)currentAST.root;
+		quotedRegularExpression_AST = currentAST.root;
 		returnAST = quotedRegularExpression_AST;
 	}
 	
@@ -110,7 +102,7 @@ public SearchExpressionParser(ParserSharedInputState state) {
 		astFactory.addASTChild(currentAST, var_s_AST);
 		match(FIELDTYPE);
 		if ( inputState.guessing==0 ) {
-			simpleRegularExpression_AST = (AST)currentAST.root;
+			simpleRegularExpression_AST = currentAST.root;
 			
 							simpleRegularExpression_AST = astFactory.make((new ASTArray(2)).add(new RegExNode(RegularExpression,var_s.getText(),caseSensitive,regex)).add(simpleRegularExpression_AST));
 						
@@ -119,7 +111,7 @@ public SearchExpressionParser(ParserSharedInputState state) {
 				simpleRegularExpression_AST.getFirstChild() : simpleRegularExpression_AST;
 			currentAST.advanceChildToEnd();
 		}
-		simpleRegularExpression_AST = (AST)currentAST.root;
+		simpleRegularExpression_AST = currentAST.root;
 		returnAST = simpleRegularExpression_AST;
 	}
 	
@@ -135,7 +127,7 @@ public SearchExpressionParser(ParserSharedInputState state) {
 		tmp1_AST = astFactory.create(LT(1));
 		astFactory.addASTChild(currentAST, tmp1_AST);
 		match(Token.EOF_TYPE);
-		searchExpression_AST = (AST)currentAST.root;
+		searchExpression_AST = currentAST.root;
 		returnAST = searchExpression_AST;
 	}
 	
@@ -170,14 +162,14 @@ inputState.guessing--;
 			condition();
 			astFactory.addASTChild(currentAST, returnAST);
 			if ( inputState.guessing==0 ) {
-				condition_AST = (AST)currentAST.root;
-				condition_AST = (AST)astFactory.make( (new ASTArray(2)).add(astFactory.create(And)).add(condition_AST));
+				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 = (AST)currentAST.root;
+			condition_AST = currentAST.root;
 		}
 		else {
 			boolean synPredMatched82 = false;
@@ -205,19 +197,19 @@ inputState.guessing--;
 				condition();
 				astFactory.addASTChild(currentAST, returnAST);
 				if ( inputState.guessing==0 ) {
-					condition_AST = (AST)currentAST.root;
-					condition_AST = (AST)astFactory.make( (new ASTArray(2)).add(astFactory.create(Or)).add(condition_AST));
+					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 = (AST)currentAST.root;
+				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 = (AST)currentAST.root;
+				condition_AST = currentAST.root;
 			}
 			else {
 				throw new NoViableAltException(LT(1), getFilename());
@@ -238,7 +230,7 @@ inputState.guessing--;
 		{
 			expressionSearch();
 			astFactory.addASTChild(currentAST, returnAST);
-			expression_AST = (AST)currentAST.root;
+			expression_AST = currentAST.root;
 			break;
 		}
 		case LPAREN:
@@ -247,7 +239,7 @@ inputState.guessing--;
 			condition();
 			astFactory.addASTChild(currentAST, returnAST);
 			match(RPAREN);
-			expression_AST = (AST)currentAST.root;
+			expression_AST = currentAST.root;
 			break;
 		}
 		default:
@@ -256,14 +248,14 @@ inputState.guessing--;
 				expressionSearch();
 				astFactory.addASTChild(currentAST, returnAST);
 				if ( inputState.guessing==0 ) {
-					expression_AST = (AST)currentAST.root;
-					expression_AST = (AST)astFactory.make( (new ASTArray(2)).add(astFactory.create(Not)).add(expression_AST));
+					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 = (AST)currentAST.root;
+				expression_AST = currentAST.root;
 			}
 			else if ((LA(1)==LITERAL_not) && (LA(2)==LPAREN)) {
 				match(LITERAL_not);
@@ -272,14 +264,14 @@ inputState.guessing--;
 				astFactory.addASTChild(currentAST, returnAST);
 				match(RPAREN);
 				if ( inputState.guessing==0 ) {
-					expression_AST = (AST)currentAST.root;
-					expression_AST = (AST)astFactory.make( (new ASTArray(2)).add(astFactory.create(Not)).add(expression_AST));
+					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 = (AST)currentAST.root;
+				expression_AST = currentAST.root;
 			}
 		else {
 			throw new NoViableAltException(LT(1), getFilename());
@@ -302,14 +294,14 @@ inputState.guessing--;
 			quotedRegularExpression(caseSensitive,regex);
 			astFactory.addASTChild(currentAST, returnAST);
 			if ( inputState.guessing==0 ) {
-				expressionSearch_AST = (AST)currentAST.root;
-				expressionSearch_AST = (AST)astFactory.make( (new ASTArray(2)).add(astFactory.create(ExpressionSearch)).add(expressionSearch_AST));
+				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 = (AST)currentAST.root;
+			expressionSearch_AST = currentAST.root;
 		}
 		else if ((LA(1)==FIELDTYPE) && (_tokenSet_2.member(LA(2))) && (LA(3)==STRING)) {
 			simpleRegularExpression(false,true);
@@ -319,14 +311,14 @@ inputState.guessing--;
 			quotedRegularExpression(caseSensitive,regex);
 			astFactory.addASTChild(currentAST, returnAST);
 			if ( inputState.guessing==0 ) {
-				expressionSearch_AST = (AST)currentAST.root;
-				expressionSearch_AST = (AST)astFactory.make( (new ASTArray(2)).add(astFactory.create(ExpressionSearch)).add(expressionSearch_AST));
+				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 = (AST)currentAST.root;
+			expressionSearch_AST = currentAST.root;
 		}
 		else if ((LA(1)==FIELDTYPE) && (_tokenSet_2.member(LA(2))) && (LA(3)==FIELDTYPE)) {
 			simpleRegularExpression(false,true);
@@ -336,14 +328,14 @@ inputState.guessing--;
 			simpleRegularExpression(caseSensitive,regex);
 			astFactory.addASTChild(currentAST, returnAST);
 			if ( inputState.guessing==0 ) {
-				expressionSearch_AST = (AST)currentAST.root;
-				expressionSearch_AST = (AST)astFactory.make( (new ASTArray(2)).add(astFactory.create(ExpressionSearch)).add(expressionSearch_AST));
+				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 = (AST)currentAST.root;
+			expressionSearch_AST = currentAST.root;
 		}
 		else if ((LA(1)==STRING) && (_tokenSet_2.member(LA(2))) && (LA(3)==FIELDTYPE)) {
 			quotedRegularExpression(false,true);
@@ -353,14 +345,14 @@ inputState.guessing--;
 			simpleRegularExpression(caseSensitive,regex);
 			astFactory.addASTChild(currentAST, returnAST);
 			if ( inputState.guessing==0 ) {
-				expressionSearch_AST = (AST)currentAST.root;
-				expressionSearch_AST = (AST)astFactory.make( (new ASTArray(2)).add(astFactory.create(ExpressionSearch)).add(expressionSearch_AST));
+				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 = (AST)currentAST.root;
+			expressionSearch_AST = currentAST.root;
 		}
 		else {
 			throw new NoViableAltException(LT(1), getFilename());
@@ -382,7 +374,7 @@ inputState.guessing--;
 			tmp10_AST = astFactory.create(LT(1));
 			astFactory.addASTChild(currentAST, tmp10_AST);
 			match(LITERAL_contains);
-			compareType_AST = (AST)currentAST.root;
+			compareType_AST = currentAST.root;
 			break;
 		}
 		case LITERAL_matches:
@@ -391,7 +383,7 @@ inputState.guessing--;
 			tmp11_AST = astFactory.create(LT(1));
 			astFactory.addASTChild(currentAST, tmp11_AST);
 			match(LITERAL_matches);
-			compareType_AST = (AST)currentAST.root;
+			compareType_AST = currentAST.root;
 			break;
 		}
 		case EQUAL:
@@ -400,7 +392,7 @@ inputState.guessing--;
 			tmp12_AST = astFactory.create(LT(1));
 			astFactory.addASTChild(currentAST, tmp12_AST);
 			match(EQUAL);
-			compareType_AST = (AST)currentAST.root;
+			compareType_AST = currentAST.root;
 			break;
 		}
 		case EEQUAL:
@@ -409,7 +401,7 @@ inputState.guessing--;
 			tmp13_AST = astFactory.create(LT(1));
 			astFactory.addASTChild(currentAST, tmp13_AST);
 			match(EEQUAL);
-			compareType_AST = (AST)currentAST.root;
+			compareType_AST = currentAST.root;
 			break;
 		}
 		case NEQUAL:
@@ -418,7 +410,7 @@ inputState.guessing--;
 			tmp14_AST = astFactory.create(LT(1));
 			astFactory.addASTChild(currentAST, tmp14_AST);
 			match(NEQUAL);
-			compareType_AST = (AST)currentAST.root;
+			compareType_AST = currentAST.root;
 			break;
 		}
 		default:
diff --git a/src/java/net/sf/jabref/search/SearchExpressionParserTokenTypes.java b/src/java/net/sf/jabref/search/SearchExpressionParserTokenTypes.java
index daaaca3..810f826 100644
--- a/src/java/net/sf/jabref/search/SearchExpressionParserTokenTypes.java
+++ b/src/java/net/sf/jabref/search/SearchExpressionParserTokenTypes.java
@@ -1,7 +1,6 @@
 // $ANTLR : "Parser.g" -> "SearchExpressionParser.java"$
 
 package net.sf.jabref.search;
-import java.io.StringReader;
 
 public interface SearchExpressionParserTokenTypes {
 	int EOF = 1;
diff --git a/src/java/net/sf/jabref/search/SearchExpressionTreeParser.java b/src/java/net/sf/jabref/search/SearchExpressionTreeParser.java
index 63bf9a9..59e213b 100644
--- a/src/java/net/sf/jabref/search/SearchExpressionTreeParser.java
+++ b/src/java/net/sf/jabref/search/SearchExpressionTreeParser.java
@@ -1,23 +1,17 @@
 // $ANTLR : "TreeParser.g" -> "SearchExpressionTreeParser.java"$
 
 package net.sf.jabref.search;
-import java.util.*;
-import java.util.regex.*;
-import net.sf.jabref.*;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.util.regex.PatternSyntaxException;
 
-import antlr.TreeParser;
-import antlr.Token;
-import antlr.collections.AST;
-import antlr.RecognitionException;
-import antlr.ANTLRException;
-import antlr.NoViableAltException;
+import net.sf.jabref.BibtexEntry;
 import antlr.MismatchedTokenException;
-import antlr.SemanticException;
-import antlr.collections.impl.BitSet;
-import antlr.ASTPair;
-import antlr.collections.impl.ASTArray;
-
+import antlr.NoViableAltException;
+import antlr.RecognitionException;
+import antlr.collections.AST;
 
+ at SuppressWarnings({"unchecked", "unused", "null"})
 public class SearchExpressionTreeParser extends antlr.TreeParser       implements SearchExpressionTreeParserTokenTypes
  {
 
@@ -33,7 +27,7 @@ public class SearchExpressionTreeParser extends antlr.TreeParser       implement
     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();
+		this.searchKeys = bibtexEntry.getAllFields().toArray();
 		return tSearchExpression(ast) ? 1 : 0;
 	}
 public SearchExpressionTreeParser() {
@@ -54,7 +48,7 @@ public SearchExpressionTreeParser() {
 			case And:
 			{
 				AST __t87 = _t;
-				AST tmp1_AST_in = (AST)_t;
+				AST tmp1_AST_in = _t;
 				match(_t,And);
 				_t = _t.getFirstChild();
 				a=tSearchExpression(_t);
@@ -66,7 +60,7 @@ public SearchExpressionTreeParser() {
 					_t = _retTree;
 				}
 				else if (((_t.getType() >= LITERAL_and && _t.getType() <= ExpressionSearch))) {
-					AST tmp2_AST_in = (AST)_t;
+					AST tmp2_AST_in = _t;
 					if ( _t==null ) throw new MismatchedTokenException();
 					_t = _t.getNextSibling();
 				}
@@ -83,7 +77,7 @@ public SearchExpressionTreeParser() {
 			case Or:
 			{
 				AST __t89 = _t;
-				AST tmp3_AST_in = (AST)_t;
+				AST tmp3_AST_in = _t;
 				match(_t,Or);
 				_t = _t.getFirstChild();
 				a=tSearchExpression(_t);
@@ -95,7 +89,7 @@ public SearchExpressionTreeParser() {
 					_t = _retTree;
 				}
 				else if (((_t.getType() >= LITERAL_and && _t.getType() <= ExpressionSearch))) {
-					AST tmp4_AST_in = (AST)_t;
+					AST tmp4_AST_in = _t;
 					if ( _t==null ) throw new MismatchedTokenException();
 					_t = _t.getNextSibling();
 				}
@@ -112,7 +106,7 @@ public SearchExpressionTreeParser() {
 			case Not:
 			{
 				AST __t91 = _t;
-				AST tmp5_AST_in = (AST)_t;
+				AST tmp5_AST_in = _t;
 				match(_t,Not);
 				_t = _t.getFirstChild();
 				a=tSearchExpression(_t);
@@ -145,7 +139,6 @@ public SearchExpressionTreeParser() {
 	public final boolean  tExpressionSearch(AST _t) throws RecognitionException, PatternSyntaxException {
 		 boolean ret = false;
 
-        AST tExpressionSearch_AST_in = (_t == ASTNULL) ? null : (AST)_t;
 		AST var_f = null;
 		AST var_v = null;
 		
@@ -154,21 +147,20 @@ public SearchExpressionTreeParser() {
 		
 		try {      // for error handling
 			AST __t94 = _t;
-			AST tmp6_AST_in = (AST)_t;
+			AST tmp6_AST_in = _t;
 			match(_t,ExpressionSearch);
 			_t = _t.getFirstChild();
-			var_f = (AST)_t;
+			var_f = _t;
 			match(_t,RegularExpression);
 			_t = _t.getNextSibling();
 			matchType=tSearchType(_t);
 			_t = _retTree;
-			var_v = (AST)_t;
+			var_v = _t;
 			match(_t,RegularExpression);
 			_t = _t.getNextSibling();
 			
 						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) {
@@ -182,7 +174,7 @@ public SearchExpressionTreeParser() {
 								default: // regular field
 									if (!fieldSpec.matcher(searchKeys[i].toString()).matches())
 										continue;
-									content = (String)bibtexEntry.getField(searchKeys[i].toString());
+									content = bibtexEntry.getField(searchKeys[i].toString());
 							}
 			noSuchField = false;
 							if (content == null)
@@ -224,7 +216,7 @@ public SearchExpressionTreeParser() {
 			switch ( _t.getType()) {
 			case LITERAL_contains:
 			{
-				AST tmp7_AST_in = (AST)_t;
+				AST tmp7_AST_in = _t;
 				match(_t,LITERAL_contains);
 				_t = _t.getNextSibling();
 				matchType = MATCH_CONTAINS;
@@ -232,7 +224,7 @@ public SearchExpressionTreeParser() {
 			}
 			case LITERAL_matches:
 			{
-				AST tmp8_AST_in = (AST)_t;
+				AST tmp8_AST_in = _t;
 				match(_t,LITERAL_matches);
 				_t = _t.getNextSibling();
 				matchType = MATCH_EXACT;
@@ -240,7 +232,7 @@ public SearchExpressionTreeParser() {
 			}
 			case EQUAL:
 			{
-				AST tmp9_AST_in = (AST)_t;
+				AST tmp9_AST_in = _t;
 				match(_t,EQUAL);
 				_t = _t.getNextSibling();
 				matchType = MATCH_CONTAINS;
@@ -248,7 +240,7 @@ public SearchExpressionTreeParser() {
 			}
 			case EEQUAL:
 			{
-				AST tmp10_AST_in = (AST)_t;
+				AST tmp10_AST_in = _t;
 				match(_t,EEQUAL);
 				_t = _t.getNextSibling();
 				matchType = MATCH_EXACT;
@@ -256,7 +248,7 @@ public SearchExpressionTreeParser() {
 			}
 			case NEQUAL:
 			{
-				AST tmp11_AST_in = (AST)_t;
+				AST tmp11_AST_in = _t;
 				match(_t,NEQUAL);
 				_t = _t.getNextSibling();
 				matchType = MATCH_DOES_NOT_CONTAIN;
diff --git a/src/java/net/sf/jabref/search/SearchExpressionTreeParserTokenTypes.java b/src/java/net/sf/jabref/search/SearchExpressionTreeParserTokenTypes.java
index 1cfd528..39fc505 100644
--- a/src/java/net/sf/jabref/search/SearchExpressionTreeParserTokenTypes.java
+++ b/src/java/net/sf/jabref/search/SearchExpressionTreeParserTokenTypes.java
@@ -1,9 +1,6 @@
 // $ANTLR : "TreeParser.g" -> "SearchExpressionTreeParser.java"$
 
 package net.sf.jabref.search;
-import java.util.*;
-import java.util.regex.*;
-import net.sf.jabref.*;
 
 public interface SearchExpressionTreeParserTokenTypes {
 	int EOF = 1;
diff --git a/src/java/net/sf/jabref/search/SearchMatcher.java b/src/java/net/sf/jabref/search/SearchMatcher.java
index 31167cb..1a124a5 100644
--- a/src/java/net/sf/jabref/search/SearchMatcher.java
+++ b/src/java/net/sf/jabref/search/SearchMatcher.java
@@ -1,21 +1,17 @@
 package net.sf.jabref.search;
 
 import net.sf.jabref.BibtexEntry;
-
-import java.util.Hashtable;
-
 import ca.odell.glazedlists.matchers.Matcher;
 
 /**
- * Matcher for filtering or sorting the table according to whether entries
- * are tagged as search matches.
+ * Matcher for filtering or sorting the table according to whether entries are
+ * tagged as search matches.
  */
-public class SearchMatcher implements Matcher {
+public class SearchMatcher implements Matcher<BibtexEntry> {
 
-        public static SearchMatcher INSTANCE = new SearchMatcher();
+	public static SearchMatcher INSTANCE = new SearchMatcher();
 
-        public boolean matches(Object object) {
-            BibtexEntry entry = (BibtexEntry)object;
-            return entry.isSearchHit();
-        }
+	public boolean matches(BibtexEntry entry) {
+		return entry.isSearchHit();
+	}
 }
diff --git a/src/java/net/sf/jabref/sql/DBConnectDialog.java b/src/java/net/sf/jabref/sql/DBConnectDialog.java
new file mode 100644
index 0000000..b684c79
--- /dev/null
+++ b/src/java/net/sf/jabref/sql/DBConnectDialog.java
@@ -0,0 +1,269 @@
+/*
+ * DBConnectDialog.java
+ *
+ * Created on October 2, 2007, 10:39 AM
+ *
+ * To change this template, choose Tools | Template Manager
+ * and open the template in the editor.
+ */
+
+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.BorderFactory;
+import javax.swing.JButton;
+import javax.swing.JComboBox;
+import javax.swing.JComponent;
+import javax.swing.JDialog;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JPasswordField;
+import javax.swing.JTextField;
+import javax.swing.JOptionPane;
+
+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[] srv = dbStrings.getServerTypes();
+        for (int i=0; i<srv.length; i++) {
+           cmbServerType.addItem(srv[i]);
+        }
+
+        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.addGridded(btnConnect);
+        bb.addGridded(btnCancel);
+        bb.addGlue();
+
+        // add the buttons to the SOUTH of your dialog:
+        getContentPane().add(bb.getPanel(), BorderLayout.SOUTH);
+        pack();
+
+        btnConnect.addActionListener( 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);
+                }
+
+            }
+        });
+
+        btnCancel.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                setVisible(false);
+                dispose();
+                setConnectToDB(false);
+            }
+        });
+
+    }
+
+    /**
+     * 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:
+                errMsg = errMsg + errors.toString() + ".";
+        }
+
+        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());
+
+        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;
+    }
+
+}
\ No newline at end of file
diff --git a/src/java/net/sf/jabref/sql/DBStrings.java b/src/java/net/sf/jabref/sql/DBStrings.java
new file mode 100644
index 0000000..67d71cd
--- /dev/null
+++ b/src/java/net/sf/jabref/sql/DBStrings.java
@@ -0,0 +1,117 @@
+/*
+ * DBStrings.java
+ *
+ * Created on October 1, 2007, 6:33 PM
+ *
+ * To change this template, choose Tools | Template Manager
+ * and open the template in the editor.
+ */
+
+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);
+    }
+
+    public void initialize() {
+        //String [] servers = {Globals.lang("MySQL"), Globals.lang("Derby")};
+        String [] servers = {Globals.lang("MySQL")};
+        setServerTypes(servers);
+        setServerType(Globals.lang("MySQL"));
+        setServerHostname(Globals.lang("localhost"));
+        setDatabase(Globals.lang("jabref"));
+        setUsername(Globals.lang("root"));
+        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;
+    }
+
+}
diff --git a/src/java/net/sf/jabref/sql/SQLutil.java b/src/java/net/sf/jabref/sql/SQLutil.java
new file mode 100644
index 0000000..289260a
--- /dev/null
+++ b/src/java/net/sf/jabref/sql/SQLutil.java
@@ -0,0 +1,911 @@
+/*
+ * SQLutil.java
+ *
+ * Created on October 4, 2007, 5:28 PM
+ *
+ * To change this template, choose Tools | Template Manager
+ * and open the template in the editor.
+ */
+
+package net.sf.jabref.sql;
+
+import java.io.File;
+import java.io.PrintStream;
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.SQLException;
+import java.sql.SQLWarning;
+import java.sql.Statement;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.Set;
+
+import net.sf.jabref.BibtexDatabase;
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.BibtexEntryType;
+import net.sf.jabref.MetaData;
+import net.sf.jabref.Util;
+import net.sf.jabref.Globals;
+import net.sf.jabref.export.FileActions;
+import net.sf.jabref.groups.ExplicitGroup;
+import net.sf.jabref.groups.GroupTreeNode;
+
+/**
+ *
+ * @author pattonlk
+ */
+public class SQLutil {
+
+    public enum DBTYPE {
+        MYSQL, DERBY
+    } 
+
+    private static ArrayList<String> fields = null;
+    private static String fieldstr = null;
+
+    /**
+     * returns the DBTYPE associated with a DBStrings ServerType
+     *
+     * @param dbstrings
+     *          The DBStrings to query
+     * @return The DBTYPE associated withthe dbstrings ServerType
+     */
+    public static DBTYPE getDBType (DBStrings dbstrings) {
+
+        DBTYPE dbtype = null;
+        String srvtype = dbstrings.getServerType();
+
+        if (srvtype.equalsIgnoreCase("mysql")) {
+            dbtype = DBTYPE.MYSQL;
+        }
+        if (srvtype.equalsIgnoreCase("derby")) {
+            dbtype = DBTYPE.DERBY;
+        }
+
+        return dbtype;
+    }
+
+    /**
+     * 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 dbs) {
+
+        String url = "";
+        String servertype = dbs.getServerType();
+
+        if (servertype.equalsIgnoreCase("mysql")) {
+            url = "jdbc:" + dbs.getServerType().toLowerCase() + "://" 
+                          + dbs.getServerHostname() + "/" 
+                          + dbs.getDatabase();
+        }
+
+        if (servertype.equalsIgnoreCase("derby")) {
+            url = "jdbc:" + dbs.getServerType().toLowerCase() + ":"
+                          + dbs.getDatabase() + ";create=true";
+        }
+
+        return url;
+    }
+
+    public static String getJDBCdriver (DBStrings dbstrings) {
+
+        String driver = "";
+        String servertype = dbstrings.getServerType();
+
+        if (servertype.equalsIgnoreCase("mysql")) {
+            driver ="com.mysql.jdbc.Driver";
+        }
+
+        if (servertype.equalsIgnoreCase("derby")) {
+            driver = "org.apache.derby.jdbc.EmbeddedDriver";
+        }
+
+        return driver;
+            
+    }
+
+    /**
+     * This routine accepts the location of a MySQL database specified as a url as 
+     * well as the username and password for the MySQL user with appropriate access
+     * to this database.  The routine returns a valid Connection object if the MySQL 
+     * database is successfully opened. It returns a null object otherwise.
+     */
+    public static Connection connectToDB (DBStrings dbstrings)
+        throws Exception {
+
+        String url = createJDBCurl(dbstrings);
+        String drv = getJDBCdriver(dbstrings);
+
+        Class.forName (drv).newInstance ();
+        Connection conn = DriverManager.getConnection (url,
+                           dbstrings.getUsername(), dbstrings.getPassword());
+       
+        return conn;
+
+    }    
+   
+
+    /**
+     * 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
+     */
+    private static void processDML ( 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;
+            execDML(conn, dml);
+        }
+
+    }
+
+
+    /**
+     * Utility method for executing DML
+     *
+     * @param conn
+     *          The DML Connection object that will execute the SQL
+     * @param sql
+     *          The DML statements to be executed
+     */
+    public static void execDML(Connection conn, String dml) throws SQLException {
+        // System.out.println(dml); // remove
+        Statement stmnt = conn.createStatement();
+        stmnt.execute(dml);
+        SQLWarning warn = stmnt.getWarnings();
+        if (warn!=null) {
+            //TODO handle SQL warnings
+            System.out.println(warn.toString());
+            System.out.println("("+dml+")");
+        }
+        stmnt.close();
+    }
+
+    
+    public static ArrayList<String> getFields() {
+        if (fields == null) {
+            refreshFields();
+        }
+        return fields;
+    }
+
+
+    /**
+     * loop through entry types to get required, optional, general and utility 
+     * fields for this type.
+     */
+    public static void refreshFields() {
+
+        if (fields==null) {
+            fields = new ArrayList<String>();
+        } else {
+            fields.clear();
+        }
+
+        for (BibtexEntryType val : BibtexEntryType.ALL_TYPES.values()) {
+            fields = uniqueInsert(fields, val.getRequiredFields());
+            fields = uniqueInsert(fields, val.getOptionalFields());
+            fields = uniqueInsert(fields, val.getGeneralFields());
+            fields = uniqueInsert(fields, val.getUtilityFields());
+        }
+
+        // create comma separated list of field names
+        fieldstr = "";
+        for (int i = 0; i < fields.size(); i++) {
+            if (i > 0)
+                fieldstr = fieldstr + ", ";
+            fieldstr = fieldstr + fields.get(i);
+        }
+
+    }
+
+
+    /**
+     * 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;
+    }
+
+
+    /**
+     * 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 static void exportDatabase(final BibtexDatabase database,
+        final MetaData metaData, Set<String> keySet, String file, DBTYPE dbtype ) 
+        throws Exception {
+
+        // open output file
+        File outfile = new File(file);
+        if (outfile.exists())
+            outfile.delete();
+
+        PrintStream fout = null;
+        fout = new PrintStream(outfile);
+
+        exportDatabase_worker(dbtype, database, metaData, keySet, fout);
+
+        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 static void exportDatabase(final BibtexDatabase database,
+        final MetaData metaData, Set<String> keySet, DBStrings dbStrings)
+        throws Exception {
+
+        DBTYPE dbtype = getDBType(dbStrings);
+
+        Connection conn = null;
+
+        try {
+
+            conn = SQLutil.connectToDB(dbStrings);
+
+            // conn.setAutoCommit(false);
+
+            exportDatabase_worker(dbtype, database, metaData, keySet, conn);
+
+            if (!conn.getAutoCommit()) {
+                conn.commit();
+                conn.setAutoCommit(true);
+            }
+
+            conn.close();
+
+        } catch (SQLException ex) {
+
+            if (conn != null) {
+                if (!conn.getAutoCommit()) {
+                    conn.rollback();
+                }
+            }
+
+            throw ex;
+        }
+    }
+
+
+   /**
+     * Worker 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 static void exportDatabase_worker (DBTYPE dbtype, 
+            final BibtexDatabase database, final MetaData metaData, 
+            Set<String> keySet, Object out) throws Exception{
+
+        List<BibtexEntry> entries = FileActions.getSortedEntries(database,
+            keySet, false);
+
+        // create MySQL tables 
+        dmlCreateTables(dbtype,out);
+
+        // populate entry_type table
+        dmlPopTab_ET(out);
+
+        // populate entries table
+        dmlPopTab_FD(entries,out);
+
+		GroupTreeNode gtn = metaData.getGroups();
+
+		// populate groups table
+        dmlPopTab_GP(gtn,out);
+        
+		// populate entry_group table
+        dmlPopTab_EG(gtn,out);
+    }
+
+    
+    /**
+     * Writes the table creation DML to the specififed file.
+     * 
+     * @param dbtype
+     *          Indicates the type of database to be written to 
+     * @param fout
+     *          The output (PrintStream or Connection) object to which the DML should be written
+     */
+    private static void dmlCreateTables(DBTYPE dbtype, Object out)
+                                throws SQLException{
+
+        // make sure fields are initialized
+        if (fields==null) {
+            refreshFields();
+        }
+
+        // build the DML tables specification
+        String dml1 = "", dml2 = "";
+        switch (dbtype) {
+            case MYSQL:
+
+                // drop tables
+                processDML(out,"DROP TABLE IF EXISTS entry_types;");
+                processDML(out,"DROP TABLE IF EXISTS entries;");
+                processDML(out,"DROP TABLE IF EXISTS groups;");
+                processDML(out,"DROP TABLE IF EXISTS entry_group;");
+
+                // generate DML that specifies DB columns corresponding to fields
+                dml1 = SQLutil.fieldsAsCols(fields, " VARCHAR(3) DEFAULT NULL");
+                dml2 = SQLutil.fieldsAsCols(fields, " TEXT DEFAULT NULL");
+
+                // create tables
+                dmlTable_mysql(dml1, dml2, out);
+
+                break;
+
+            case DERBY:
+
+                // drop tables
+                if (out instanceof Connection) {
+
+                    Connection conn = (Connection) out;
+                    boolean commitNow = conn.getAutoCommit();
+                    conn.setAutoCommit(true);
+
+                    //TODO: determine which tables are present, and drop them
+
+                    conn.setAutoCommit(commitNow);
+
+                }
+
+                // generate DML that specifies DB columns corresponding to fields
+                dml1 = SQLutil.fieldsAsCols(fields, " VARCHAR(3) DEFAULT NULL");
+                dml2 = SQLutil.fieldsAsCols(fields, " LONG VARCHAR DEFAULT NULL");
+
+                // create tables
+                dmlTable_derby(dml1, dml2, out);
+
+                break;
+
+            default:
+                System.err.println("Error: Do not recognize database enumeration.");
+                System.exit(0);
+        }
+
+        return;
+    }
+
+
+    /**
+     * 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 DML code to be included in a CREATE TABLE statement.
+     */
+    private static String fieldsAsCols(ArrayList<String> fields, String datatype) {
+        String str = "";
+        ListIterator<String> li = fields.listIterator();
+        while (li.hasNext()) {
+            str = str + li.next() + " " + datatype;
+            if (li.hasNext())
+                str = str + ", ";
+        }
+        return str;
+    }
+
+    /**
+     * Generates DML code necessary to create all tables in a MySQL database, 
+     * and writes it to appropriate output.
+     *
+     * @param dml1
+     *            Column specifications for fields in entry_type table.
+     * @param dml2
+     *            Column specifications for fields in entries table.
+     * @param out
+     *            The output (PrintStream or Connection) object to which the DML should be written.
+     * @return DML to create all MySQL tables.
+     */
+    private static void dmlTable_mysql(String dml1, String dml2, Object out)
+            throws SQLException {
+
+        processDML(out,"CREATE TABLE entry_types ( \n"
+            + "entry_types_id    INT UNSIGNED  NOT NULL AUTO_INCREMENT, \n"
+            + "label			 TEXT, \n"
+            + dml1
+            + ", \n"
+            + "PRIMARY KEY (entry_types_id) \n"
+            + ");" );
+           
+        processDML(out,"CREATE TABLE entries ( \n"
+            + "entries_id      INTEGER         NOT NULL AUTO_INCREMENT, \n"
+			+ "jabref_eid      VARCHAR("
+			+  Util.getMinimumIntegerDigits()
+		    + ")   DEFAULT NULL, \n"
+            + "entry_types_id  INTEGER         DEFAULT NULL, \n"
+            + "cite_key        VARCHAR(30)     DEFAULT NULL, \n"
+            + dml2
+            + ",\n"
+            + "PRIMARY KEY (entries_id), \n"
+            + "FOREIGN KEY (entry_types_id) REFERENCES entry_type(entry_types_id) \n"
+            + ");");
+           
+        processDML(out,"CREATE TABLE groups ( \n"
+            + "groups_id       INTEGER         NOT NULL AUTO_INCREMENT, \n"
+            + "label           VARCHAR(100)     DEFAULT NULL, \n"
+            + "parent_id       INTEGER          DEFAULT NULL, \n"
+            + "PRIMARY KEY (groups_id) \n"
+            + ");");
+           
+        processDML(out,"CREATE TABLE entry_group ( \n"
+            + "entries_id       INTEGER        NOT NULL AUTO_INCREMENT, \n"
+            + "groups_id        INTEGER        DEFAULT NULL, \n"
+            + "FOREIGN KEY (entries_id) REFERENCES entry_fields(entries_id), \n"
+            + "FOREIGN KEY (groups_id)  REFERENCES groups(groups_id) \n"
+            + ");");
+
+        return;
+
+    }
+
+    /**
+     * Generates DML code necessary to create all tables in a Derby database, 
+     * and writes it to appropriate output.
+     *
+     * @param dml1
+     *            Column specifications for fields in entry_type table.
+     * @param dml2
+     *            Column specifications for fields in entries table.
+     * @param out
+     *            The output (PrintStream or Connection) object to which the DML should be written.
+     * @return DML to create all Derby tables.
+     */
+    private static void dmlTable_derby(String dml1, String dml2, Object out)
+            throws SQLException {
+
+        processDML(out,"CREATE TABLE entry_types ( "
+            + "entry_types_id INT  NOT NULL PRIMARY KEY GENERATED ALWAYS AS IDENTITY, "
+            + dml1 + ", "
+            + "label LONG VARCHAR"
+            + ")" );
+
+        processDML(out,"CREATE TABLE entries ( "
+            + "entries_id      INTEGER         NOT NULL PRIMARY KEY GENERATED ALWAYS AS IDENTITY, "
+			+ "jabref_eid      VARCHAR("
+			+  Util.getMinimumIntegerDigits()
+		    + ")   DEFAULT NULL, "
+            + "entry_types_id  INTEGER         DEFAULT NULL, "
+            + "cite_key        VARCHAR(30)     DEFAULT NULL, "
+            + dml2
+            + ")");
+          
+        processDML(out,"ALTER TABLE entries ADD CONSTRAINT entries_fk "
+                     + "FOREIGN KEY (\"entry_types_id\") REFERENCES \"entry_type\" (\"entry_types_id\")");
+
+        processDML(out,"CREATE TABLE groups ( "
+            + "groups_id       INTEGER         NOT NULL PRIMARY KEY GENERATED ALWAYS AS IDENTITY, "
+            + "label           VARCHAR(100)     DEFAULT NULL, "
+            + "parent_id       INTEGER          DEFAULT NULL  "
+            + ")");
+           
+        processDML(out,"CREATE TABLE entry_group ( "
+            + "entries_id       INTEGER        NOT NULL PRIMARY KEY GENERATED ALWAYS AS IDENTITY, "
+            + "groups_id        INTEGER        DEFAULT NULL "
+            + ")");
+
+        processDML(out,"ALTER TABLE entry_group ADD CONSTRAINT entries_group_fk"
+                     + "FOREIGN KEY (\"entries_id\") REFERENCES \"entry_fields\" (\"entries_id\")");
+
+        processDML(out,"ALTER TABLE entry_group ADD CONSTRAINT groups_fk"
+                     + "FOREIGN KEY (\"groups_id\") REFERENCES \"groups\" (\"groups_id\")");
+
+        return;
+
+    }
+
+     /**
+     * Generates the DML 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 static void dmlPopTab_ET( Object out) throws SQLException{
+
+        String dml = "";
+        String insert = "INSERT INTO entry_types (label, "+fieldstr+") VALUES (";
+
+        ArrayList<String> fieldID = new ArrayList<String>();
+        for (int i = 0; i < fields.size(); i++)
+            fieldID.add(null);
+
+        // loop through entry types
+        for (BibtexEntryType val : BibtexEntryType.ALL_TYPES.values()) {
+
+            // set ID for each field corresponding to its relationship to the
+            // entry type
+            for (int i = 0; i < fieldID.size(); i++) {
+                fieldID.set(i, "");
+            }
+            fieldID = setFieldID(fields, fieldID, val.getRequiredFields(),
+                "req");
+            fieldID = setFieldID(fields, fieldID, val.getOptionalFields(),
+                "opt");
+            fieldID = setFieldID(fields, fieldID, val.getGeneralFields(), "gen");
+            fieldID = setFieldID(fields, fieldID, val.getUtilityFields(), "uti");
+
+            // build DML insert statement
+            dml = insert + "\"" + val.getName().toLowerCase() + "\"";
+            for (int i = 0; i < fieldID.size(); i++) {
+                dml = dml + ", ";
+                if (fieldID.get(i) != "") {
+                    dml = dml + "\"" + fieldID.get(i) + "\"";
+                } else {
+                    dml = dml + "NULL";
+                }
+            }
+            dml = dml + ");";
+
+            // handle DML according to output type
+            processDML(out, dml);
+
+        }
+
+        return;
+
+    }
+
+
+     /**
+     * A utility function for facilitating the assignment of a code to each
+     * field name that represents the relationship of that field to a specific
+     * entry type.
+     * 
+     * @param fields
+     *            A list of all fields.
+     * @param fieldID
+     *            A list for holding the codes.
+     * @param fieldstr
+     *            A String array containing the fields to be coded.
+     * @param ID
+     *            The code that should be assigned to the specified fields.
+     * @return The updated code list.
+     */
+    private static ArrayList<String> setFieldID(ArrayList<String> fields,
+        ArrayList<String> fieldID, String[] fieldstr, String ID) {
+        if (fieldstr != null) {
+            for (int i = 0; i < fieldstr.length; i++) {
+                fieldID.set(fields.indexOf(fieldstr[i]), ID);
+            }
+        }
+        return fieldID;
+    }
+
+
+     /**
+     * Generates the DML required to populate the entries table with jabref
+     * data and writes it to the output PrintStream.
+     * 
+     * @param entries
+     *          The BibtexEntries to export     
+     * @param out
+     *          The output (PrintStream or Connection) object to which the DML should be written.
+     */
+    private static void dmlPopTab_FD(List<BibtexEntry> entries, Object out) 
+                            throws SQLException {
+
+        String dml = "";
+        String val = "";
+        String insert = "INSERT INTO entries (jabref_eid, entry_types_id, cite_key, "
+            + fieldstr
+            + ") VALUES (";
+
+        // loop throught the entries that are to be exported
+        for (BibtexEntry entry : entries) {
+
+            // build DML insert statement
+            dml = insert 
+			      + "\"" + entry.getId() + "\""
+			      + ", (SELECT entry_types_id FROM entry_types WHERE label=\""
+			      + entry.getType().getName().toLowerCase() + "\"), \""
+                  + entry.getCiteKey() + "\"";
+
+            for (int i = 0; i < fields.size(); i++) {
+                dml = dml + ", ";
+                val = entry.getField(fields.get(i));
+                if (val != null) {
+                    dml = dml + "\"" + val.replaceAll("\"", "\\\\\"") + "\"";
+                } else {
+                    dml = dml + "NULL";
+                }
+            }
+            dml = dml + ");";
+
+            // handle DML according to output type
+            processDML(out, dml);
+
+        }
+
+        return;
+
+    }
+
+     /**
+     * Generates the DML required to populate the groups table with jabref
+     * data, and writes this DML to the output file.
+     * 
+     * @param cursor
+     *            The current GroupTreeNode in the GroupsTree
+     * @param out
+     *            The output (PrintStream or Connection) object to which the DML should be written.
+     */
+	private static int dmlPopTab_GP (GroupTreeNode cursor, Object out) 
+                        throws Exception {
+        int cnt = dmlPopTab_GP_worker(cursor, 1, 1, out);
+        return cnt;
+    }
+
+    /**
+     * Recursive worker method for the dmlPopTab_GP 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.
+     */
+	private static int dmlPopTab_GP_worker (GroupTreeNode cursor, int parentID,
+            int ID, Object out) throws SQLException{
+
+        // handle DML according to output type
+        processDML(out, "INSERT INTO groups (groups_id, label, parent_id) " 
+				      + "VALUES (" + ID + ", \"" + cursor.getGroup().getName() 
+				      + "\", " + parentID + ");");
+
+		// recurse on child nodes (depth-first traversal)
+	    int myID = ID;
+	    for (Enumeration<GroupTreeNode> e = cursor.children(); e.hasMoreElements();) 
+			ID = dmlPopTab_GP_worker(e.nextElement(),myID,++ID,out);
+	    return ID;
+	}
+
+
+    /**
+     * Generates the DML required to populate the entry_group table with jabref
+     * data, and writes the DML to the PrintStream.
+     * 
+     * @param cursor
+     *            The current GroupTreeNode in the GroupsTree
+     * @param out
+     *            The output (PrintStream or Connection) object to which the DML should be written.
+     */
+	private static int dmlPopTab_EG(GroupTreeNode cursor, Object fout) 
+                        throws SQLException{
+
+            int cnt = dmlPopTab_EG_worker(cursor, 1, 1, fout);
+            return cnt;
+    }
+
+    /**
+     * Recursive worker method for the dmlPopTab_EG 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.
+     */
+
+	private static int dmlPopTab_EG_worker(GroupTreeNode cursor, int parentID, int ID, 
+			Object out) throws SQLException{
+
+		// if this group contains entries...
+		if ( cursor.getGroup() instanceof ExplicitGroup) {
+
+			// build INSERT statement for each entry belonging to this group
+			ExplicitGroup grp = (ExplicitGroup)cursor.getGroup();
+			
+			for (BibtexEntry be : grp.getEntries()){
+
+                // handle DML according to output type
+                processDML(out, "INSERT INTO entry_group (entries_id, groups_id) " 
+						   + "VALUES (" 
+						   + "(SELECT entries_id FROM entries WHERE jabref_eid="
+						   + "\"" + be.getId() + "\""
+						   + "), "
+						   + "(SELECT groups_id FROM groups WHERE groups_id=" 
+						   + "\"" + ID + "\")"
+						   + ");");
+			}
+		}
+
+		// recurse on child nodes (depth-first traversal)
+	    int myID = ID;
+	    for (Enumeration<GroupTreeNode> e = cursor.children(); e.hasMoreElements();) 
+			ID = dmlPopTab_EG_worker(e.nextElement(),myID,++ID,out);
+
+	    return ID;
+	}
+
+    /**
+     * Processes a SQLException, and returns a more user-friendly message
+     * 
+     * @param ex
+     *            The SQLException raised
+     * @param dbtype
+     *            DBTYPE specifying the type of database that raised the exception
+     */
+
+    public static String getExceptionMessage (Exception ex, DBTYPE dbtype) {
+        
+        String errorMessage = null;
+
+        switch (dbtype) {
+            case MYSQL:
+                errorMessage = getExceptionMessage_MySQL(ex);
+                break;
+            case DERBY:
+                errorMessage = getExceptionMessage_MySQL(ex);
+                break;
+            default:
+                errorMessage = Globals.lang("Could not determine exception message.");
+                break;
+        }
+
+        return errorMessage;
+
+    }
+
+    /**
+     * Handles work for getExceptionMessage when dbtype is MYSQL
+     * 
+     * @param ex
+     *            The SQLException raised
+     */
+    public static String getExceptionMessage_MySQL (Exception ex) {
+      
+        String msg = null;
+
+        // handle case where exception is SQL related
+        if (ex instanceof SQLException) {
+
+            SQLException sqlex = (SQLException) ex;
+
+            // desc  : Unkown DB
+            // code  : 1049
+            // state : 42000
+            // msg   : Unkown database 'database_name'
+            // type  : SQLException
+            // tested with MySQL
+
+            if (sqlex.getSQLState().equals("42000")) {
+                msg = Globals.lang(sqlex.getMessage());
+            }
+
+
+            // desc  : command denied
+            // code  : 1142
+            // state : 42000
+            // msg   : * command denied to user 'username'@'hostname' for table 'table_name'
+            // tested with MySQL
+
+            if (sqlex.getSQLState().equals("42000")) {
+                msg = Globals.lang("User does not have sufficient privileges.\n");
+                msg = msg + Globals.lang("(" + sqlex.getMessage() + ")");
+            }
+
+
+            // desc  : Invalid username and/or password
+            // code  : 1045
+            // state : 28000
+            // msg   : Access denied for user 'username'@'hostname' (using password: ...) 
+            // type  : SQLException
+            // tested with MySQL
+
+            if (sqlex.getSQLState().equals("28000")) {
+                msg = Globals.lang(sqlex.getMessage());
+            }
+
+
+            // desc  : Cannot connect to SQL server
+            // code  : 0
+            // state : 08S01
+            // msg   : Communications link failure due to underlying exception
+            // type  : java.net.UnknownHostException
+            // tested with MySQL
+
+            if (sqlex.getSQLState().equals("08S01")) {
+                msg = Globals.lang("Cannot connect to SQL server at the specified host.");
+            } 
+
+            // for debugging...
+            if (false) {
+                System.out.println("-------------------------------------");
+                System.out.println(sqlex.getErrorCode());
+                System.out.println(sqlex.getSQLState());
+                System.out.println(sqlex.getMessage());
+                System.out.println("-------------------------------------");
+            }
+
+        } 
+        
+        // handle case where exception is non-SQL related
+        if (msg == null) {
+
+            if (ex.getMessage()==null) {
+                msg = ex.toString();
+            } else {
+                msg = ex.getMessage();
+            }
+
+        }
+
+
+        return msg;
+
+    }
+
+}
diff --git a/src/java/net/sf/jabref/undo/CountingUndoManager.java b/src/java/net/sf/jabref/undo/CountingUndoManager.java
index 2160d8b..cf7fd2b 100644
--- a/src/java/net/sf/jabref/undo/CountingUndoManager.java
+++ b/src/java/net/sf/jabref/undo/CountingUndoManager.java
@@ -26,8 +26,9 @@ http://www.gnu.org/copyleft/gpl.ja.html
 */
 package net.sf.jabref.undo;
 
-import javax.swing.undo.*;
-import javax.swing.*;
+import javax.swing.undo.CannotUndoException;
+import javax.swing.undo.UndoManager;
+import javax.swing.undo.UndoableEdit;
 
 import net.sf.jabref.BasePanel;
 
diff --git a/src/java/net/sf/jabref/undo/NamedCompound.java b/src/java/net/sf/jabref/undo/NamedCompound.java
index 7e6354f..f867071 100644
--- a/src/java/net/sf/jabref/undo/NamedCompound.java
+++ b/src/java/net/sf/jabref/undo/NamedCompound.java
@@ -27,18 +27,30 @@ http://www.gnu.org/copyleft/gpl.ja.html
 
 package net.sf.jabref.undo;
 
-import javax.swing.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;
     }
diff --git a/src/java/net/sf/jabref/undo/UndoableChangeType.java b/src/java/net/sf/jabref/undo/UndoableChangeType.java
index d3cb12c..0b4b509 100644
--- a/src/java/net/sf/jabref/undo/UndoableChangeType.java
+++ b/src/java/net/sf/jabref/undo/UndoableChangeType.java
@@ -26,9 +26,10 @@ http://www.gnu.org/copyleft/gpl.ja.html
 */
 package net.sf.jabref.undo;
 
-import javax.swing.undo.*;
-import java.util.HashMap;
-import net.sf.jabref.*;
+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.
diff --git a/src/java/net/sf/jabref/undo/UndoableFieldChange.java b/src/java/net/sf/jabref/undo/UndoableFieldChange.java
index db7bd9c..bff014a 100644
--- a/src/java/net/sf/jabref/undo/UndoableFieldChange.java
+++ b/src/java/net/sf/jabref/undo/UndoableFieldChange.java
@@ -26,7 +26,8 @@ http://www.gnu.org/copyleft/gpl.ja.html
 */
 package net.sf.jabref.undo;
 
-import javax.swing.undo.*;
+import javax.swing.undo.AbstractUndoableEdit;
+
 import net.sf.jabref.BibtexEntry;
 import net.sf.jabref.Util;
 
@@ -39,10 +40,10 @@ public class UndoableFieldChange extends AbstractUndoableEdit {
 
     private BibtexEntry entry;
     private String field;
-    private Object oldValue, newValue;
+    private String oldValue, newValue;
 
     public UndoableFieldChange(BibtexEntry entry, String field,
-			       Object oldValue, Object newValue) {
+			       String oldValue, String newValue) {
 	this.entry = entry;
 	this.field = field;
 	this.oldValue = oldValue;
diff --git a/src/java/net/sf/jabref/undo/UndoableInsertEntry.java b/src/java/net/sf/jabref/undo/UndoableInsertEntry.java
index 1febf03..4e55b7b 100644
--- a/src/java/net/sf/jabref/undo/UndoableInsertEntry.java
+++ b/src/java/net/sf/jabref/undo/UndoableInsertEntry.java
@@ -26,9 +26,12 @@ http://www.gnu.org/copyleft/gpl.ja.html
 */
 package net.sf.jabref.undo;
 
-import javax.swing.undo.*;
-import net.sf.jabref.*;
-import java.util.HashMap;
+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
diff --git a/src/java/net/sf/jabref/undo/UndoableInsertString.java b/src/java/net/sf/jabref/undo/UndoableInsertString.java
index 6e91514..077074f 100644
--- a/src/java/net/sf/jabref/undo/UndoableInsertString.java
+++ b/src/java/net/sf/jabref/undo/UndoableInsertString.java
@@ -26,7 +26,8 @@ http://www.gnu.org/copyleft/gpl.ja.html
 */
 package net.sf.jabref.undo;
 
-import javax.swing.undo.*;
+import javax.swing.undo.AbstractUndoableEdit;
+
 import net.sf.jabref.*;
 
 public class UndoableInsertString extends AbstractUndoableEdit {
diff --git a/src/java/net/sf/jabref/undo/UndoableKeyChange.java b/src/java/net/sf/jabref/undo/UndoableKeyChange.java
index 8a2f95d..fb9abc3 100644
--- a/src/java/net/sf/jabref/undo/UndoableKeyChange.java
+++ b/src/java/net/sf/jabref/undo/UndoableKeyChange.java
@@ -26,9 +26,9 @@ http://www.gnu.org/copyleft/gpl.html
 */
 package net.sf.jabref.undo;
 
-import javax.swing.undo.*;
+import javax.swing.undo.AbstractUndoableEdit;
+
 import net.sf.jabref.BibtexDatabase;
-import net.sf.jabref.Util;
 import net.sf.jabref.Globals;
 
 /**
diff --git a/src/java/net/sf/jabref/undo/UndoablePreambleChange.java b/src/java/net/sf/jabref/undo/UndoablePreambleChange.java
index 2200f92..ecf4ef3 100644
--- a/src/java/net/sf/jabref/undo/UndoablePreambleChange.java
+++ b/src/java/net/sf/jabref/undo/UndoablePreambleChange.java
@@ -26,8 +26,11 @@ http://www.gnu.org/copyleft/gpl.ja.html
 */
 package net.sf.jabref.undo;
 
-import javax.swing.undo.*;
-import net.sf.jabref.*;
+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
diff --git a/src/java/net/sf/jabref/undo/UndoableRemoveEntry.java b/src/java/net/sf/jabref/undo/UndoableRemoveEntry.java
index f78eb86..13f8f02 100644
--- a/src/java/net/sf/jabref/undo/UndoableRemoveEntry.java
+++ b/src/java/net/sf/jabref/undo/UndoableRemoveEntry.java
@@ -26,9 +26,12 @@ http://www.gnu.org/copyleft/gpl.ja.html
 */
 package net.sf.jabref.undo;
 
-import javax.swing.undo.*;
-import net.sf.jabref.*;
-import java.util.HashMap;
+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
diff --git a/src/java/net/sf/jabref/undo/UndoableRemoveString.java b/src/java/net/sf/jabref/undo/UndoableRemoveString.java
index 21ba103..ca455c9 100644
--- a/src/java/net/sf/jabref/undo/UndoableRemoveString.java
+++ b/src/java/net/sf/jabref/undo/UndoableRemoveString.java
@@ -26,7 +26,8 @@ http://www.gnu.org/copyleft/gpl.ja.html
 */
 package net.sf.jabref.undo;
 
-import javax.swing.undo.*;
+import javax.swing.undo.AbstractUndoableEdit;
+
 import net.sf.jabref.*;
 
 public class UndoableRemoveString extends AbstractUndoableEdit {
diff --git a/src/java/net/sf/jabref/undo/UndoableStringChange.java b/src/java/net/sf/jabref/undo/UndoableStringChange.java
index 146a47a..0a1ff90 100644
--- a/src/java/net/sf/jabref/undo/UndoableStringChange.java
+++ b/src/java/net/sf/jabref/undo/UndoableStringChange.java
@@ -27,8 +27,11 @@ http://www.gnu.org/copyleft/gpl.ja.html
 
 package net.sf.jabref.undo;
 
-import javax.swing.undo.*;
-import net.sf.jabref.*;
+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 {
 
diff --git a/src/java/net/sf/jabref/util/CaseChangeMenu.java b/src/java/net/sf/jabref/util/CaseChangeMenu.java
index 38a5ec5..c193ae6 100644
--- a/src/java/net/sf/jabref/util/CaseChangeMenu.java
+++ b/src/java/net/sf/jabref/util/CaseChangeMenu.java
@@ -2,7 +2,7 @@ package net.sf.jabref.util;
 
 /* Mp3dings - manage mp3 meta-information
  * Copyright (C) 2003 Moritz Ringler
- * $Id: CaseChangeMenu.java 864 2005-03-20 20:47:54Z mortenalver $
+ * $Id: CaseChangeMenu.java 2268 2007-08-19 23:37:05Z coezbek $
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -37,10 +37,10 @@ public class CaseChangeMenu extends JMenu implements ActionListener{
         /* case */
         super(Globals.lang("Change case"));
         parent = opener;
-        int m = cc.getNumModes();
+        int m = CaseChanger.getNumModes();
         changeCaseItems = new JMenuItem[m];
         for (int i=0;i<m;i++){
-            changeCaseItems[i]=new JMenuItem(Globals.lang(cc.getModeName(i)));
+            changeCaseItems[i]=new JMenuItem(Globals.lang(CaseChanger.getModeName(i)));
             changeCaseItems[i].addActionListener(this);
             this.add(changeCaseItems[i]);
         }
@@ -48,7 +48,7 @@ public class CaseChangeMenu extends JMenu implements ActionListener{
 
     public void actionPerformed(ActionEvent e) {
         Object source = (e.getSource());
-        for(int i=0, m=cc.getNumModes(); i<m; i++){
+        for(int i=0, m=CaseChanger.getNumModes(); i<m; i++){
             if(source == changeCaseItems[i]){
                 caseChange(i);
                 break;
@@ -57,6 +57,6 @@ public class CaseChangeMenu extends JMenu implements ActionListener{
     }
 
     private void caseChange(int mode){
-        parent.setText(cc.changeCase(parent.getText(), mode));
+        parent.setText(CaseChanger.changeCase(parent.getText(), mode));
     }
 }
\ No newline at end of file
diff --git a/src/java/net/sf/jabref/util/DocumentPrinter.java b/src/java/net/sf/jabref/util/DocumentPrinter.java
new file mode 100644
index 0000000..0428ec8
--- /dev/null
+++ b/src/java/net/sf/jabref/util/DocumentPrinter.java
@@ -0,0 +1,348 @@
+package net.sf.jabref.util;
+
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.Rectangle;
+import java.awt.Shape;
+import java.awt.print.PageFormat;
+import java.awt.print.Printable;
+import java.awt.print.PrinterException;
+import java.awt.print.PrinterJob;
+
+import javax.swing.JEditorPane;
+import javax.swing.text.View;
+
+/**
+ * DocumentPrinter prints objects of type Document. Text attributes, including
+ * fonts, color, and small icons, will be rendered to a printed page.
+ * DocumentPrinter computes line breaks, paginates, and performs other
+ * formatting.
+ * 
+ * An HTMLDocument is printed by sending it as an argument to the
+ * print(HTMLDocument) method. A PlainDocument is printed the same way. Other
+ * types of documents must be sent in a JEditorPane as an argument to the
+ * print(JEditorPane) method. Printing Documents in this way will automatically
+ * display a print dialog.
+ * 
+ * As objects which implement the Printable Interface, instances of the
+ * DocumentPrinter class can also be used as the argument in the setPrintable
+ * method of the PrinterJob class. Instead of using the print() methods detailed
+ * above, a programmer may gain access to the formatting capabilities of this
+ * class without using its print dialog by creating an instance of
+ * DocumentPrinter and setting the document to be printed with the setDocument()
+ * or setJEditorPane(). The Document may then be printed by setting the instance
+ * of DocumentPrinter in any PrinterJob.
+ * 
+ * This class is based on "How to print HTML from a jEditorPane - faq269-5935"
+ * 
+ * http://www.tek-tips.com/faqs.cfm?fid=5935
+ * 
+ * and was originally called DocumentPrinter.
+ * 
+ * Copyright 2002 Kei G. Gauthier Suite 301 77 Winsor Street Ludlow, MA 01056
+ * 
+ * Originally attributed by Kei to
+ * 
+ * http://www.fawcette.com/javapro/2002_12/online/print_kgauthier_12_10_02/default_pf.aspx
+ * 
+ * @author Christopher Oezbek
+ * 
+ * I stripped the class of all the boilerplate I could find (protected and
+ * such).
+ * 
+ */
+public class DocumentPrinter {
+
+	/**
+	 * Note that pFormat is not the variable name used by the print method of
+	 * the DocumentPrintable. Although it would always be expected to reference
+	 * the pFormat object, the print method gets its PageFormat as an argument.
+	 */
+	PageFormat pFormat;
+
+	/**
+	 * Global job used by this DocumentPrinter. Initialized upon calling the
+	 * constructor.
+	 */
+	PrinterJob pJob;
+
+	/**
+	 * The constructor initializes the pFormat and PJob variables.
+	 * 
+	 * Caution calling PrinterJob.getPrinterJob() is done here which is
+	 * resource-intensive.
+	 */
+	public DocumentPrinter() {
+		pFormat = new PageFormat();
+		pJob = PrinterJob.getPrinterJob();
+	}
+
+	/**
+	 * pageDialog() displays a page setup dialog. Typically this is called by
+	 * "File -> Print Setup"
+	 */
+	public void pageDialog() {
+		pFormat = pJob.pageDialog(pFormat);
+	}
+
+	/**
+	 * print(JEditorPane) prints a Document contained within a JEditorPane if
+	 * the user confirms it using the printer dialog shown upon this call.
+	 * 
+	 * This method is useful when Java does not provide direct access to a
+	 * particular Document type, such as a Rich Text Format document. With this
+	 * method such a document can be sent to the DocumentPrinter class enclosed
+	 * in a JEditorPane.
+	 * 
+	 * To pass a HTMLDocument call this method with an editorPane that contains
+	 * the document
+	 * 
+	 * <pre>
+	 * JEditorPane pane = new JEditorPane();
+	 * pane.setContentType("text/html");
+	 * pane.setDocument(htmlDocument);
+	 * </pre>
+	 * 
+	 * This method is not thread-safe, if that matters to anybody, since it only
+	 * uses a single PrinterJob.
+	 * 
+	 * @param jobName
+	 *            (may be null) The print-job will get this attribute set, which
+	 *            for instance is used by the Adobe PDF writer to determine an
+	 *            initial guess for a filename or which is displayed in the
+	 *            printer spooler.
+	 * @param jedPane
+	 *            The pane which to print. This is done by copying document and
+	 *            content type. The original jedPane is not modified.
+	 * @return The method will return false if the user canceled the operation,
+	 *         true if the pages where send to the printing system successfully
+	 *         and will throw an PrinterException to show to the user if an
+	 *         error occurred.
+	 * 
+	 * @throws PrinterException
+	 *             Show this exception to the user.
+	 */
+	public boolean print(String jobName, JEditorPane jedPane)
+		throws PrinterException {
+
+		if (!pJob.printDialog())
+			return false;
+
+		if (jobName != null)
+			pJob.setJobName(jobName);
+
+		JEditorPane pane = new JEditorPane();
+		pane.setContentType(jedPane.getContentType());
+		pane.setDocument(jedPane.getDocument());
+
+		pJob.setPrintable(new DocumentPrintable(pane), pFormat);
+
+		pJob.print();
+
+		return true;
+	}
+
+	/**
+	 * Class that actually does the printing.
+	 * 
+	 */
+	class DocumentPrintable implements Printable {
+
+		/**
+		 * boolean to allow control over whether pages too wide to fit on a page
+		 * will be scaled.
+		 */
+		boolean scaleWidthToFit = true;
+
+		/**
+		 * Used to keep track of when the page to print changes.
+		 */
+		int currentPage = -1;
+
+		/**
+		 * Location of the current page end.
+		 */
+		double pageEndY = 0;
+
+		/**
+		 * Location of the current page start.
+		 */
+		double pageStartY = 0;
+
+		/**
+		 * Stores the JEditorPane that is being printed.
+		 */
+		JEditorPane pane;
+
+		public DocumentPrintable(JEditorPane pane) {
+			this.pane = pane;
+		}
+
+		/**
+		 * The print method implements the Printable interface. Although
+		 * Printables may be called to render a page more than once, each page
+		 * is painted in order. We may, therefore, keep track of changes in the
+		 * page being rendered by setting the currentPage variable to equal the
+		 * pageIndex, and then comparing these variables on subsequent calls to
+		 * this method. When the two variables match, it means that the page is
+		 * being rendered for the second or third time. When the currentPage
+		 * differs from the pageIndex, a new page is being requested.
+		 * 
+		 * The highlights of the process used print a page are as follows:
+		 * 
+		 * I. The Graphics object is cast to a Graphics2D object to allow for
+		 * scaling. II. The JEditorPane is laid out using the width of a
+		 * printable page. This will handle line breaks. If the JEditorPane
+		 * cannot be sized at the width of the graphics clip, scaling will be
+		 * allowed. III. The root view of the JEditorPane is obtained. By
+		 * examining this root view and all of its children, printView will be
+		 * able to determine the location of each printable element of the
+		 * document. IV. If the scaleWidthToFit option is chosen, a scaling
+		 * ratio is determined, and the graphics2D object is scaled. V. The
+		 * Graphics2D object is clipped to the size of the printable page. VI.
+		 * currentPage is checked to see if this is a new page to render. If so,
+		 * pageStartY and pageEndY are reset. VII. To match the coordinates of
+		 * the printable clip of graphics2D and the allocation rectangle which
+		 * will be used to lay out the views, graphics2D is translated to begin
+		 * at the printable X and Y coordinates of the graphics clip. VIII. An
+		 * allocation Rectangle is created to represent the layout of the Views.
+		 * 
+		 * The Printable Interface always prints the area indexed by reference
+		 * to the Graphics object. For instance, with a standard 8.5 x 11 inch
+		 * page with 1 inch margins the rectangle X = 72, Y = 72, Width = 468,
+		 * and Height = 648, the area 72, 72, 468, 648 will be painted
+		 * regardless of which page is actually being printed.
+		 * 
+		 * To align the allocation Rectangle with the graphics2D object two
+		 * things are done. The first step is to translate the X and Y
+		 * coordinates of the graphics2D object to begin at the X and Y
+		 * coordinates of the printable clip, see step VII. Next, when printing
+		 * other than the first page, the allocation rectangle must start laying
+		 * out in coordinates represented by negative numbers. After page one,
+		 * the beginning of the allocation is started at minus the page end of
+		 * the prior page. This moves the part which has already been rendered
+		 * to before the printable clip of the graphics2D object.
+		 * 
+		 * X. The printView method is called to paint the page. Its return value
+		 * will indicate if a page has been rendered.
+		 * 
+		 * Although public, print should not ordinarily be called by programs
+		 * other than PrinterJob.
+		 */
+		public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) {
+			double scale = 1.0;
+			Graphics2D graphics2D;
+			View rootView;
+			// I
+			graphics2D = (Graphics2D) graphics;
+			// II
+			pane.setSize((int) pageFormat.getImageableWidth(),
+				Integer.MAX_VALUE);
+			pane.validate();
+			// III
+			rootView = pane.getUI().getRootView(pane);
+			// IV
+			if ((scaleWidthToFit)
+				&& (pane.getMinimumSize().getWidth() > pageFormat
+					.getImageableWidth())) {
+				scale = pageFormat.getImageableWidth()
+					/ pane.getMinimumSize().getWidth();
+				graphics2D.scale(scale, scale);
+			}
+			// V
+			graphics2D.setClip((int) (pageFormat.getImageableX() / scale),
+				(int) (pageFormat.getImageableY() / scale), (int) (pageFormat
+					.getImageableWidth() / scale), (int) (pageFormat
+					.getImageableHeight() / scale));
+			// VI
+			if (pageIndex > currentPage) {
+				currentPage = pageIndex;
+				pageStartY += pageEndY;
+				pageEndY = graphics2D.getClipBounds().getHeight();
+			}
+			// VII
+			graphics2D.translate(graphics2D.getClipBounds().getX(), graphics2D
+				.getClipBounds().getY());
+			// VIII
+			Rectangle allocation = new Rectangle(0, (int) -pageStartY,
+				(int) (pane.getMinimumSize().getWidth()), (int) (pane
+					.getPreferredSize().getHeight()));
+			// X
+			if (printView(graphics2D, allocation, rootView)) {
+				return Printable.PAGE_EXISTS;
+			} else {
+				pageStartY = 0;
+				pageEndY = 0;
+				currentPage = -1;
+				return Printable.NO_SUCH_PAGE;
+			}
+		}
+
+		/**
+		 * printView is a recursive method which iterates through the tree
+		 * structure of the view sent to it. If the view sent to printView is a
+		 * branch view, that is one with children, the method calls itself on
+		 * each of these children. If the view is a leaf view, that is a view
+		 * without children which represents an actual piece of text to be
+		 * painted, printView attempts to render the view to the Graphics2D
+		 * object.
+		 * 
+		 * I. When any view starts after the beginning of the current printable
+		 * page, this means that there are pages to print and the method sets
+		 * pageExists to true. II. When a leaf view is taller than the printable
+		 * area of a page, it cannot, of course, be broken down to fit a single
+		 * page. Such a View will be printed whenever it intersects with the
+		 * Graphics2D clip. III. If a leaf view intersects the printable area of
+		 * the graphics clip and fits vertically within the printable area, it
+		 * will be rendered. IV. If a leaf view does not exceed the printable
+		 * area of a page but does not fit vertically within the Graphics2D clip
+		 * of the current page, the method records that this page should end at
+		 * the start of the view. This information is stored in pageEndY.
+		 */
+		boolean printView(Graphics2D graphics2D, Shape allocation, View view) {
+			boolean pageExists = false;
+			Rectangle clipRectangle = graphics2D.getClipBounds();
+			Shape childAllocation;
+			View childView;
+
+			if (view.getViewCount() > 0
+				&& !view.getElement().getName().equalsIgnoreCase("td")) {
+				for (int i = 0; i < view.getViewCount(); i++) {
+					childAllocation = view.getChildAllocation(i, allocation);
+					if (childAllocation != null) {
+						childView = view.getView(i);
+						if (printView(graphics2D, childAllocation, childView)) {
+							pageExists = true;
+						}
+					}
+				}
+			} else {
+				// I
+				if (allocation.getBounds().getMaxY() >= clipRectangle.getY()) {
+					pageExists = true;
+					// II
+					if ((allocation.getBounds().getHeight() > clipRectangle
+						.getHeight())
+						&& (allocation.intersects(clipRectangle))) {
+						view.paint(graphics2D, allocation);
+					} else {
+						// III
+						if (allocation.getBounds().getY() >= clipRectangle
+							.getY()) {
+							if (allocation.getBounds().getMaxY() <= clipRectangle
+								.getMaxY()) {
+								view.paint(graphics2D, allocation);
+							} else {
+								// IV
+								if (allocation.getBounds().getY() < pageEndY) {
+									pageEndY = allocation.getBounds().getY();
+								}
+							}
+						}
+					}
+				}
+			}
+			return pageExists;
+		}
+	}
+}
\ No newline at end of file
diff --git a/src/java/net/sf/jabref/util/ErrorConsole.java b/src/java/net/sf/jabref/util/ErrorConsole.java
index b89c434..1dd660d 100644
--- a/src/java/net/sf/jabref/util/ErrorConsole.java
+++ b/src/java/net/sf/jabref/util/ErrorConsole.java
@@ -1,12 +1,13 @@
 package net.sf.jabref.util;
 
-import net.sf.jabref.Globals;
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.io.ByteArrayOutputStream;
+import java.io.PrintStream;
 
 import javax.swing.*;
-import java.io.PrintStream;
-import java.io.ByteArrayOutputStream;
-import java.awt.*;
-import java.awt.event.ActionEvent;
+
+import net.sf.jabref.Globals;
 
 /**
  * This class redirects the System.err stream so it goes both the way it normally
diff --git a/src/java/net/sf/jabref/util/MassSetFieldAction.java b/src/java/net/sf/jabref/util/MassSetFieldAction.java
index 4bfea21..dd75708 100644
--- a/src/java/net/sf/jabref/util/MassSetFieldAction.java
+++ b/src/java/net/sf/jabref/util/MassSetFieldAction.java
@@ -1,24 +1,21 @@
 package net.sf.jabref.util;
 
-import net.sf.jabref.*;
-import net.sf.jabref.undo.NamedCompound;
-
-import javax.swing.*;
-import javax.swing.event.ChangeListener;
-import javax.swing.event.ChangeEvent;
-import javax.swing.undo.UndoableEdit;
+import java.awt.BorderLayout;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
-import java.awt.*;
-import java.util.List;
-import java.util.Collection;
-import java.util.ArrayList;
 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.DefaultFormBuilder;
 import com.jgoodies.forms.builder.ButtonBarBuilder;
+import com.jgoodies.forms.builder.DefaultFormBuilder;
 import com.jgoodies.forms.layout.FormLayout;
-import com.jgoodies.uif_lite.panel.SimpleInternalFrame;
 
 /**
  * An Action for launching mass field.
@@ -149,7 +146,7 @@ public class MassSetFieldAction extends MnemonicAwareAction {
         if (cancelled)
             return;
 
-        Collection entryList;
+        Collection<BibtexEntry> entryList;
         // If all entries should be treated, change the entries array:
         if (all.isSelected())
             entryList = bp.database().getEntries();
diff --git a/src/java/net/sf/jabref/util/Pair.java b/src/java/net/sf/jabref/util/Pair.java
new file mode 100644
index 0000000..4948aa3
--- /dev/null
+++ b/src/java/net/sf/jabref/util/Pair.java
@@ -0,0 +1,370 @@
+package net.sf.jabref.util;
+
+import java.util.*;
+
+import net.sf.jabref.Util;
+
+/**
+ * Class for putting objects of two types together.
+ * 
+ * The usual way to use this is like this:
+ * 
+ * <pre>
+ * Pair<Integer, String> intStr = new Pair<Integer, String>(5, "Hello");
+ * 
+ * intStr.p == 5
+ * intStr.v == "Hello"
+ * </pre>
+ * 
+ * @author oezbek
+ * 
+ * @param <P> First type to be contained in the pair.
+ * @param <V> Second type to be contained in the pair.
+ */
+public class Pair<P, V> {
+
+	/**
+	 * Direct access to the p element is allowed.
+	 */
+	public P p;
+
+	/**
+	 * Direct access to the v element is allowed.
+	 */
+	public V v;
+
+	/**
+	 * Constructor that sets the given p and v values.
+	 * 
+	 * @param p
+	 * @param v
+	 */
+	public Pair(P p, V v) {
+		this.p = p;
+		this.v = v;
+	}
+
+	/**
+	 * Returns a comparator that compares by p.
+	 * 
+	 * @param <V>
+	 *            The V type is not important for this method.
+	 * @param
+	 *            <P>
+	 *            The P type of the pair needs to be comparable.
+	 * @return A comparator for the p in a pair.
+	 */
+	public static <P extends Comparable<P>, V> Comparator<Pair<P, V>> pCompare() {
+		return new Comparator<Pair<P, V>>() {
+			public int compare(Pair<P, V> arg0, Pair<P, V> arg1) {
+				return arg0.p.compareTo(arg1.p);
+			}
+		};
+	}
+
+	/**
+	 * Given a comparator for p elements, returns a Comparator for pairs which
+	 * uses this given comparator to make the comparison.
+	 * 
+	 * @param <V>
+	 *            The V-Type of the Pair.
+	 * @param
+	 *            <P>
+	 *            The P-Type of the Pair.
+	 * @param comp
+	 *            A comparator which will be wrapped so that it can be used to
+	 *            compare
+	 * @return A comparator for Pairs of type P and V which makes use of the
+	 *         given comparator.
+	 */
+	public static <P> Comparator<? super Pair<P, ?>> pCompare(
+		final Comparator<P> comp) {
+		return new Comparator<Pair<P, ?>>() {
+			public int compare(Pair<P, ?> arg0, Pair<P, ?> arg1) {
+				return comp.compare(arg0.p, arg1.p);
+			}
+		};
+	}
+
+	/**
+	 * Returns a Pair with the type and the contents of the current Pair flipped
+	 * from P to V.
+	 * 
+	 * <pre>
+	 * Pair<Integer, String> intString = new Pair<Integer, String>(5, "Hallo");
+	 * Pair<String, Integer> strInteger = intString.flip();
+	 * </pre>
+	 */
+	public Pair<V, P> flip() {
+		return new Pair<V, P>(v, p);
+	}
+
+	/**
+	 * Returns a list of pairs with P and V being switched.
+	 * 
+	 * @param
+	 * <P>
+	 * @param <V>
+	 * @param list
+	 * @return
+	 */
+	public static <P, V> List<Pair<V, P>> flipList(List<Pair<P, V>> list) {
+		LinkedList<Pair<V, P>> result = new LinkedList<Pair<V, P>>();
+		for (Pair<P, V> pair : list)
+			result.add(pair.flip());
+		return result;
+	}
+
+	/**
+	 * Given a collection of Pair<P,V> it will put all V values that have the
+	 * same P-value together in a set and return a collection of those sets with
+	 * their associated P.
+	 * 
+	 * Example:
+	 * 
+	 * <pre>
+	 * Collection<Pair<Integer, String>> c = new LinkedList<Pair<Integer, String>>();
+	 * c.add(new Pair<Integer, String>(3, "Hallo"));
+	 * c.add(new Pair<Integer, String>(4, "Bye"));
+	 * c.add(new Pair<Integer, String>(3, "Adios"));
+	 * 
+	 * Collection<Pair<Integer, Set<String>>> result = Pair.disjointPartition(c);
+	 * 
+	 * result == [(3, ["Hallo", "Adios"]), (4, ["Bye"])]
+	 * </pre>
+	 * 
+	 * @param
+	 * <P>
+	 * @param <V>
+	 * @param list
+	 * @return
+	 */
+	public static <P extends Comparable<P>, V> List<Pair<P, Set<V>>> disjointPartition(
+		List<Pair<P, V>> list) {
+
+		List<Pair<P, Set<V>>> result = new LinkedList<Pair<P, Set<V>>>();
+
+		Comparator<Pair<P, V>> c = Pair.pCompare();
+		Collections.sort(list, Collections.reverseOrder(c));
+
+		Iterator<Pair<P, V>> i = list.iterator();
+
+		Set<V> vs;
+
+		if (i.hasNext()) {
+			Pair<P, V> first = i.next();
+			P last = first.p;
+			vs = new HashSet<V>();
+			vs.add(first.v);
+
+			while (i.hasNext()) {
+				Pair<P, V> next = i.next();
+				if (last.compareTo(next.p) == 0) {
+					vs.add(next.v);
+				} else {
+					result.add(new Pair<P, Set<V>>(last, vs));
+					vs = new HashSet<V>();
+					last = next.p;
+					vs.add(next.v);
+				}
+			}
+			result.add(new Pair<P, Set<V>>(last, vs));
+		}
+		return result;
+
+	}
+
+	/**
+	 * Returns a comparator that compares by v.
+	 * 
+	 * @param
+	 * <P>
+	 * The P type is not important for this method.
+	 * @param <V>
+	 *            The V type of the pair needs to be comparable.
+	 * @return A comparator for the v in a pair.
+	 */
+	public static <V extends Comparable<V>> Comparator<? super Pair<?, V>> vCompare() {
+		return new Comparator<Pair<?, V>>() {
+			public int compare(Pair<?, V> arg0, Pair<?, V> arg1) {
+				return arg0.v.compareTo(arg1.v);
+			}
+		};
+	}
+
+	/**
+	 * Given a comparator for v elements, returns a Comparator for pairs which
+	 * uses this given comparator to make the comparison.
+	 * 
+	 * @param
+	 * <P>
+	 * The P-Type of the Pair.
+	 * @param <V>
+	 *            The V-Type of the Pair.
+	 * @param vComp
+	 *            A comparator which will be wrapped so that it can be used to
+	 *            compare
+	 * @return A comparator for Pairs of type P and V which makes use of the
+	 *         given comparator.
+	 */
+	public static <V> Comparator<? super Pair<?,V>> vCompare(
+		final Comparator<V> vComp) {
+		return new Comparator<Pair<?, V>>() {
+			public int compare(Pair<?, V> arg0, Pair<?, V> arg1) {
+				return vComp.compare(arg0.v, arg1.v);
+			}
+		};
+	}
+
+	/**
+	 * Takes a list of P and list of V and returns a list of Pair<P,V>. If the
+	 * lengths of the lists differ missing values are padded by null.
+	 * 
+	 * @param
+	 * <P>
+	 * @param <V>
+	 * @param ps
+	 * @param vs
+	 * @return
+	 */
+	public static <P, V> List<Pair<P, V>> zip(List<P> ps, List<V> vs) {
+
+		List<Pair<P, V>> result = new LinkedList<Pair<P, V>>();
+
+		Iterator<P> pI = ps.iterator();
+		Iterator<V> vI = vs.iterator();
+
+		while (pI.hasNext()) {
+			V nextV = (vI.hasNext() ? vI.next() : null);
+			result.add(new Pair<P, V>(pI.next(), nextV));
+		}
+		while (vI.hasNext()) {
+			result.add(new Pair<P, V>(null, vI.next()));
+		}
+		return result;
+	}
+
+	/**
+	 * Unzips the given pair list by returning a list of the p values.
+	 * 
+	 * @param
+	 * <P>
+	 * @param <V>
+	 * @param list
+	 * @return
+	 */
+	public static <P> List<P> pList(List<? extends Pair<P, ?>> list) {
+
+		List<P> result = new LinkedList<P>();
+
+		for (Pair<P, ?> pair : list) {
+			result.add(pair.p);
+		}
+		return result;
+	}
+
+	/**
+	 * Unzips the given pair by return a list of the v values.
+	 * 
+	 * @param <V>
+	 * @param list
+	 * @return
+	 */
+	public static <V> List<V> vList(List<? extends Pair<?, V>> list) {
+
+		List<V> result = new LinkedList<V>();
+
+		for (Pair<?, V> pair : list) {
+			result.add(pair.v);
+		}
+		return result;
+	}
+
+	
+	/**
+	 * Given an Iterator in Pair<P,V>, will return an Iterator in V that proxies all calls to the given iterator.
+	 */
+	public static <V> Iterator<V> iteratorV(final Iterator<? extends Pair<?, V>> iterator){
+		return new Iterator<V>(){
+			public boolean hasNext() {
+				return iterator.hasNext();
+			}
+
+			public V next() {
+				return iterator.next().v;
+			}
+
+			public void remove() {
+				iterator.remove();
+			}
+		};
+	}
+	
+	/**
+	 * Given an iterable in Pair<P,V> will return an iterable in P.
+	 */
+	public static <V> Iterable<V> iterableV(final Iterable<? extends Pair<?, V>> iterable){
+		return new Iterable<V>(){
+			public Iterator<V> iterator() {
+				return iteratorV(iterable.iterator());
+			}
+		};
+	}
+	
+	/**
+	 * Given an Iterator in Pair<P,V>, will return an Iterator in P that proxies all calls to the given iterator.
+	 */
+	public static <P> Iterator<P> iteratorP(final Iterator<? extends Pair<P,?>> iterator){
+		return new Iterator<P>(){
+			public boolean hasNext() {
+				return iterator.hasNext();
+			}
+
+			public P next() {
+				return iterator.next().p;
+			}
+
+			public void remove() {
+				iterator.remove();
+			}
+		};
+	}
+	
+	/**
+	 * Given an iterable in Pair<P,V> will return an iterable in P.
+	 */
+	public static <P> Iterable<P> iterableP(final Iterable<? extends Pair<P,?>> iterable){
+		return new Iterable<P>(){
+			public Iterator<P> iterator() {
+				return iteratorP(iterable.iterator());
+			}
+		};
+	}
+	
+	/**
+	 * Debugging Output method using the toString method of P and V.
+	 */
+	public String toString() {
+		return new StringBuffer().append('<').append(p).append(',').append(v)
+			.append('>').toString();
+	}
+
+	@Override
+	public int hashCode() {
+		return (this.p == null ? 0 : this.p.hashCode())
+			| (this.v == null ? 0 : this.v.hashCode());
+	}
+
+	/**
+	 * Returns true if both the p and v of the given pair equal p and v in the
+	 * current Pair.
+	 */
+	public boolean equals(Object o) {
+		if (!(o instanceof Pair))
+			return false;
+
+		Pair<?, ?> other = (Pair<?, ?>) o;
+		return Util.equals(this.p, other.p) && Util.equals(this.v, other.v);
+	}
+
+}
diff --git a/src/java/net/sf/jabref/util/ResourceExtractor.java b/src/java/net/sf/jabref/util/ResourceExtractor.java
index 08d19d2..567d7fc 100644
--- a/src/java/net/sf/jabref/util/ResourceExtractor.java
+++ b/src/java/net/sf/jabref/util/ResourceExtractor.java
@@ -7,9 +7,13 @@
 package net.sf.jabref.util;
 
 import java.awt.Component;
+import java.io.File;
+import java.io.IOException;
 import java.net.URL;
-import java.io.*;
-import net.sf.jabref.*;
+
+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,
diff --git a/src/java/net/sf/jabref/util/TBuildInfo.java b/src/java/net/sf/jabref/util/TBuildInfo.java
index d8d0ba3..ebd3f7b 100644
--- a/src/java/net/sf/jabref/util/TBuildInfo.java
+++ b/src/java/net/sf/jabref/util/TBuildInfo.java
@@ -29,14 +29,15 @@
 //
 // function : read build informations from build.properies file
 //
-// todo:
 //
 // modified:
 //
 
 package net.sf.jabref.util;
 
-import java.io.* ;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
 
 public class TBuildInfo
 {
diff --git a/src/java/net/sf/jabref/util/TXMLReader.java b/src/java/net/sf/jabref/util/TXMLReader.java
index 8d23e36..5073ccc 100644
--- a/src/java/net/sf/jabref/util/TXMLReader.java
+++ b/src/java/net/sf/jabref/util/TXMLReader.java
@@ -31,18 +31,21 @@
 //
 // function : simple xml reader functions
 //
-// todo     :
 //
 // modified :
 
 package net.sf.jabref.util ;
 
-import java.io.* ;
-import javax.xml.parsers.* ;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
 
-import org.w3c.dom.* ;
-import org.xml.sax.* ;
-import net.sf.jabref.*;
+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
 {
diff --git a/src/java/net/sf/jabref/util/TypeOr.java b/src/java/net/sf/jabref/util/TypeOr.java
new file mode 100644
index 0000000..fabb9a6
--- /dev/null
+++ b/src/java/net/sf/jabref/util/TypeOr.java
@@ -0,0 +1,34 @@
+package net.sf.jabref.util;
+
+/**
+ * This little contraption is used if a generic type is needed that is either a
+ * S or a T.
+ * 
+ * @author oezbek
+ * 
+ * @param <S>
+ * @param <T>
+ */
+public class TypeOr<S, T> {
+
+	public S s;
+
+	public T t;
+
+	public TypeOr(S s, T t) {
+		if (!(s == null ^ t == null))
+			throw new IllegalArgumentException("Either s or t need to be null");
+
+		this.s = s;
+		this.t = t;
+	}
+
+	public boolean isS() {
+		return s != null;
+	}
+
+	public boolean isT() {
+		return t != null;
+	}
+
+}
diff --git a/src/java/net/sf/jabref/util/XMPSchemaBibtex.java b/src/java/net/sf/jabref/util/XMPSchemaBibtex.java
index 8028c75..4bcdcc6 100644
--- a/src/java/net/sf/jabref/util/XMPSchemaBibtex.java
+++ b/src/java/net/sf/jabref/util/XMPSchemaBibtex.java
@@ -1,22 +1,11 @@
 package net.sf.jabref.util;
 
 import java.io.IOException;
-import java.util.Arrays;
-import java.util.Calendar;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.TreeSet;
+import java.util.*;
 
 import javax.xml.transform.TransformerException;
 
-import net.sf.jabref.AuthorList;
-import net.sf.jabref.BibtexDatabase;
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.BibtexEntryType;
-import net.sf.jabref.JabRefPreferences;
-import net.sf.jabref.Util;
+import net.sf.jabref.*;
 
 import org.jempbox.xmp.XMPMetadata;
 import org.jempbox.xmp.XMPSchema;
@@ -63,7 +52,7 @@ public class XMPSchemaBibtex extends XMPSchema {
 	 * @return
 	 * @derived Uses XMPSchema methods
 	 */
-	public List getPersonList(String field) {
+	public List<String> getPersonList(String field) {
 		return getSequenceList(field);
 	}
 
@@ -90,7 +79,8 @@ public class XMPSchemaBibtex extends XMPSchema {
 		super.setTextProperty(makeProperty(field), value);
 	}
 
-	public List getBagList(String bagName) {
+	@SuppressWarnings("unchecked")
+	public List<String> getBagList(String bagName) {
 		return super.getBagList(makeProperty(bagName));
 	}
 
@@ -102,7 +92,8 @@ public class XMPSchemaBibtex extends XMPSchema {
 		super.addBagValue(makeProperty(bagName), value);
 	}
 
-	public List getSequenceList(String seqName) {
+	@SuppressWarnings("unchecked")
+	public List<String> getSequenceList(String seqName) {
 		return super.getSequenceList(makeProperty(seqName));
 	}
 
@@ -114,7 +105,8 @@ public class XMPSchemaBibtex extends XMPSchema {
 		super.addSequenceValue(makeProperty(seqName), value);
 	}
 
-	public List getSequenceDateList(String seqName) throws IOException {
+	@SuppressWarnings("unchecked")
+	public List<String> getSequenceDateList(String seqName) throws IOException {
 		return super.getSequenceDateList(makeProperty(seqName));
 	}
 
@@ -155,7 +147,7 @@ public class XMPSchemaBibtex extends XMPSchema {
 	 *         instance: "year" => "2005". Empty map if none found.
 	 * @throws TransformerException
 	 */
-	public static Map getAllProperties(XMPSchema schema, String namespaceName) {
+	public static Map<String, String> getAllProperties(XMPSchema schema, String namespaceName) {
 		NodeList nodes = schema.getElement().getChildNodes();
 
 		Map<String, String> result = new HashMap<String, String>();
@@ -231,7 +223,7 @@ public class XMPSchemaBibtex extends XMPSchema {
 			String key = entry.getKey();
 			if (preserveWhiteSpace.contains(key))
 				continue;
-			entry.setValue(((String) entry.getValue()).replaceAll("\\s+", " ").trim());
+			entry.setValue(entry.getValue().replaceAll("\\s+", " ").trim());
 		}
 
 		return result;
@@ -255,27 +247,15 @@ public class XMPSchemaBibtex extends XMPSchema {
 	 */
 	public void setBibtexEntry(BibtexEntry entry, BibtexDatabase database) {
 		// Set all the values including key and entryType
-		Object[] fields = entry.getAllFields();
-		Object[] results;
-		int resultsSize;
+		Set<String> fields = entry.getAllFields();
 		
 		JabRefPreferences prefs = JabRefPreferences.getInstance();
 		if (prefs.getBoolean("useXmpPrivacyFilter")) {
 			TreeSet<String> filters = new TreeSet<String>(Arrays.asList(prefs.getStringArray("xmpPrivacyFilters")));
-			results = new Object[fields.length];
-			resultsSize = 0;
-			for (int i = 0; i < fields.length; i++) {
-				if (!filters.contains(fields[i])) {
-					results[resultsSize++] = fields[i];
-				}
-			}
-		} else {
-			results = fields;
-			resultsSize = fields.length;
+			fields.removeAll(filters);
 		}
 		
-		for (int i = 0; i < resultsSize; i++){
-			String field = results[i].toString();
+		for (String field : fields){
 			String value = BibtexDatabase.getResolvedField(field, entry, database);
 			if (field.equals("author") || field.equals("editor")) {
 				setPersonList(field, value);
@@ -298,7 +278,7 @@ public class XMPSchemaBibtex extends XMPSchema {
 		BibtexEntry e = new BibtexEntry(Util.createNeutralId(), t);
 
 		// Get Text Properties
-		Map text = getAllProperties(this, "bibtex");
+		Map<String, String> text = getAllProperties(this, "bibtex");
 		text.remove("entrytype");
 		e.setField(text);
 		return e;
diff --git a/src/java/net/sf/jabref/util/XMPUtil.java b/src/java/net/sf/jabref/util/XMPUtil.java
index 8250069..d2e62f2 100644
--- a/src/java/net/sf/jabref/util/XMPUtil.java
+++ b/src/java/net/sf/jabref/util/XMPUtil.java
@@ -1,30 +1,11 @@
 package net.sf.jabref.util;
 
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.StringWriter;
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
+import java.io.*;
+import java.util.*;
 
 import javax.xml.transform.TransformerException;
 
-import net.sf.jabref.AuthorList;
-import net.sf.jabref.BibtexDatabase;
-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.*;
 import net.sf.jabref.imports.BibtexParser;
 import net.sf.jabref.imports.ParserResult;
 
@@ -51,7 +32,7 @@ import org.pdfbox.pdmodel.common.PDMetadata;
  * 
  * Synchronization
  * 
- * @version $Revision: 2141 $ ($Date: 2007-06-29 15:56:21 +0200 (Fri, 29 Jun 2007) $)
+ * @version $Revision: 2488 $ ($Date: 2007-11-14 01:25:31 +0100 (Wed, 14 Nov 2007) $)
  */
 public class XMPUtil {
 
@@ -63,7 +44,7 @@ public class XMPUtil {
 	 * @return BibtexEntryies found in the PDF or an empty list
 	 * @throws IOException
 	 */
-	public static List readXMP(String filename) throws IOException {
+	public static List<BibtexEntry> readXMP(String filename) throws IOException {
 		return readXMP(new File(filename));
 	}
 
@@ -127,6 +108,7 @@ public class XMPUtil {
 	 *             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 {
 
@@ -147,10 +129,10 @@ public class XMPUtil {
 			if (meta == null)
 				return null;
 
-			List schemas = meta
+			List<XMPSchema> schemas = meta
 					.getSchemasByNamespaceURI(XMPSchemaBibtex.NAMESPACE);
 
-			Iterator it = schemas.iterator();
+			Iterator<XMPSchema> it = schemas.iterator();
 			while (it.hasNext()) {
 				XMPSchemaBibtex bib = (XMPSchemaBibtex) it.next();
 
@@ -201,6 +183,7 @@ public class XMPUtil {
 	 * 
 	 * @return The bibtex entry found in the document information.
 	 */
+	@SuppressWarnings("unchecked")
 	public static BibtexEntry getBibtexEntryFromDocumentInformation(
 			PDDocumentInformation di) {
 
@@ -240,7 +223,7 @@ public class XMPUtil {
 		}
 
 		// Return null if no values were found
-		return (entry.getAllFields().length > 0 ? entry : null);
+		return (entry.getAllFields().size() > 0 ? entry : null);
 	}
 
 	/**
@@ -258,6 +241,7 @@ public class XMPUtil {
 	 * 
 	 * @return The bibtex entry found in the document information.
 	 */
+	@SuppressWarnings("unchecked")
 	public static BibtexEntry getBibtexEntryFromDublinCore(
 			XMPSchemaDublinCore dcSchema) {
 
@@ -429,7 +413,7 @@ public class XMPUtil {
 			}
 		}
 
-		return (entry.getAllFields().length > 0 ? entry : null);
+		return (entry.getAllFields().size() > 0 ? entry : null);
 	}
 
 	/**
@@ -492,9 +476,9 @@ public class XMPUtil {
 
 		XMPMetadata x = new XMPMetadata();
 
-		Iterator it = bibtexEntries.iterator();
+		Iterator<BibtexEntry> it = bibtexEntries.iterator();
 		while (it.hasNext()) {
-			BibtexEntry e = (BibtexEntry) it.next();
+			BibtexEntry e = it.next();
 			XMPSchemaBibtex schema = new XMPSchemaBibtex(x);
 			x.addSchema(schema);
 			schema.setBibtexEntry(e);
@@ -601,12 +585,11 @@ public class XMPUtil {
 			entry = database.resolveForStrings(entry, false);
 
 		// Set all the values including key and entryType
-		Object[] fields = entry.getAllFields();
-
-		for (int j = 0; j < fields.length; j++) {
+		
+		for (String field : entry.getAllFields()){
 
-			if (fields[j].equals("editor")) {
-				String o = entry.getField(fields[j].toString()).toString();
+			if (field.equals("editor")) {
+				String o = entry.getField(field.toString()).toString();
 
 				/**
 				 * Editor -> Contributor
@@ -656,8 +639,8 @@ public class XMPUtil {
 			 * 
 			 * Bibtex-Fields used: author
 			 */
-			if (fields[j].equals("author")) {
-				String o = entry.getField(fields[j].toString()).toString();
+			if (field.equals("author")) {
+				String o = entry.getField(field.toString()).toString();
 				String authors = o.toString();
 				AuthorList list = AuthorList.getAuthorList(authors);
 
@@ -668,12 +651,12 @@ public class XMPUtil {
 				continue;
 			}
 
-			if (fields[j].equals("month")) {
+			if (field.equals("month")) {
 				// Dealt with in year
 				continue;
 			}
 
-			if (fields[j].equals("year")) {
+			if (field.equals("year")) {
 
 				/**
 				 * Year + Month -> Date
@@ -709,8 +692,8 @@ public class XMPUtil {
 			 * 
 			 * Bibtex-Fields used: abstract
 			 */
-			if (fields[j].equals("abstract")) {
-				String o = entry.getField(fields[j].toString()).toString();
+			if (field.equals("abstract")) {
+				String o = entry.getField(field.toString()).toString();
 				dcSchema.setDescription(o.toString());
 				continue;
 			}
@@ -728,8 +711,8 @@ public class XMPUtil {
 			 * 
 			 * Bibtex-Fields used: doi
 			 */
-			if (fields[j].equals("doi")) {
-				String o = entry.getField(fields[j].toString()).toString();
+			if (field.equals("doi")) {
+				String o = entry.getField(field.toString()).toString();
 				dcSchema.setIdentifier(o.toString());
 				continue;
 			}
@@ -756,8 +739,8 @@ public class XMPUtil {
 			 * 
 			 * Bibtex-Fields used: doi
 			 */
-			if (fields[j].equals("publisher")) {
-				String o = entry.getField(fields[j].toString()).toString();
+			if (field.equals("publisher")) {
+				String o = entry.getField(field.toString()).toString();
 				dcSchema.addPublisher(o.toString());
 				continue;
 			}
@@ -794,8 +777,8 @@ public class XMPUtil {
 			 * 
 			 * Bibtex-Fields used: doi
 			 */
-			if (fields[j].equals("keywords")) {
-				String o = entry.getField(fields[j].toString()).toString();
+			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());
@@ -818,8 +801,8 @@ public class XMPUtil {
 			 * 
 			 * Bibtex-Fields used: title
 			 */
-			if (fields[j].equals("title")) {
-				String o = entry.getField(fields[j].toString()).toString();
+			if (field.equals("title")) {
+				String o = entry.getField(field.toString()).toString();
 				dcSchema.setTitle(o.toString());
 				continue;
 			}
@@ -841,8 +824,8 @@ public class XMPUtil {
 			 * All others (including the bibtex key) get packaged in the
 			 * relation attribute
 			 */
-			String o = entry.getField(fields[j].toString()).toString();
-			dcSchema.addRelation("bibtex/" + fields[j].toString() + "/" + o);
+			String o = entry.getField(field.toString()).toString();
+			dcSchema.addRelation("bibtex/" + field.toString() + "/" + o);
 		}
 
 		/**
@@ -916,6 +899,7 @@ public class XMPUtil {
 	 * @throws IOException
 	 * @throws TransformerException
 	 */
+	@SuppressWarnings("unchecked")
 	public static void writeDublinCore(PDDocument document,
 			Collection<BibtexEntry> entries, BibtexDatabase database)
 			throws IOException, TransformerException {
@@ -981,20 +965,20 @@ public class XMPUtil {
 			entry = database.resolveForStrings(entry, false);
 
 		// Set all the values including key and entryType
-		Object[] fields = entry.getAllFields();
+		Set<String> fields = entry.getAllFields();
 
-		for (int i = 0; i < fields.length; i++) {
-			if (fields[i].equals("author")) {
+		for (String field : fields){
+			if (field.equals("author")) {
 				di.setAuthor(entry.getField("author").toString());
-			} else if (fields[i].equals("title")) {
+			} else if (field.equals("title")) {
 				di.setTitle(entry.getField("title").toString());
-			} else if (fields[i].equals("keywords")) {
+			} else if (field.equals("keywords")) {
 				di.setKeywords(entry.getField("keywords").toString());
-			} else if (fields[i].equals("abstract")) {
+			} else if (field.equals("abstract")) {
 				di.setSubject(entry.getField("abstract").toString());
 			} else {
-				di.setCustomMetadataValue("bibtex/" + fields[i].toString(),
-						entry.getField(fields[i].toString()).toString());
+				di.setCustomMetadataValue("bibtex/" + field.toString(),
+						entry.getField(field.toString()).toString());
 			}
 		}
 		di
@@ -1027,6 +1011,7 @@ public class XMPUtil {
 	 * @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 {
@@ -1044,7 +1029,7 @@ public class XMPUtil {
 			}
 
 			if (writePDFInfo && bibtexEntries.size() == 1) {
-				writeDocumentInformation(document, (BibtexEntry) bibtexEntries
+				writeDocumentInformation(document, bibtexEntries
 						.iterator().next(), null);
 				writeDublinCore(document, bibtexEntries, null);
 			}
@@ -1164,11 +1149,11 @@ public class XMPUtil {
 
 			if (args[0].endsWith(".pdf")) {
 				// Read from pdf and write as BibTex
-				List l = XMPUtil.readXMP(new File(args[0]));
+				List<BibtexEntry> l = XMPUtil.readXMP(new File(args[0]));
 
-				Iterator it = l.iterator();
+				Iterator<BibtexEntry> it = l.iterator();
 				while (it.hasNext()) {
-					BibtexEntry e = (BibtexEntry) it.next();
+					BibtexEntry e = it.next();
 					StringWriter sw = new StringWriter();
 					e.write(sw, new net.sf.jabref.export.LatexFieldFormatter(),
 							false);
@@ -1270,10 +1255,10 @@ public class XMPUtil {
 	 */
 	public static boolean hasMetadata(InputStream is) {
 		try {
-			List l = XMPUtil.readXMP(is);
+			List<BibtexEntry> l = XMPUtil.readXMP(is);
 			return l.size() > 0;
 		} catch (Exception e) {
 			return false;
 		}
 	}
-}
\ No newline at end of file
+}
diff --git a/src/java/net/sf/jabref/wizard/auximport/AuxCommandLine.java b/src/java/net/sf/jabref/wizard/auximport/AuxCommandLine.java
index cd02bd6..032d26e 100644
--- a/src/java/net/sf/jabref/wizard/auximport/AuxCommandLine.java
+++ b/src/java/net/sf/jabref/wizard/auximport/AuxCommandLine.java
@@ -33,8 +33,11 @@ http://www.gnu.org/copyleft/gpl.ja.html
 
 package net.sf.jabref.wizard.auximport ;
 
-import net.sf.jabref.* ;
-import java.util.*;
+import java.util.Vector;
+
+import net.sf.jabref.BibtexDatabase;
+import net.sf.jabref.Globals;
+import net.sf.jabref.Util;
 
 public class AuxCommandLine
 {
@@ -53,7 +56,7 @@ public class AuxCommandLine
     if ( (auxName.length() > 0) && (bib != null) )
     {
       AuxSubGenerator auxParser = new AuxSubGenerator(bib) ;
-      Vector returnValue = auxParser.generate(auxName, bib) ;
+      Vector<String> returnValue = auxParser.generate(auxName, bib) ;
       back = auxParser.getGeneratedDatabase() ;
 
       // print statistics
diff --git a/src/java/net/sf/jabref/wizard/auximport/AuxSubGenerator.java b/src/java/net/sf/jabref/wizard/auximport/AuxSubGenerator.java
index 4a8d3a2..ee1e3de 100644
--- a/src/java/net/sf/jabref/wizard/auximport/AuxSubGenerator.java
+++ b/src/java/net/sf/jabref/wizard/auximport/AuxSubGenerator.java
@@ -51,19 +51,28 @@ http://www.gnu.org/copyleft/gpl.ja.html
 
 package net.sf.jabref.wizard.auximport ;
 
-import java.io.* ;
-import java.util.regex.* ;
-import java.util.* ;
-
-import net.sf.jabref.* ;
-import net.sf.jabref.imports.* ;
+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.Vector;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import net.sf.jabref.BibtexDatabase;
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.KeyCollisionException;
+import net.sf.jabref.Util;
 
 public class AuxSubGenerator
 {
 
-  private HashSet mySet ; // all unique bibtex keys in aux file
+  private HashSet<String> mySet ; // all unique bibtex keys in aux file
 
-  private Vector notFoundList ; // all not solved bibtex keys
+  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
@@ -73,8 +82,8 @@ public class AuxSubGenerator
 
   public AuxSubGenerator(BibtexDatabase refDBase)
   {
-    mySet = new HashSet(20) ;
-    notFoundList = new Vector() ;
+    mySet = new HashSet<String>(20) ;
+    notFoundList = new Vector<String>() ;
     db = refDBase ;
   }
 
@@ -143,14 +152,14 @@ public class AuxSubGenerator
     BufferedReader br = null ;
 
     // filelist, used for nested aux files
-    Vector fileList = new Vector(5) ;
+    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 + dummy.separator ;
+      path = path + File.separator ;
     else
       path = "" ;
 
@@ -161,7 +170,7 @@ public class AuxSubGenerator
 
     while (fileIndex < fileList.size())
     {
-      String fName = (String) fileList.elementAt( fileIndex ) ;
+      String fName = fileList.elementAt( fileIndex ) ;
       try
       {
 //        System.out.println("read #"+fName +"#") ;
@@ -183,7 +192,9 @@ public class AuxSubGenerator
         String line ;
         try
         {
-          line = br.readLine() ;
+            if (br == null)
+                throw new IOException();
+            line = br.readLine() ;
         }
         catch ( IOException ioe )
         {
@@ -246,7 +257,8 @@ public class AuxSubGenerator
       {
         try
         {
-          br.close() ;
+            if (br != null)
+                br.close() ;
           nestedAuxCounter++ ;
         }
         catch ( IOException ioe )
@@ -269,13 +281,13 @@ public class AuxSubGenerator
     auxDB = new BibtexDatabase() ;
     notFoundList.clear();
 
-    Iterator it = mySet.iterator() ;
+    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 = (String) it.next() ;
+      String str = it.next() ;
       BibtexEntry entry = db.getEntryByKey(str);
 
       if (entry == null)
@@ -287,10 +299,13 @@ public class AuxSubGenerator
           // 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 = (String)entry.getField("crossref");
+          String crossref = entry.getField("crossref");
           if ((crossref != null) && (!mySet.contains(crossref))) {
               BibtexEntry refEntry = db.getEntryByKey(crossref);
-              if (entry == null) {
+              /**
+               * [ 1717849 ] Patch for aux import by Kai Eckert
+               */
+              if (refEntry == null) {
                   notFoundList.add(crossref);
               } else {
                   insertEntry(auxDB, refEntry);
@@ -325,7 +340,7 @@ public class AuxSubGenerator
      * @param bibDB BibtexDatabase - reference database
      * @return Vector - contains all not resolved bibtex entries
      */
-    public final Vector generate(String auxFileName, BibtexDatabase bibDB)
+    public final Vector<String> generate(String auxFileName, BibtexDatabase bibDB)
     {
       setReferenceDatabase(bibDB);
       parseAuxFile(auxFileName) ;
@@ -377,7 +392,7 @@ public class AuxSubGenerator
   }
 
   /** returns a vector off all not resolved bibtex entries found in auxfile */
-  public Vector getNotFoundList()
+  public Vector<String> getNotFoundList()
   {
     return notFoundList ;
   }
@@ -388,20 +403,4 @@ public class AuxSubGenerator
   {
     return this.nestedAuxCounter ;
   }
-
-/*
-  public class FileNameString extends String
-  {
-    public boolean equals(Object anObject)
-    {
-      if (anObject == null)
-        return false ;
-
-      if (anObject.hashCode() == this.hashCode())
-        return true ;
-
-      return false ;
-    }
-  }
-*/
 }
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 4156d79..cc34870 100644
--- a/src/java/net/sf/jabref/wizard/auximport/gui/FromAuxDialog.java
+++ b/src/java/net/sf/jabref/wizard/auximport/gui/FromAuxDialog.java
@@ -35,16 +35,45 @@
 
 package net.sf.jabref.wizard.auximport.gui ;
 
-import java.awt.* ;
-import javax.swing.* ;
-import javax.swing.border.* ;
-import java.awt.event.* ;
-import java.io.File ;
-
-import net.sf.jabref.* ;
-import net.sf.jabref.wizard.auximport.* ;
-import java.net.URL ;
-import java.io.IOException ;
+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 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.wizard.auximport.AuxSubGenerator;
 
 import com.jgoodies.forms.builder.ButtonBarBuilder;
 
@@ -115,8 +144,8 @@ public class FromAuxDialog
 
     bb.addGlue();
     bb.addGridded( generateButton ) ;
-    bb.addGridded( okButton ); ;
-    bb.addGridded( cancelButton ); ;
+    bb.addGridded( okButton ); 
+    bb.addGridded( cancelButton );
     bb.addGlue();
     this.setModal( true ) ;
     this.setResizable( false ) ;
@@ -163,7 +192,7 @@ public class FromAuxDialog
     int len = parentTabbedPane.getTabCount() ;
     for ( int t = 0 ; t < len ; t++ )
     {
-      dbChooser.addItem( ( String ) parentTabbedPane.getTitleAt( t ) ) ;
+      dbChooser.addItem( parentTabbedPane.getTitleAt( t ) ) ;
     }
 
     // panel view
@@ -263,45 +292,34 @@ public class FromAuxDialog
 // ---------------------------------------------------------------------------
 
   // returns a "short info" panel, if something is available
-  private JPanel getDescriptionPanel()
-  {
-    JPanel back = null ;
-
-    JEditorPane infoText = null ;
-
-    URL infoURL = JabRef.class.getResource( GUIGlobals.getLocaleHelpPath()
-                                            + GUIGlobals.shortAuxImport ) ;
-    if ( infoURL != null )
-    {
-      try
-      {
-        infoText = new JEditorPane() ;
-        infoText.setEditable( false ) ;
-        infoText.setPreferredSize( new Dimension( 240, 50 ) ) ;
-        infoText.setMinimumSize( new Dimension( 180, 50 ) ) ;
-        infoText.setPage( infoURL ) ;
-        infoText.setBackground( GUIGlobals.infoField ) ;
-        infoText.setBorder( new EtchedBorder( EtchedBorder.LOWERED ) ) ;
-
-        // content
-        back = new JPanel() ;
-        back.setLayout( new BorderLayout());
-
-        if (infoText != null) // only if some help available
-        {
-          back.add( infoText, BorderLayout.PAGE_START ) ;
+    private JPanel getDescriptionPanel() {
+        JPanel back = null;
+
+        JEditorPane infoText = null;
+
+        URL infoURL = JabRef.class.getResource(GUIGlobals.getLocaleHelpPath() +
+            GUIGlobals.shortAuxImport);
+        if (infoURL != null) {
+            try {
+                infoText = new JEditorPane();
+                infoText.setEditable(false);
+                infoText.setPreferredSize(new Dimension(240, 50));
+                infoText.setMinimumSize(new Dimension(180, 50));
+                infoText.setPage(infoURL);
+                infoText.setBackground(GUIGlobals.infoField);
+                infoText.setBorder(new EtchedBorder(EtchedBorder.LOWERED));
+
+                // content
+                back = new JPanel();
+                back.setLayout(new BorderLayout());
+                back.add(infoText, BorderLayout.PAGE_START);
+            } catch (IOException e) {
+            }
         }
 
-      }
-      catch ( IOException e )
-      {
-        back = null ;
-      }
+        return back;
     }
 
-    return back ;
-  }
-
 // ---------------------------------------------------------------------------
 
   void ok_actionPerformed( ActionEvent e )
diff --git a/src/java/net/sf/jabref/wizard/integrity/IntegrityCheck.java b/src/java/net/sf/jabref/wizard/integrity/IntegrityCheck.java
index 13e1030..2dbc22e 100644
--- a/src/java/net/sf/jabref/wizard/integrity/IntegrityCheck.java
+++ b/src/java/net/sf/jabref/wizard/integrity/IntegrityCheck.java
@@ -39,43 +39,35 @@ http://www.gnu.org/copyleft/gpl.ja.html
 
 package net.sf.jabref.wizard.integrity ;
 
-import net.sf.jabref.*;
-import java.util.*;
+import java.util.Vector;
+
+import net.sf.jabref.BibtexDatabase;
+import net.sf.jabref.BibtexEntry;
 
 public class IntegrityCheck
 {
-  private Vector messages ;
+  private Vector<IntegrityMessage> messages ;
 
   public IntegrityCheck()
   {
-    messages = new Vector() ;
+    messages = new Vector<IntegrityMessage>() ;
   }
 
-  public Vector checkBibtexDatabase(BibtexDatabase base)
-  {
-    messages.clear();
-    if (base != null)
-    {
-      Collection col = base.getEntries() ;
-      for( Iterator myIt = col.iterator() ; myIt.hasNext() ;)
-      {
-        Object dat = myIt.next() ;
-        if (dat != null)
-        {
-          checkSingleEntry(( BibtexEntry ) dat) ;
-        }
-      }
-   }
-   return (Vector) messages.clone() ;
-  }
-
-  public Vector checkBibtexEntry(BibtexEntry entry)
-  {
-    messages.clear();
-    checkSingleEntry(entry) ;
-    return (Vector) messages.clone() ;
-//    return messages ;
-  }
+  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)
   {
@@ -160,15 +152,11 @@ public class IntegrityCheck
     len = structure.length() ;
     if (len > 0)
     {
-      boolean failed = false ;
-      char z1 = structure.charAt(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");
-        failed = true ;
       }
 
       if (structure.charAt( structure.length() -1) != 'N')  // end without seperator
@@ -176,7 +164,6 @@ public class IntegrityCheck
         messages.add( new IntegrityMessage( IntegrityMessage.NAME_END_WARNING,
                                             entry, fieldName, null))  ;
 //        back.add("bad end (" +fieldName +" field)");
-        failed = true ;
       }
       /*if (structure.indexOf("NN,NN") > -1)
       {
@@ -184,11 +171,7 @@ public class IntegrityCheck
                                             entry, fieldName, null))  ;
 
 //        back.add("something could be wrong in " +fieldName +" field") ;
-        failed = true ;
       } */
-
-//      if (failed)
-//        System.out.println(authors +" #" +structure.toString() +"#") ;
     }
 //    messages.add( new IntegrityMessage( IntegrityMessage.NAME_END_WARNING,
 //                                        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 f9e5086..bc97505 100644
--- a/src/java/net/sf/jabref/wizard/integrity/IntegrityMessage.java
+++ b/src/java/net/sf/jabref/wizard/integrity/IntegrityMessage.java
@@ -30,13 +30,12 @@ http://www.gnu.org/copyleft/gpl.ja.html
 //
 // function : a class for wrapping a IntegrityCheck message
 //
-//     todo :
-//
 // modified :
 
 package net.sf.jabref.wizard.integrity ;
 
-import net.sf.jabref.*;
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.Globals;
 
 public class IntegrityMessage implements Cloneable
 {
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 b19eb04..6f31728 100644
--- a/src/java/net/sf/jabref/wizard/integrity/gui/IntegrityMessagePanel.java
+++ b/src/java/net/sf/jabref/wizard/integrity/gui/IntegrityMessagePanel.java
@@ -35,15 +35,23 @@ http://www.gnu.org/copyleft/gpl.ja.html
 
 package net.sf.jabref.wizard.integrity.gui ;
 
-import java.awt.* ;
-import java.awt.event.* ;
-import javax.swing.* ;
-import javax.swing.event.* ;
-
-import net.sf.jabref.* ;
-import net.sf.jabref.undo.* ;
-import net.sf.jabref.wizard.integrity.* ;
-import net.sf.jabref.wizard.text.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
@@ -134,7 +142,7 @@ public class IntegrityMessagePanel
 
         if (entry != null)
         {
-          str = (String) entry.getField(msg.getFieldName()) ;
+          str = entry.getField(msg.getFieldName()) ;
           basePanel.highlightEntry(entry);
   // make the "invalid" field visible  ....
   //          EntryEditor editor = basePanel.getCurrentEditor() ;
@@ -155,7 +163,7 @@ public class IntegrityMessagePanel
   public void keyReleased( KeyEvent e )
   {
     applyButton.setEnabled(true);
-    if (e.getKeyCode() == e.VK_ENTER)
+    if (e.getKeyCode() == KeyEvent.VK_ENTER)
     {
       applyButton.doClick();
     }
@@ -179,7 +187,7 @@ public class IntegrityMessagePanel
         if (entry != null)
         {
 //          System.out.println("update") ;
-            Object oldContent = entry.getField(msg.getFieldName());
+            String oldContent = entry.getField(msg.getFieldName());
             UndoableFieldChange edit = new UndoableFieldChange(entry, msg.getFieldName(), oldContent,
                         content.getText());
             entry.setField(msg.getFieldName(), content.getText());
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 77d1076..f8d0354 100644
--- a/src/java/net/sf/jabref/wizard/integrity/gui/IntegrityWizard.java
+++ b/src/java/net/sf/jabref/wizard/integrity/gui/IntegrityWizard.java
@@ -29,29 +29,24 @@
 //
 // function :
 //
-// todo:
-//
 // modified:
 //
 
 package net.sf.jabref.wizard.integrity.gui ;
 
-import java.io.* ;
-import java.net.* ;
+import java.awt.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.IOException;
+import java.net.URL;
 
-import java.awt.* ;
-import java.awt.event.* ;
-import javax.swing.* ;
-import javax.swing.border.* ;
+import javax.swing.*;
+import javax.swing.border.EtchedBorder;
 
-import net.sf.jabref.* ;
+import net.sf.jabref.*;
 
-public class IntegrityWizard
-    extends JDialog
-    implements ActionListener
-{
+public class IntegrityWizard extends JDialog implements ActionListener {
 
-  private JabRefFrame _frame ;
   private BibtexDatabase dbase ;
   private BasePanel basePanel;
   private JButton closeButton ;
@@ -62,7 +57,6 @@ public class IntegrityWizard
   {
     super( frame, "dialog", false ) ;  // no modal
 
-    _frame = frame ;
     this.basePanel = basePanel;
     dbase = basePanel.database();
 
diff --git a/src/java/net/sf/jabref/wizard/text/TagToMarkedTextStore.java b/src/java/net/sf/jabref/wizard/text/TagToMarkedTextStore.java
index aeaec7f..6601974 100644
--- a/src/java/net/sf/jabref/wizard/text/TagToMarkedTextStore.java
+++ b/src/java/net/sf/jabref/wizard/text/TagToMarkedTextStore.java
@@ -29,15 +29,15 @@
 //
 // function : save the textposition for tags in a recent TextInputDialog context
 //
-// todo     :
-//
 // modified :
 
 package net.sf.jabref.wizard.text ;
 
-import java.util.*;
-import javax.swing.* ;
-import javax.swing.text.*;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.ListIterator;
+
+import javax.swing.text.StyledDocument;
 
 
 public class TagToMarkedTextStore
@@ -48,77 +48,60 @@ public class TagToMarkedTextStore
     int end ;
   }
 
-  private HashMap tagMap ;
+  private HashMap<String, LinkedList<TMarkedStoreItem>> tagMap ;
 
   public TagToMarkedTextStore()
   {
-    tagMap = new HashMap(10) ;
+    tagMap = new HashMap<String, LinkedList<TMarkedStoreItem>>(10) ;
   }
 
   /** appends a selection propertie for tag */
-  public void appendPosition(String tag, int start, int end)
-  {
-    LinkedList ll ;
-    Object dummy = tagMap.get(tag) ;
-    if (dummy == null)
-    {
-      ll = new LinkedList() ;
-      tagMap.put(tag, ll) ;
-    }
-    else
-    {
-      ll = (LinkedList) dummy ;
-    }
-
-    TMarkedStoreItem item = new TMarkedStoreItem() ;
-    ll.add(item);
-    item.end = end ;
-    item.start = start ;
-  }
+	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 ll ;
-    Object dummy = tagMap.get(tag) ;
-    if (dummy == null)
-    {
-      ll = new LinkedList() ;
-      tagMap.put(tag, ll) ;
-    }
-    else
-    {
-      ll = (LinkedList) dummy ;
-      ll.clear();
-    }
-
-    TMarkedStoreItem item = new TMarkedStoreItem() ;
-    ll.add(item);
-    item.end = end ;
-    item.start = start ;
-  }
+	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)
-  {
-    Object dummy = tagMap.get(tag) ;
-    if (dummy != null)
-    {
-      LinkedList ll = (LinkedList) dummy ;
-
-      // iterate over all saved selections
-      for (ListIterator 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 ) ;
-        }
-      }
-    }
-  }
-
+	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 9f5d6f7..a117b05 100644
--- a/src/java/net/sf/jabref/wizard/text/gui/HintListModel.java
+++ b/src/java/net/sf/jabref/wizard/text/gui/HintListModel.java
@@ -1,27 +1,23 @@
-package net.sf.jabref.wizard.text.gui ;
+package net.sf.jabref.wizard.text.gui;
+
+import java.util.Vector;
 
 import javax.swing.DefaultListModel;
-import javax.swing.table.AbstractTableModel;
-import javax.swing.table.TableModel;
-import javax.swing.event.TableModelListener;
-import java.util.*;
 
-public class HintListModel extends DefaultListModel
-{
-  public void setData(Vector newData)
-  {
-    clear() ;
-    if (newData != null)
-    {
-      for(Enumeration myEnum = newData.elements() ; myEnum.hasMoreElements() ; )
-      {
-        addElement(myEnum.nextElement());
-      }
-    }
-  }
+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);
-  }
+	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 572fa75..7d0a859 100644
--- a/src/java/net/sf/jabref/wizard/text/gui/OverlayPanel.java
+++ b/src/java/net/sf/jabref/wizard/text/gui/OverlayPanel.java
@@ -29,17 +29,18 @@
 //
 // function : supports an underlying text for jcomponents
 //
-// todo     :
-//
 // modified :
 //
 
 
 package net.sf.jabref.wizard.text.gui ;
 
-import java.awt.* ;
-import java.awt.event.* ;
-import javax.swing.* ;
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.Font;
+import java.awt.Graphics;
+
+import javax.swing.*;
 
 public class OverlayPanel extends JPanel
 {
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 31554cb..3948af7 100644
--- a/src/java/net/sf/jabref/wizard/text/gui/TextInputDialog.java
+++ b/src/java/net/sf/jabref/wizard/text/gui/TextInputDialog.java
@@ -50,19 +50,27 @@
 
 package net.sf.jabref.wizard.text.gui ;
 
-import java.io.* ;
-import java.net.* ;
-
-import java.awt.* ;
-import java.awt.event.* ;
-import javax.swing.* ;
-import javax.swing.border.* ;
-import javax.swing.event.* ;
-import javax.swing.text.* ;
-
-import net.sf.jabref.* ;
-import net.sf.jabref.wizard.integrity.gui.* ;
-import net.sf.jabref.wizard.text.* ;
+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 javax.swing.*;
+import javax.swing.border.EtchedBorder;
+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.wizard.integrity.gui.IntegrityMessagePanel;
+import net.sf.jabref.wizard.text.TagToMarkedTextStore;
+
 import com.jgoodies.forms.builder.ButtonBarBuilder;
 
 public class TextInputDialog
@@ -161,20 +169,8 @@ public class TextInputDialog
     tabbed.add( warnPanel, Globals.lang( "Messages_and_Hints" ) ) ;
 
     // Panel Layout
-    GridBagLayout gbl = new GridBagLayout() ;
-    GridBagConstraints con = new GridBagConstraints() ;
-    con.weightx = 1 ;
-    con.weighty = 1 ;
-    con.insets = new Insets( 5, 10, 0, 10 ) ;
-    con.fill = GridBagConstraints.HORIZONTAL ;
-
     panel1.setLayout( new BorderLayout() ) ;
-
-    con.gridwidth = GridBagConstraints.REMAINDER ;
-    con.fill = GridBagConstraints.BOTH;
-    //gbl.setConstraints( tabbed, con ) ;
     panel1.add( tabbed, BorderLayout.CENTER ) ;
-    //gbl.setConstraints( buttons, con ) ;
     panel1.add( buttons, BorderLayout.SOUTH ) ;
 
     // Key bindings:
@@ -478,7 +474,7 @@ public class TextInputDialog
           marked.appendPosition( type, selStart, selEnd ) ;
 
           // get old text from bibtex tag
-          String old = ( String ) entry.getField( type ) ;
+          String old = entry.getField( type ) ;
 
           // merge old and selected text
           if ( old != null )
diff --git a/src/java/tests/net/sf/jabref/AllTests.java b/src/java/tests/net/sf/jabref/AllTests.java
index a97ce4d..8b6e2bb 100644
--- a/src/java/tests/net/sf/jabref/AllTests.java
+++ b/src/java/tests/net/sf/jabref/AllTests.java
@@ -22,6 +22,7 @@ public class AllTests {
 		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/DuplicateCheckTest.java b/src/java/tests/net/sf/jabref/DuplicateCheckTest.java
new file mode 100644
index 0000000..eab087d
--- /dev/null
+++ b/src/java/tests/net/sf/jabref/DuplicateCheckTest.java
@@ -0,0 +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));
+    }
+
+}
diff --git a/src/java/tests/net/sf/jabref/JabRefTestCase.java b/src/java/tests/net/sf/jabref/JabRefTestCase.java
index afd8048..d1fe8ed 100644
--- a/src/java/tests/net/sf/jabref/JabRefTestCase.java
+++ b/src/java/tests/net/sf/jabref/JabRefTestCase.java
@@ -9,11 +9,10 @@ public class JabRefTestCase extends TestCase {
 		assertEquals(e.getCiteKey(), x.getCiteKey());
 		assertEquals(e.getType(), x.getType());
 
-		Object[] o = e.getAllFields();
-		assertEquals(o.length, x.getAllFields().length);
+		assertEquals(e.getAllFields().size(), x.getAllFields().size());
 
-		for (int i = 0; i < o.length; i++) {
-			assertEquals(e.getField(o.toString()), x.getField(o.toString()));
+		for (String name : e.getAllFields()){
+			assertEquals(e.getField(name), x.getField(name));
 		}
 	}
 	
diff --git a/src/java/tests/net/sf/jabref/UtilTest.java b/src/java/tests/net/sf/jabref/UtilTest.java
index 1cf3c8c..e88c953 100644
--- a/src/java/tests/net/sf/jabref/UtilTest.java
+++ b/src/java/tests/net/sf/jabref/UtilTest.java
@@ -5,21 +5,13 @@ import java.awt.Dialog;
 import java.io.StringReader;
 import java.text.DecimalFormat;
 import java.text.NumberFormat;
-import java.util.Arrays;
-import java.util.Calendar;
-import java.util.HashSet;
-import java.util.LinkedList;
-import java.util.List;
+import java.util.*;
 
 import javax.swing.JDialog;
 import javax.swing.JWindow;
 
 import junit.framework.TestCase;
-import net.sf.jabref.BibtexDatabase;
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.Globals;
-import net.sf.jabref.NameFormatterTab;
-import net.sf.jabref.Util;
+import net.sf.jabref.*;
 import net.sf.jabref.imports.BibtexParser;
 import net.sf.jabref.imports.ParserResult;
 
@@ -202,24 +194,30 @@ public class UtilTest extends TestCase {
 	public void testParseMethodCalls(){
 		
 		assertEquals(1, Util.parseMethodsCalls("bla").size());
-		assertEquals("bla", ((String[])(Util.parseMethodsCalls("bla").get(0)))[0]);
+		assertEquals("bla", ((Util.parseMethodsCalls("bla").get(0)))[0]);
 		
 		assertEquals(1, Util.parseMethodsCalls("bla,").size());
-		assertEquals("bla", ((String[])(Util.parseMethodsCalls("bla,").get(0)))[0]);
+		assertEquals("bla", ((Util.parseMethodsCalls("bla,").get(0)))[0]);
 
 		assertEquals(1, Util.parseMethodsCalls("_bla.bla.blub,").size());
-		assertEquals("_bla.bla.blub", ((String[])(Util.parseMethodsCalls("_bla.bla.blub,").get(0)))[0]);
+		assertEquals("_bla.bla.blub", ((Util.parseMethodsCalls("_bla.bla.blub,").get(0)))[0]);
 
 		
 		assertEquals(2, Util.parseMethodsCalls("bla,foo").size());
-		assertEquals("bla", ((String[])(Util.parseMethodsCalls("bla,foo").get(0)))[0]);
-		assertEquals("foo", ((String[])(Util.parseMethodsCalls("bla,foo").get(1)))[0]);
+		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", ((String[])(Util.parseMethodsCalls("bla(\"test\"),foo(\"fark\")").get(0)))[0]);
-		assertEquals("foo", ((String[])(Util.parseMethodsCalls("bla(\"test\"),foo(\"fark\")").get(1)))[0]);
-		assertEquals("test", ((String[])(Util.parseMethodsCalls("bla(\"test\"),foo(\"fark\")").get(0)))[1]);
-		assertEquals("fark", ((String[])(Util.parseMethodsCalls("bla(\"test\"),foo(\"fark\")").get(1)))[1]);
+		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]);
 	}
 	
 	
@@ -303,6 +301,17 @@ public class UtilTest extends TestCase {
                     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.
@@ -414,4 +423,15 @@ public class UtilTest extends TestCase {
     	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"));
+        
+    }
 }
diff --git a/src/java/tests/net/sf/jabref/bst/TestVM.java b/src/java/tests/net/sf/jabref/bst/TestVM.java
index d941329..18c39c5 100644
--- a/src/java/tests/net/sf/jabref/bst/TestVM.java
+++ b/src/java/tests/net/sf/jabref/bst/TestVM.java
@@ -23,7 +23,7 @@ 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 v = new Vector();
+		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}";
@@ -40,7 +40,7 @@ public class TestVM extends TestCase {
 			+ " #1 'mid.sentence :=  #2 'after.sentence :=  #3 'after.block := } "
 			+ "STRINGS { s t } " + "READ");
 
-		Vector v = new Vector();
+		Vector<BibtexEntry> v = new Vector<BibtexEntry>();
 		v.add(t1BibtexEntry());
 
 		vm.run(v);
@@ -48,7 +48,7 @@ public class TestVM extends TestCase {
 		assertEquals(2, vm.getStrings().size());
 		assertEquals(7, vm.getIntegers().size());
 		assertEquals(1, vm.getEntries().size());
-		assertEquals(5, ((BstEntry)vm.getEntries().get(0)).getFields().size());
+		assertEquals(5, (vm.getEntries().get(0)).getFields().size());
 		assertEquals(38, vm.getFunctions().size());
 
 	}
@@ -59,7 +59,7 @@ public class TestVM extends TestCase {
 			+ "FUNCTION { test } { label #0 = title 'label := #5 label #6 pop$ } " + "READ "
 			+ "ITERATE { test }");
 
-		Vector v = new Vector();
+		Vector<BibtexEntry> v = new Vector<BibtexEntry>();
 		v.add(t1BibtexEntry());
 
 		vm.run(v);
@@ -73,7 +73,7 @@ public class TestVM extends TestCase {
 
 		VM vm = new VM("FUNCTION {a}{ quote$ quote$ * } EXECUTE {a}");
 
-		Vector v = new Vector();
+		Vector<BibtexEntry> v = new Vector<BibtexEntry>();
 		vm.run(v);
 
 		assertEquals("\"\"", vm.getStack().pop());
@@ -83,7 +83,7 @@ public class TestVM extends TestCase {
 
 		VM vm = new VM("FUNCTION {init.state.consts}{ #0 'before.all := } ");
 
-		Vector v = new Vector();
+		Vector<BibtexEntry> v = new Vector<BibtexEntry>();
 		vm.run(v);
 
 		assertEquals(38, vm.getFunctions().size());
@@ -101,16 +101,16 @@ public class TestVM extends TestCase {
 				+ "FUNCTION {init.state.consts}{ #5 'variable.a := } "
 				+ "EXECUTE {init.state.consts}");
 
-			Vector v = new Vector();
+			Vector<BibtexEntry> v = new Vector<BibtexEntry>();
 			vm.run(v);
-			assertEquals(new Integer(5), (Integer) vm.getIntegers().get("variable.a"));
+			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 v = new Vector();
+			Vector<BibtexEntry> v = new Vector<BibtexEntry>();
 			vm.run(v);
 
 			assertEquals(VM.FALSE, vm.getStack().pop());
@@ -134,7 +134,7 @@ public class TestVM extends TestCase {
 			+ "#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 v = new Vector();
+		Vector<BibtexEntry> v = new Vector<BibtexEntry>();
 		vm.run(v);
 		assertEquals(VM.FALSE, vm.getStack().pop());
 		assertEquals(VM.TRUE, vm.getStack().pop());
@@ -153,7 +153,7 @@ public class TestVM extends TestCase {
 		{
 			VM vm = new VM("FUNCTION {test} { " + "#1 #1 + #5 #2 - }" + "EXECUTE {test}");
 
-			Vector v = new Vector();
+			Vector<BibtexEntry> v = new Vector<BibtexEntry>();
 			vm.run(v);
 			assertEquals(new Integer(3), vm.getStack().pop());
 			assertEquals(new Integer(2), vm.getStack().pop());
@@ -162,7 +162,7 @@ public class TestVM extends TestCase {
 		{
 			VM vm = new VM("FUNCTION {test} { " + "#1 \"HELLO\" + #5 #2 - }" + "EXECUTE {test}");
 
-			Vector v = new Vector();
+			Vector<BibtexEntry> v = new Vector<BibtexEntry>();
 
 			try {
 				vm.run(v);
@@ -178,7 +178,7 @@ public class TestVM extends TestCase {
 			VM vm = new VM("FUNCTION {test} { \"Johnny Foo and Mary Bar\" num.names$ }"
 				+ "EXECUTE {test}");
 
-			Vector v = new Vector();
+			Vector<BibtexEntry> v = new Vector<BibtexEntry>();
 			vm.run(v);
 			assertEquals(new Integer(2), vm.getStack().pop());
 			assertEquals(0, vm.getStack().size());
@@ -187,7 +187,7 @@ public class TestVM extends TestCase {
 			VM vm = new VM("FUNCTION {test} { \"Johnny Foo { and } Mary Bar\" num.names$ }"
 				+ "EXECUTE {test}");
 
-			Vector v = new Vector();
+			Vector<BibtexEntry> v = new Vector<BibtexEntry>();
 			vm.run(v);
 			assertEquals(new Integer(1), vm.getStack().pop());
 			assertEquals(0, vm.getStack().size());
@@ -202,7 +202,7 @@ public class TestVM extends TestCase {
 					+ "\"Johnny!}\" add.period$ \"Johnny?}\" add.period$ \"Johnny.}\" add.period$ }"
 					+ "EXECUTE {test}");
 
-			Vector v = new Vector();
+			Vector<BibtexEntry> v = new Vector<BibtexEntry>();
 			vm.run(v);
 			assertEquals("Johnny.}", vm.getStack().pop());
 			assertEquals("Johnny?}", vm.getStack().pop());
@@ -231,7 +231,7 @@ public class TestVM extends TestCase {
 
 			"} EXECUTE {test} ");
 
-		Vector v = new Vector();
+		Vector<BibtexEntry> v = new Vector<BibtexEntry>();
 		vm.run(v);
 		assertEquals("78", vm.getStack().pop());
 		assertEquals("789", vm.getStack().pop());
@@ -253,7 +253,7 @@ public class TestVM extends TestCase {
 			" title empty$ " + // FALSE
 			" \" HALLO \" empty$ } ITERATE {test} ");
 
-		Vector v = new Vector();
+		Vector<BibtexEntry> v = new Vector<BibtexEntry>();
 		v.add(bibtexString2BibtexEntry("@article{a, author=\"AAA\"}"));
 		vm.run(v);
 		assertEquals(VM.FALSE, vm.getStack().pop());
@@ -269,7 +269,7 @@ public class TestVM extends TestCase {
 			+ "  { \"{\\em \" swap$ * \"}\" * } " + "  if$ " + "} " + "FUNCTION {test} {"
 			+ "  \"\" emphasize " + "  \"Hello\" emphasize " + "}" + "EXECUTE {test} ");
 
-		Vector v = new Vector();
+		Vector<BibtexEntry> v = new Vector<BibtexEntry>();
 		vm.run(v);
 		assertEquals("{\\em Hello}", vm.getStack().pop());
 		assertEquals("", vm.getStack().pop());
@@ -293,7 +293,7 @@ public class TestVM extends TestCase {
 				+ "  \"{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 v = new Vector();
+		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",
@@ -313,7 +313,7 @@ public class TestVM extends TestCase {
 			+ "  \"{\\And this too\" text.length$ " + "  \"These are {\\11}\" text.length$ " + "} "
 			+ "EXECUTE {test} ");
 
-		Vector v = new Vector();
+		Vector<BibtexEntry> v = new Vector<BibtexEntry>();
 		vm.run(v);
 		assertEquals(new Integer(11), vm.getStack().pop());
 		assertEquals(new Integer(1), vm.getStack().pop());
@@ -329,7 +329,7 @@ public class TestVM extends TestCase {
 	public void testVMIntToStr() throws RecognitionException, IOException {
 		VM vm = new VM("FUNCTION {test} { #3 int.to.str$ #9999 int.to.str$}" + "EXECUTE {test}");
 
-		Vector v = new Vector();
+		Vector<BibtexEntry> v = new Vector<BibtexEntry>();
 		vm.run(v);
 		assertEquals("9999", (String) vm.getStack().pop());
 		assertEquals("3", vm.getStack().pop());
@@ -340,7 +340,7 @@ public class TestVM extends TestCase {
 		{
 			VM vm = new VM("FUNCTION {test} { \"H\" chr.to.int$ }" + "EXECUTE {test}");
 
-			Vector v = new Vector();
+			Vector<BibtexEntry> v = new Vector<BibtexEntry>();
 			vm.run(v);
 			assertEquals(new Integer(72), vm.getStack().pop());
 			assertEquals(0, vm.getStack().size());
@@ -348,7 +348,7 @@ public class TestVM extends TestCase {
 		{
 			VM vm = new VM("FUNCTION {test} { \"H\" chr.to.int$ int.to.chr$ }" + "EXECUTE {test}");
 
-			Vector v = new Vector();
+			Vector<BibtexEntry> v = new Vector<BibtexEntry>();
 			vm.run(v);
 			assertEquals("H", vm.getStack().pop());
 			assertEquals(0, vm.getStack().size());
@@ -360,24 +360,24 @@ public class TestVM extends TestCase {
 		VM vm = new VM("" + "ENTRY  { title }  { }  { label }"
 			+ "FUNCTION {presort} { cite$ 'sort.key$ := } ITERATE { presort } SORT");
 
-		Vector v = new Vector();
+		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 v2 = vm.getEntries();
-		assertEquals("a", ((BstEntry)v2.get(0)).getBibtexEntry().getCiteKey());
-		assertEquals("b", ((BstEntry)v2.get(1)).getBibtexEntry().getCiteKey());
-		assertEquals("c", ((BstEntry)v2.get(2)).getBibtexEntry().getCiteKey());
-		assertEquals("d", ((BstEntry)v2.get(3)).getBibtexEntry().getCiteKey());
+		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 v = new Vector();
+		Vector<BibtexEntry> v = new Vector<BibtexEntry>();
 		vm.run(v);
 
 		assertEquals(new Integer(Integer.MAX_VALUE), vm.getStack().pop());
@@ -391,7 +391,7 @@ public class TestVM extends TestCase {
 			+ " FUNCTION {n.dashify} { \"HELLO-WORLD\" 't := t empty$ not } "
 			+ " EXECUTE {n.dashify}                    ");
 
-		vm.run(new Vector());
+		vm.run(new Vector<BibtexEntry>());
 
 		assertEquals(VM.TRUE, vm.getStack().pop());
 	}
@@ -429,7 +429,7 @@ public class TestVM extends TestCase {
 				+ "	}                                                                  "
 				+ " EXECUTE {n.dashify} ");
 
-		Vector v = new Vector();
+		Vector<BibtexEntry> v = new Vector<BibtexEntry>();
 		vm.run(v);
 
 		assertEquals(1, vm.getStack().size());
@@ -443,7 +443,7 @@ public class TestVM extends TestCase {
 				+ "ENTRY  { title }  { }  { label }"
 				+ "FUNCTION {presort} { cite$ 'sort.key$ := } ITERATE { presort } SORT FUNCTION {test} { type$ } ITERATE { test }");
 
-		Vector v = new Vector();
+		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\"}"));
@@ -467,7 +467,7 @@ public class TestVM extends TestCase {
 				"FUNCTION {test}{ title missing$ cite$ } " + //
 				"ITERATE  { test }");
 
-		Vector v = new Vector();
+		Vector<BibtexEntry> v = new Vector<BibtexEntry>();
 		v.add(t1BibtexEntry());
 		v.add(bibtexString2BibtexEntry("@article{test, author=\"No title\"}"));
 		vm.run(v);
@@ -486,7 +486,7 @@ public class TestVM extends TestCase {
 				"FUNCTION {format}{ \"Charles Louis Xavier Joseph de la Vall{\\'e}e Poussin\" #1 \"{vv~}{ll}{, jj}{, f}?\" format.name$ }"
 					+ "EXECUTE {format}");
 
-			Vector v = new Vector();
+			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());
@@ -497,7 +497,7 @@ public class TestVM extends TestCase {
 				+ "SORT " + "FUNCTION {format}{ author #2 \"{vv~}{ll}{, jj}{, f}?\" format.name$ }"
 				+ "ITERATE {format}");
 
-			Vector v = new Vector();
+			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\"}"));
@@ -515,7 +515,7 @@ public class TestVM extends TestCase {
 				+ "FUNCTION {inproceedings}{ \"InProceedings called on \" title * } "
 				+ "FUNCTION {book}{ \"Book called on \" title * } " + " ITERATE { call.type$ }");
 
-		Vector v = new Vector();
+		Vector<BibtexEntry> v = new Vector<BibtexEntry>();
 		v.add(t1BibtexEntry());
 		v.add(bibtexString2BibtexEntry("@book{test, title=\"Test\"}"));
 		vm.run(v);
@@ -534,7 +534,7 @@ public class TestVM extends TestCase {
 		VM vm = new VM("" + "ENTRY  { " + "  address " + "  author " + "  title " + "  type "
 			+ "}  {}  { label } " + "FUNCTION {test}{ cite$ } " + "READ " + "ITERATE { test }");
 
-		Vector v = new Vector();
+		Vector<BibtexEntry> v = new Vector<BibtexEntry>();
 		v.add(t1BibtexEntry());
 
 		v.add(bibtexString2BibtexEntry("@article{test, title=\"BLA\"}"));
@@ -590,7 +590,7 @@ public class TestVM extends TestCase {
 			"EXECUTE {begin.bib}" + //
 			"");//
 
-		Vector v = new Vector();
+		Vector<BibtexEntry> v = new Vector<BibtexEntry>();
 		v.add(t1BibtexEntry());
 
 		vm.run(v);
@@ -603,7 +603,7 @@ public class TestVM extends TestCase {
 
 		VM vm = new VM("FUNCTION {a}{ #3 \"Hallo\" swap$ } EXECUTE { a }");
 
-		Vector v = new Vector();
+		Vector<BibtexEntry> v = new Vector<BibtexEntry>();
 		vm.run(v);
 
 		assertEquals(2, vm.getStack().size());
@@ -613,9 +613,9 @@ public class TestVM extends TestCase {
 
 	public static BibtexEntry bibtexString2BibtexEntry(String s) throws IOException {
 		ParserResult result = BibtexParser.parse(new StringReader(s));
-		Collection c = result.getDatabase().getEntries();
+		Collection<BibtexEntry> c = result.getDatabase().getEntries();
 		assertEquals(1, c.size());
-		return (BibtexEntry) c.iterator().next();
+		return c.iterator().next();
 	}
 
 	public static String bibtexEntry2BibtexString(BibtexEntry e) throws IOException {
@@ -636,7 +636,7 @@ public class TestVM extends TestCase {
 
 	public void testHypthenatedName() throws RecognitionException, IOException {
 		VM vm = new VM(new File("src/tests/net/sf/jabref/bst/abbrv.bst"));
-		Vector v = new Vector();
+		Vector<BibtexEntry> v = new Vector<BibtexEntry>();
 		v.add(bibtexString2BibtexEntry("@article{canh05, author = \"Jean-Paul Sartre\" }"));
 		assertTrue(vm.run(v).indexOf("J.-P. Sartre") != -1);
 	}
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 469fa18..f8c1cc3 100644
--- a/src/java/tests/net/sf/jabref/export/layout/LayoutTest.java
+++ b/src/java/tests/net/sf/jabref/export/layout/LayoutTest.java
@@ -44,9 +44,9 @@ public class LayoutTest extends TestCase {
 
 	public static BibtexEntry bibtexString2BibtexEntry(String s) throws IOException {
 		ParserResult result = BibtexParser.parse(new StringReader(s));
-		Collection c = result.getDatabase().getEntries();
+		Collection<BibtexEntry> c = result.getDatabase().getEntries();
 		assertEquals(1, c.size());
-		return (BibtexEntry) c.iterator().next();
+		return c.iterator().next();
 	}
 
 	public String layout(String layoutFile, String entry) throws Exception {
@@ -82,6 +82,13 @@ public class LayoutTest extends TestCase {
 
 		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
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 fd25b5d..12ce481 100644
--- a/src/java/tests/net/sf/jabref/export/layout/RTFCharsTest.java
+++ b/src/java/tests/net/sf/jabref/export/layout/RTFCharsTest.java
@@ -15,7 +15,7 @@ public class RTFCharsTest extends TestCase {
 		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("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"));
@@ -38,7 +38,7 @@ public class RTFCharsTest extends TestCase {
 	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("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 "));
 	}
@@ -47,40 +47,40 @@ public class RTFCharsTest extends TestCase {
 
 		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("\\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("\\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("{\\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("\\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("\\aa")); // �
+		assertEquals("", layout.format("\\AA")); // �
+		assertEquals("", layout.format("\\o")); // �
+		assertEquals("", layout.format("\\O")); // �
 		assertEquals("", layout.format("\\l"));
 		assertEquals("", layout.format("\\L"));
-		assertEquals("", layout.format("\\ss")); // �
-		assertEquals("", layout.format("?`")); // �
-		assertEquals("", layout.format("!`")); // �
+		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")); // �
+		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/AuthorLastFirstAbbreviatorTester.java b/src/java/tests/net/sf/jabref/export/layout/format/AuthorLastFirstAbbreviatorTester.java
index f6863a7..446a89c 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
@@ -73,18 +73,6 @@ public class AuthorLastFirstAbbreviatorTester extends TestCase {
 
 
 	/**
-	 * Verifies the Abbreviation of two authors in the incorrect format.
-	 * 
-	 * Ex: Lastname, Name Middlename
-	 */
-	public void testTwoAuthorsBadFormating() {
-		String name = new String("Lastname, Name Middlename and Nome Nomedomeio Sobrenome");
-		
-		// Formatters should not fail but return the given string (if they can).
-		assertEquals(name, abbreviate(name));
-	}
-	
-	/**
 	 * Testcase for 
 	 * http://sourceforge.net/tracker/index.php?func=detail&aid=1466924&group_id=92314&atid=600306
 	 */
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 a92492f..026f5d2 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,7 +1,7 @@
 package tests.net.sf.jabref.export.layout.format;
 
 import junit.framework.TestCase;
-import net.sf.jabref.export.layout.format.NameFormat;
+import net.sf.jabref.export.layout.format.plugin.NameFormat;
 
 public class BibtexNameLayoutFormatterTest extends TestCase {
 
diff --git a/src/java/tests/net/sf/jabref/imports/BibtexParserTest.java b/src/java/tests/net/sf/jabref/imports/BibtexParserTest.java
index 003a203..da29736 100644
--- a/src/java/tests/net/sf/jabref/imports/BibtexParserTest.java
+++ b/src/java/tests/net/sf/jabref/imports/BibtexParserTest.java
@@ -4,6 +4,7 @@ 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;
@@ -25,14 +26,14 @@ public class BibtexParserTest extends TestCase {
 		ParserResult result = BibtexParser.parse(new StringReader(
 			"@article{test,author={Ed von Test}}"));
 
-		Collection c = result.getDatabase().getEntries();
+		Collection<BibtexEntry> c = result.getDatabase().getEntries();
 		assertEquals(1, c.size());
 
-		BibtexEntry e = (BibtexEntry) c.iterator().next();
+		BibtexEntry e = c.iterator().next();
 		assertEquals("test", e.getCiteKey());
-		assertEquals(2, e.getAllFields().length);
-		Object[] o = e.getAllFields();
-		assertTrue(o[0].toString().equals("author") || o[1].toString().equals("author"));
+		assertEquals(2, e.getAllFields().size());
+		Set<String> o = e.getAllFields();
+		assertTrue(o.contains("author"));
 		assertEquals("Ed von Test", e.getField("author"));
 	}
 
@@ -99,23 +100,22 @@ public class BibtexParserTest extends TestCase {
 	public void testFromString() throws Exception {
 
 		{ // Simple case
-			Collection c = BibtexParser.fromString("@article{test,author={Ed von Test}}");
+			Collection<BibtexEntry> c = BibtexParser.fromString("@article{test,author={Ed von Test}}");
 			assertEquals(1, c.size());
 
-			BibtexEntry e = (BibtexEntry) c.iterator().next();
+			BibtexEntry e = c.iterator().next();
 			assertEquals("test", e.getCiteKey());
-			assertEquals(2, e.getAllFields().length);
-			Object[] o = e.getAllFields();
-			assertTrue(o[0].toString().equals("author") || o[1].toString().equals("author"));
+			assertEquals(2, e.getAllFields().size());
+			assertTrue(e.getAllFields().contains("author"));
 			assertEquals("Ed von Test", e.getField("author"));
 		}
 		{ // Empty String
-			Collection c = BibtexParser.fromString("");
+			Collection<BibtexEntry> c = BibtexParser.fromString("");
 			assertEquals(0, c.size());
 
 		}
 		{ // Error
-			Collection c = BibtexParser.fromString("@@article@@{{{{{{}");
+			Collection<BibtexEntry> c = BibtexParser.fromString("@@article@@{{{{{{}");
 			assertEquals(null, c);
 		}
 
@@ -125,15 +125,15 @@ public class BibtexParserTest extends TestCase {
 		/**
 		 * More
 		 */
-		Collection c = BibtexParser.fromString("@article{canh05,"
+		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 i = c.iterator();
-		BibtexEntry a = (BibtexEntry) i.next();
-		BibtexEntry b = (BibtexEntry) i.next();
+		Iterator<BibtexEntry> i = c.iterator();
+		BibtexEntry a = i.next();
+		BibtexEntry b = i.next();
 
 		if (a.getCiteKey().equals("foo")) {
 			BibtexEntry tmp = a;
@@ -176,14 +176,13 @@ public class BibtexParserTest extends TestCase {
 			"@article{test,author={Ed von Test}}"));
 		ParserResult result = parser.parse();
 
-		Collection c = result.getDatabase().getEntries();
+		Collection<BibtexEntry> c = result.getDatabase().getEntries();
 		assertEquals(1, c.size());
 
-		BibtexEntry e = (BibtexEntry) c.iterator().next();
+		BibtexEntry e = c.iterator().next();
 		assertEquals("test", e.getCiteKey());
-		assertEquals(2, e.getAllFields().length);
-		Object[] o = e.getAllFields();
-		assertTrue(o[0].toString().equals("author") || o[1].toString().equals("author"));
+		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
@@ -200,17 +199,16 @@ public class BibtexParserTest extends TestCase {
 		e.setField("author", "Ed von Test");
 		e.setField("bibtexkey", "test");
 
-		Collection c = result.getDatabase().getEntries();
+		Collection<BibtexEntry> c = result.getDatabase().getEntries();
 		assertEquals(1, c.size());
 
-		BibtexEntry e2 = (BibtexEntry) c.iterator().next();
+		BibtexEntry e2 = c.iterator().next();
 
 		assertNotSame(e.getId(), e2.getId());
 
-		Object[] o = e.getAllFields();
-		for (int i = 0; i < o.length; i++) {
-			if (!e.getField(o[i].toString()).equals(e2.getField(o[i].toString()))) {
-				fail("e and e2 differ in field " + o[i].toString());
+		for (String field : e.getAllFields()){
+			if (!e.getField(field.toString()).equals(e2.getField(field.toString()))) {
+				fail("e and e2 differ in field " + field.toString());
 			}
 		}
 	}
@@ -228,12 +226,12 @@ public class BibtexParserTest extends TestCase {
 			+ "isbn = 1234567890123456789,\n" + "isbn2 = {1234567890123456789},\n"
 			+ "small = 1234,\n" + "}"));
 
-		Collection c = result.getDatabase().getEntries();
-		BibtexEntry e = (BibtexEntry) c.iterator().next();
+		Collection<BibtexEntry> c = result.getDatabase().getEntries();
+		BibtexEntry e = c.iterator().next();
 
-		assertEquals("1234567890123456789", (String) e.getField("isbn"));
-		assertEquals("1234567890123456789", (String) e.getField("isbn2"));
-		assertEquals("1234", (String) e.getField("small"));
+		assertEquals("1234567890123456789", e.getField("isbn"));
+		assertEquals("1234567890123456789", e.getField("isbn2"));
+		assertEquals("1234", e.getField("small"));
 	}
 
 	public void testBigNumbers2() throws IOException {
@@ -244,19 +242,19 @@ public class BibtexParserTest extends TestCase {
 			+ "	Author = bourdieu," + "	Isbn = 2707318256," + "	Publisher = {Minuit},"
 			+ "	Title = {Questions de sociologie}," + "	Year = 2002" + "}"));
 
-		Collection c = result.getDatabase().getEntries();
+		Collection<BibtexEntry> c = result.getDatabase().getEntries();
 		assertEquals(1, c.size());
 
-		BibtexEntry e = (BibtexEntry) c.iterator().next();
+		BibtexEntry e = c.iterator().next();
 
 		assertEquals("bourdieu-2002-questions-sociologie", e.getCiteKey());
 		assertEquals(BibtexEntryType.BOOK, e.getType());
-		assertEquals("2707318256", (String) e.getField("isbn"));
-		assertEquals("Paris", (String) e.getField("address"));
-		assertEquals("Minuit", (String) e.getField("publisher"));
-		assertEquals("Questions de sociologie", (String) e.getField("title"));
-		assertEquals("#bourdieu#", (String) e.getField("author"));
-		assertEquals("2002", (String) e.getField("year"));
+		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 {
@@ -273,13 +271,13 @@ public class BibtexParserTest extends TestCase {
 		assertEquals("canh05", e.getCiteKey());
 		assertEquals(BibtexEntryType.ARTICLE, e.getType());
 
-		assertEquals("a b", (String)e.getField("a"));
-		assertEquals("a\nb", (String)e.getField("b"));
-		assertEquals("a b", (String)e.getField("c"));
-		assertEquals("a b", (String)e.getField("d"));
+		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", (String) e.getField("title"));
-		assertEquals("Hallo World this isnot an exercise . ", (String) e.getField("tabs"));
+		assertEquals("Hallo World this is\nnot \nan \n exercise . \n\n", e.getField("title"));
+		assertEquals("Hallo World this isnot an exercise . ", e.getField("tabs"));
 	}
 }
\ 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 90b02e1..a19f5ec 100644
--- a/src/java/tests/net/sf/jabref/imports/CopacImporterTest.java
+++ b/src/java/tests/net/sf/jabref/imports/CopacImporterTest.java
@@ -48,10 +48,10 @@ public class CopacImporterTest extends TestCase {
 	public void testImportEntries() throws IOException {
 		CopacImporter importer = new CopacImporter();
 
-		List entries = importer.importEntries(CopacImporterTest.class
+		List<BibtexEntry> entries = importer.importEntries(CopacImporterTest.class
 			.getResourceAsStream("CopacImporterTest1.txt"));
 		assertEquals(1, entries.size());
-		BibtexEntry entry = (BibtexEntry) entries.get(0);
+		BibtexEntry entry = entries.get(0);
 		
 		assertEquals("The SIS project : software reuse with a natural language approach", entry.getField("title"));
 		assertEquals(
@@ -66,14 +66,14 @@ public class CopacImporterTest extends TestCase {
 	public void testImportEntries2() throws IOException {
 		CopacImporter importer = new CopacImporter();
 
-		List entries = importer.importEntries(CopacImporterTest.class
+		List<BibtexEntry> entries = importer.importEntries(CopacImporterTest.class
 			.getResourceAsStream("CopacImporterTest2.txt"));
 		assertEquals(2, entries.size());
-		BibtexEntry one = (BibtexEntry) entries.get(0);
+		BibtexEntry one = entries.get(0);
 		
 		assertEquals("Computing and operational research at the London Hospital", one.getField("title"));
 		
-		BibtexEntry two = (BibtexEntry) entries.get(1);
+		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/IsiImporterTest.java b/src/java/tests/net/sf/jabref/imports/IsiImporterTest.java
index 542ed32..58bd0e3 100644
--- a/src/java/tests/net/sf/jabref/imports/IsiImporterTest.java
+++ b/src/java/tests/net/sf/jabref/imports/IsiImporterTest.java
@@ -15,7 +15,7 @@ import net.sf.jabref.imports.IsiImporter;
  * Test cases for the IsiImporter
  * 
  * @author $Author: coezbek $
- * @version $Revision: 1933 $ ($Date: 2007-02-06 17:27:22 +0100 (Tue, 06 Feb 2007) $)
+ * @version $Revision: 2488 $ ($Date: 2007-11-14 01:25:31 +0100 (Wed, 14 Nov 2007) $)
  * 
  */
 public class IsiImporterTest extends TestCase {
@@ -50,7 +50,7 @@ public class IsiImporterTest extends TestCase {
 
 	public void testProcessSubSup() {
 
-		HashMap hm = new HashMap();
+		HashMap<String, String> hm = new HashMap<String, String>();
 		hm.put("title", "/sub 3/");
 		IsiImporter.processSubSup(hm);
 		assertEquals("$_3$", hm.get("title"));
@@ -95,10 +95,10 @@ public class IsiImporterTest extends TestCase {
 	public void testImportEntries() throws IOException {
 		IsiImporter importer = new IsiImporter();
 
-		List entries = importer.importEntries(IsiImporterTest.class
+		List<BibtexEntry> entries = importer.importEntries(IsiImporterTest.class
 			.getResourceAsStream("IsiImporterTest1.isi"));
 		assertEquals(1, entries.size());
-		BibtexEntry entry = (BibtexEntry) entries.get(0);
+		BibtexEntry entry = entries.get(0);
 		assertEquals("Optical properties of MgO doped LiNbO$_3$ single crystals", entry
 			.getField("title"));
 		assertEquals(
@@ -118,12 +118,12 @@ public class IsiImporterTest extends TestCase {
 	public void testImportEntriesINSPEC() throws IOException {
 		IsiImporter importer = new IsiImporter();
 
-		List entries = importer.importEntries(IsiImporterTest.class
+		List<BibtexEntry> entries = importer.importEntries(IsiImporterTest.class
 			.getResourceAsStream("IsiImporterTestInspec.isi"));
 
 		assertEquals(2, entries.size());
-		BibtexEntry a = (BibtexEntry) entries.get(0);
-		BibtexEntry b = (BibtexEntry) entries.get(1);
+		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")) {
@@ -203,12 +203,12 @@ public class IsiImporterTest extends TestCase {
 	public void testImportEntriesWOS() throws IOException {
 		IsiImporter importer = new IsiImporter();
 
-		List entries = importer.importEntries(IsiImporterTest.class
+		List<BibtexEntry> entries = importer.importEntries(IsiImporterTest.class
 			.getResourceAsStream("IsiImporterTestWOS.isi"));
 
 		assertEquals(2, entries.size());
-		BibtexEntry a = (BibtexEntry) entries.get(0);
-		BibtexEntry b = (BibtexEntry) entries.get(1);
+		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")) {
@@ -274,11 +274,11 @@ public class IsiImporterTest extends TestCase {
 	public void testImportIEEEExport() throws IOException {
 		IsiImporter importer = new IsiImporter();
 
-		List entries = importer.importEntries(IsiImporterTest.class
+		List<BibtexEntry> entries = importer.importEntries(IsiImporterTest.class
 			.getResourceAsStream("IEEEImport1.txt"));
 
 		assertEquals(1, entries.size());
-		BibtexEntry a = (BibtexEntry) entries.get(0);
+		BibtexEntry a = entries.get(0);
 		
 		assertEquals(a.getType().getName(), BibtexEntryType.ARTICLE, a.getType());
 		assertEquals("Geoscience and Remote Sensing Letters, IEEE", a.getField("journal"));
@@ -295,11 +295,11 @@ public class IsiImporterTest extends TestCase {
 
 		assertEquals("387--391", a.getField("pages"));
 
-		assertEquals("Gamba, P. and Dell'Acqua, F. and Lisini, G.", (String) a.getField("author"));
+		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", (String)a.getField("keywords"));
+		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 " +
@@ -318,21 +318,21 @@ public class IsiImporterTest extends TestCase {
 				"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.", (String)a.getField("abstract"));
+				"for the extracted road network.", a.getField("abstract"));
 		
 	}
 	
 	public void testImportEntriesMedline() throws IOException {
 		IsiImporter importer = new IsiImporter();
 
-		List entries = importer.importEntries(IsiImporterTest.class
+		List<BibtexEntry> entries = importer.importEntries(IsiImporterTest.class
 			.getResourceAsStream("IsiImporterTestMedline.isi"));
 
 		assertEquals(2, entries.size());
-		BibtexEntry a = (BibtexEntry) entries.get(0);
-		BibtexEntry b = (BibtexEntry) entries.get(1);
+		BibtexEntry a = entries.get(0);
+		BibtexEntry b = entries.get(1);
 
-		if (((String) a.getField("title")).startsWith("Estrogen")) {
+		if ((a.getField("title")).startsWith("Estrogen")) {
 			BibtexEntry tmp = a;
 			a = b;
 			b = tmp;
@@ -343,7 +343,7 @@ public class IsiImporterTest extends TestCase {
 			"Effects of modafinil on cognitive performance and alertness during sleep deprivation.",
 			a.getField("title"));
 
-		assertEquals("Wesensten, Nancy J.", (String) a.getField("author"));
+		assertEquals("Wesensten, Nancy J.", a.getField("author"));
 		assertEquals("Curr Pharm Des", a.getField("journal"));
 		assertEquals("2006", a.getField("year"));
 		assertEquals(null, a.getField("month"));
@@ -358,7 +358,7 @@ public class IsiImporterTest extends TestCase {
 			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.",
-			(String) b.getField("author"));
+			b.getField("author"));
 		assertEquals("2006", b.getField("year"));
 		assertEquals("#may#", b.getField("month"));
 		assertEquals("13", b.getField("volume"));
diff --git a/src/java/tests/net/sf/jabref/imports/OAI2ImportTest.java b/src/java/tests/net/sf/jabref/imports/OAI2ImportTest.java
index eec1cde..4490a7b 100644
--- a/src/java/tests/net/sf/jabref/imports/OAI2ImportTest.java
+++ b/src/java/tests/net/sf/jabref/imports/OAI2ImportTest.java
@@ -1,8 +1,5 @@
 package tests.net.sf.jabref.imports;
 
-import java.io.File;
-import java.io.FileInputStream;
-
 import javax.xml.parsers.SAXParser;
 import javax.xml.parsers.SAXParserFactory;
 
@@ -22,7 +19,7 @@ import org.xml.sax.SAXException;
  * @author Christian Kopf
  * @author Christopher Oezbek
  * 
- * @version $Revision: 2141 $ ($Date: 2007-06-29 15:56:21 +0200 (Fri, 29 Jun 2007) $)
+ * @version $Revision: 2488 $ ($Date: 2007-11-14 01:25:31 +0100 (Wed, 14 Nov 2007) $)
  * 
  */
 public class OAI2ImportTest extends TestCase {
@@ -31,12 +28,6 @@ public class OAI2ImportTest extends TestCase {
 
 	BibtexEntry be;
 
-	File fis;
-
-	File fis2;
-
-	File fis3;
-
 	protected SAXParserFactory parserFactory;
 
 	protected SAXParser saxParser;
@@ -46,9 +37,6 @@ public class OAI2ImportTest extends TestCase {
 		saxParser = parserFactory.newSAXParser();
 		be = new BibtexEntry(Util.createNeutralId(), BibtexEntryType.getType("article"));
 		handler = new OAI2Handler(be);
-		fis = new File("src/java/tests/net/sf/jabref/imports/oai2.xml");
-		fis2 = new File("src/java/tests/net/sf/jabref/imports/oai22.xml");
-		fis3 = new File("src/java/tests/net/sf/jabref/imports/oai23.xml");
 	}
 
 	public void testCorrectLineBreaks() {
@@ -61,23 +49,23 @@ public class OAI2ImportTest extends TestCase {
 
 	public void testParse() throws Throwable {
 		try {
-			saxParser.parse(fis, handler);
-			assertEquals("hep-ph/0408155", (String) be.getField("eprint"));
+			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",
-				(String) be.getField("author"));
-			assertEquals("Nucl.Phys. B", (String) be.getField("journal"));
-			assertEquals("710", (String) be.getField("volume"));
-			assertEquals("2005", (String) be.getField("year"));
-			assertEquals("511-525", (String) be.getField("pages"));
+				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", (String) be.getField("title"));
-			assertNotNull((String) be.getField("abstract"));
-			assertEquals("23 pages", (String) be.getField("comments"));
-			assertEquals("CERN-PH-TH/2004-151", (String) be.getField("reportno"));
+			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();
 		}
@@ -85,8 +73,8 @@ public class OAI2ImportTest extends TestCase {
 
 	public void testOai22xml() throws Exception {
 		try {
-			saxParser.parse(fis2, handler);
-			assertEquals("2005", (String) be.getField("year"));
+			saxParser.parse(this.getClass().getResourceAsStream("oai22.xml"), handler);
+			assertEquals("2005", be.getField("year"));
 		} catch (SAXException e) {
 			throw e.getException();
 		}
@@ -94,7 +82,7 @@ public class OAI2ImportTest extends TestCase {
 
 	public void testOai23xml() throws Throwable {
 		try {
-			saxParser.parse(new FileInputStream(fis3), handler);
+            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();
@@ -105,11 +93,11 @@ public class OAI2ImportTest extends TestCase {
 	public void testUrlConstructor() {
 		OAI2Fetcher fetcher = new OAI2Fetcher();
 		assertEquals(
-			"http://arxiv.org/oai2?verb=GetRecord&identifier=oai%3AarXiv.org%3Ahep-ph%2F0408155&metadataPrefix=arXiv",
+			"http://export.arxiv.org/oai2?verb=GetRecord&identifier=oai%3AarXiv.org%3Ahep-ph%2F0408155&metadataPrefix=arXiv",
 			fetcher.constructUrl("hep-ph/0408155"));
 
 		assertEquals(
-			"http://arxiv.org/oai2?verb=GetRecord&identifier=oai%3AarXiv.org%3Amath%2F0612188&metadataPrefix=arXiv",
+			"http://export.arxiv.org/oai2?verb=GetRecord&identifier=oai%3AarXiv.org%3Amath%2F0612188&metadataPrefix=arXiv",
 			fetcher.constructUrl("math/0612188"));
 
 	}
@@ -120,6 +108,8 @@ public class OAI2ImportTest extends TestCase {
 		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 {
@@ -129,11 +119,11 @@ public class OAI2ImportTest extends TestCase {
 			be = fetcher.importOai2Entry("math.RA/0612188");
 			assertNotNull(be);
 
-			assertEquals("math/0612188", (String) be.getField("eprint"));
+			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("2006", be.getField("year").toString());
+			assertEquals("2007", be.getField("year").toString());
 
 			Thread.sleep(20000);
 		}
@@ -143,7 +133,7 @@ public class OAI2ImportTest extends TestCase {
 			be = fetcher.importOai2Entry("astro-ph/0702080");
 			assertNotNull(be);
 
-			assertEquals("astro-ph/0702080", (String) be.getField("eprint"));
+			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());
@@ -156,7 +146,7 @@ public class OAI2ImportTest extends TestCase {
 			be = fetcher.importOai2Entry("math.QA/0601001");
 			assertNotNull(be);
 
-			assertEquals("math/0601001", (String) be.getField("eprint"));
+			assertEquals("math/0601001", be.getField("eprint"));
 			Thread.sleep(20000);
 		}
 
@@ -165,8 +155,18 @@ public class OAI2ImportTest extends TestCase {
 			be = fetcher.importOai2Entry("hep-ph/0408155");
 			assertNotNull(be);
 			
-			assertEquals("hep-ph/0408155", (String) be.getField("eprint"));
-		}
+			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/labelPattern/AllTests.java b/src/java/tests/net/sf/jabref/labelPattern/AllTests.java
new file mode 100644
index 0000000..4d4a74e
--- /dev/null
+++ b/src/java/tests/net/sf/jabref/labelPattern/AllTests.java
@@ -0,0 +1,18 @@
+package tests.net.sf.jabref.labelPattern;
+
+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.labelPattern");
+        //$JUnit-BEGIN$
+        suite.addTestSuite(LabelPatternUtilTest.class);
+        //$JUnit-END$
+        return suite;
+    }
+
+}
diff --git a/src/java/tests/net/sf/jabref/labelPattern/LabelPatternUtilTest.java b/src/java/tests/net/sf/jabref/labelPattern/LabelPatternUtilTest.java
new file mode 100644
index 0000000..b403f7c
--- /dev/null
+++ b/src/java/tests/net/sf/jabref/labelPattern/LabelPatternUtilTest.java
@@ -0,0 +1,107 @@
+package tests.net.sf.jabref.labelPattern;
+
+import junit.framework.TestCase;
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.imports.BibtexParser;
+import net.sf.jabref.labelPattern.LabelPatternUtil;
+
+public class LabelPatternUtilTest extends TestCase {
+
+    /**
+     * Test for https://sourceforge.net/forum/message.php?msg_id=4498555
+     */
+    public void testMakeLabel() {
+
+        BibtexEntry entry = BibtexParser
+            .singleFromString("@ARTICLE{kohn, author={Andreas K{\\\"o}ning}, year={2000}}");
+
+        assertEquals("Kon", LabelPatternUtil.makeLabel(entry, "auth3"));
+    }
+
+    public void testFirstAuthor() {
+        assertEquals(
+            "Newton",
+            LabelPatternUtil
+                .firstAuthor("I. Newton and J. Maxwell and A. Einstein and N. Bohr and Harry Unknown"));
+        assertEquals("Newton", LabelPatternUtil.firstAuthor("I. Newton"));
+
+        // https://sourceforge.net/forum/message.php?msg_id=4498555
+        assertEquals("K{\\\"o}ning", LabelPatternUtil
+            .firstAuthor("K{\\\"o}ning"));
+
+        assertEquals("", LabelPatternUtil.firstAuthor(""));
+
+        try {
+            LabelPatternUtil.firstAuthor(null);
+            fail();
+        } catch (NullPointerException e) {
+
+        }
+    }
+
+    public void testAuthIniN() {
+        assertEquals(
+            "NMEB",
+            LabelPatternUtil
+                .authIniN(
+                    "I. Newton and J. Maxwell and A. Einstein and N. Bohr and Harry Unknown",
+                    4));
+        assertEquals("NMEB", LabelPatternUtil.authIniN(
+            "I. Newton and J. Maxwell and A. Einstein and N. Bohr", 4));
+        assertEquals("NeME", LabelPatternUtil.authIniN(
+            "I. Newton and J. Maxwell and A. Einstein", 4));
+        assertEquals("NeMa", LabelPatternUtil.authIniN(
+            "I. Newton and J. Maxwell", 4));
+        assertEquals("Newt", LabelPatternUtil.authIniN("I. Newton", 4));
+        assertEquals("", "");
+
+        assertEquals("N", LabelPatternUtil.authIniN("I. Newton", 1));
+        assertEquals("", LabelPatternUtil.authIniN("I. Newton", 0));
+        assertEquals("", LabelPatternUtil.authIniN("I. Newton", -1));
+
+        assertEquals("Newton", LabelPatternUtil.authIniN("I. Newton", 6));
+        assertEquals("Newton", LabelPatternUtil.authIniN("I. Newton", 7));
+
+        try {
+            LabelPatternUtil.authIniN(null, 3);
+            fail();
+        } catch (NullPointerException e) {
+
+        }
+    }
+
+    public void testFirstPage() {
+        assertEquals("7", LabelPatternUtil.firstPage("7--27"));
+        assertEquals("27", LabelPatternUtil.firstPage("--27"));
+        assertEquals("", LabelPatternUtil.firstPage(""));
+        assertEquals("42", LabelPatternUtil.firstPage("42--111"));
+        assertEquals("7", LabelPatternUtil.firstPage("7,41,73--97"));
+        assertEquals("7", LabelPatternUtil.firstPage("41,7,73--97"));
+        assertEquals("43", LabelPatternUtil.firstPage("43+"));
+
+        try {
+            LabelPatternUtil.firstPage(null);
+            fail();
+        } catch (NullPointerException e) {
+
+        }
+    }
+
+    public void testLastPage() {
+
+        assertEquals("27", LabelPatternUtil.lastPage("7--27"));
+        assertEquals("27", LabelPatternUtil.lastPage("--27"));
+        assertEquals("", LabelPatternUtil.lastPage(""));
+        assertEquals("111", LabelPatternUtil.lastPage("42--111"));
+        assertEquals("97", LabelPatternUtil.lastPage("7,41,73--97"));
+        assertEquals("97", LabelPatternUtil.lastPage("7,41,97--73"));
+        assertEquals("43", LabelPatternUtil.lastPage("43+"));
+        try {
+            LabelPatternUtil.lastPage(null);
+            fail();
+        } catch (NullPointerException e) {
+
+        }
+    }
+
+}
diff --git a/src/java/tests/net/sf/jabref/search/BasicSearchTest.java b/src/java/tests/net/sf/jabref/search/BasicSearchTest.java
index 3e5f079..b122935 100644
--- a/src/java/tests/net/sf/jabref/search/BasicSearchTest.java
+++ b/src/java/tests/net/sf/jabref/search/BasicSearchTest.java
@@ -2,12 +2,10 @@ package tests.net.sf.jabref.search;
 
 import junit.framework.TestCase;
 import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.Util;
 import net.sf.jabref.BibtexEntryType;
+import net.sf.jabref.Util;
 import net.sf.jabref.search.BasicSearch;
 
-import java.util.ArrayList;
-
 /**
  * Test case for BasicSearch.
  */
diff --git a/src/java/tests/net/sf/jabref/util/XMPSchemaBibtexTest.java b/src/java/tests/net/sf/jabref/util/XMPSchemaBibtexTest.java
index 53d9e7a..a911c38 100644
--- a/src/java/tests/net/sf/jabref/util/XMPSchemaBibtexTest.java
+++ b/src/java/tests/net/sf/jabref/util/XMPSchemaBibtexTest.java
@@ -41,8 +41,10 @@ public class XMPSchemaBibtexTest extends JabRefTestCase {
 
 	}
 
-	public void testXMPSchemaBibtexElement() throws ParserConfigurationException {
-		DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
+	public void testXMPSchemaBibtexElement()
+		throws ParserConfigurationException {
+		DocumentBuilderFactory builderFactory = DocumentBuilderFactory
+			.newInstance();
 		DocumentBuilder builder = builderFactory.newDocumentBuilder();
 		Element e = builder.newDocument().createElement("rdf:Description");
 
@@ -67,10 +69,11 @@ public class XMPSchemaBibtexTest extends JabRefTestCase {
 
 		assertEquals(2, l.getLength());
 
-		assertEquals("Tom DeMarco", XMLUtil.getStringValue(((Element) l.item(0))));
+		assertEquals("Tom DeMarco", XMLUtil
+			.getStringValue(((Element) l.item(0))));
 		assertEquals("Kent Beck", XMLUtil.getStringValue(((Element) l.item(1))));
 
-		List authors = bibtex.getPersonList("author");
+		List<String> authors = bibtex.getPersonList("author");
 		assertEquals(2, authors.size());
 
 		assertEquals("Tom DeMarco", authors.get(0));
@@ -81,26 +84,33 @@ public class XMPSchemaBibtexTest extends JabRefTestCase {
 		XMPMetadata xmp = new XMPMetadata();
 		XMPSchemaBibtex bibtex = new XMPSchemaBibtex(xmp);
 
-		bibtex.setTextProperty("title", "The advanced Flux-Compensation for Delawney-Separation");
+		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",
+			e.getAttribute("bibtex:title"));
 
-		assertEquals("The advanced Flux-Compensation for Delawney-Separation", bibtex
-			.getTextProperty("title"));
+		assertEquals("The advanced Flux-Compensation for Delawney-Separation",
+			bibtex.getTextProperty("title"));
 
-		bibtex.setTextProperty("title", "The advanced Flux-Correlation for Delawney-Separation");
+		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"));
+		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 {
@@ -112,35 +122,37 @@ public class XMPSchemaBibtexTest extends JabRefTestCase {
 		bibtex.addBagValue("author", "Kent Beck");
 		{
 
-			List l = bibtex.getBagList("author");
+			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"));
+			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 l = bibtex.getBagList("author");
+			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 l = bibtex.getBagList("author");
+			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 l = bibtex.getBagList("author");
+			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 l = bibtex.getBagList("author");
+			List<String> l = bibtex.getBagList("author");
 			assertEquals(0, l.size());
 		}
 	}
@@ -154,7 +166,7 @@ public class XMPSchemaBibtexTest extends JabRefTestCase {
 		bibtex.addSequenceValue("author", "Kent Beck");
 		{
 
-			List l = bibtex.getSequenceList("author");
+			List<String> l = bibtex.getSequenceList("author");
 
 			assertEquals(2, l.size());
 
@@ -163,32 +175,32 @@ public class XMPSchemaBibtexTest extends JabRefTestCase {
 		}
 		{
 			bibtex.removeSequenceValue("author", "Tom DeMarco");
-			List l = bibtex.getSequenceList("author");
+			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 l = bibtex.getSequenceList("author");
+			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 l = bibtex.getSequenceList("author");
+			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 l = bibtex.getSequenceList("author");
+			List<String> l = bibtex.getSequenceList("author");
 			assertEquals(0, l.size());
 		}
 	}
 
 	public void testSetRemoveGetSequenceDateListString() {
-		// We don't use this... 
+		// We don't use this...
 	}
 
 	public void testGetAllProperties() throws IOException {
@@ -200,13 +212,14 @@ public class XMPSchemaBibtexTest extends JabRefTestCase {
 		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 s = XMPSchemaBibtex.getAllProperties(bibtex, "bibtex");
-		
+
+		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"));
@@ -215,30 +228,34 @@ public class XMPSchemaBibtexTest extends JabRefTestCase {
 	}
 
 	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: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());
+		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 c1e051f..92e565d 100644
--- a/src/java/tests/net/sf/jabref/util/XMPUtilTest.java
+++ b/src/java/tests/net/sf/jabref/util/XMPUtilTest.java
@@ -13,13 +13,12 @@ import java.io.PrintStream;
 import java.io.Reader;
 import java.io.StringReader;
 import java.io.StringWriter;
-import java.util.Arrays;
 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 java.util.TreeSet;
 
 import javax.xml.transform.TransformerException;
 
@@ -37,6 +36,7 @@ import net.sf.jabref.util.XMPSchemaBibtex;
 import net.sf.jabref.util.XMPUtil;
 
 import org.jempbox.xmp.XMPMetadata;
+import org.jempbox.xmp.XMPSchema;
 import org.jempbox.xmp.XMPSchemaBasic;
 import org.jempbox.xmp.XMPSchemaDublinCore;
 import org.jempbox.xmp.XMPSchemaMediaManagement;
@@ -130,9 +130,9 @@ public class XMPUtilTest extends TestCase {
 	public static BibtexEntry bibtexString2BibtexEntry(String s)
 			throws IOException {
 		ParserResult result = BibtexParser.parse(new StringReader(s));
-		Collection c = result.getDatabase().getEntries();
+		Collection<BibtexEntry> c = result.getDatabase().getEntries();
 		assertEquals(1, c.size());
-		return (BibtexEntry) c.iterator().next();
+		return c.iterator().next();
 	}
 
 	public static String bibtexEntry2BibtexString(BibtexEntry e)
@@ -159,7 +159,7 @@ public class XMPUtilTest extends TestCase {
 
 	public String t2XMP() {
 		return "<rdf:Description rdf:about='' xmlns:bibtex='http://jabref.sourceforge.net/bibteXMP/' "
-				+ "bibtex:title='�pt�mz�t��n' "
+				+ "bibtex:title='�pt�mz�t��n' "
 				+ "bibtex:bibtexkey='OezbekC06' "
 				+ "bibtex:entrytype='INCOLLECTION' "
 				+ "bibtex:year='2003' "
@@ -176,7 +176,7 @@ public class XMPUtilTest extends TestCase {
 	public BibtexEntry t2BibtexEntry() {
 		BibtexEntry e = new BibtexEntry(Util.createNeutralId(),
 				BibtexEntryType.INCOLLECTION);
-		e.setField("title", "�pt�mz�t��n");
+		e.setField("title", "�pt�mz�t��n");
 		e.setField("bibtexkey", "OezbekC06");
 		e.setField("year", "2003");
 		e
@@ -203,7 +203,7 @@ public class XMPUtilTest extends TestCase {
 		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  [...]
+						"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;
 	}
 
@@ -230,7 +230,7 @@ public class XMPUtilTest extends TestCase {
 				+ "<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 [...]
+				+ "<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 [...]
 	}
 
 	/**
@@ -299,9 +299,9 @@ public class XMPUtilTest extends TestCase {
 
 		writeManually(pdfFile, bibtexXPacket(bibtexDescription(bibtex)));
 
-		List l = XMPUtil.readXMP(pdfFile.getAbsoluteFile());
+		List<BibtexEntry> l = XMPUtil.readXMP(pdfFile.getAbsoluteFile());
 		assertEquals(1, l.size());
-		BibtexEntry e = (BibtexEntry) l.get(0);
+		BibtexEntry e = l.get(0);
 
 		assertNotNull(e);
 		assertEquals("OezbekC06", e.getCiteKey());
@@ -321,19 +321,19 @@ public class XMPUtilTest extends TestCase {
 	public void testReadXMPUTF8() throws Exception {
 
 		String bibtex = "<bibtex:year>2003</bibtex:year>\n"
-				+ "<bibtex:title>�pt�mz�t��n</bibtex:title>\n"
+				+ "<bibtex:title>�pt�mz�t��n</bibtex:title>\n"
 				+ "<bibtex:bibtexkey>OezbekC06</bibtex:bibtexkey>\n";
 
 		writeManually(pdfFile, bibtexXPacket(bibtexDescription(bibtex)));
 
-		List l = XMPUtil.readXMP(pdfFile.getAbsoluteFile());
+		List<BibtexEntry> l = XMPUtil.readXMP(pdfFile.getAbsoluteFile());
 		assertEquals(1, l.size());
-		BibtexEntry e = (BibtexEntry) l.get(0);
+		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("�pt�mz�t��n", e.getField("title"));
 		assertEquals(BibtexEntryType.OTHER, e.getType());
 	}
 
@@ -356,12 +356,11 @@ public class XMPUtilTest extends TestCase {
 
 			XMPUtil.writeXMP(pdfFile, e, null);
 
-			List l = XMPUtil.readXMP(pdfFile.getAbsoluteFile());
+			List<BibtexEntry> l = XMPUtil.readXMP(pdfFile.getAbsoluteFile());
 			assertEquals(1, l.size());
-			BibtexEntry x = (BibtexEntry) l.get(0);
+			BibtexEntry x = l.get(0);
 
-			TreeSet<Object> ts = new TreeSet<Object>(Arrays.asList(x
-					.getAllFields()));
+			Set<String> ts = x.getAllFields();
 
 			assertEquals(8, ts.size());
 
@@ -385,13 +384,10 @@ public class XMPUtilTest extends TestCase {
 
 			XMPUtil.writeXMP(pdfFile, e, null);
 
-			List l = XMPUtil.readXMP(pdfFile.getAbsoluteFile());
+			List<BibtexEntry> l = XMPUtil.readXMP(pdfFile.getAbsoluteFile());
 			assertEquals(1, l.size());
-			BibtexEntry x = (BibtexEntry) l.get(0);
-
-			TreeSet<Object> ts = new TreeSet<Object>(Arrays.asList(x
-					.getAllFields()));
-
+			BibtexEntry x = l.get(0);
+			Set<String> ts = x.getAllFields();
 			assertEquals(8, ts.size());
 
 			ts.contains("bibtextype");
@@ -421,9 +417,9 @@ public class XMPUtilTest extends TestCase {
 
 		writeManually(pdfFile, bibtexXPacket(bibtexDescription(bibtex)));
 
-		List l = XMPUtil.readXMP(pdfFile.getAbsoluteFile());
+		List<BibtexEntry> l = XMPUtil.readXMP(pdfFile.getAbsoluteFile());
 		assertEquals(1, l.size());
-		BibtexEntry e = (BibtexEntry) l.get(0);
+		BibtexEntry e = l.get(0);
 
 		assertNotNull(e);
 		assertEquals("Clarkson06", e.getCiteKey());
@@ -444,9 +440,9 @@ public class XMPUtilTest extends TestCase {
 
 		writeManually(pdfFile, bibtexXPacket(bibtexDescription(bibtex)));
 
-		List l = XMPUtil.readXMP(pdfFile.getAbsoluteFile());
+		List<BibtexEntry> l = XMPUtil.readXMP(pdfFile.getAbsoluteFile());
 		assertEquals(1, l.size());
-		BibtexEntry e = (BibtexEntry) l.get(0);
+		BibtexEntry e = l.get(0);
 
 		assertNotNull(e);
 		assertEquals(BibtexEntryType.ARTICLE, e.getType());
@@ -490,7 +486,7 @@ public class XMPUtilTest extends TestCase {
 	public void testWriteReadManually() throws Exception {
 
 		String bibtex = "<bibtex:year>2003</bibtex:year>\n"
-				+ "<bibtex:title>�pt�mz�t��n</bibtex:title>\n"
+				+ "<bibtex:title>�pt�mz�t��n</bibtex:title>\n"
 				+ "<bibtex:bibtexkey>OezbekC06</bibtex:bibtexkey>\n";
 
 		writeManually(pdfFile, bibtexXPacket(bibtexDescription(bibtex)));
@@ -536,16 +532,16 @@ public class XMPUtilTest extends TestCase {
 								+ "  url = {http://james.howison.name/publications.html}"
 								+ "\n" + "}"));
 
-		Collection c = result.getDatabase().getEntries();
+		Collection<BibtexEntry> c = result.getDatabase().getEntries();
 		assertEquals(1, c.size());
 
-		BibtexEntry e = (BibtexEntry) c.iterator().next();
+		BibtexEntry e = c.iterator().next();
 
 		XMPUtil.writeXMP(pdfFile, e, null);
 
-		List l = XMPUtil.readXMP(pdfFile.getAbsoluteFile());
+		List<BibtexEntry> l = XMPUtil.readXMP(pdfFile.getAbsoluteFile());
 		assertEquals(1, l.size());
-		BibtexEntry x = (BibtexEntry) l.get(0);
+		BibtexEntry x = l.get(0);
 
 		assertEquals(e, x);
 	}
@@ -564,9 +560,9 @@ public class XMPUtilTest extends TestCase {
 
 			writeManually(pdfFile, bibtexXPacket(bibtexDescription(bibtex)));
 
-			List l = XMPUtil.readXMP(pdfFile.getAbsoluteFile());
+			List<BibtexEntry> l = XMPUtil.readXMP(pdfFile.getAbsoluteFile());
 			assertEquals(1, l.size());
-			BibtexEntry e = (BibtexEntry) l.get(0);
+			BibtexEntry e = l.get(0);
 
 			assertNotNull(e);
 			assertEquals("Hallo World this is not an exercise .", e
@@ -591,9 +587,9 @@ public class XMPUtilTest extends TestCase {
 
 		writeManually(pdfFile, bibtexXPacket(bibtex));
 
-		List l = XMPUtil.readXMP(pdfFile.getAbsoluteFile());
+		List<BibtexEntry> l = XMPUtil.readXMP(pdfFile.getAbsoluteFile());
 		assertEquals(1, l.size());
-		BibtexEntry e = (BibtexEntry) l.get(0);
+		BibtexEntry e = l.get(0);
 
 		assertEquals(t2BibtexEntry(), e);
 	}
@@ -610,6 +606,7 @@ public class XMPUtilTest extends TestCase {
 	 * @throws Exception
 	 *             (indicating an failure)
 	 */
+	@SuppressWarnings("unchecked")
 	public void testSimpleUpdate() throws Exception {
 
 		String s = " <rdf:Description rdf:about=''"
@@ -669,9 +666,9 @@ public class XMPUtilTest extends TestCase {
 			// Now write new packet and check if it was correctly written
 			XMPUtil.writeXMP(pdfFile, t1BibtexEntry(), null);
 
-			List l = XMPUtil.readXMP(pdfFile.getAbsoluteFile());
+			List<BibtexEntry> l = XMPUtil.readXMP(pdfFile.getAbsoluteFile());
 			assertEquals(1, l.size());
-			BibtexEntry e = (BibtexEntry) l.get(0);
+			BibtexEntry e = l.get(0);
 
 			assertEquals(t1BibtexEntry(), e);
 
@@ -698,7 +695,7 @@ public class XMPUtilTest extends TestCase {
 				meta.addXMLNSMapping(XMPSchemaBibtex.NAMESPACE,
 						XMPSchemaBibtex.class);
 
-				List schemas = meta.getSchemas();
+				List<XMPSchema> schemas = meta.getSchemas();
 
 				assertEquals(4, schemas.size());
 
@@ -867,16 +864,16 @@ public class XMPUtilTest extends TestCase {
 								+ "  url = {http://james.howison.name/publications.html}"
 								+ "\n" + "}"));
 
-		Collection c = result.getDatabase().getEntries();
+		Collection<BibtexEntry> c = result.getDatabase().getEntries();
 		assertEquals(1, c.size());
 
-		BibtexEntry e = (BibtexEntry) c.iterator().next();
+		BibtexEntry e = c.iterator().next();
 
 		XMPUtil.writeXMP(pdfFile, e, null);
 
-		List l = XMPUtil.readXMP(pdfFile.getAbsoluteFile());
+		List<BibtexEntry> l = XMPUtil.readXMP(pdfFile.getAbsoluteFile());
 		assertEquals(1, l.size());
-		BibtexEntry x = (BibtexEntry) l.get(0);
+		BibtexEntry x = l.get(0);
 
 		assertEquals(e, x);
 	}
@@ -885,28 +882,26 @@ public class XMPUtilTest extends TestCase {
 		assertEquals(expected.getCiteKey(), actual.getCiteKey());
 		assertEquals(expected.getType(), actual.getType());
 
-		Object[] o = expected.getAllFields();
-
-		for (int i = 0; i < o.length; i++) {
-			if (o[i].toString().toLowerCase().equals("author")
-					|| o[i].toString().toLowerCase().equals("editor")) {
+		for (String field : expected.getAllFields()){
+		
+			if (field.toString().toLowerCase().equals("author")
+					|| field.toString().toLowerCase().equals("editor")) {
 
 				AuthorList expectedAuthors = AuthorList.getAuthorList(expected
-						.getField(o[i].toString()).toString());
+						.getField(field.toString()).toString());
 				AuthorList actualAuthors = AuthorList.getAuthorList(actual
-						.getField(o[i].toString()).toString());
+						.getField(field.toString()).toString());
 				assertEquals(expectedAuthors, actualAuthors);
 			} else {
 				assertEquals(
-						"" + expected.getField(o[i].toString()).toString(),
-						expected.getField(o[i].toString()).toString(), actual
-								.getField(o[i].toString()).toString());
+						"" + field.toString(),
+						expected.getField(field.toString()).toString(), actual
+								.getField(field.toString()).toString());
 			}
 		}
 
-		assertEquals(expected.getAllFields().length,
-				actual.getAllFields().length);
-
+		assertEquals(expected.getAllFields().size(),
+				actual.getAllFields().size());
 	}
 
 	/**
@@ -946,12 +941,12 @@ public class XMPUtilTest extends TestCase {
 		/* Test contents of string */
 		writeManually(pdfFile, xmp);
 
-		List l = XMPUtil.readXMP(pdfFile);
+		List<BibtexEntry> l = XMPUtil.readXMP(pdfFile);
 
 		assertEquals(2, l.size());
 
-		BibtexEntry a = (BibtexEntry) l.get(0);
-		BibtexEntry b = (BibtexEntry) l.get(1);
+		BibtexEntry a = l.get(0);
+		BibtexEntry b = l.get(1);
 
 		if (a.getCiteKey().equals("foo")) {
 			BibtexEntry tmp = a;
@@ -981,12 +976,12 @@ public class XMPUtilTest extends TestCase {
 		writeManually(pdfFile, bibtexXPacket(bibtex));
 
 		// Read from file
-		List l = XMPUtil.readXMP(pdfFile);
+		List<BibtexEntry> l = XMPUtil.readXMP(pdfFile);
 
 		assertEquals(2, l.size());
 
-		BibtexEntry a = (BibtexEntry) l.get(0);
-		BibtexEntry b = (BibtexEntry) l.get(1);
+		BibtexEntry a = l.get(0);
+		BibtexEntry b = l.get(1);
 
 		if (a.getCiteKey().equals("Clarkson06")) {
 			BibtexEntry tmp = a;
@@ -1016,8 +1011,8 @@ public class XMPUtilTest extends TestCase {
 
 		assertEquals(2, l.size());
 
-		BibtexEntry a = (BibtexEntry) l.get(0);
-		BibtexEntry b = (BibtexEntry) l.get(1);
+		BibtexEntry a = l.get(0);
+		BibtexEntry b = l.get(1);
 
 		if (a.getCiteKey().equals("Clarkson06")) {
 			BibtexEntry tmp = a;
@@ -1029,6 +1024,7 @@ public class XMPUtilTest extends TestCase {
 		assertEquals(t3BibtexEntry(), b);
 	}
 
+	@SuppressWarnings("unchecked")
 	public void testReadWriteDC() throws IOException, TransformerException {
 		List<BibtexEntry> l = new LinkedList<BibtexEntry>();
 		l.add(t3BibtexEntry());
@@ -1064,6 +1060,7 @@ public class XMPUtilTest extends TestCase {
 
 			if (metaRaw == null) {
 				fail();
+				return;
 			}
 
 			XMPMetadata meta = new XMPMetadata(XMLUtil.parse(metaRaw
@@ -1072,9 +1069,8 @@ public class XMPUtilTest extends TestCase {
 					XMPSchemaBibtex.class);
 
 			// Check Dublin Core
-			List schemas = meta
+			List<XMPSchema> schemas = meta
 					.getSchemasByNamespaceURI("http://purl.org/dc/elements/1.1/");
-
 			assertEquals(1, schemas.size());
 
 			XMPSchemaDublinCore dcSchema = (XMPSchemaDublinCore) schemas
@@ -1109,6 +1105,7 @@ public class XMPUtilTest extends TestCase {
 
 	}
 
+	@SuppressWarnings("unchecked")
 	public void testWriteSingleUpdatesDCAndInfo() throws IOException,
 			TransformerException {
 		List<BibtexEntry> l = new LinkedList<BibtexEntry>();
@@ -1153,7 +1150,7 @@ public class XMPUtilTest extends TestCase {
 					XMPSchemaBibtex.class);
 
 			// Check Dublin Core
-			List schemas = meta
+			List<XMPSchema> schemas = meta
 					.getSchemasByNamespaceURI("http://purl.org/dc/elements/1.1/");
 
 			assertEquals(1, schemas.size());
@@ -1190,6 +1187,7 @@ public class XMPUtilTest extends TestCase {
 
 	}
 
+	@SuppressWarnings("unchecked")
 	public void testReadRawXMP() throws Exception {
 
 		ParserResult result = BibtexParser
@@ -1212,13 +1210,13 @@ public class XMPUtilTest extends TestCase {
 
 		XMPMetadata metadata = XMPUtil.readRawXMP(pdfFile);
 
-		List schemas = metadata.getSchemas();
+		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 authors = bib.getSequenceList("author");
+		List<String> authors = bib.getSequenceList("author");
 		assertEquals(4, authors.size());
 		assertEquals("K. Crowston", authors.get(0));
 		assertEquals("H. Annabi", authors.get(1));
@@ -1266,9 +1264,9 @@ public class XMPUtilTest extends TestCase {
 
 			writeManually(pdfFile, xmp);
 
-			List l = XMPUtil.readXMP(pdfFile);
+			List<BibtexEntry> l = XMPUtil.readXMP(pdfFile);
 			assertEquals(1, l.size());
-			assertEquals(t1BibtexEntry(), (BibtexEntry) l.get(0));
+			assertEquals(t1BibtexEntry(), l.get(0));
 
 		} finally {
 			if (fileWriter != null)
@@ -1301,9 +1299,9 @@ public class XMPUtilTest extends TestCase {
 			String bibtex = s.toString();
 
 			ParserResult result = BibtexParser.parse(new StringReader(bibtex));
-			Collection c = result.getDatabase().getEntries();
+			Collection<BibtexEntry> c = result.getDatabase().getEntries();
 			assertEquals(1, c.size());
-			BibtexEntry x = (BibtexEntry) c.iterator().next();
+			BibtexEntry x = c.iterator().next();
 
 			assertEquals(e, x);
 		}
@@ -1340,10 +1338,10 @@ public class XMPUtilTest extends TestCase {
 
 			/* Test contents of string */
 			writeManually(pdfFile, xmp);
-			List l = XMPUtil.readXMP(pdfFile);
+			List<BibtexEntry> l = XMPUtil.readXMP(pdfFile);
 			assertEquals(1, l.size());
 
-			assertEquals(t1BibtexEntry(), (BibtexEntry) l.get(0));
+			assertEquals(t1BibtexEntry(), l.get(0));
 		}
 	}
 
@@ -1374,9 +1372,9 @@ public class XMPUtilTest extends TestCase {
 				s.close();
 
 				// PDF should be annotated:
-				List l = XMPUtil.readXMP(pdfFile);
+				List<BibtexEntry> l = XMPUtil.readXMP(pdfFile);
 				assertEquals(1, l.size());
-				assertEquals(t1BibtexEntry(), (BibtexEntry) l.get(0));
+				assertEquals(t1BibtexEntry(), l.get(0));
 			}
 			{ // Now try OezbekC06
 				ByteArrayOutputStream s = new ByteArrayOutputStream();
@@ -1387,9 +1385,9 @@ public class XMPUtilTest extends TestCase {
 				System.setOut(oldOut);
 				s.close();
 				// PDF should be annotated:
-				List l = XMPUtil.readXMP(pdfFile);
+				List<BibtexEntry> l = XMPUtil.readXMP(pdfFile);
 				assertEquals(1, l.size());
-				assertEquals(t2BibtexEntry(), (BibtexEntry) l.get(0));
+				assertEquals(t2BibtexEntry(), l.get(0));
 			}
 		} finally {
 			if (fileWriter != null)
@@ -1423,12 +1421,12 @@ public class XMPUtilTest extends TestCase {
 			System.setOut(oldOut);
 			s.close();
 
-			List l = XMPUtil.readXMP(pdfFile);
+			List<BibtexEntry> l = XMPUtil.readXMP(pdfFile);
 
 			assertEquals(2, l.size());
 
-			BibtexEntry a = (BibtexEntry) l.get(0);
-			BibtexEntry b = (BibtexEntry) l.get(1);
+			BibtexEntry a = l.get(0);
+			BibtexEntry b = l.get(1);
 
 			if (a.getCiteKey().equals("Clarkson06")) {
 				BibtexEntry tmp = a;
@@ -1482,16 +1480,16 @@ public class XMPUtilTest extends TestCase {
 								+ "  url = {http://james.howison.name/publications.html}"
 								+ "\n" + "}"));
 
-		Collection c = original.getDatabase().getEntries();
+		Collection<BibtexEntry> c = original.getDatabase().getEntries();
 		assertEquals(1, c.size());
 
-		BibtexEntry e = (BibtexEntry) c.iterator().next();
+		BibtexEntry e = c.iterator().next();
 
 		XMPUtil.writeXMP(pdfFile, e, original.getDatabase());
 
-		List l = XMPUtil.readXMP(pdfFile.getAbsoluteFile());
+		List<BibtexEntry> l = XMPUtil.readXMP(pdfFile.getAbsoluteFile());
 		assertEquals(1, l.size());
-		BibtexEntry x = (BibtexEntry) l.get(0);
+		BibtexEntry x = l.get(0);
 
 		assertEquals(
 				AuthorList
@@ -1535,13 +1533,14 @@ public class XMPUtilTest extends TestCase {
 	 * 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).
+	 * Data was contributed by Philip K.F. H�lzenspies (p.k.f.holzenspies [at] utwente.nl).
 	 * 
 	 * @throws IOException
 	 * @throws FileNotFoundException
 	 * @throws TransformerException
 	 * 
 	 */
+	@SuppressWarnings("unchecked")
 	public void testResolveStrings2() throws FileNotFoundException,
 			IOException, TransformerException {
 
@@ -1589,7 +1588,7 @@ public class XMPUtilTest extends TestCase {
 				meta.addXMLNSMapping(XMPSchemaBibtex.NAMESPACE,
 						XMPSchemaBibtex.class);
 
-				List schemas = meta
+				List<XMPSchema> schemas = meta
 						.getSchemasByNamespaceURI("http://purl.org/dc/elements/1.1/");
 
 				assertEquals(1, schemas.size());
diff --git a/src/java/wsi/ra/tool/ResourceLoader.java b/src/java/wsi/ra/tool/ResourceLoader.java
index 375c8bb..c0a48a9 100755
--- a/src/java/wsi/ra/tool/ResourceLoader.java
+++ b/src/java/wsi/ra/tool/ResourceLoader.java
@@ -4,9 +4,9 @@
 //  Language: Java
 //  Compiler: JDK 1.4
 //  Authors:  Joerg K. Wegner, Gerd Mueller
-//  Version:  $Revision: 148 $
-//            $Date: 2004-01-28 23:42:25 +0100 (Wed, 28 Jan 2004) $
-//            $Author: wegner $
+//  Version:  $Revision: 2488 $
+//            $Date: 2007-11-14 01:25:31 +0100 (Wed, 14 Nov 2007) $
+//            $Author: coezbek $
 //
 //  Copyright (c) Dept. Computer Architecture, University of Tuebingen, Germany
 //
@@ -22,13 +22,7 @@
 package wsi.ra.tool;
 
 import java.io.*;
-
-import java.net.*;
-
-import java.util.*;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-import java.util.zip.*;
+import java.util.Vector;
 
 /*==========================================================================*
  * IMPORTS
@@ -47,7 +41,7 @@ import java.util.zip.*;
  * @author     Robin Friedman, rfriedman at TriadTherapeutics.com
  * @author     Gerd Mueller
  * @license GPL
- * @cvsversion    $Revision: 148 $, $Date: 2004-01-28 23:42:25 +0100 (Wed, 28 Jan 2004) $
+ * @cvsversion    $Revision: 2488 $, $Date: 2007-11-14 01:25:31 +0100 (Wed, 14 Nov 2007) $
  */
 public class ResourceLoader
 {
@@ -122,7 +116,7 @@ public class ResourceLoader
             return getBytesFromFile(resourceLocation);
         }
 
-        InputStream in = this.getClass().getClassLoader()
+        InputStream in = ClassLoader
                              .getSystemResourceAsStream(resourceLocation);
 
         if (in == null)
@@ -221,7 +215,7 @@ public class ResourceLoader
      * @param  resourceFile  Description of the Parameter
      * @return               Description of the Return Value
      */
-    public static Vector readLines(String resourceFile)
+    public static Vector<String> readLines(String resourceFile)
     {
         return readLines(resourceFile, false);
     }
@@ -233,7 +227,7 @@ public class ResourceLoader
      * @param  ignoreComments  Description of the Parameter
      * @return                 Description of the Return Value
      */
-    public static Vector readLines(String resourceFile,
+    public static Vector<String> readLines(String resourceFile,
         boolean ignoreCommentedLines)
     {
         if (resourceFile == null)
@@ -253,7 +247,7 @@ public class ResourceLoader
                     sReader));
 
         String line;
-        Vector vector = new Vector(100);
+        Vector<String> vector = new Vector<String>(100);
 
         try
         {
@@ -287,91 +281,6 @@ public class ResourceLoader
      *-------------------------------------------------------------------------  */
 
     /**
-     *  Gets the byte data from a file contained in a JAR or ZIP file.
-     *
-     * @param  urlToZipArchive      Description of the Parameter
-     * @param  internalArchivePath  Description of the Parameter
-     * @return                      the byte array of the file.
-     */
-    private byte[] getBytesFromArchive(String urlToZipArchive,
-        String internalArchivePath)
-    {
-        URL url = null;
-        int size = -1;
-        byte[] b = null;
-
-        try
-        {
-            url = new URL(urlToZipArchive);
-
-            // extracts just sizes only.
-            ZipFile zf = new ZipFile(url.getFile());
-            Enumeration e = zf.entries();
-
-            while (e.hasMoreElements())
-            {
-                ZipEntry ze = (ZipEntry) e.nextElement();
-
-                if (ze.getName().equals(internalArchivePath))
-                {
-                    if (ze.isDirectory())
-                    {
-                        return null;
-                    }
-
-                    // only files with <65536 bytes are allowed
-                    if (ze.getSize() > 65536)
-                    {
-                        System.out.println(
-                            "Resource files should be smaller than 65536 bytes...");
-                    }
-
-                    size = (int) ze.getSize();
-                }
-            }
-
-            zf.close();
-
-            FileInputStream fis = new FileInputStream(url.getFile());
-            BufferedInputStream bis = new BufferedInputStream(fis);
-            ZipInputStream zis = new ZipInputStream(bis);
-            ZipEntry ze = null;
-
-            while ((ze = zis.getNextEntry()) != null)
-            {
-                if (ze.getName().equals(internalArchivePath))
-                {
-                    b = new byte[(int) size];
-
-                    int rb = 0;
-                    int chunk = 0;
-
-                    while (((int) size - rb) > 0)
-                    {
-                        chunk = zis.read(b, rb, (int) size - rb);
-
-                        if (chunk == -1)
-                        {
-                            break;
-                        }
-
-                        rb += chunk;
-                    }
-                }
-            }
-        }
-         catch (Exception e)
-        {
-            //logger.error("error while loading", e);
-            System.err.println("error while loading");
-
-            return null;
-        }
-
-        return b;
-    }
-
-    /**
      *  Gets the byte data from a file.
      *
      * @param  fileName  Description of the Parameter
@@ -414,9 +323,9 @@ public class ResourceLoader
 
         try
         {
-            while (((int) size - rb) > 0)
+            while ((size - rb) > 0)
             {
-                chunk = bis.read(b, rb, (int) size - rb);
+                chunk = bis.read(b, rb, size - rb);
 
                 if (chunk == -1)
                 {
@@ -451,14 +360,14 @@ public class ResourceLoader
 
         try
         {
-            int size = (int) bis.available();
+            int size = bis.available();
             byte[] b = new byte[size];
             int rb = 0;
             int chunk = 0;
 
-            while (((int) size - rb) > 0)
+            while ((size - rb) > 0)
             {
-                chunk = bis.read(b, rb, (int) size - rb);
+                chunk = bis.read(b, rb, size - rb);
 
                 if (chunk == -1)
                 {
diff --git a/src/java/wsi/ra/tool/WSITools.java b/src/java/wsi/ra/tool/WSITools.java
index 985d953..ee0c1b3 100755
--- a/src/java/wsi/ra/tool/WSITools.java
+++ b/src/java/wsi/ra/tool/WSITools.java
@@ -4,9 +4,9 @@
 //  Language: Java
 //  Compiler: JDK 1.4
 //  Authors:  Joerg K. Wegner
-//  Version:  $Revision: 1318 $
-//            $Date: 2005-11-08 05:53:29 +0100 (Tue, 08 Nov 2005) $
-//            $Author: mortenalver $
+//  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
 //
@@ -38,7 +38,7 @@ import java.util.Vector;
  *
  * @author     wegnerj
  * @license GPL
- * @cvsversion    $Revision: 1318 $, $Date: 2005-11-08 05:53:29 +0100 (Tue, 08 Nov 2005) $
+ * @cvsversion    $Revision: 2268 $, $Date: 2007-08-20 01:37:05 +0200 (Mon, 20 Aug 2007) $
  */
 public class WSITools
 {
@@ -55,7 +55,7 @@ public class WSITools
      * @param  buf  Description of the Parameter
      * @return      Description of the Return Value
      */
-    public static boolean tokenize(Vector vcr, String buf)
+    public static boolean tokenize(Vector<String> vcr, String buf)
     {
         return tokenize(vcr, buf, " \t\n");
     }
@@ -66,7 +66,7 @@ public class WSITools
      * @param  delimstr  Description of the Parameter
      * @return           Description of the Return Value
      */
-    public static boolean tokenize(Vector vcr, String buf, String delimstr)
+    public static boolean tokenize(Vector<String> vcr, String buf, String delimstr)
     {
         vcr.clear();
         buf = buf + "\n";
@@ -88,7 +88,7 @@ public class WSITools
      * @param  limit     Description of the Parameter
      * @return           Description of the Return Value
      */
-    public static boolean tokenize(Vector vcr, String s, String delimstr,
+    public static boolean tokenize(Vector<String> vcr, String s, String delimstr,
         int limit)
     {
         System.out.println("Warning: tokenize \"" + s + "\"");
diff --git a/src/plugins/net.sf.jabref.core/plugin.xml b/src/plugins/net.sf.jabref.core/plugin.xml
new file mode 100644
index 0000000..fc6d1fa
--- /dev/null
+++ b/src/plugins/net.sf.jabref.core/plugin.xml
@@ -0,0 +1,180 @@
+<?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>
+	
+	<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="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="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="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.JSTORFetcher" />
+		<parameter id="name" value="JSTOR Entry Fetcher" />
+		<parameter id="description"
+			value="Fetch Entries from JSTOR." />
+	</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" />
+	</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
new file mode 100644
index 0000000..0e33764
--- /dev/null
+++ b/src/plugins/net.sf.jabref.export.misq/build.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0"?>
+<!--++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+   Example Ant build file how to create a jar for distribution 
+   for an export plugin.
+
+   Version:  $Revision: 2186 $
+             $Date: 2007-07-19 03:35:35 +0200 (Thu, 19 Jul 2007) $
+             $Author: coezbek $
+
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-->
+<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
new file mode 100644
index 0000000..1ed29c3
--- /dev/null
+++ b/src/plugins/net.sf.jabref.export.misq/plugin.xml
@@ -0,0 +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>
+
+</plugin>
\ No newline at end of file
diff --git a/src/resource/layout/misq/misq.article.layout b/src/plugins/net.sf.jabref.export.misq/templates/misq.article.layout
similarity index 100%
rename from src/resource/layout/misq/misq.article.layout
rename to src/plugins/net.sf.jabref.export.misq/templates/misq.article.layout
diff --git a/src/resource/layout/misq/misq.begin.layout b/src/plugins/net.sf.jabref.export.misq/templates/misq.begin.layout
similarity index 100%
rename from src/resource/layout/misq/misq.begin.layout
rename to src/plugins/net.sf.jabref.export.misq/templates/misq.begin.layout
diff --git a/src/resource/layout/misq/misq.book.layout b/src/plugins/net.sf.jabref.export.misq/templates/misq.book.layout
similarity index 100%
rename from src/resource/layout/misq/misq.book.layout
rename to src/plugins/net.sf.jabref.export.misq/templates/misq.book.layout
diff --git a/src/resource/layout/misq/misq.end.layout b/src/plugins/net.sf.jabref.export.misq/templates/misq.end.layout
similarity index 100%
rename from src/resource/layout/misq/misq.end.layout
rename to src/plugins/net.sf.jabref.export.misq/templates/misq.end.layout
diff --git a/src/resource/layout/misq/misq.layout b/src/plugins/net.sf.jabref.export.misq/templates/misq.layout
similarity index 100%
rename from src/resource/layout/misq/misq.layout
rename to src/plugins/net.sf.jabref.export.misq/templates/misq.layout
diff --git a/src/resource/layout/misq/readme.txt b/src/plugins/net.sf.jabref.export.misq/templates/readme.txt
similarity index 100%
rename from src/resource/layout/misq/readme.txt
rename to src/plugins/net.sf.jabref.export.misq/templates/readme.txt
diff --git a/src/plugins/readme.txt b/src/plugins/readme.txt
new file mode 100644
index 0000000..b303883
--- /dev/null
+++ b/src/plugins/readme.txt
@@ -0,0 +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.
+
+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/Icons.properties b/src/resource/Icons.properties
index e1f3c04..f58ae86 100644
--- a/src/resource/Icons.properties
+++ b/src/resource/Icons.properties
@@ -65,3 +65,5 @@ complete=completeItem.png
 wrong=wrongItem.png
 groupIncluding=groupIncluding.png
 groupRefining=groupRefining.png
+dbConnect=database_connect.png
+dbExport=database_save.png
\ No newline at end of file
diff --git a/src/resource/JabRef_de.properties b/src/resource/JabRef_de.properties
index a9f1833..8386978 100644
--- a/src/resource/JabRef_de.properties
+++ b/src/resource/JabRef_de.properties
@@ -13,6 +13,9 @@
 %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_entries_found._To_reduce_server_load,_abstracts_will_only_be_downloaded_for_searches_returning_%1_hits_or_less.=%0_Eintr\u00e4ge_gefunden._Um_die_Serverlast_zu_verringern,_werden_abstracts_nur_bei_Suchen_mit_%1_oder_weniger_Treffern_heruntergeladen.
+
+%0_export_successful=%0-Export_erfolgreich
 
 %0_field_set=%0-Feld_erstellt
 
@@ -23,6 +26,7 @@
 %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>
 
 <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_die_bestm\u00F6gliche_Kompatibilit\u00E4t_mit_JabRef_zu_gew\u00E4hrleisten</HTML>
 
@@ -37,8 +41,12 @@ _on_entry_number_=_bei_Eintrag_Nummer_
 A_CiteSeer_fetch_operation_is_currently_in_progress.=CiteSeer-Abruf_ist_in_Bearbeitung.
 
 A_CiteSeer_import_operation_is_currently_in_progress.=Ein_CiteSeer-Import_ist_gerade_in_Bearbeitung.
+A_string_with_that_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
 
@@ -85,18 +93,24 @@ 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.
 
@@ -105,10 +119,12 @@ any_field_that_matches_the_regular_expression_<b>%0</b>=ein_beliebiges_Feld,_auf
 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
 
@@ -123,23 +139,30 @@ Assign_the_original_group's_entries_to_this_group?=Eintr\u00E4ge_der_urspr\u00FC
 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.
@@ -148,6 +171,9 @@ 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
@@ -157,6 +183,8 @@ 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
 
@@ -173,6 +201,7 @@ 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
 
@@ -187,6 +216,7 @@ BibTeX_source=BibTeX-Quelltext
 BibTeXML=BibTeXML
 
 Binding=Tastenk\u00FCrzel
+Broken_link=Ung\u00fcltiger_Link
 
 Browse=Durchsuchen
 
@@ -197,6 +227,7 @@ 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_connect_to_SQL_server_at_the_specified_host.=Die_Verbindung_zum_SQL-Server_\u00fcber_den_angegebenen_Host_ist_fehlgeschlagen.
 
 Cannot_merge_this_change=Kann_diese_\u00C4nderung_nicht_einf\u00FCgen
 
@@ -222,6 +253,8 @@ 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
@@ -231,6 +264,7 @@ 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
 
@@ -253,6 +287,7 @@ 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
 
 Cite_command_(for_Emacs/WinEdt)=Cite-Kommando_(f\u00fcr_Emacs/WinEdt)
 
@@ -260,8 +295,6 @@ CiteSeer_Error=CiteSeer-Fehler
 
 CiteSeer_Fetch_Error=Fehler_beim_Abrufen_von_CiteSeer
 
-CiteSeer_import_entries=CiteSeer-Eintr\u00e4ge_importieren
-
 CiteSeer_Import_Error=Fehler_beim_Import_von_CiteSeer
 
 CiteSeer_Import_Fields=CiteSeer_Import-Felder
@@ -307,6 +340,10 @@ Complete_record=Kompletter_Eintrag
 Completed_Import_Fields_from_CiteSeer.=Die_Felder_wurden_aus_CiteSeer_importiert.
 
 Completed_import_from_CiteSeer.=Import_von_CiteSeer_abgeschlossen
+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
 
@@ -323,6 +360,10 @@ 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
 
@@ -332,6 +373,8 @@ Could_not_connect_to_host=Verbindung_zum_Host_fehlgeschlagen
 
 # 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_determine_exception_message.=Die_Ausnahme-Meldungen_konnten_nicht_bestimmt_werden.
 
 Could_not_export_entry_types=Eintragstypen_konnten_nicht_exportiert_werden
 
@@ -340,6 +383,7 @@ 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
@@ -352,15 +396,20 @@ Could_not_instantiate_%0_%1=Konnte_Importer_nicht_erzeugen_%0_%1
 
 Could_not_instantiate_%0_%1._Have_you_chosen_the_correct_package_path?=Konnte_%0_%1_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_resolve_import_format=Das_Importformat_konnte_nicht_bestimmt_werden.
 
 #####Switches_between_full_and_abbreviated_journal_name=Wechselt_zwischen_kompletten_und_abgek\u00fcrzten_Zeitschriftennamen
 #####if_the_journal_name_is_known._Go_to_(...............)=falls_der_Zeitschriftenname_bekannt_ist._Gehe_zu_(...............)
 Could_not_run_the_'gnuclient'_program._Make_sure_you_have_the_gnuserv/gnuclient_programs_installed.=Das_Programm_'gnuclient'_konnte_nicht_gestartet_werden._Vergewissern_Sie_sich,_dass_die_Programme_gnuserv/gnuclient_installiert_sind.
+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.
 
 Couldn't_find_an_entry_associated_with_this_URL=Es_konnte_kein_Eintrag_gefunden_werden,_der_mit_dieser_URL_verkn\u00FCpft_ist
 
@@ -395,6 +444,7 @@ cut_entries=Eintr\u00E4ge_ausschneiden
 cut_entry=Eintrag_ausschneiden
 
 Cut_pr=Ausschneiden
+Database_\:=Datenbank:
 
 Database_encoding=Zeichenkodierung_der_Datei
 
@@ -415,6 +465,7 @@ Default_look_and_feel=Standard_"look_and_feel"
 Default_pattern=Standardmuster
 
 Default_sort_criteria=Standard-Sortierkriterium
+Define_'%0'=Definiere_'%0'
 
 defined.=definiert.
 
@@ -441,6 +492,7 @@ Delete_strings=Strings_l\u00F6schen
 Deleted=Gel\u00F6scht
 
 Delimit_fields_with_semicolon,_ex.=Felder_mit_Semikolon_abgrenzen,_z.B.
+Derby=Derby
 
 Descending=Absteigend
 
@@ -480,8 +532,14 @@ 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_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
 
@@ -496,6 +554,8 @@ 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
 
@@ -526,12 +586,17 @@ Each_line_must_be_on_the_following_form=Jede_Zeile_muss_das_folgende_Format_aufw
 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
 
@@ -542,6 +607,7 @@ Empty_BibTeX_key._Grouping_may_not_work_for_this_entry.=Leerer_BibTeX-Key._Es_ka
 empty_database=leere_Datenbank
 
 Enable_source_editing=Bearbeiten_von_Sourcecode_zulassen
+Enable_word/name_autocompletion=Autovervollst\u00e4ndigung_aktivieren
 
 Endnote=Endnote
 
@@ -563,6 +629,8 @@ entry=Eintrag
 
 Entry_editor=Eintragseditor
 
+Entry_has_no_citekey=Der_Eintrag_hat_keinen_citekey
+
 Entry_in_current_database=Eintrag_in_aktueller_Datenbank
 
 Entry_in_import=Eintrag_in_Importierung
@@ -580,17 +648,30 @@ Entry_type_names_are_not_allowed_to_contain_white_space_or_the_following_charact
 Entry_types=Eintragstypen
 
 Error=Fehler
+Error\:_=Fehler:_
+Error_converting_Bibtex_to_XMP:_%0=Fehler_beim_Konvertieren_von_BibTeX_nach_XMP:_%0
+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
@@ -613,11 +694,15 @@ 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
@@ -632,10 +717,6 @@ Fetch_Articles_Citing_your_Database=Literaturangaben_abrufen,_die_Ihre_Datei_zit
 
 Fetch_CiteSeer=CiteSeer_abrufen
 
-Fetch_CiteSeer_by_ID=CiteSeer_mittels_ID_abrufen
-
-Fetch_Medline=Medline_abrufen
-
 Fetch_Medline_by_ID=Medline_mittels_ID_abrufen
 
 Fetched_all_citations_from_target_database.=Alle_Literaturangaben_von_der_Zieldatenbank_abgerufen.
@@ -658,6 +739,7 @@ field=Feld
 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
 
@@ -671,14 +753,24 @@ 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=Dateiverzeichnis
+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
 
@@ -688,7 +780,10 @@ 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.
@@ -720,6 +815,7 @@ 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
 
@@ -766,6 +862,8 @@ Have_you_chosen_the_correct_package_path?=Habe_Sie_den_richtigen_Klassenpfad_gew
 
 Help=Hilfe
 
+Help_contents=Hilfe_-_Inhalt
+
 Help_on_groups=Hilfe_zu_Gruppen
 
 Help_on_key_patterns=Hilfe_zu_BibTeX-Key-Mustern
@@ -779,6 +877,8 @@ 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
 
@@ -789,6 +889,7 @@ HTML=HTML
 HTML_table=HTML-Tabelle
 
 HTML_table_(with_Abstract_&_BibTeX)=HTML-Tabelle_(mit_Abstract_&_BibTeX)
+Icon=Icon
 
 Ignore=Ignorieren
 
@@ -899,6 +1000,7 @@ 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
 
@@ -937,6 +1039,8 @@ 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
 
@@ -946,14 +1050,23 @@ 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_%0_directory=Standard-Ordner_f\u00fcr_%0
+Main_file_directory=Standard-Ordner_f\u00fcr_Dateien
 
 Main_layout_file=Haupt-Layoutdatei
 
@@ -966,6 +1079,7 @@ 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
 
@@ -981,6 +1095,7 @@ Mark_new_entries_with_owner_name=Neue_Eintr\u00E4ge_mit_Namen_des_Besitzers_vers
 Marked_selected=Ausgew\u00E4hlte_markiert
 
 Medline_entries_fetched=Medline-Eintr\u00E4ge_abgerufen
+Memory_Stick_Mode=Memory_Stick-Modus
 
 Menu_and_label_font_size=Schriftgr\u00F6\u00DFe_in_Men\u00FCs
 
@@ -989,8 +1104,7 @@ Merged_external_changes=Externe_\u00C4nderungen_eingef\u00FCgt
 Messages=Mitteilungen
 
 Messages_and_Hints=Hinweise_und_Warnungen
-
-Miscellaneous=Verschiedenes
+MIS_Quarterly=MIS_Quarterly
 
 Modification_of_field=\u00C4nderung_des_Felds
 
@@ -1011,6 +1125,9 @@ 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_file_to_file_directory=Datei_in_das_Dateiverzeichnis_verschieben.
+Move_files_to_file_directory.=Dateien_in_das_Dateiverzeichnis_verschieben.
 
 move_group=Gruppe_verschieben
 
@@ -1021,12 +1138,17 @@ 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
 
+Native_file_dialog=Nativer_Dateidialog
+
 nested_aux_files=referenzierte_AUX_Dateien
 
 New=Neu
@@ -1045,6 +1167,7 @@ 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
 
@@ -1058,14 +1181,15 @@ No_actual_changes_found.=Keine_aktuellen_\u00c4nderungen_gefunden.
 
 no_base-bibtex-file_specified=keine_Bibtex-Datei_angegeben!
 
-No_custom_imports_registered_yet.=Noch_keine_externen_Importfilter_registriert.
-
 no_database_generated=keine_Datenbank_erstellt_und_geschrieben
+No_databases_saved.=Keine_Dateien_gespeichert.
 
 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.
@@ -1074,7 +1198,7 @@ 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_file_associated=Keine_Datei_zugeordnet
+No_files_found.=Keine_Dateien_gefunden.
 
 No_GUI._Only_process_command_line_options.=Kein_GUI._Nur_Kommandozeilenbefehle_ausf\u00FChren.
 
@@ -1084,13 +1208,17 @@ No_journal_names_could_be_unabbreviated.=Das_Aufheben_der_Abk\u00fcrzung_konnte_
 
 No_Medline_entries_found.=Keine_Medline-Eintr\u00E4ge_gefunden.
 
+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
 
@@ -1115,7 +1243,10 @@ 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
 
@@ -1143,7 +1274,9 @@ 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
 
@@ -1164,36 +1297,44 @@ 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_HTML_viewer=Pfad_zum_HTML-Browser
 
+Path_to_LatexEditor_(LEd.exe)=Pfad_zu_LatexEditor_(LEd.exe)
+
 Path_to_LyX_pipe=Pfad_zur_LyX-pipe
 
 Path_to_PDF_viewer=Pfad_zum_PDF-Anzeigeprogramm
 
 Path_to_PS_viewer=Pfad_zum_PS-Anzeigeprogramm
 
+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
 
-Pick_titles=Titel_w\u00e4hlen
-
 Plain_text_import=Klartext_importieren
 
 Please_check_your_network_connection_to_this_machine.=Bitte_\u00FCberpr\u00FCfen_Sie_die_Netzwerkverbindung_ihres_Computers.
@@ -1207,6 +1348,7 @@ Please_enter_a_semicolon_or_comma_separated_list_of_Medline_IDs_(numbers).=Geben
 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_refer_to_the_JabRef_help_manual_on_using_the_CiteSeer_tools=Bitte_schauen_Sie_in_der_JabRef-Hilfe_nach,_wie_Sie_die_CiteSeer-Tools_nutzen_k\u00f6nnen
 
 Please_refer_to_the_JabRef_help_manual_on_using_the_CiteSeer_tools.=Bitte_lesen_Sie_die_JabRef-Hilfe_f\u00FCr_Informationen,_wie_man_die_CiteSeer-Werkzeuge_benutzt.
 
@@ -1215,6 +1357,7 @@ 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:_
 
 Please_wait_until_it_has_finished.=Bitte_warten_Sie,_bis_die_Aktion_beendet_ist.
 
@@ -1233,8 +1376,11 @@ 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
 
@@ -1244,12 +1390,15 @@ Push_entries_to_external_application_(%0)=Eintr\u00e4ge_in_externe_Anwendung_ein
 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
 
@@ -1301,6 +1450,7 @@ 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
 
@@ -1320,6 +1470,8 @@ 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
@@ -1333,22 +1485,28 @@ Removed_group_"%0".=Gruppe_"%0"_gel\u00F6scht.
 Removed_group_"%0"_and_its_subgroups.=Gruppe_"%0"_inklusive_Untergruppen_gel\u00F6scht.
 
 Removed_string=String_gel\u00F6scht
+Rename_to_match_citekey=Dem_citekey_entsprechend_umbenennen
 
 Renamed_string=String_umbenannt
 
 Replace=Ersetzen
 
 Replace_(regular_expression)=Ersetzen_(regul\u00e4rer_Ausdruck)
+Replace_comma_by_and_where_appropriate=Komma_an_passenden_Stellen_durch_'and'_ersetzen
 
 Replace_string=String_ersetzen
 
-Replace_with=Ersetzen_mit
+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
 
@@ -1361,12 +1519,17 @@ 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
 
@@ -1379,6 +1542,7 @@ Save_failed_while_committing_changes=W\u00e4hrend_die_\u00c4nderungen_\u00fcberm
 Save_in_default_table_sort_order=In_der_Reihenfolge_der_Tabellensortierung_speichern
 
 Save_ordered_by_author/editor/year=Speichern_sortiert_nach_author/editor/year
+Save_selected_as_...=Auswahl_speichern_unter_...
 
 Saved_database=Datei_gespeichert
 
@@ -1387,6 +1551,7 @@ Saved_selected_to=Auswahl_gespeichert_unter
 Saved_session=Sitzung_gespeichert
 
 Saving=Speichere
+Saving_all_databases...=Alle_Dateien_werden_gespeichert...
 
 Saving_database=Speichere_Datei
 
@@ -1407,6 +1572,7 @@ Search_for=Suchen_nach
 Search_general_fields=Allgemeine_Felder_durchsuchen
 
 Search_IEEEXplore=IEEEXplore_durchsuchen
+Search_IEEExplore=IEEExplore-Suche
 
 Search_optional_fields=Optionale_Felder_durchsuchen
 
@@ -1422,6 +1588,8 @@ 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
@@ -1444,21 +1612,25 @@ 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_drei_Knoten_aus,_um_die_\u00C4nderungen_zu_sehen_und_anzunehmen_oder_zu_verwerfen
+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/clear_fields=Felder_setzen/l\u00f6schen
 Set_field=Setze_Feld
 Set_fields=Felder_setzen
 
 Set_general_fields=Allgemeine_Felder_festlegen
+Set_main_external_file_directory=Standard-Ordner_f\u00fcr_externe_Dateien_bestimmen
 
 Set_table_font=Tabellenschriftart_ausw\u00E4hlen
 
@@ -1490,6 +1662,8 @@ 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
 
@@ -1525,6 +1699,8 @@ Sort_alphabetically=Alphabetisch_sortieren
 
 Sort_Automatically=Automatisch_sortieren
 
+Sort_order=Sortierung
+
 sort_subgroups=Untergruppen_sortieren
 
 Sorted_all_subgroups_recursively.=Alle_Untergruppen_rekursiv_sortiert.
@@ -1535,6 +1711,7 @@ 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)
 
@@ -1572,6 +1749,7 @@ Suggest=Vorschlag
 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...
 
@@ -1584,6 +1762,7 @@ 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
 
@@ -1592,11 +1771,16 @@ 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_application_'%0'_associated_with_the_file_type_'%1'_could_not_be_called.=Die_Anwendung_'%0',_die_dem_Dateityp_'%1'_zugeordnet_ist,_konnte_nicht_gestartet_werden.
 
 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_CiteSeer_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!
@@ -1610,6 +1794,7 @@ The_label_of_the_string_can_not_contain_spaces.=Der_Name_des_Strings_darf_keine_
 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
 
@@ -1628,10 +1813,13 @@ There_are_possible_duplicates_(marked_with_a_'D'_icon)_that_haven't_been_resolve
 There_is_no_entry_type=Es_exisitiert_kein_Eintragstyp
 
 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 [...]
 
@@ -1646,34 +1834,44 @@ 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>=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_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.
 
 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.=Veranlasst_JabRef_dazu,_jedem_%0-Link_zu_folgen_und_zu_\u00fcberpr\u00fcfen,_ob_die_entsprechende_Datei_existiert._Wenn_nicht,_werden_M\u00f6glichkeiten_angegeben,_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=Typ
 
 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_parse_clipboard_text_as_Bibtex_entries.=Der_Text_der_Zwischenablage_konnte_nicht_als_BibTeX-Format_analysiert_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_parse_the_following_URL=Folgende_URL_konnte_nicht_analysiert_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
 
@@ -1710,11 +1908,21 @@ Update_to_current_column_widths=Aktuelle_Spaltenbreiten_verwenden
 Updated_group_selection=Gruppenauswahl_aktualisiert
 
 Updating_entries...=Eintr\u00E4ge_werden_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
 
@@ -1726,6 +1934,8 @@ 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
+User_does_not_have_sufficient_privileges.\n=Der_Benutzer_hat_keine_ausreichenden_Rechte.\n
+Username_\:=Benutzername:
 
 Uses_default_application=Benutze_Standardprogramm
 
@@ -1736,12 +1946,16 @@ 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
 
@@ -1752,28 +1966,38 @@ 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_have_changed_the_language_setting._You_must_restart_JabRef_for_this_to_come_into_effect.=Sie_haben_die_Spracheinstellung_ge\u00E4ndert._Sie_m\u00FCssen_JabRef_neu_starten,_damit_die_\u00C4nderungen_in_Kraft_treten.
+You_have_changed_the_look_and_feel_setting._You_must_restart_JabRef_for_this_to_come_into_effect.=Sie_haben_die_Einstellungen_des_Erscheinungsbildes_('look_and_feel')_ge\u00e4ndert._Sie_m\u00fcssen_JabRef_neu_starten,_damit_die_\u00c4nderungen_in_Kraft_treten.
 
 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_enter_an_integer_value_in_the_text_field_for=Sie_m\u00fcssen_eine_Ganzzahl_verwenden_im_Textfeld_f\u00fcr
@@ -1787,207 +2011,48 @@ You_must_select_at_least_one_row_to_perform_this_operation.=Sie_m\u00FCssen_mind
 You_must_set_both_BibTeX_key_and_%0_directory=Sie_m\u00FCssen_sowohl_den_BibTeX-Key_als_auch_den_%0-Ordner_angeben
 
 Your_new_key_bindings_have_been_stored.=Ihre_neuen_Tastenk\u00FCrzel_wurden_gespeichert.
-
-Save_all_open_databases=Alle_ge\u00f6ffneten_Dateien_speichern
-
-
-Automatically_remove_exact_duplicates=Exakte_Duplikate_automatisch_l\u00f6schen
-Enable_word/name_autocompletion=Autovervollst\u00e4ndigung_aktivieren
-Editor_options=Herausgeber-Optionen
-Use_autocompletion_for_the_following_fields=Autovervollst\u00e4ndigung_f\u00fcr_folgende_Felder_benutzen
-Saving_all_databases...=Alle_Dateien_werden_gespeichert...
-Save_all_finished.=Speichern_aller_Dateien_beendet
-Saved_%0_databases.=%0_Dateien_gespeichert.
-No_databases_saved.=Keine_Dateien_gespeichert.
-Connection_to_IEEEXplore_failed=Verbindung_zu_IEEEXplore_fehlgeschlagen
-
-Link=Link
-File_type=Dateityp
-Edit_file_link=Link_bearbeiten
-
-Path_to_LatexEditor_(LEd.exe)=Pfad_zu_LatexEditor_(LEd.exe)
-Move_external_links_to_'file'_field=Externe_Links_in_das_Feld_'file'_verschieben
-Push_selection_to_Vim=Auswahl_in_Vim_einf\u00fcgen
-Pushed_citations_to_Vim=Literaturangaben_in_Vim_eingef\u00fcgt
-
-Waiting_for_ArXiv...=Warte_auf_ArXiv...
-Processing_=Bearbeite_
-Error_while_fetching_from_OIA2=Fehler_beim_Abrufen_von_OIA2
-
-No_entries_found_for_the_search_string_'%0'=F\u00fcr_den_Suchausdruck_'%0'_wurden_keine_Eintr\u00e4ge_gefunden
-
-The_chosen_encoding_'%0'_could_not_encode_the_following_characters\:_=Die_gew\u00e4hlte_Kodierung_'%0'_konnte_folgende_Buchstaben_nicht_darstellen:_
-Operation_not_supported=Vorgang_nicht_unterst\u00fctzt
-Drag_and_Drop_Error='Drag_&_Drop'-Fehler
-File_download=Datei-Download
-Error_while_downloading_file\:=Fehler_beim_Herunterladen_der_Datei:
-Only_one_item_is_supported=Nur_ein_Element_wird_unterst\u00fctzt
-Do_not_write_the_following_fields_to_XMP_Metadata\:=Folgende_Felder_nicht_in_die_XMP-Metadaten_schreiben:
-<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>
-Drop_%0=%0_streichen
-Link_to_file_%0=Link_zur_Datei_%0
-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?
-XMP_metadata_found_in_PDF\:_%0=XMP-Metadaten_gefunden_im_PDF:_%0
-Link_to_PDF_%0=Link_zum_PDF_%0
-Writing_XMP_to_'%0'...=Schreibe_XMP_in_'%0'...
-Wrote_XMP_to_'%0'.=XMP_in_'%0'_geschrieben.
-Error_writing_XMP_to_file\:_%0=Fehler_beim_Schreiben_von_XMP_in_die_Datei_%0
-Error_converting_Bibtex_to_XMP:_%0=Fehler_beim_Konvertieren_von_BibTeX_nach_XMP:_%0
-Error_while_converting_BibtexEntry_to_XMP_%0=Fehler_beim_Konvertieren_des_BibTeX-Eintrags_nach_XMP_%0
-Error_converting_XMP_to_'%0'...=Fehler_beim_Konvertieren_von_XMP_nach_'%0'...
-Could_not_find_directory_for_%0-files\:_%1=Verzeichnis_f\u00fcr_%0-Dateien_wurde_nicht_gefunden:_%1
-This_operation_requires_at_least_one_entry.=Dieser_Vorgang_ben\u00f6tigt_mindestens_einen_Eintrag.
-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?
-No_XMP_metadata_found_in_=Keine_XMP-Metadaten_gefunden_in_
-Please_refer_to_the_JabRef_help_manual_on_using_the_CiteSeer_tools=Bitte_schauen_Sie_in_der_JabRef-Hilfe_nach,_wie_Sie_die_CiteSeer-Tools_nutzen_k\u00f6nnen
-Search_IEEExplore=IEEExplore-Suche
-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:
-An_Error_occurred_while_fetching_from_OAI2_source_(%0)\:=Fehler_beim_Abrufen_der_OAI2-Quelle_(%0):
-Abbreviated_%0_journal_names.=%0_Zeitschriftentitel_abgek\u00fcrzt.
-Unabbreviated_%0_journal_names.=Bei_%0_Zeitschriftentiteln_wurde_die_Abk\u00fcrzung_aufgehoben.
-
-Help_contents=Hilfe_-_Inhalt
-Edit_entry=Eintrag_bearbeiten
-Save_database_as_...=Datei_speichern_unter_...
-Save_selected_as_...=Auswahl_speichern_unter_...
-Toggle_search_panel=Suchdialog_ein-/ausblenden
-Append_contents_from_a_BibTeX_database_into_the_currently_viewed_database=Inhalt_einer_BibTeX-Datei_an_die_aktuelle_Datei_anh\u00E4ngen
-Edit_strings=Strings_bearbeiten
-Toggle_groups_interface=Gruppenansicht_ein-/ausblenden
-Toggle_entry_preview=Eintragsvorschau_ein-/ausblenden
-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
-Autogenerate_BibTeX_keys=BibTeX-Keys_automatisch_generieren
-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.
-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)
-Unabbreviate_journal_names_of_the_selected_entries=Abk\u00fcrzung_der_Zeitschriftentitel_der_ausgew\u00e4hlten_Eintr\u00e4ge_aufheben
-Do_not_show_splash_window_at_startup=Er\u00f6ffnungsbildschirm_beim_Programmstart_nicht_anzeigen
-
-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
-Leave_files_in_their_current_directory.=Dateien_im_aktuellen_Verzeichnis_lassen.
-Leave_file_in_its_current_directory.=Datei_im_aktuellen_Verzeichnis_lassen.
-Extension=Erweiterung
-Application=Anwendung
-Icon=Icon
-Path_to_%0_not_defined=Pfad_zu_%0_nicht_definiert
-
-Path_to_Vim=Pfad_zu_Vim
-Vim_Server_Name=Vim_Server-Name
-MS_Office_2007=MS_Office_2007
-Manage_external_file_types=Externe_Dateitypen_verwalten
-All_custom_file_types_will_be_lost._Proceed?=Alle_angepassten_Dateitypen_gehen_verloren._Fortfahren?
-Reset_file_type_definitons=Definitionen_der_Dateitypen_zur\u00fccksetzen
-Edit_file_type=Dateityp_bearbeiten
-Could_not_run_the_'vim'_program.=Das_Programm_'vim'_konnte_nicht_gestartet_werden.
-
-Show_file_column=Datei-Spalte_anzeigen
-This_database_was_written_using_an_older_version_of_JabRef.=Diese_Datei_wurde_mit_einer_\u00e4lteren_JabRef-Version_erstellt.
-
-File_'%0'_is_already_open.=Datei_'%0'_ist_bereits_ge\u00f6ffnet.
-
-File_has_been_updated_externally._What_do_you_want_to_do?=Die_Datei_wurde_extern_aktualisiert._Was_wollen_Sie_tun?
-
-Entry_has_no_citekey=Der_Eintrag_hat_keinen_citekey
-Rename_to_match_citekey=Dem_citekey_entsprechend_umbenennen
-
-Change_file_type=Dateityp_\u00e4ndern
-Define_'%0'=Definiere_'%0'
-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?
-Unable_to_open_file.=Datei_kann_nicht_ge\u00f6ffnet_werden.
-Undefined_file_type=Unbekannter_Dateityp
-Error\:_=Fehler:_
-
-Do_you_want_JabRef_to_do_the_following_operations?=Soll_JabRef_die_folgenden_Vorg\u00e4nge_durchf\u00fchren?
-Upgrade_file=Datei_aktualisiert
-
-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?
-Upgrade_external_links=Externe_Links_aktualisieren
-Upgraded_links.=Links_aktualisiert.
-This_entry_has_no_BibTeX_key._Generate_key_now?=Dieser_Eintrag_hat_keinen_BibTeX-Key._Soll_jetzt_einer_erstellt_werden?
-Target_file_cannot_be_a_directory.=Die_Zieldatei_darf_kein_Verzeichnis_sein.
-
-Finished_autosetting_external_links.=Automatische_Einstellung_externer_Links_abgeschlossen.
-No_files_found.=Keine_Dateien_gefunden.
-
-External_file_links=Links_zu_externen_Dateien
-Main_%0_directory=Standard-Ordner_f\u00fcr_Dateien_(%0)
-Synchronize_file_links=Links_zu_Dateien_synchronisieren
-Upgrade_external_PDF/PS_links_to_use_the_'%0'_field.=Externe_PDF/PS-Links_aktualisieren,_um_das_Feld_'%0'_zu_benutzen.
-Broken_link=Ung\u00fcltiger_Link
-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
-Upgrade_old_external_file_links_to_use_the_new_feature=Alte_Links_zu_externen_Dateien_aktualisieren,_um_die_neue_Funktion_zu_nutzen
-Set_main_external_file_directory=Standard-Ordner_f\u00fcr_externe_Dateien_bestimmen
-Do_not_show_these_options_in_the_future=Diese_Optionen_in_Zukunft_nicht_anzeigen
-File_directory=Dateiverzeichnis
-Autosetting_links=Links_werden_automatisch_gesetzt
-Autoset_external_links=Externe_Links_werden_automatisch_gesetzt
-Link_local_file=Link_zu_lokaler_Datei
-
-Searching_for_files=Suche_nach_Dateien
-
-Could_not_open_link=Link_konnte_nicht_ge\u00f6ffnet_werden
-The_application_'%0'_associated_with_the_file_type_'%1'_could_not_be_called.=Die_Anwendung_'%0',_die_dem_Dateityp_'%1'_zugeordnet_ist,_konnte_nicht_gestartet_werden.
-
-Native_file_dialog=Nativer_Dateidialog
-Beta_version=Beta-Version
-Do_not_write_the_following_fields_to_XMP_Metadata:=Folgende_Felder_nicht_in_die_XMP-Metadaten_schreiben:
-MIS_Quarterly=MIS_Quarterly
-Use_default_viewer=Standard-Anwendung_benutzen
-Select_icon=Icon_ausw\u00e4hlen
-
-Copy_to_clipboard=In_die_Zwischenablage_kopieren
-Paste_from_clipboard=Aus_der_Zwischenablage_einf\u00fcgen
-lower=kleinbuchstaben
-UPPER=GROSSBUCHSTABEN
-Upper_Each_First=Jeden_Ersten_Buchstaben_Gro\u00df
-Upper_first=Ersten_Buchstaben_gro\u00df
-Replace_comma_by_and_where_appropriate=Komma_an_passenden_Stellen_durch_'and'_ersetzen
-
-%0_export_successful=%0-Export_erfolgreich
-
-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.
-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.
-You_have_changed_the_look_and_feel_setting._You_must_restart_JabRef_for_this_to_come_into_effect.=Sie_haben_die_Einstellungen_des_Erscheinungsbildes_('look_and_feel')_ge\u00e4ndert._Sie_m\u00fcssen_JabRef_neu_starten,_damit_die_\u00c4nderungen_in_Kraft_treten.
-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
-Could_not_save_file._Character_encoding_'%0'_is_not_supported.=Die_Datei_konnte_nicht_gespeichert_werden._Die_Zeichenkodierung_'%0'_wird_nicht_unterst\u00fctzt.
-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.
-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.
-All_entries_of_this_type_will_be_declared_typeless._Continue?=Alle_Eintr\u00e4ge_dieses_Typs_werden_als_'ohne_Typ'_angesehen._Fortfahren?
-Field_names_are_not_allowed_to_contain_white_space_or_the_following_characters=Feldbezeichnungen_d\u00fcrfen_keine_Leerzeichen_enthalten_und_keine_der_folgenden_Zeichen
-%0_entries_found._To_reduce_server_load,_abstracts_will_only_be_downloaded_for_searches_returning_%1_hits_or_less.=%0_Eintr\u00e4ge_gefunden._Um_die_Serverlast_zu_verringern,_werden_abstracts_nur_bei_Suchen_mit_%1_oder_weniger_Treffern_heruntergeladen.
-A_string_with_that_label_already_exists=Ein_String_mit_diesem_Label_ist_bereits_vorhanden
-
-Overwrite=\u00dcberschreiben
-
-File_directory_is_not_set_or_does_not_exist!=Dateiverzeichnis_ist_nicht_gesetzt_oder_existiert_nicht
-File_directory_is_'%0':=Dateiverzeichnis_ist_'%0':
-Copy_files_to_file_directory.=Dateien_in_das_Dateiverzeichnis_kopieren.
-Move_files_to_file_directory.=Dateien_in_das_Dateiverzeichnis_verschieben.
-Copy_file_to_file_directory.=Datei_in_das_Dateiverzeichnis_kopieren.
-Move_file_to_file_directory=Datei_in_das_Dateiverzeichnis_verschieben.
-New_file_link_(INSERT)=Neuer_Dateilink_(INSERT)
-Remove_file_link_(DELETE)=Dateilink_entfernen_(DELETE)
-
-No_PDF_linked=Kein_PDF_verlinkt
-PDF_does_not_exist=PDF_existiert_nicht
-Wrote_XMP-metadata=XMP-Metadaten_geschrieben
-
-Error_writing_to_%0_file(s).=Fehler_beim_Schreiben_in_%0_Datei(en).
-Finished_writing_XMP-metadata._Wrote_to_%0_file(s).=Schreiben_der_XMP-Metadaten_in_%0_Datei(en)_beendet.
-
-You_have_entered_an_invalid_search_'%0'.=Sie_haben_eine_ung\u00fcltige_Suche_'%0'_eingegeben.
-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?
-
-Remove_link=Link_l\u00F6schen
-
-
-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
-Error_converting_Bibtex_to_XMP\:_%0=Fehler_beim_Konvertieren_von_BibTeX_nach_XMP:_%0
-
-
-Sort_order=Sortierung
+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
+Fetch_Citeseer=Citeseer_abrufen
+Error_fetching_from_Citeseer\:\\n=Fehler_beim_Abrufen_von_Citeseer\:\\n
+Progress:_%0_of_%1=Fortschritt:_%0_von_%1
+Error_while_fetching_from_JSTOR=Fehler_beim_Abrufen_von_JSTOR
+Fetching_Medline_by_id...=Medline_mittels_ID_abrufen
+Fetching_Medline_by_term...=Medline_mittels_Suchausdruck_abrufen
+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._You_must_restart_JabRef_for_this_to_come_into_effect.=
+
+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.=
diff --git a/src/resource/JabRef_de.properties b/src/resource/JabRef_de.properties.bak
similarity index 93%
copy from src/resource/JabRef_de.properties
copy to src/resource/JabRef_de.properties.bak
index a9f1833..6c0b5f5 100644
--- a/src/resource/JabRef_de.properties
+++ b/src/resource/JabRef_de.properties.bak
@@ -13,6 +13,9 @@
 %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_entries_found._To_reduce_server_load,_abstracts_will_only_be_downloaded_for_searches_returning_%1_hits_or_less.=%0_Eintr\u00e4ge_gefunden._Um_die_Serverlast_zu_verringern,_werden_abstracts_nur_bei_Suchen_mit_%1_oder_weniger_Treffern_heruntergeladen.
+
+%0_export_successful=%0-Export_erfolgreich
 
 %0_field_set=%0-Feld_erstellt
 
@@ -23,6 +26,7 @@
 %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>
 
 <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_die_bestm\u00F6gliche_Kompatibilit\u00E4t_mit_JabRef_zu_gew\u00E4hrleisten</HTML>
 
@@ -37,8 +41,12 @@ _on_entry_number_=_bei_Eintrag_Nummer_
 A_CiteSeer_fetch_operation_is_currently_in_progress.=CiteSeer-Abruf_ist_in_Bearbeitung.
 
 A_CiteSeer_import_operation_is_currently_in_progress.=Ein_CiteSeer-Import_ist_gerade_in_Bearbeitung.
+A_string_with_that_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
 
@@ -85,18 +93,24 @@ 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.
 
@@ -105,10 +119,12 @@ any_field_that_matches_the_regular_expression_<b>%0</b>=ein_beliebiges_Feld,_auf
 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
 
@@ -123,23 +139,30 @@ Assign_the_original_group's_entries_to_this_group?=Eintr\u00E4ge_der_urspr\u00FC
 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.
@@ -148,6 +171,9 @@ 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
@@ -157,6 +183,8 @@ 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
 
@@ -173,6 +201,7 @@ 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
 
@@ -187,6 +216,7 @@ BibTeX_source=BibTeX-Quelltext
 BibTeXML=BibTeXML
 
 Binding=Tastenk\u00FCrzel
+Broken_link=Ung\u00fcltiger_Link
 
 Browse=Durchsuchen
 
@@ -197,6 +227,7 @@ 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_connect_to_SQL_server_at_the_specified_host.=Die_Verbindung_zum_SQL-Server_\u00fcber_den_angegebenen_Host_ist_fehlgeschlagen.
 
 Cannot_merge_this_change=Kann_diese_\u00C4nderung_nicht_einf\u00FCgen
 
@@ -222,6 +253,8 @@ 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
@@ -231,6 +264,7 @@ 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
 
@@ -253,6 +287,7 @@ 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
 
 Cite_command_(for_Emacs/WinEdt)=Cite-Kommando_(f\u00fcr_Emacs/WinEdt)
 
@@ -260,8 +295,6 @@ CiteSeer_Error=CiteSeer-Fehler
 
 CiteSeer_Fetch_Error=Fehler_beim_Abrufen_von_CiteSeer
 
-CiteSeer_import_entries=CiteSeer-Eintr\u00e4ge_importieren
-
 CiteSeer_Import_Error=Fehler_beim_Import_von_CiteSeer
 
 CiteSeer_Import_Fields=CiteSeer_Import-Felder
@@ -307,6 +340,10 @@ Complete_record=Kompletter_Eintrag
 Completed_Import_Fields_from_CiteSeer.=Die_Felder_wurden_aus_CiteSeer_importiert.
 
 Completed_import_from_CiteSeer.=Import_von_CiteSeer_abgeschlossen
+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
 
@@ -323,6 +360,10 @@ 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
 
@@ -332,6 +373,8 @@ Could_not_connect_to_host=Verbindung_zum_Host_fehlgeschlagen
 
 # 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_determine_exception_message.=Die_Ausnahme-Meldungen_konnten_nicht_bestimmt_werden.
 
 Could_not_export_entry_types=Eintragstypen_konnten_nicht_exportiert_werden
 
@@ -340,6 +383,7 @@ 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
@@ -352,15 +396,20 @@ Could_not_instantiate_%0_%1=Konnte_Importer_nicht_erzeugen_%0_%1
 
 Could_not_instantiate_%0_%1._Have_you_chosen_the_correct_package_path?=Konnte_%0_%1_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_resolve_import_format=Das_Importformat_konnte_nicht_bestimmt_werden.
 
 #####Switches_between_full_and_abbreviated_journal_name=Wechselt_zwischen_kompletten_und_abgek\u00fcrzten_Zeitschriftennamen
 #####if_the_journal_name_is_known._Go_to_(...............)=falls_der_Zeitschriftenname_bekannt_ist._Gehe_zu_(...............)
 Could_not_run_the_'gnuclient'_program._Make_sure_you_have_the_gnuserv/gnuclient_programs_installed.=Das_Programm_'gnuclient'_konnte_nicht_gestartet_werden._Vergewissern_Sie_sich,_dass_die_Programme_gnuserv/gnuclient_installiert_sind.
+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.
 
 Couldn't_find_an_entry_associated_with_this_URL=Es_konnte_kein_Eintrag_gefunden_werden,_der_mit_dieser_URL_verkn\u00FCpft_ist
 
@@ -395,6 +444,7 @@ cut_entries=Eintr\u00E4ge_ausschneiden
 cut_entry=Eintrag_ausschneiden
 
 Cut_pr=Ausschneiden
+Database_\:=Datenbank:
 
 Database_encoding=Zeichenkodierung_der_Datei
 
@@ -415,6 +465,7 @@ Default_look_and_feel=Standard_"look_and_feel"
 Default_pattern=Standardmuster
 
 Default_sort_criteria=Standard-Sortierkriterium
+Define_'%0'=Definiere_'%0'
 
 defined.=definiert.
 
@@ -441,6 +492,7 @@ Delete_strings=Strings_l\u00F6schen
 Deleted=Gel\u00F6scht
 
 Delimit_fields_with_semicolon,_ex.=Felder_mit_Semikolon_abgrenzen,_z.B.
+Derby=Derby
 
 Descending=Absteigend
 
@@ -480,8 +532,14 @@ 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_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
 
@@ -496,6 +554,8 @@ 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
 
@@ -526,12 +586,17 @@ Each_line_must_be_on_the_following_form=Jede_Zeile_muss_das_folgende_Format_aufw
 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
 
@@ -542,6 +607,7 @@ Empty_BibTeX_key._Grouping_may_not_work_for_this_entry.=Leerer_BibTeX-Key._Es_ka
 empty_database=leere_Datenbank
 
 Enable_source_editing=Bearbeiten_von_Sourcecode_zulassen
+Enable_word/name_autocompletion=Autovervollst\u00e4ndigung_aktivieren
 
 Endnote=Endnote
 
@@ -563,6 +629,8 @@ entry=Eintrag
 
 Entry_editor=Eintragseditor
 
+Entry_has_no_citekey=Der_Eintrag_hat_keinen_citekey
+
 Entry_in_current_database=Eintrag_in_aktueller_Datenbank
 
 Entry_in_import=Eintrag_in_Importierung
@@ -580,17 +648,30 @@ Entry_type_names_are_not_allowed_to_contain_white_space_or_the_following_charact
 Entry_types=Eintragstypen
 
 Error=Fehler
+Error\:_=Fehler:_
+Error_converting_Bibtex_to_XMP:_%0=Fehler_beim_Konvertieren_von_BibTeX_nach_XMP:_%0
+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
@@ -613,11 +694,15 @@ 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
@@ -632,10 +717,6 @@ Fetch_Articles_Citing_your_Database=Literaturangaben_abrufen,_die_Ihre_Datei_zit
 
 Fetch_CiteSeer=CiteSeer_abrufen
 
-Fetch_CiteSeer_by_ID=CiteSeer_mittels_ID_abrufen
-
-Fetch_Medline=Medline_abrufen
-
 Fetch_Medline_by_ID=Medline_mittels_ID_abrufen
 
 Fetched_all_citations_from_target_database.=Alle_Literaturangaben_von_der_Zieldatenbank_abgerufen.
@@ -658,6 +739,7 @@ field=Feld
 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
 
@@ -671,14 +753,24 @@ 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=Dateiverzeichnis
+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
 
@@ -688,7 +780,10 @@ 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.
@@ -720,6 +815,7 @@ 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
 
@@ -766,6 +862,8 @@ Have_you_chosen_the_correct_package_path?=Habe_Sie_den_richtigen_Klassenpfad_gew
 
 Help=Hilfe
 
+Help_contents=Hilfe_-_Inhalt
+
 Help_on_groups=Hilfe_zu_Gruppen
 
 Help_on_key_patterns=Hilfe_zu_BibTeX-Key-Mustern
@@ -779,6 +877,8 @@ 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
 
@@ -789,6 +889,7 @@ HTML=HTML
 HTML_table=HTML-Tabelle
 
 HTML_table_(with_Abstract_&_BibTeX)=HTML-Tabelle_(mit_Abstract_&_BibTeX)
+Icon=Icon
 
 Ignore=Ignorieren
 
@@ -899,6 +1000,7 @@ 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
 
@@ -937,6 +1039,8 @@ 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
 
@@ -946,14 +1050,23 @@ 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_%0_directory=Standard-Ordner_f\u00fcr_%0
+Main_file_directory=Standard-Ordner_f\u00fcr_Dateien
 
 Main_layout_file=Haupt-Layoutdatei
 
@@ -966,6 +1079,7 @@ 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
 
@@ -981,6 +1095,7 @@ Mark_new_entries_with_owner_name=Neue_Eintr\u00E4ge_mit_Namen_des_Besitzers_vers
 Marked_selected=Ausgew\u00E4hlte_markiert
 
 Medline_entries_fetched=Medline-Eintr\u00E4ge_abgerufen
+Memory_Stick_Mode=Memory_Stick-Modus
 
 Menu_and_label_font_size=Schriftgr\u00F6\u00DFe_in_Men\u00FCs
 
@@ -989,8 +1104,7 @@ Merged_external_changes=Externe_\u00C4nderungen_eingef\u00FCgt
 Messages=Mitteilungen
 
 Messages_and_Hints=Hinweise_und_Warnungen
-
-Miscellaneous=Verschiedenes
+MIS_Quarterly=MIS_Quarterly
 
 Modification_of_field=\u00C4nderung_des_Felds
 
@@ -1011,6 +1125,9 @@ 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_file_to_file_directory=Datei_in_das_Dateiverzeichnis_verschieben.
+Move_files_to_file_directory.=Dateien_in_das_Dateiverzeichnis_verschieben.
 
 move_group=Gruppe_verschieben
 
@@ -1021,12 +1138,17 @@ 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
 
+Native_file_dialog=Nativer_Dateidialog
+
 nested_aux_files=referenzierte_AUX_Dateien
 
 New=Neu
@@ -1045,6 +1167,7 @@ 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
 
@@ -1058,14 +1181,15 @@ No_actual_changes_found.=Keine_aktuellen_\u00c4nderungen_gefunden.
 
 no_base-bibtex-file_specified=keine_Bibtex-Datei_angegeben!
 
-No_custom_imports_registered_yet.=Noch_keine_externen_Importfilter_registriert.
-
 no_database_generated=keine_Datenbank_erstellt_und_geschrieben
+No_databases_saved.=Keine_Dateien_gespeichert.
 
 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.
@@ -1074,7 +1198,7 @@ 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_file_associated=Keine_Datei_zugeordnet
+No_files_found.=Keine_Dateien_gefunden.
 
 No_GUI._Only_process_command_line_options.=Kein_GUI._Nur_Kommandozeilenbefehle_ausf\u00FChren.
 
@@ -1084,13 +1208,17 @@ No_journal_names_could_be_unabbreviated.=Das_Aufheben_der_Abk\u00fcrzung_konnte_
 
 No_Medline_entries_found.=Keine_Medline-Eintr\u00E4ge_gefunden.
 
+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
 
@@ -1115,7 +1243,10 @@ 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
 
@@ -1143,7 +1274,9 @@ 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
 
@@ -1164,36 +1297,44 @@ 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_HTML_viewer=Pfad_zum_HTML-Browser
 
+Path_to_LatexEditor_(LEd.exe)=Pfad_zu_LatexEditor_(LEd.exe)
+
 Path_to_LyX_pipe=Pfad_zur_LyX-pipe
 
 Path_to_PDF_viewer=Pfad_zum_PDF-Anzeigeprogramm
 
 Path_to_PS_viewer=Pfad_zum_PS-Anzeigeprogramm
 
+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
 
-Pick_titles=Titel_w\u00e4hlen
-
 Plain_text_import=Klartext_importieren
 
 Please_check_your_network_connection_to_this_machine.=Bitte_\u00FCberpr\u00FCfen_Sie_die_Netzwerkverbindung_ihres_Computers.
@@ -1207,6 +1348,7 @@ Please_enter_a_semicolon_or_comma_separated_list_of_Medline_IDs_(numbers).=Geben
 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_refer_to_the_JabRef_help_manual_on_using_the_CiteSeer_tools=Bitte_schauen_Sie_in_der_JabRef-Hilfe_nach,_wie_Sie_die_CiteSeer-Tools_nutzen_k\u00f6nnen
 
 Please_refer_to_the_JabRef_help_manual_on_using_the_CiteSeer_tools.=Bitte_lesen_Sie_die_JabRef-Hilfe_f\u00FCr_Informationen,_wie_man_die_CiteSeer-Werkzeuge_benutzt.
 
@@ -1215,6 +1357,7 @@ 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:_
 
 Please_wait_until_it_has_finished.=Bitte_warten_Sie,_bis_die_Aktion_beendet_ist.
 
@@ -1233,8 +1376,11 @@ 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
 
@@ -1244,12 +1390,15 @@ Push_entries_to_external_application_(%0)=Eintr\u00e4ge_in_externe_Anwendung_ein
 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
 
@@ -1301,6 +1450,7 @@ 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
 
@@ -1320,6 +1470,8 @@ 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
@@ -1333,22 +1485,28 @@ Removed_group_"%0".=Gruppe_"%0"_gel\u00F6scht.
 Removed_group_"%0"_and_its_subgroups.=Gruppe_"%0"_inklusive_Untergruppen_gel\u00F6scht.
 
 Removed_string=String_gel\u00F6scht
+Rename_to_match_citekey=Dem_citekey_entsprechend_umbenennen
 
 Renamed_string=String_umbenannt
 
 Replace=Ersetzen
 
 Replace_(regular_expression)=Ersetzen_(regul\u00e4rer_Ausdruck)
+Replace_comma_by_and_where_appropriate=Komma_an_passenden_Stellen_durch_'and'_ersetzen
 
 Replace_string=String_ersetzen
 
-Replace_with=Ersetzen_mit
+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
 
@@ -1361,12 +1519,17 @@ 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
 
@@ -1379,6 +1542,7 @@ Save_failed_while_committing_changes=W\u00e4hrend_die_\u00c4nderungen_\u00fcberm
 Save_in_default_table_sort_order=In_der_Reihenfolge_der_Tabellensortierung_speichern
 
 Save_ordered_by_author/editor/year=Speichern_sortiert_nach_author/editor/year
+Save_selected_as_...=Auswahl_speichern_unter_...
 
 Saved_database=Datei_gespeichert
 
@@ -1387,6 +1551,7 @@ Saved_selected_to=Auswahl_gespeichert_unter
 Saved_session=Sitzung_gespeichert
 
 Saving=Speichere
+Saving_all_databases...=Alle_Dateien_werden_gespeichert...
 
 Saving_database=Speichere_Datei
 
@@ -1407,6 +1572,7 @@ Search_for=Suchen_nach
 Search_general_fields=Allgemeine_Felder_durchsuchen
 
 Search_IEEEXplore=IEEEXplore_durchsuchen
+Search_IEEExplore=IEEExplore-Suche
 
 Search_optional_fields=Optionale_Felder_durchsuchen
 
@@ -1422,6 +1588,8 @@ 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
@@ -1444,21 +1612,25 @@ 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_drei_Knoten_aus,_um_die_\u00C4nderungen_zu_sehen_und_anzunehmen_oder_zu_verwerfen
+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/clear_fields=Felder_setzen/l\u00f6schen
 Set_field=Setze_Feld
 Set_fields=Felder_setzen
 
 Set_general_fields=Allgemeine_Felder_festlegen
+Set_main_external_file_directory=Standard-Ordner_f\u00fcr_externe_Dateien_bestimmen
 
 Set_table_font=Tabellenschriftart_ausw\u00E4hlen
 
@@ -1490,6 +1662,8 @@ 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
 
@@ -1525,6 +1699,8 @@ Sort_alphabetically=Alphabetisch_sortieren
 
 Sort_Automatically=Automatisch_sortieren
 
+Sort_order=Sortierung
+
 sort_subgroups=Untergruppen_sortieren
 
 Sorted_all_subgroups_recursively.=Alle_Untergruppen_rekursiv_sortiert.
@@ -1535,6 +1711,7 @@ 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)
 
@@ -1572,6 +1749,7 @@ Suggest=Vorschlag
 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...
 
@@ -1584,6 +1762,7 @@ 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
 
@@ -1592,11 +1771,16 @@ 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_application_'%0'_associated_with_the_file_type_'%1'_could_not_be_called.=Die_Anwendung_'%0',_die_dem_Dateityp_'%1'_zugeordnet_ist,_konnte_nicht_gestartet_werden.
 
 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_CiteSeer_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!
@@ -1610,6 +1794,7 @@ The_label_of_the_string_can_not_contain_spaces.=Der_Name_des_Strings_darf_keine_
 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
 
@@ -1628,10 +1813,13 @@ There_are_possible_duplicates_(marked_with_a_'D'_icon)_that_haven't_been_resolve
 There_is_no_entry_type=Es_exisitiert_kein_Eintragstyp
 
 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 [...]
 
@@ -1646,34 +1834,44 @@ 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>=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_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.
 
 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.=Veranlasst_JabRef_dazu,_jedem_%0-Link_zu_folgen_und_zu_\u00fcberpr\u00fcfen,_ob_die_entsprechende_Datei_existiert._Wenn_nicht,_werden_M\u00f6glichkeiten_angegeben,_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=Typ
 
 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_parse_clipboard_text_as_Bibtex_entries.=Der_Text_der_Zwischenablage_konnte_nicht_als_BibTeX-Format_analysiert_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_parse_the_following_URL=Folgende_URL_konnte_nicht_analysiert_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
 
@@ -1710,11 +1908,21 @@ Update_to_current_column_widths=Aktuelle_Spaltenbreiten_verwenden
 Updated_group_selection=Gruppenauswahl_aktualisiert
 
 Updating_entries...=Eintr\u00E4ge_werden_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
 
@@ -1726,6 +1934,8 @@ 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
+User_does_not_have_sufficient_privileges.\n=Der_Benutzer_hat_keine_ausreichenden_Rechte.\n
+Username_\:=Benutzername:
 
 Uses_default_application=Benutze_Standardprogramm
 
@@ -1736,12 +1946,16 @@ 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
 
@@ -1752,28 +1966,38 @@ 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_have_changed_the_language_setting._You_must_restart_JabRef_for_this_to_come_into_effect.=Sie_haben_die_Spracheinstellung_ge\u00E4ndert._Sie_m\u00FCssen_JabRef_neu_starten,_damit_die_\u00C4nderungen_in_Kraft_treten.
+You_have_changed_the_look_and_feel_setting._You_must_restart_JabRef_for_this_to_come_into_effect.=Sie_haben_die_Einstellungen_des_Erscheinungsbildes_('look_and_feel')_ge\u00e4ndert._Sie_m\u00fcssen_JabRef_neu_starten,_damit_die_\u00c4nderungen_in_Kraft_treten.
 
 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_enter_an_integer_value_in_the_text_field_for=Sie_m\u00fcssen_eine_Ganzzahl_verwenden_im_Textfeld_f\u00fcr
@@ -1787,207 +2011,49 @@ You_must_select_at_least_one_row_to_perform_this_operation.=Sie_m\u00FCssen_mind
 You_must_set_both_BibTeX_key_and_%0_directory=Sie_m\u00FCssen_sowohl_den_BibTeX-Key_als_auch_den_%0-Ordner_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
+Fetch_Citeseer=Citeseer_abrufen
+Error_fetching_from_Citeseer\:\\n=Fehler_beim_Abrufen_von_Citeseer\:\\n
+Progress:_%0_of_%1=Fortschritt:_%0_von_%1
+Error_while_fetching_from_JSTOR=Fehler_beim_Abrufen_von_JSTOR
+Fetching_Medline_by_id...=Medline_mittels_ID_abrufen
+Fetching_Medline_by_term...=Medline_mittels_Suchausdruck_abrufen
+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._You_must_restart_JabRef_for_this_to_come_into_effect.=
+
+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.=
 
-Save_all_open_databases=Alle_ge\u00f6ffneten_Dateien_speichern
-
-
-Automatically_remove_exact_duplicates=Exakte_Duplikate_automatisch_l\u00f6schen
-Enable_word/name_autocompletion=Autovervollst\u00e4ndigung_aktivieren
-Editor_options=Herausgeber-Optionen
-Use_autocompletion_for_the_following_fields=Autovervollst\u00e4ndigung_f\u00fcr_folgende_Felder_benutzen
-Saving_all_databases...=Alle_Dateien_werden_gespeichert...
-Save_all_finished.=Speichern_aller_Dateien_beendet
-Saved_%0_databases.=%0_Dateien_gespeichert.
-No_databases_saved.=Keine_Dateien_gespeichert.
-Connection_to_IEEEXplore_failed=Verbindung_zu_IEEEXplore_fehlgeschlagen
-
-Link=Link
-File_type=Dateityp
-Edit_file_link=Link_bearbeiten
-
-Path_to_LatexEditor_(LEd.exe)=Pfad_zu_LatexEditor_(LEd.exe)
-Move_external_links_to_'file'_field=Externe_Links_in_das_Feld_'file'_verschieben
-Push_selection_to_Vim=Auswahl_in_Vim_einf\u00fcgen
-Pushed_citations_to_Vim=Literaturangaben_in_Vim_eingef\u00fcgt
-
-Waiting_for_ArXiv...=Warte_auf_ArXiv...
-Processing_=Bearbeite_
-Error_while_fetching_from_OIA2=Fehler_beim_Abrufen_von_OIA2
-
-No_entries_found_for_the_search_string_'%0'=F\u00fcr_den_Suchausdruck_'%0'_wurden_keine_Eintr\u00e4ge_gefunden
-
-The_chosen_encoding_'%0'_could_not_encode_the_following_characters\:_=Die_gew\u00e4hlte_Kodierung_'%0'_konnte_folgende_Buchstaben_nicht_darstellen:_
-Operation_not_supported=Vorgang_nicht_unterst\u00fctzt
-Drag_and_Drop_Error='Drag_&_Drop'-Fehler
-File_download=Datei-Download
-Error_while_downloading_file\:=Fehler_beim_Herunterladen_der_Datei:
-Only_one_item_is_supported=Nur_ein_Element_wird_unterst\u00fctzt
-Do_not_write_the_following_fields_to_XMP_Metadata\:=Folgende_Felder_nicht_in_die_XMP-Metadaten_schreiben:
-<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>
-Drop_%0=%0_streichen
-Link_to_file_%0=Link_zur_Datei_%0
-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?
-XMP_metadata_found_in_PDF\:_%0=XMP-Metadaten_gefunden_im_PDF:_%0
-Link_to_PDF_%0=Link_zum_PDF_%0
-Writing_XMP_to_'%0'...=Schreibe_XMP_in_'%0'...
-Wrote_XMP_to_'%0'.=XMP_in_'%0'_geschrieben.
-Error_writing_XMP_to_file\:_%0=Fehler_beim_Schreiben_von_XMP_in_die_Datei_%0
-Error_converting_Bibtex_to_XMP:_%0=Fehler_beim_Konvertieren_von_BibTeX_nach_XMP:_%0
-Error_while_converting_BibtexEntry_to_XMP_%0=Fehler_beim_Konvertieren_des_BibTeX-Eintrags_nach_XMP_%0
-Error_converting_XMP_to_'%0'...=Fehler_beim_Konvertieren_von_XMP_nach_'%0'...
-Could_not_find_directory_for_%0-files\:_%1=Verzeichnis_f\u00fcr_%0-Dateien_wurde_nicht_gefunden:_%1
-This_operation_requires_at_least_one_entry.=Dieser_Vorgang_ben\u00f6tigt_mindestens_einen_Eintrag.
-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?
-No_XMP_metadata_found_in_=Keine_XMP-Metadaten_gefunden_in_
-Please_refer_to_the_JabRef_help_manual_on_using_the_CiteSeer_tools=Bitte_schauen_Sie_in_der_JabRef-Hilfe_nach,_wie_Sie_die_CiteSeer-Tools_nutzen_k\u00f6nnen
-Search_IEEExplore=IEEExplore-Suche
-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:
-An_Error_occurred_while_fetching_from_OAI2_source_(%0)\:=Fehler_beim_Abrufen_der_OAI2-Quelle_(%0):
-Abbreviated_%0_journal_names.=%0_Zeitschriftentitel_abgek\u00fcrzt.
-Unabbreviated_%0_journal_names.=Bei_%0_Zeitschriftentiteln_wurde_die_Abk\u00fcrzung_aufgehoben.
-
-Help_contents=Hilfe_-_Inhalt
-Edit_entry=Eintrag_bearbeiten
-Save_database_as_...=Datei_speichern_unter_...
-Save_selected_as_...=Auswahl_speichern_unter_...
-Toggle_search_panel=Suchdialog_ein-/ausblenden
-Append_contents_from_a_BibTeX_database_into_the_currently_viewed_database=Inhalt_einer_BibTeX-Datei_an_die_aktuelle_Datei_anh\u00E4ngen
-Edit_strings=Strings_bearbeiten
-Toggle_groups_interface=Gruppenansicht_ein-/ausblenden
-Toggle_entry_preview=Eintragsvorschau_ein-/ausblenden
-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
-Autogenerate_BibTeX_keys=BibTeX-Keys_automatisch_generieren
-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.
-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)
-Unabbreviate_journal_names_of_the_selected_entries=Abk\u00fcrzung_der_Zeitschriftentitel_der_ausgew\u00e4hlten_Eintr\u00e4ge_aufheben
-Do_not_show_splash_window_at_startup=Er\u00f6ffnungsbildschirm_beim_Programmstart_nicht_anzeigen
-
-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
-Leave_files_in_their_current_directory.=Dateien_im_aktuellen_Verzeichnis_lassen.
-Leave_file_in_its_current_directory.=Datei_im_aktuellen_Verzeichnis_lassen.
-Extension=Erweiterung
-Application=Anwendung
-Icon=Icon
-Path_to_%0_not_defined=Pfad_zu_%0_nicht_definiert
-
-Path_to_Vim=Pfad_zu_Vim
-Vim_Server_Name=Vim_Server-Name
-MS_Office_2007=MS_Office_2007
-Manage_external_file_types=Externe_Dateitypen_verwalten
-All_custom_file_types_will_be_lost._Proceed?=Alle_angepassten_Dateitypen_gehen_verloren._Fortfahren?
-Reset_file_type_definitons=Definitionen_der_Dateitypen_zur\u00fccksetzen
-Edit_file_type=Dateityp_bearbeiten
-Could_not_run_the_'vim'_program.=Das_Programm_'vim'_konnte_nicht_gestartet_werden.
-
-Show_file_column=Datei-Spalte_anzeigen
-This_database_was_written_using_an_older_version_of_JabRef.=Diese_Datei_wurde_mit_einer_\u00e4lteren_JabRef-Version_erstellt.
-
-File_'%0'_is_already_open.=Datei_'%0'_ist_bereits_ge\u00f6ffnet.
-
-File_has_been_updated_externally._What_do_you_want_to_do?=Die_Datei_wurde_extern_aktualisiert._Was_wollen_Sie_tun?
-
-Entry_has_no_citekey=Der_Eintrag_hat_keinen_citekey
-Rename_to_match_citekey=Dem_citekey_entsprechend_umbenennen
-
-Change_file_type=Dateityp_\u00e4ndern
-Define_'%0'=Definiere_'%0'
-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?
-Unable_to_open_file.=Datei_kann_nicht_ge\u00f6ffnet_werden.
-Undefined_file_type=Unbekannter_Dateityp
-Error\:_=Fehler:_
-
-Do_you_want_JabRef_to_do_the_following_operations?=Soll_JabRef_die_folgenden_Vorg\u00e4nge_durchf\u00fchren?
-Upgrade_file=Datei_aktualisiert
-
-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?
-Upgrade_external_links=Externe_Links_aktualisieren
-Upgraded_links.=Links_aktualisiert.
-This_entry_has_no_BibTeX_key._Generate_key_now?=Dieser_Eintrag_hat_keinen_BibTeX-Key._Soll_jetzt_einer_erstellt_werden?
-Target_file_cannot_be_a_directory.=Die_Zieldatei_darf_kein_Verzeichnis_sein.
-
-Finished_autosetting_external_links.=Automatische_Einstellung_externer_Links_abgeschlossen.
-No_files_found.=Keine_Dateien_gefunden.
-
-External_file_links=Links_zu_externen_Dateien
-Main_%0_directory=Standard-Ordner_f\u00fcr_Dateien_(%0)
-Synchronize_file_links=Links_zu_Dateien_synchronisieren
-Upgrade_external_PDF/PS_links_to_use_the_'%0'_field.=Externe_PDF/PS-Links_aktualisieren,_um_das_Feld_'%0'_zu_benutzen.
-Broken_link=Ung\u00fcltiger_Link
-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
-Upgrade_old_external_file_links_to_use_the_new_feature=Alte_Links_zu_externen_Dateien_aktualisieren,_um_die_neue_Funktion_zu_nutzen
-Set_main_external_file_directory=Standard-Ordner_f\u00fcr_externe_Dateien_bestimmen
-Do_not_show_these_options_in_the_future=Diese_Optionen_in_Zukunft_nicht_anzeigen
-File_directory=Dateiverzeichnis
-Autosetting_links=Links_werden_automatisch_gesetzt
-Autoset_external_links=Externe_Links_werden_automatisch_gesetzt
-Link_local_file=Link_zu_lokaler_Datei
-
-Searching_for_files=Suche_nach_Dateien
-
-Could_not_open_link=Link_konnte_nicht_ge\u00f6ffnet_werden
-The_application_'%0'_associated_with_the_file_type_'%1'_could_not_be_called.=Die_Anwendung_'%0',_die_dem_Dateityp_'%1'_zugeordnet_ist,_konnte_nicht_gestartet_werden.
-
-Native_file_dialog=Nativer_Dateidialog
-Beta_version=Beta-Version
-Do_not_write_the_following_fields_to_XMP_Metadata:=Folgende_Felder_nicht_in_die_XMP-Metadaten_schreiben:
-MIS_Quarterly=MIS_Quarterly
-Use_default_viewer=Standard-Anwendung_benutzen
-Select_icon=Icon_ausw\u00e4hlen
-
-Copy_to_clipboard=In_die_Zwischenablage_kopieren
-Paste_from_clipboard=Aus_der_Zwischenablage_einf\u00fcgen
-lower=kleinbuchstaben
-UPPER=GROSSBUCHSTABEN
-Upper_Each_First=Jeden_Ersten_Buchstaben_Gro\u00df
-Upper_first=Ersten_Buchstaben_gro\u00df
-Replace_comma_by_and_where_appropriate=Komma_an_passenden_Stellen_durch_'and'_ersetzen
-
-%0_export_successful=%0-Export_erfolgreich
-
-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.
-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.
-You_have_changed_the_look_and_feel_setting._You_must_restart_JabRef_for_this_to_come_into_effect.=Sie_haben_die_Einstellungen_des_Erscheinungsbildes_('look_and_feel')_ge\u00e4ndert._Sie_m\u00fcssen_JabRef_neu_starten,_damit_die_\u00c4nderungen_in_Kraft_treten.
-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
-Could_not_save_file._Character_encoding_'%0'_is_not_supported.=Die_Datei_konnte_nicht_gespeichert_werden._Die_Zeichenkodierung_'%0'_wird_nicht_unterst\u00fctzt.
-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.
-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.
-All_entries_of_this_type_will_be_declared_typeless._Continue?=Alle_Eintr\u00e4ge_dieses_Typs_werden_als_'ohne_Typ'_angesehen._Fortfahren?
-Field_names_are_not_allowed_to_contain_white_space_or_the_following_characters=Feldbezeichnungen_d\u00fcrfen_keine_Leerzeichen_enthalten_und_keine_der_folgenden_Zeichen
-%0_entries_found._To_reduce_server_load,_abstracts_will_only_be_downloaded_for_searches_returning_%1_hits_or_less.=%0_Eintr\u00e4ge_gefunden._Um_die_Serverlast_zu_verringern,_werden_abstracts_nur_bei_Suchen_mit_%1_oder_weniger_Treffern_heruntergeladen.
-A_string_with_that_label_already_exists=Ein_String_mit_diesem_Label_ist_bereits_vorhanden
-
-Overwrite=\u00dcberschreiben
-
-File_directory_is_not_set_or_does_not_exist!=Dateiverzeichnis_ist_nicht_gesetzt_oder_existiert_nicht
-File_directory_is_'%0':=Dateiverzeichnis_ist_'%0':
-Copy_files_to_file_directory.=Dateien_in_das_Dateiverzeichnis_kopieren.
-Move_files_to_file_directory.=Dateien_in_das_Dateiverzeichnis_verschieben.
-Copy_file_to_file_directory.=Datei_in_das_Dateiverzeichnis_kopieren.
-Move_file_to_file_directory=Datei_in_das_Dateiverzeichnis_verschieben.
-New_file_link_(INSERT)=Neuer_Dateilink_(INSERT)
-Remove_file_link_(DELETE)=Dateilink_entfernen_(DELETE)
-
-No_PDF_linked=Kein_PDF_verlinkt
-PDF_does_not_exist=PDF_existiert_nicht
-Wrote_XMP-metadata=XMP-Metadaten_geschrieben
-
-Error_writing_to_%0_file(s).=Fehler_beim_Schreiben_in_%0_Datei(en).
-Finished_writing_XMP-metadata._Wrote_to_%0_file(s).=Schreiben_der_XMP-Metadaten_in_%0_Datei(en)_beendet.
-
-You_have_entered_an_invalid_search_'%0'.=Sie_haben_eine_ung\u00fcltige_Suche_'%0'_eingegeben.
-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?
-
-Remove_link=Link_l\u00F6schen
-
-
-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
-Error_converting_Bibtex_to_XMP\:_%0=Fehler_beim_Konvertieren_von_BibTeX_nach_XMP:_%0
-
-
-Sort_order=Sortierung
diff --git a/src/resource/JabRef_du.properties b/src/resource/JabRef_du.properties
index 7d32569..9849615 100644
--- a/src/resource/JabRef_du.properties
+++ b/src/resource/JabRef_du.properties
@@ -13,6 +13,8 @@
 %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_entries_found._To_reduce_server_load,_abstracts_will_only_be_downloaded_for_searches_returning_%1_hits_or_less.=
+%0_export_successful=
 
 %0_field_set=%0-veld_ingesteld
 
@@ -23,6 +25,7 @@
 %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>=
 
 <HTML>Unpack_the_zip_file_containing_import/export_filters_for_Endnote,<BR>for_optimal_interoperability_with_JabRef</HTML>=<HTML>Pak_het_zip_bestand_dat_de_import/export_filters_voor_Endnote_bevat_uit<BR>voor_optimale_samenwerking_met_JabRef</HTML>
 
@@ -37,8 +40,12 @@ _on_entry_number_=_op_entry_nummber
 A_CiteSeer_fetch_operation_is_currently_in_progress.=Een_CiteSeer_ophaal-operatie_is_momenteel_in_werking.
 
 A_CiteSeer_import_operation_is_currently_in_progress.=Een_CiteSeer_importeer-operatie_is_momenteel_in_werking.
+A_string_with_that_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
 
@@ -85,18 +92,24 @@ 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
 
@@ -105,10 +118,12 @@ any_field_that_matches_the_regular_expression_<b>%0</b>=elk_veld_dat_overeenkomt
 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
 
@@ -123,23 +138,30 @@ Assign_the_original_group's_entries_to_this_group?=De_entries_van_de_originele_g
 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
@@ -148,6 +170,8 @@ 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
@@ -157,6 +181,8 @@ 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
 
@@ -173,6 +199,7 @@ 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
 
@@ -187,6 +214,7 @@ BibTeX_source=BibTeX-broncode
 BibTeXML=BibTeXML
 
 Binding=Binding
+Broken_link=
 
 Browse=Bladeren
 
@@ -197,6 +225,7 @@ 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_connect_to_SQL_server_at_the_specified_host.=
 
 Cannot_merge_this_change=Kan_deze_verandering_niet_samenvoegen
 
@@ -222,6 +251,8 @@ Change_case=Verander_geval
 
 Change_entry_type=Wijzig_entry_type
 
+Change_file_type=
+
 change_key=wijzig_sleutel
 
 Change_of_Grouping_Method=Wijzig_groepering_methode
@@ -231,6 +262,7 @@ 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
 
@@ -253,6 +285,7 @@ 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=
 
 Cite_command_(for_Emacs/WinEdt)=Cite-commando_(voor_Emacs/WinEdt)
 
@@ -260,8 +293,6 @@ CiteSeer_Error=CiteSeer_Foutmelding
 
 CiteSeer_Fetch_Error=CiteSeer_Ophaal_Foutmelding
 
-CiteSeer_import_entries=CiteSeer_importeer_entries
-
 CiteSeer_Import_Error=CiteSeer_Importeer_foutmelding
 
 CiteSeer_Import_Fields=CiteSeer_Importeer_Velden
@@ -307,6 +338,10 @@ Complete_record=Vervolledig_record
 Completed_Import_Fields_from_CiteSeer.=Velden_importeer-actie_van_CiteSeer_voltooid.
 
 Completed_import_from_CiteSeer.=Importeer-actie_van_CiteSeer_voltooid.
+Connect=
+Connect_to_SQL_database=
+Connect_to_SQL_Database=
+Connection_to_IEEEXplore_failed=
 
 Contained_in=bevat_in
 
@@ -323,6 +358,10 @@ 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
 
@@ -332,6 +371,8 @@ Could_not_connect_to_host=Kon_geen_verbinding_maken_met_de_host
 
 # 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_determine_exception_message.=
 
 Could_not_export_entry_types=Kon_entry_types_niet_exporteren
 
@@ -340,6 +381,7 @@ 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
@@ -352,15 +394,20 @@ Could_not_instantiate_%0_%1=Kon_geen_instantie_van_%0_%1_aanmaken
 
 Could_not_instantiate_%0_%1._Have_you_chosen_the_correct_package_path?=Kon_geen_instantie_van_%0_%1_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_resolve_import_format=Kon_het_importeer_formaat_niet_beslissen
 
 #####Switches_between_full_and_abbreviated_journal_name=Schakelt_tussen_volledige_en_afgekorte_tijdschriftnamen
 #####if_the_journal_name_is_known._Go_to_(...............)=als_het_tijdschrift_gekend_is._Ga_naar_(...............)
 Could_not_run_the_'gnuclient'_program._Make_sure_you_have_the_gnuserv/gnuclient_programs_installed.=Kon_het_'gnuclient'_programma_niet_uitvoeren._Zorg_ervoor_dat_u_de_gnuserv/gnuclient_programma's_ge\u00efnstalleerd_hebt.
+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.=
 
 Couldn't_find_an_entry_associated_with_this_URL=Kon_geen_entry_geassocieerd_met_deze_URL_vinden
 
@@ -395,6 +442,7 @@ cut_entries=entries_knippen
 cut_entry=entry_knippen
 
 Cut_pr=Knippen_pr
+Database_\:=
 
 Database_encoding=Database_encodering
 
@@ -415,6 +463,7 @@ Default_look_and_feel=Standaard_"look_and_feel"
 Default_pattern=Standaard_patroon
 
 Default_sort_criteria=Standaard_sorteercriteria
+Define_'%0'=
 
 defined.=gedefinieerd.
 
@@ -441,6 +490,7 @@ Delete_strings=Verwijder_constanten
 Deleted=Verwijderd
 
 Delimit_fields_with_semicolon,_ex.=Scheid_velden_met_puntkomma,_bv.
+Derby=
 
 Descending=Afdalend
 
@@ -480,8 +530,14 @@ 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_not_write_the_following_fields_to_XMP_Metadata\:=
+
+Do_you_want_JabRef_to_do_the_following_operations?=
 
 Docbook=Docbook
 
@@ -496,6 +552,8 @@ Download_completed=Download_voltooid
 Download_file=Download_bestand
 
 Downloading...=Downloading...
+Drag_and_Drop_Error=
+Drop_%0=
 
 duplicate_BibTeX_key=dubbele_BibTeX-sleutel
 
@@ -526,12 +584,17 @@ 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
 
@@ -542,6 +605,7 @@ Empty_BibTeX_key._Grouping_may_not_work_for_this_entry.=Lege_BibTeX-sleutel._Gro
 empty_database=lege_database
 
 Enable_source_editing=Broncode_aanpassing_mogelijk_maken
+Enable_word/name_autocompletion=
 
 Endnote=Endnote
 
@@ -563,6 +627,8 @@ entry=entry
 
 Entry_editor=Entry_editor
 
+Entry_has_no_citekey=
+
 Entry_in_current_database=Entry_in_huidige_database
 
 Entry_in_import=Entry_in_importering
@@ -580,17 +646,31 @@ Entry_type_names_are_not_allowed_to_contain_white_space_or_the_following_charact
 Entry_types=Entrytypes
 
 Error=Foutmelding
+
+Error\:_=
+Error_converting_Bibtex_to_XMP:_%0=
+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
@@ -613,11 +693,15 @@ 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
@@ -632,10 +716,6 @@ Fetch_Articles_Citing_your_Database=Haal_Artikels_Geciteerd_in_de_Database_op
 
 Fetch_CiteSeer=Ophalen_van_CiteSeer
 
-Fetch_CiteSeer_by_ID=Ophalen_van_CiteSeer_op_ID
-
-Fetch_Medline=Ophalen_van_Medline
-
 Fetch_Medline_by_ID=Ophalen_van_Medline_op_ID
 
 Fetched_all_citations_from_target_database.=Haal_alle_citaten_op_van_doeldatabase
@@ -658,6 +738,7 @@ field=veld
 Field_content=Veld_inhoud
 
 Field_name=Veldnaam
+Field_names_are_not_allowed_to_contain_white_space_or_the_following_characters=
 
 Field_sizes=Veld_groottes
 
@@ -671,14 +752,24 @@ File=Bestand
 
 file=vestand
 
+File_'%0'_is_already_open.=
+
 File_'%0'_not_found=Bestand_'%0'_niet_gevonden
 
 File_changed=Bestand_veranderd
+File_directory=
+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
 
@@ -688,7 +779,11 @@ 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.
@@ -720,6 +815,7 @@ Formatter_Name=
 Formatter_not_found=Formateerder_niet_gevonden
 
 found=gevonden
+Found_%0_plugin(s)=
 
 found_in_aux_file=gevonden_in_aux_bestand
 
@@ -765,6 +861,8 @@ Have_you_chosen_the_correct_package_path?=Heeft_u_het_correcte_pakket_pad_gekoze
 
 Help=Help
 
+Help_contents=Help_inhoud
+
 Help_on_groups=Help_over_groepen
 
 Help_on_key_patterns=Help_over_sleutelpatronen
@@ -778,6 +876,8 @@ 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
 
@@ -788,6 +888,7 @@ HTML=HTML
 HTML_table=HTML_tabel
 
 HTML_table_(with_Abstract_&_BibTeX)=HTML_tabel_(met_Abstract_&_BibTeX)
+Icon=
 
 Ignore=Negeren
 
@@ -898,6 +999,7 @@ 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
 
@@ -936,6 +1038,8 @@ 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
 
@@ -945,14 +1049,23 @@ 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_%0_directory=
+Main_file_directory=
 
 Main_layout_file=Hoofd_layoutbestand
 
@@ -965,6 +1078,7 @@ Manage=Beheren
 Manage_custom_exports=Beheer_externe_exportfilters
 
 Manage_custom_imports=Beheer_externe_importfilters
+Manage_external_file_types=
 
 Manage_journal_abbreviations=Beheer_tijdschrift_afkortingen
 
@@ -980,6 +1094,7 @@ Mark_new_entries_with_owner_name=Markeer_nieuwe_entries_met_naam_van_eigenaar
 Marked_selected=Markering_geselecteerd
 
 Medline_entries_fetched=Medline_entries_opgehaald
+Memory_Stick_Mode=
 
 Menu_and_label_font_size=Menu_en_label_lettertypegrootte
 
@@ -988,8 +1103,7 @@ Merged_external_changes=Voeg_externe_veranderingen_samen
 Messages=Berichten
 
 Messages_and_Hints=berichten_en_hints
-
-Miscellaneous=Varia
+MIS_Quarterly=MIS_Quarterly
 
 Modification_of_field=Wijziging_van_veld
 
@@ -1010,6 +1124,9 @@ 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_file_to_file_directory=
+Move_files_to_file_directory.=
 
 move_group=verplaats_groep
 
@@ -1020,12 +1137,17 @@ 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
 
+Native_file_dialog=
+
 nested_aux_files=geneste_aux_bestanden
 
 New=Nieuw
@@ -1044,6 +1166,7 @@ New_database_created.=Nieuwe_database_aangemaakt.
 New_field_value=Nieuwe_veld_waarde
 
 New_file=Nieuw_bestand
+New_file_link_(INSERT)=
 
 New_group=Nieuwe_groep
 
@@ -1057,14 +1180,15 @@ No_actual_changes_found.=Geen_actuele_veranderingen_gevonden.
 
 no_base-bibtex-file_specified=Geen_basis_BibTeX-bestand_gespecifieerd
 
-No_custom_imports_registered_yet.=Geen_externe_importfilters_geregistreerd.
-
 no_database_generated=Geen_database_gegenereerd
+No_databases_saved.=
 
 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.
@@ -1073,7 +1197,7 @@ No_entries_selected=Geen_entries_geselecteerd
 No_entries_selected.=Geen_entries_geselecteerd.
 
 No_exceptions_have_ocurred.=Geen_uitzonderingen_zijn_voorgekomen.
-No_file_associated=Geen_bestand_geassocieerd
+No_files_found.=
 
 No_GUI._Only_process_command_line_options.=Geen_GUI._Alleen_proces_commandoregel_opties.
 
@@ -1083,13 +1207,17 @@ No_journal_names_could_be_unabbreviated.=Geen_afkortingen_van_tijdschrift_namen_
 
 No_Medline_entries_found.=Geen_Medline_entries_gevonden.
 
+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
 
@@ -1113,8 +1241,10 @@ 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
 
@@ -1141,7 +1271,9 @@ 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
 
@@ -1162,36 +1294,44 @@ 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_HTML_viewer=Pad_naar_HTML-viewer
 
+Path_to_LatexEditor_(LEd.exe)=
+
 Path_to_LyX_pipe=Pad_naar_LyX-pipe
 
 Path_to_PDF_viewer=Pad_naar_PDF-viewer
 
 Path_to_PS_viewer=Pad_naar_PS-viewer
 
+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
 
-Pick_titles=Kies_titels
-
 Plain_text_import=Onopgemaakte_tekst_importeren
 
 Please_check_your_network_connection_to_this_machine.=Controleer_uw_netwerkverbinding_naar_deze_machine.
@@ -1205,6 +1345,7 @@ Please_enter_a_semicolon_or_comma_separated_list_of_Medline_IDs_(numbers).=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_refer_to_the_JabRef_help_manual_on_using_the_CiteSeer_tools=
 
 Please_refer_to_the_JabRef_help_manual_on_using_the_CiteSeer_tools.=Kijk_a.u.b._in_JabRef's_help_handleiding_voor_het_gebruik_van_CiteSeer_tools.
 
@@ -1213,6 +1354,7 @@ 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_=
 
 Please_wait_until_it_has_finished.=Even_geduld_a.u.b._tot_de_operatie_voltooid_is.
 
@@ -1231,8 +1373,11 @@ 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
 
@@ -1242,12 +1387,15 @@ Push_entries_to_external_application_(%0)=Stuur_entries_naar_externe_applicatie_
 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
 
@@ -1299,6 +1447,7 @@ 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
 
@@ -1318,6 +1467,8 @@ 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
@@ -1331,12 +1482,14 @@ Removed_group_"%0".=Groep_"%0"_verwijderd.
 Removed_group_"%0"_and_its_subgroups.=Groep_"%0"_en_zijn_subgroepen_verwijderd.
 
 Removed_string=Constante_verwijderd
+Rename_to_match_citekey=
 
 Renamed_string=Constante_hernoemd
 
 Replace=Vervangen
 
 Replace_(regular_expression)=Vervang_(regular_expression)
+Replace_comma_by_and_where_appropriate=
 
 Replace_string=Tekst_vervangen
 
@@ -1347,6 +1500,10 @@ 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
 
@@ -1359,12 +1516,17 @@ 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
 
@@ -1377,6 +1539,7 @@ Save_failed_while_committing_changes=Opslaan_mislukt_bij_het_vastleggen_van_vera
 Save_in_default_table_sort_order=Sla_in_standaard_tabel_sorteervolgorde_op
 
 Save_ordered_by_author/editor/year=Sla_gesorteerd_op_auteur/editor/jaar_op
+Save_selected_as_...=Sla_geselecteerde_op_als_...
 
 Saved_database=Database_opgeslagen
 
@@ -1385,6 +1548,7 @@ Saved_selected_to=Geselecteerde_opgeslagen_naar
 Saved_session=Sessie_opgeslagen
 
 Saving=Aan_het_opslaan
+Saving_all_databases...=
 
 Saving_database=Database_aan_het_opslaan
 
@@ -1405,6 +1569,7 @@ Search_for=Zoek_naar
 Search_general_fields=Zoek_algemene_velden
 
 Search_IEEEXplore=Zoek_IEEEXplore
+Search_IEEExplore=
 
 Search_optional_fields=Zoek_optionele_velden
 
@@ -1420,6 +1585,8 @@ 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
@@ -1442,6 +1609,7 @@ 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
 
@@ -1451,12 +1619,15 @@ Select_the_tree_nodes_to_view_and_accept_or_reject_changes=Selecteer_de_boom_kno
 Selected_entries=Geselecteerde_entries
 
 Selector_enabled_fields=Selecteer_velden_die_in_werking_zijn
+Server_Hostname_\:=
+Server_Type_\:=
 
 Set/clear_fields=Velden_instellen/wissen
 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
 
@@ -1488,6 +1659,8 @@ 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
 
@@ -1522,6 +1695,8 @@ Sort_alphabetically=Alphabetisch_sorteren
 
 Sort_Automatically=Automatisch_sorteren
 
+Sort_order=
+
 sort_subgroups=subgroepen_sorteren
 
 Sorted_all_subgroups_recursively.=Alle_subgroepen_recursief_gesorteerd.
@@ -1532,6 +1707,7 @@ source_edit=broncode_aanpassen
 Special_Name_Formatters=
 
 Special_table_columns=Speciale_tabelkolommen
+SQL_connection_established.=
 
 Start_incremental_search=Start_incrementele_zoekopdracht
 
@@ -1569,6 +1745,7 @@ Suggest=Voorstellen
 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
 
@@ -1581,6 +1758,7 @@ Table_grid_color=Tabel_roosterkleur
 Table_text_color=Tabel_tekstkleur
 
 Tabname=Tabblad_naam
+Target_file_cannot_be_a_directory.=
 
 Tertiary_sort_criterion=Tertiair_sorteercriterium
 
@@ -1589,11 +1767,16 @@ 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_application_'%0'_associated_with_the_file_type_'%1'_could_not_be_called.=
 
 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_CiteSeer_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!
@@ -1607,6 +1790,7 @@ The_label_of_the_string_can_not_contain_spaces.=Het_label_van_een_constante_mag_
 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
 
@@ -1625,10 +1809,13 @@ There_are_possible_duplicates_(marked_with_a_'D'_icon)_that_haven't_been_resolve
 There_is_no_entry_type=Er_is_geen_entry_type
 
 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 [...]
 
@@ -1643,34 +1830,43 @@ 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>=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_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_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=Type
 
 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_parse_clipboard_text_as_Bibtex_entries.=kan_klembord_tekst_niet_ontleden_als_BibTeX-entries
+Unable_to_open_file.=
+Unable_to_open_link._The_application_'%0'_associated_with_the_file_type_'%1'_could_not_be_called.=
 
 Unable_to_parse_the_following_URL=De_volgende_URL_kan_niet_ontleed_worden
 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
 
@@ -1707,11 +1903,21 @@ Update_to_current_column_widths=Update_naar_huidige_kolombreedtes
 Updated_group_selection=Groep_selectie_geupdate
 
 Updating_entries...=Entries_aan_het_updaten...
+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
 
@@ -1723,6 +1929,8 @@ 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
+User_does_not_have_sufficient_privileges.\n=
+Username_\:=
 
 Uses_default_application=Gebruikt_standaard_applicatie
 
@@ -1733,12 +1941,16 @@ 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
 
@@ -1749,28 +1961,38 @@ 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_have_changed_the_language_setting._You_must_restart_JabRef_for_this_to_come_into_effect.=U_heeft_de_taalinstelling_veranderd._U_moet_JabRef_herstarten_om_dit_toe_te_passen.
+You_have_changed_the_look_and_feel_setting._You_must_restart_JabRef_for_this_to_come_into_effect.=
 
 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_enter_an_integer_value_in_the_text_field_for=U_moet_een_gehele_waarde_in_het_tekstveld_ingeven_voor
@@ -1784,205 +2006,48 @@ You_must_select_at_least_one_row_to_perform_this_operation.=U_moet_minstens_\u00
 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.
-
-Save_all_open_databases=
-
-Automatically_remove_exact_duplicates=
-Enable_word/name_autocompletion=
-Editor_options=
-Use_autocompletion_for_the_following_fields=
-Saving_all_databases...=
-Save_all_finished.=
-Saved_%0_databases.=
-No_databases_saved.=
-Connection_to_IEEEXplore_failed=
-
-Link=
-File_type=
-Edit_file_link=
-
-Path_to_LatexEditor_(LEd.exe)=
-Move_external_links_to_'file'_field=
-Push_selection_to_Vim=
-Pushed_citations_to_Vim=
-
-Waiting_for_ArXiv...=
-Processing_=
-Error_while_fetching_from_OIA2=
-
-No_entries_found_for_the_search_string_'%0'=
-
-The_chosen_encoding_'%0'_could_not_encode_the_following_characters\:_=
-Operation_not_supported=
-Drag_and_Drop_Error=
-File_download=
-Error_while_downloading_file\:=
-Only_one_item_is_supported=
-Do_not_write_the_following_fields_to_XMP_Metadata\:=
-<HTML>Could_not_find_file_'%0'<BR>linked_from_entry_'%1'</HTML>=
-Drop_%0=
-Link_to_file_%0=
-The_PDF_contains_one_or_several_bibtex-records.\nDo_you_want_to_import_these_as_new_entries_into_the_current_database?=
-XMP_metadata_found_in_PDF\:_%0=
-Link_to_PDF_%0=
-Writing_XMP_to_'%0'...=
-Wrote_XMP_to_'%0'.=
-Error_writing_XMP_to_file\:_%0=
-Error_converting_Bibtex_to_XMP:_%0=
-Error_while_converting_BibtexEntry_to_XMP_%0=
-Error_converting_XMP_to_'%0'...=
-Could_not_find_directory_for_%0-files\:_%1=
-This_operation_requires_at_least_one_entry.=
-Write_XMP-metadata=
-Write_XMP-metadata_for_all_PDFs_in_current_database?=
-No_XMP_metadata_found_in_=
-Please_refer_to_the_JabRef_help_manual_on_using_the_CiteSeer_tools=
-Search_IEEExplore=
-An_Exception_ocurred_while_accessing_'%0'=
-An_SAXException_ocurred_while_parsing_'%0':=
-An_Error_occurred_while_fetching_from_OAI2_source_(%0)\:=
-Abbreviated_%0_journal_names.=
-Unabbreviated_%0_journal_names.=
-
-Help_contents=Help_inhoud
-Edit_entry=Entry_bewerken
-Save_database_as_...=Database_opslaan_als_...
-Save_selected_as_...=Sla_geselecteerde_op_als_...
-Toggle_search_panel=Toon_zoekpaneel
-Append_contents_from_a_BibTeX_database_into_the_currently_viewed_database=Voeg_de_inhoud_van_een_BibTeX_database_in_de_huidige_weergegeven_database_toe
-Edit_strings=Constanten_bewerken
-Toggle_groups_interface=Toon_groepenvenster
-Toggle_entry_preview=Toon_entry_voorbeeld
-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
-Autogenerate_BibTeX_keys=BibTeX-sleutels_automatisch_genereren
-Will_write_XMP-metadata_to_the_PDFs_linked_from_selected_entries.=Zal_XPM_metadata_naar_de_PDFs_gelinkt_vanuit_geselecteerde_entries_schrijven.
-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)
-Unabbreviate_journal_names_of_the_selected_entries=Maak_afkortingen_van_tijdschriftnamen_van_geselecteerde_entries_ongedaan
-Do_not_show_splash_window_at_startup=
-
-Resolve_strings_for_all_fields_except=
-Resolve_strings_for_standard_BibTeX_fields_only=
-Leave_files_in_their_current_directory.=
-Leave_file_in_its_current_directory.=
-Extension=
-Application=
-Icon=
-
-Path_to_%0_not_defined=
-
-Path_to_Vim=
-Vim_Server_Name=
-MS_Office_2007=
-Manage_external_file_types=
-All_custom_file_types_will_be_lost._Proceed?=
-Reset_file_type_definitons=
-Edit_file_type=
-Could_not_run_the_'vim'_program.=
-
-Show_file_column=
-This_database_was_written_using_an_older_version_of_JabRef.=
-
-File_'%0'_is_already_open.=
-
-File_has_been_updated_externally._What_do_you_want_to_do?=
-
-Entry_has_no_citekey=
-Rename_to_match_citekey=
-
-Change_file_type=
-Define_'%0'=
-This_external_link_is_of_the_type_'%0',_which_is_undefined._What_do_you_want_to_do?=
-Unable_to_open_file.=
-Undefined_file_type=
-
-Error\:_=
-
-Do_you_want_JabRef_to_do_the_following_operations?=
-Upgrade_file=
-This_will_move_all_external_links_from_the_'pdf'_and_'ps'_fields_into_the_'%0'_field._Proceed?=
-Upgrade_external_links=
-Upgraded_links.=
-This_entry_has_no_BibTeX_key._Generate_key_now?=
-Target_file_cannot_be_a_directory.=
-
-
-Finished_autosetting_external_links.=
-No_files_found.=
-
-External_file_links=
-Main_%0_directory=
-Synchronize_file_links=
-Upgrade_external_PDF/PS_links_to_use_the_'%0'_field.=
-Broken_link=
-Change_table_column_and_General_fields_settings_to_use_the_new_feature=
-Upgrade_old_external_file_links_to_use_the_new_feature=
-Set_main_external_file_directory=
-Do_not_show_these_options_in_the_future=
-File_directory=
-Autosetting_links=
-Autoset_external_links=
-Link_local_file=
-
-Searching_for_files=
-
-Could_not_open_link=
-The_application_'%0'_associated_with_the_file_type_'%1'_could_not_be_called.=
-
-Native_file_dialog=
-Beta_version=
-Do_not_write_the_following_fields_to_XMP_Metadata:=
-MIS_Quarterly=MIS_Quarterly
-Use_default_viewer=
-Select_icon=
-
-Copy_to_clipboard=
-Paste_from_clipboard=
-lower=
-UPPER=
-Upper_Each_First=
-Upper_first=
-Replace_comma_by_and_where_appropriate=
-%0_export_successful=
-
-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.=
-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.=
-You_have_changed_the_look_and_feel_setting._You_must_restart_JabRef_for_this_to_come_into_effect.=
-Warning\:_could_not_complete_file_repair;_your_file_may_have_been_corrupted._Error_message=
-Could_not_save_file._Character_encoding_'%0'_is_not_supported.=
-Unable_to_open_link._The_application_'%0'_associated_with_the_file_type_'%1'_could_not_be_called.=
-Could_not_connect_to_Vim_server._Make_sure_that_Vim_is_running<BR>with_correct_server_name.=
-All_entries_of_this_type_will_be_declared_typeless._Continue?=
-Field_names_are_not_allowed_to_contain_white_space_or_the_following_characters=
-%0_entries_found._To_reduce_server_load,_abstracts_will_only_be_downloaded_for_searches_returning_%1_hits_or_less.=
-A_string_with_that_label_already_exists=
-Overwrite=
-
-File_directory_is_not_set_or_does_not_exist!=
-File_directory_is_'%0':=
-Copy_files_to_file_directory.=
-Move_files_to_file_directory.=
-Copy_file_to_file_directory.=
-Move_file_to_file_directory=
-New_file_link_(INSERT)=
-Remove_file_link_(DELETE)=
-
-No_PDF_linked=
-PDF_does_not_exist=
-Wrote_XMP-metadata=
-
-Error_writing_to_%0_file(s).=
-Finished_writing_XMP-metadata._Wrote_to_%0_file(s).=
-
-You_have_entered_an_invalid_search_'%0'.=
-One_or_more_file_links_are_of_the_type_'%0',_which_is_undefined._What_do_you_want_to_do?=
-
-Remove_link=
-
-
-Autolink_files_with_names_starting_with_the_BibTeX_key=
-Autolink_only_files_that_match_the_BibTeX_key=
-Error_converting_Bibtex_to_XMP\:_%0=
-
-Sort_order=
+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=
+Fetch_Citeseer=
+Error_fetching_from_Citeseer\:\\n=
+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._You_must_restart_JabRef_for_this_to_come_into_effect.=
+
+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.=
diff --git a/src/resource/JabRef_du.properties b/src/resource/JabRef_du.properties.bak
similarity index 96%
copy from src/resource/JabRef_du.properties
copy to src/resource/JabRef_du.properties.bak
index 7d32569..e9ef4f4 100644
--- a/src/resource/JabRef_du.properties
+++ b/src/resource/JabRef_du.properties.bak
@@ -13,6 +13,8 @@
 %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_entries_found._To_reduce_server_load,_abstracts_will_only_be_downloaded_for_searches_returning_%1_hits_or_less.=
+%0_export_successful=
 
 %0_field_set=%0-veld_ingesteld
 
@@ -23,6 +25,7 @@
 %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>=
 
 <HTML>Unpack_the_zip_file_containing_import/export_filters_for_Endnote,<BR>for_optimal_interoperability_with_JabRef</HTML>=<HTML>Pak_het_zip_bestand_dat_de_import/export_filters_voor_Endnote_bevat_uit<BR>voor_optimale_samenwerking_met_JabRef</HTML>
 
@@ -37,8 +40,12 @@ _on_entry_number_=_op_entry_nummber
 A_CiteSeer_fetch_operation_is_currently_in_progress.=Een_CiteSeer_ophaal-operatie_is_momenteel_in_werking.
 
 A_CiteSeer_import_operation_is_currently_in_progress.=Een_CiteSeer_importeer-operatie_is_momenteel_in_werking.
+A_string_with_that_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
 
@@ -85,18 +92,24 @@ 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
 
@@ -105,10 +118,12 @@ any_field_that_matches_the_regular_expression_<b>%0</b>=elk_veld_dat_overeenkomt
 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
 
@@ -123,23 +138,30 @@ Assign_the_original_group's_entries_to_this_group?=De_entries_van_de_originele_g
 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
@@ -148,6 +170,8 @@ 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
@@ -157,6 +181,8 @@ 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
 
@@ -173,6 +199,7 @@ 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
 
@@ -187,6 +214,7 @@ BibTeX_source=BibTeX-broncode
 BibTeXML=BibTeXML
 
 Binding=Binding
+Broken_link=
 
 Browse=Bladeren
 
@@ -197,6 +225,7 @@ 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_connect_to_SQL_server_at_the_specified_host.=
 
 Cannot_merge_this_change=Kan_deze_verandering_niet_samenvoegen
 
@@ -222,6 +251,8 @@ Change_case=Verander_geval
 
 Change_entry_type=Wijzig_entry_type
 
+Change_file_type=
+
 change_key=wijzig_sleutel
 
 Change_of_Grouping_Method=Wijzig_groepering_methode
@@ -231,6 +262,7 @@ 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
 
@@ -253,6 +285,7 @@ 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=
 
 Cite_command_(for_Emacs/WinEdt)=Cite-commando_(voor_Emacs/WinEdt)
 
@@ -260,8 +293,6 @@ CiteSeer_Error=CiteSeer_Foutmelding
 
 CiteSeer_Fetch_Error=CiteSeer_Ophaal_Foutmelding
 
-CiteSeer_import_entries=CiteSeer_importeer_entries
-
 CiteSeer_Import_Error=CiteSeer_Importeer_foutmelding
 
 CiteSeer_Import_Fields=CiteSeer_Importeer_Velden
@@ -307,6 +338,10 @@ Complete_record=Vervolledig_record
 Completed_Import_Fields_from_CiteSeer.=Velden_importeer-actie_van_CiteSeer_voltooid.
 
 Completed_import_from_CiteSeer.=Importeer-actie_van_CiteSeer_voltooid.
+Connect=
+Connect_to_SQL_database=
+Connect_to_SQL_Database=
+Connection_to_IEEEXplore_failed=
 
 Contained_in=bevat_in
 
@@ -323,6 +358,10 @@ 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
 
@@ -332,6 +371,8 @@ Could_not_connect_to_host=Kon_geen_verbinding_maken_met_de_host
 
 # 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_determine_exception_message.=
 
 Could_not_export_entry_types=Kon_entry_types_niet_exporteren
 
@@ -340,6 +381,7 @@ 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
@@ -352,15 +394,20 @@ Could_not_instantiate_%0_%1=Kon_geen_instantie_van_%0_%1_aanmaken
 
 Could_not_instantiate_%0_%1._Have_you_chosen_the_correct_package_path?=Kon_geen_instantie_van_%0_%1_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_resolve_import_format=Kon_het_importeer_formaat_niet_beslissen
 
 #####Switches_between_full_and_abbreviated_journal_name=Schakelt_tussen_volledige_en_afgekorte_tijdschriftnamen
 #####if_the_journal_name_is_known._Go_to_(...............)=als_het_tijdschrift_gekend_is._Ga_naar_(...............)
 Could_not_run_the_'gnuclient'_program._Make_sure_you_have_the_gnuserv/gnuclient_programs_installed.=Kon_het_'gnuclient'_programma_niet_uitvoeren._Zorg_ervoor_dat_u_de_gnuserv/gnuclient_programma's_ge\u00efnstalleerd_hebt.
+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.=
 
 Couldn't_find_an_entry_associated_with_this_URL=Kon_geen_entry_geassocieerd_met_deze_URL_vinden
 
@@ -395,6 +442,7 @@ cut_entries=entries_knippen
 cut_entry=entry_knippen
 
 Cut_pr=Knippen_pr
+Database_\:=
 
 Database_encoding=Database_encodering
 
@@ -415,6 +463,7 @@ Default_look_and_feel=Standaard_"look_and_feel"
 Default_pattern=Standaard_patroon
 
 Default_sort_criteria=Standaard_sorteercriteria
+Define_'%0'=
 
 defined.=gedefinieerd.
 
@@ -441,6 +490,7 @@ Delete_strings=Verwijder_constanten
 Deleted=Verwijderd
 
 Delimit_fields_with_semicolon,_ex.=Scheid_velden_met_puntkomma,_bv.
+Derby=
 
 Descending=Afdalend
 
@@ -480,8 +530,14 @@ 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_not_write_the_following_fields_to_XMP_Metadata\:=
+
+Do_you_want_JabRef_to_do_the_following_operations?=
 
 Docbook=Docbook
 
@@ -496,6 +552,8 @@ Download_completed=Download_voltooid
 Download_file=Download_bestand
 
 Downloading...=Downloading...
+Drag_and_Drop_Error=
+Drop_%0=
 
 duplicate_BibTeX_key=dubbele_BibTeX-sleutel
 
@@ -526,12 +584,17 @@ 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
 
@@ -542,6 +605,7 @@ Empty_BibTeX_key._Grouping_may_not_work_for_this_entry.=Lege_BibTeX-sleutel._Gro
 empty_database=lege_database
 
 Enable_source_editing=Broncode_aanpassing_mogelijk_maken
+Enable_word/name_autocompletion=
 
 Endnote=Endnote
 
@@ -563,6 +627,8 @@ entry=entry
 
 Entry_editor=Entry_editor
 
+Entry_has_no_citekey=
+
 Entry_in_current_database=Entry_in_huidige_database
 
 Entry_in_import=Entry_in_importering
@@ -580,17 +646,31 @@ Entry_type_names_are_not_allowed_to_contain_white_space_or_the_following_charact
 Entry_types=Entrytypes
 
 Error=Foutmelding
+
+Error\:_=
+Error_converting_Bibtex_to_XMP:_%0=
+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
@@ -613,11 +693,15 @@ 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
@@ -632,10 +716,6 @@ Fetch_Articles_Citing_your_Database=Haal_Artikels_Geciteerd_in_de_Database_op
 
 Fetch_CiteSeer=Ophalen_van_CiteSeer
 
-Fetch_CiteSeer_by_ID=Ophalen_van_CiteSeer_op_ID
-
-Fetch_Medline=Ophalen_van_Medline
-
 Fetch_Medline_by_ID=Ophalen_van_Medline_op_ID
 
 Fetched_all_citations_from_target_database.=Haal_alle_citaten_op_van_doeldatabase
@@ -658,6 +738,7 @@ field=veld
 Field_content=Veld_inhoud
 
 Field_name=Veldnaam
+Field_names_are_not_allowed_to_contain_white_space_or_the_following_characters=
 
 Field_sizes=Veld_groottes
 
@@ -671,14 +752,24 @@ File=Bestand
 
 file=vestand
 
+File_'%0'_is_already_open.=
+
 File_'%0'_not_found=Bestand_'%0'_niet_gevonden
 
 File_changed=Bestand_veranderd
+File_directory=
+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
 
@@ -688,7 +779,11 @@ 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.
@@ -720,6 +815,7 @@ Formatter_Name=
 Formatter_not_found=Formateerder_niet_gevonden
 
 found=gevonden
+Found_%0_plugin(s)=
 
 found_in_aux_file=gevonden_in_aux_bestand
 
@@ -765,6 +861,8 @@ Have_you_chosen_the_correct_package_path?=Heeft_u_het_correcte_pakket_pad_gekoze
 
 Help=Help
 
+Help_contents=Help_inhoud
+
 Help_on_groups=Help_over_groepen
 
 Help_on_key_patterns=Help_over_sleutelpatronen
@@ -778,6 +876,8 @@ 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
 
@@ -788,6 +888,7 @@ HTML=HTML
 HTML_table=HTML_tabel
 
 HTML_table_(with_Abstract_&_BibTeX)=HTML_tabel_(met_Abstract_&_BibTeX)
+Icon=
 
 Ignore=Negeren
 
@@ -898,6 +999,7 @@ 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
 
@@ -936,6 +1038,8 @@ 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
 
@@ -945,14 +1049,23 @@ 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_%0_directory=
+Main_file_directory=
 
 Main_layout_file=Hoofd_layoutbestand
 
@@ -965,6 +1078,7 @@ Manage=Beheren
 Manage_custom_exports=Beheer_externe_exportfilters
 
 Manage_custom_imports=Beheer_externe_importfilters
+Manage_external_file_types=
 
 Manage_journal_abbreviations=Beheer_tijdschrift_afkortingen
 
@@ -980,6 +1094,7 @@ Mark_new_entries_with_owner_name=Markeer_nieuwe_entries_met_naam_van_eigenaar
 Marked_selected=Markering_geselecteerd
 
 Medline_entries_fetched=Medline_entries_opgehaald
+Memory_Stick_Mode=
 
 Menu_and_label_font_size=Menu_en_label_lettertypegrootte
 
@@ -988,8 +1103,7 @@ Merged_external_changes=Voeg_externe_veranderingen_samen
 Messages=Berichten
 
 Messages_and_Hints=berichten_en_hints
-
-Miscellaneous=Varia
+MIS_Quarterly=MIS_Quarterly
 
 Modification_of_field=Wijziging_van_veld
 
@@ -1010,6 +1124,9 @@ 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_file_to_file_directory=
+Move_files_to_file_directory.=
 
 move_group=verplaats_groep
 
@@ -1020,12 +1137,17 @@ 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
 
+Native_file_dialog=
+
 nested_aux_files=geneste_aux_bestanden
 
 New=Nieuw
@@ -1044,6 +1166,7 @@ New_database_created.=Nieuwe_database_aangemaakt.
 New_field_value=Nieuwe_veld_waarde
 
 New_file=Nieuw_bestand
+New_file_link_(INSERT)=
 
 New_group=Nieuwe_groep
 
@@ -1057,14 +1180,15 @@ No_actual_changes_found.=Geen_actuele_veranderingen_gevonden.
 
 no_base-bibtex-file_specified=Geen_basis_BibTeX-bestand_gespecifieerd
 
-No_custom_imports_registered_yet.=Geen_externe_importfilters_geregistreerd.
-
 no_database_generated=Geen_database_gegenereerd
+No_databases_saved.=
 
 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.
@@ -1073,7 +1197,7 @@ No_entries_selected=Geen_entries_geselecteerd
 No_entries_selected.=Geen_entries_geselecteerd.
 
 No_exceptions_have_ocurred.=Geen_uitzonderingen_zijn_voorgekomen.
-No_file_associated=Geen_bestand_geassocieerd
+No_files_found.=
 
 No_GUI._Only_process_command_line_options.=Geen_GUI._Alleen_proces_commandoregel_opties.
 
@@ -1083,13 +1207,17 @@ No_journal_names_could_be_unabbreviated.=Geen_afkortingen_van_tijdschrift_namen_
 
 No_Medline_entries_found.=Geen_Medline_entries_gevonden.
 
+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
 
@@ -1113,8 +1241,10 @@ 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
 
@@ -1141,7 +1271,9 @@ 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
 
@@ -1162,36 +1294,44 @@ 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_HTML_viewer=Pad_naar_HTML-viewer
 
+Path_to_LatexEditor_(LEd.exe)=
+
 Path_to_LyX_pipe=Pad_naar_LyX-pipe
 
 Path_to_PDF_viewer=Pad_naar_PDF-viewer
 
 Path_to_PS_viewer=Pad_naar_PS-viewer
 
+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
 
-Pick_titles=Kies_titels
-
 Plain_text_import=Onopgemaakte_tekst_importeren
 
 Please_check_your_network_connection_to_this_machine.=Controleer_uw_netwerkverbinding_naar_deze_machine.
@@ -1205,6 +1345,7 @@ Please_enter_a_semicolon_or_comma_separated_list_of_Medline_IDs_(numbers).=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_refer_to_the_JabRef_help_manual_on_using_the_CiteSeer_tools=
 
 Please_refer_to_the_JabRef_help_manual_on_using_the_CiteSeer_tools.=Kijk_a.u.b._in_JabRef's_help_handleiding_voor_het_gebruik_van_CiteSeer_tools.
 
@@ -1213,6 +1354,7 @@ 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_=
 
 Please_wait_until_it_has_finished.=Even_geduld_a.u.b._tot_de_operatie_voltooid_is.
 
@@ -1231,8 +1373,11 @@ 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
 
@@ -1242,12 +1387,15 @@ Push_entries_to_external_application_(%0)=Stuur_entries_naar_externe_applicatie_
 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
 
@@ -1299,6 +1447,7 @@ 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
 
@@ -1318,6 +1467,8 @@ 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
@@ -1331,12 +1482,14 @@ Removed_group_"%0".=Groep_"%0"_verwijderd.
 Removed_group_"%0"_and_its_subgroups.=Groep_"%0"_en_zijn_subgroepen_verwijderd.
 
 Removed_string=Constante_verwijderd
+Rename_to_match_citekey=
 
 Renamed_string=Constante_hernoemd
 
 Replace=Vervangen
 
 Replace_(regular_expression)=Vervang_(regular_expression)
+Replace_comma_by_and_where_appropriate=
 
 Replace_string=Tekst_vervangen
 
@@ -1347,6 +1500,10 @@ 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
 
@@ -1359,12 +1516,17 @@ 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
 
@@ -1377,6 +1539,7 @@ Save_failed_while_committing_changes=Opslaan_mislukt_bij_het_vastleggen_van_vera
 Save_in_default_table_sort_order=Sla_in_standaard_tabel_sorteervolgorde_op
 
 Save_ordered_by_author/editor/year=Sla_gesorteerd_op_auteur/editor/jaar_op
+Save_selected_as_...=Sla_geselecteerde_op_als_...
 
 Saved_database=Database_opgeslagen
 
@@ -1385,6 +1548,7 @@ Saved_selected_to=Geselecteerde_opgeslagen_naar
 Saved_session=Sessie_opgeslagen
 
 Saving=Aan_het_opslaan
+Saving_all_databases...=
 
 Saving_database=Database_aan_het_opslaan
 
@@ -1405,6 +1569,7 @@ Search_for=Zoek_naar
 Search_general_fields=Zoek_algemene_velden
 
 Search_IEEEXplore=Zoek_IEEEXplore
+Search_IEEExplore=
 
 Search_optional_fields=Zoek_optionele_velden
 
@@ -1420,6 +1585,8 @@ 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
@@ -1442,6 +1609,7 @@ 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
 
@@ -1451,12 +1619,15 @@ Select_the_tree_nodes_to_view_and_accept_or_reject_changes=Selecteer_de_boom_kno
 Selected_entries=Geselecteerde_entries
 
 Selector_enabled_fields=Selecteer_velden_die_in_werking_zijn
+Server_Hostname_\:=
+Server_Type_\:=
 
 Set/clear_fields=Velden_instellen/wissen
 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
 
@@ -1488,6 +1659,8 @@ 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
 
@@ -1522,6 +1695,8 @@ Sort_alphabetically=Alphabetisch_sorteren
 
 Sort_Automatically=Automatisch_sorteren
 
+Sort_order=
+
 sort_subgroups=subgroepen_sorteren
 
 Sorted_all_subgroups_recursively.=Alle_subgroepen_recursief_gesorteerd.
@@ -1532,6 +1707,7 @@ source_edit=broncode_aanpassen
 Special_Name_Formatters=
 
 Special_table_columns=Speciale_tabelkolommen
+SQL_connection_established.=
 
 Start_incremental_search=Start_incrementele_zoekopdracht
 
@@ -1569,6 +1745,7 @@ Suggest=Voorstellen
 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
 
@@ -1581,6 +1758,7 @@ Table_grid_color=Tabel_roosterkleur
 Table_text_color=Tabel_tekstkleur
 
 Tabname=Tabblad_naam
+Target_file_cannot_be_a_directory.=
 
 Tertiary_sort_criterion=Tertiair_sorteercriterium
 
@@ -1589,11 +1767,16 @@ 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_application_'%0'_associated_with_the_file_type_'%1'_could_not_be_called.=
 
 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_CiteSeer_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!
@@ -1607,6 +1790,7 @@ The_label_of_the_string_can_not_contain_spaces.=Het_label_van_een_constante_mag_
 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
 
@@ -1625,10 +1809,13 @@ There_are_possible_duplicates_(marked_with_a_'D'_icon)_that_haven't_been_resolve
 There_is_no_entry_type=Er_is_geen_entry_type
 
 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 [...]
 
@@ -1643,34 +1830,43 @@ 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>=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_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_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=Type
 
 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_parse_clipboard_text_as_Bibtex_entries.=kan_klembord_tekst_niet_ontleden_als_BibTeX-entries
+Unable_to_open_file.=
+Unable_to_open_link._The_application_'%0'_associated_with_the_file_type_'%1'_could_not_be_called.=
 
 Unable_to_parse_the_following_URL=De_volgende_URL_kan_niet_ontleed_worden
 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
 
@@ -1707,11 +1903,21 @@ Update_to_current_column_widths=Update_naar_huidige_kolombreedtes
 Updated_group_selection=Groep_selectie_geupdate
 
 Updating_entries...=Entries_aan_het_updaten...
+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
 
@@ -1723,6 +1929,8 @@ 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
+User_does_not_have_sufficient_privileges.\n=
+Username_\:=
 
 Uses_default_application=Gebruikt_standaard_applicatie
 
@@ -1733,12 +1941,16 @@ 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
 
@@ -1749,28 +1961,38 @@ 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_have_changed_the_language_setting._You_must_restart_JabRef_for_this_to_come_into_effect.=U_heeft_de_taalinstelling_veranderd._U_moet_JabRef_herstarten_om_dit_toe_te_passen.
+You_have_changed_the_look_and_feel_setting._You_must_restart_JabRef_for_this_to_come_into_effect.=
 
 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_enter_an_integer_value_in_the_text_field_for=U_moet_een_gehele_waarde_in_het_tekstveld_ingeven_voor
@@ -1784,205 +2006,50 @@ You_must_select_at_least_one_row_to_perform_this_operation.=U_moet_minstens_\u00
 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=
+Fetch_Citeseer=
+Error_fetching_from_Citeseer\:\\n=
+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\:_=
+Error_fetching_from_Citeseer\:\\n=
+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._You_must_restart_JabRef_for_this_to_come_into_effect.=
+
+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.=
 
-Save_all_open_databases=
-
-Automatically_remove_exact_duplicates=
-Enable_word/name_autocompletion=
-Editor_options=
-Use_autocompletion_for_the_following_fields=
-Saving_all_databases...=
-Save_all_finished.=
-Saved_%0_databases.=
-No_databases_saved.=
-Connection_to_IEEEXplore_failed=
-
-Link=
-File_type=
-Edit_file_link=
-
-Path_to_LatexEditor_(LEd.exe)=
-Move_external_links_to_'file'_field=
-Push_selection_to_Vim=
-Pushed_citations_to_Vim=
-
-Waiting_for_ArXiv...=
-Processing_=
-Error_while_fetching_from_OIA2=
-
-No_entries_found_for_the_search_string_'%0'=
-
-The_chosen_encoding_'%0'_could_not_encode_the_following_characters\:_=
-Operation_not_supported=
-Drag_and_Drop_Error=
-File_download=
-Error_while_downloading_file\:=
-Only_one_item_is_supported=
-Do_not_write_the_following_fields_to_XMP_Metadata\:=
-<HTML>Could_not_find_file_'%0'<BR>linked_from_entry_'%1'</HTML>=
-Drop_%0=
-Link_to_file_%0=
-The_PDF_contains_one_or_several_bibtex-records.\nDo_you_want_to_import_these_as_new_entries_into_the_current_database?=
-XMP_metadata_found_in_PDF\:_%0=
-Link_to_PDF_%0=
-Writing_XMP_to_'%0'...=
-Wrote_XMP_to_'%0'.=
-Error_writing_XMP_to_file\:_%0=
-Error_converting_Bibtex_to_XMP:_%0=
-Error_while_converting_BibtexEntry_to_XMP_%0=
-Error_converting_XMP_to_'%0'...=
-Could_not_find_directory_for_%0-files\:_%1=
-This_operation_requires_at_least_one_entry.=
-Write_XMP-metadata=
-Write_XMP-metadata_for_all_PDFs_in_current_database?=
-No_XMP_metadata_found_in_=
-Please_refer_to_the_JabRef_help_manual_on_using_the_CiteSeer_tools=
-Search_IEEExplore=
-An_Exception_ocurred_while_accessing_'%0'=
-An_SAXException_ocurred_while_parsing_'%0':=
-An_Error_occurred_while_fetching_from_OAI2_source_(%0)\:=
-Abbreviated_%0_journal_names.=
-Unabbreviated_%0_journal_names.=
-
-Help_contents=Help_inhoud
-Edit_entry=Entry_bewerken
-Save_database_as_...=Database_opslaan_als_...
-Save_selected_as_...=Sla_geselecteerde_op_als_...
-Toggle_search_panel=Toon_zoekpaneel
-Append_contents_from_a_BibTeX_database_into_the_currently_viewed_database=Voeg_de_inhoud_van_een_BibTeX_database_in_de_huidige_weergegeven_database_toe
-Edit_strings=Constanten_bewerken
-Toggle_groups_interface=Toon_groepenvenster
-Toggle_entry_preview=Toon_entry_voorbeeld
-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
-Autogenerate_BibTeX_keys=BibTeX-sleutels_automatisch_genereren
-Will_write_XMP-metadata_to_the_PDFs_linked_from_selected_entries.=Zal_XPM_metadata_naar_de_PDFs_gelinkt_vanuit_geselecteerde_entries_schrijven.
-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)
-Unabbreviate_journal_names_of_the_selected_entries=Maak_afkortingen_van_tijdschriftnamen_van_geselecteerde_entries_ongedaan
-Do_not_show_splash_window_at_startup=
-
-Resolve_strings_for_all_fields_except=
-Resolve_strings_for_standard_BibTeX_fields_only=
-Leave_files_in_their_current_directory.=
-Leave_file_in_its_current_directory.=
-Extension=
-Application=
-Icon=
-
-Path_to_%0_not_defined=
-
-Path_to_Vim=
-Vim_Server_Name=
-MS_Office_2007=
-Manage_external_file_types=
-All_custom_file_types_will_be_lost._Proceed?=
-Reset_file_type_definitons=
-Edit_file_type=
-Could_not_run_the_'vim'_program.=
-
-Show_file_column=
-This_database_was_written_using_an_older_version_of_JabRef.=
-
-File_'%0'_is_already_open.=
-
-File_has_been_updated_externally._What_do_you_want_to_do?=
-
-Entry_has_no_citekey=
-Rename_to_match_citekey=
-
-Change_file_type=
-Define_'%0'=
-This_external_link_is_of_the_type_'%0',_which_is_undefined._What_do_you_want_to_do?=
-Unable_to_open_file.=
-Undefined_file_type=
-
-Error\:_=
-
-Do_you_want_JabRef_to_do_the_following_operations?=
-Upgrade_file=
-This_will_move_all_external_links_from_the_'pdf'_and_'ps'_fields_into_the_'%0'_field._Proceed?=
-Upgrade_external_links=
-Upgraded_links.=
-This_entry_has_no_BibTeX_key._Generate_key_now?=
-Target_file_cannot_be_a_directory.=
-
-
-Finished_autosetting_external_links.=
-No_files_found.=
-
-External_file_links=
-Main_%0_directory=
-Synchronize_file_links=
-Upgrade_external_PDF/PS_links_to_use_the_'%0'_field.=
-Broken_link=
-Change_table_column_and_General_fields_settings_to_use_the_new_feature=
-Upgrade_old_external_file_links_to_use_the_new_feature=
-Set_main_external_file_directory=
-Do_not_show_these_options_in_the_future=
-File_directory=
-Autosetting_links=
-Autoset_external_links=
-Link_local_file=
-
-Searching_for_files=
-
-Could_not_open_link=
-The_application_'%0'_associated_with_the_file_type_'%1'_could_not_be_called.=
-
-Native_file_dialog=
-Beta_version=
-Do_not_write_the_following_fields_to_XMP_Metadata:=
-MIS_Quarterly=MIS_Quarterly
-Use_default_viewer=
-Select_icon=
-
-Copy_to_clipboard=
-Paste_from_clipboard=
-lower=
-UPPER=
-Upper_Each_First=
-Upper_first=
-Replace_comma_by_and_where_appropriate=
-%0_export_successful=
-
-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.=
-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.=
-You_have_changed_the_look_and_feel_setting._You_must_restart_JabRef_for_this_to_come_into_effect.=
-Warning\:_could_not_complete_file_repair;_your_file_may_have_been_corrupted._Error_message=
-Could_not_save_file._Character_encoding_'%0'_is_not_supported.=
-Unable_to_open_link._The_application_'%0'_associated_with_the_file_type_'%1'_could_not_be_called.=
-Could_not_connect_to_Vim_server._Make_sure_that_Vim_is_running<BR>with_correct_server_name.=
-All_entries_of_this_type_will_be_declared_typeless._Continue?=
-Field_names_are_not_allowed_to_contain_white_space_or_the_following_characters=
-%0_entries_found._To_reduce_server_load,_abstracts_will_only_be_downloaded_for_searches_returning_%1_hits_or_less.=
-A_string_with_that_label_already_exists=
-Overwrite=
-
-File_directory_is_not_set_or_does_not_exist!=
-File_directory_is_'%0':=
-Copy_files_to_file_directory.=
-Move_files_to_file_directory.=
-Copy_file_to_file_directory.=
-Move_file_to_file_directory=
-New_file_link_(INSERT)=
-Remove_file_link_(DELETE)=
-
-No_PDF_linked=
-PDF_does_not_exist=
-Wrote_XMP-metadata=
-
-Error_writing_to_%0_file(s).=
-Finished_writing_XMP-metadata._Wrote_to_%0_file(s).=
-
-You_have_entered_an_invalid_search_'%0'.=
-One_or_more_file_links_are_of_the_type_'%0',_which_is_undefined._What_do_you_want_to_do?=
-
-Remove_link=
-
-
-Autolink_files_with_names_starting_with_the_BibTeX_key=
-Autolink_only_files_that_match_the_BibTeX_key=
-Error_converting_Bibtex_to_XMP\:_%0=
-
-Sort_order=
diff --git a/src/resource/JabRef_en.properties b/src/resource/JabRef_en.properties
index cf1e1ba..e44d575 100644
--- a/src/resource/JabRef_en.properties
+++ b/src/resource/JabRef_en.properties
@@ -13,6 +13,9 @@
 %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_entries_found._To_reduce_server_load,_abstracts_will_only_be_downloaded_for_searches_returning_%1_hits_or_less.=%0_entries_found._To_reduce_server_load,_abstracts_will_only_be_downloaded_for_searches_returning_%1_hits_or_less.
+
+%0_export_successful=%0_export_successful
 
 %0_field_set=%0_field_set
 
@@ -23,6 +26,7 @@
 %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>
 
 <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>
 
@@ -37,8 +41,12 @@ _on_entry_number_=_on_entry_number_
 A_CiteSeer_fetch_operation_is_currently_in_progress.=A_CiteSeer_fetch_operation_is_currently_in_progress.
 
 A_CiteSeer_import_operation_is_currently_in_progress.=A_CiteSeer_import_operation_is_currently_in_progress.
+A_string_with_that_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
 
@@ -85,18 +93,24 @@ 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_ocurred_while_accessing_'%0'
+An_SAXException_ocurred_while_parsing_'%0':=An_SAXException_ocurred_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.
 
@@ -105,10 +119,12 @@ any_field_that_matches_the_regular_expression_<b>%0</b>=any_field_that_matches_t
 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
 
@@ -123,22 +139,28 @@ Assign_the_original_group's_entries_to_this_group?=Assign_the_original_group's_e
 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
 
@@ -148,6 +170,8 @@ 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
@@ -157,6 +181,8 @@ 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
 
@@ -173,6 +199,7 @@ 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
 
@@ -187,6 +214,7 @@ BibTeX_source=BibTeX_source
 BibTeXML=BibTeXML
 
 Binding=Binding
+Broken_link=Broken_link
 
 Browse=Browse
 
@@ -197,6 +225,7 @@ 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_connect_to_SQL_server_at_the_specified_host.=Cannot_connect_to_SQL_server_at_the_specified_host.
 
 Cannot_merge_this_change=Cannot_merge_this_change
 
@@ -219,6 +248,7 @@ 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
 
@@ -229,6 +259,7 @@ 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
 
@@ -251,6 +282,7 @@ 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
 
 Cite_command_(for_Emacs/WinEdt)=Cite_command_(for_Emacs/WinEdt)
 
@@ -258,8 +290,6 @@ CiteSeer_Error=CiteSeer_Error
 
 CiteSeer_Fetch_Error=CiteSeer_Fetch_Error
 
-CiteSeer_import_entries=CiteSeer_import_entries
-
 CiteSeer_Import_Error=CiteSeer_Import_Error
 
 CiteSeer_Import_Fields=CiteSeer_Import_Fields
@@ -304,6 +334,10 @@ Complete_record=Complete_record
 Completed_Import_Fields_from_CiteSeer.=Completed_Import_Fields_from_CiteSeer.
 
 Completed_import_from_CiteSeer.=Completed_import_from_CiteSeer.
+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
 
@@ -320,6 +354,10 @@ 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
 
@@ -328,6 +366,8 @@ Could_not_connect_to_a_running_gnuserv_process._Make_sure_that_Emacs_or_XEmacs_i
 Could_not_connect_to_host=Could_not_connect_to_host
 
 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_determine_exception_message.=Could_not_determine_exception_message.
 
 Could_not_export_entry_types=Could_not_export_entry_types
 
@@ -336,6 +376,7 @@ 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
@@ -347,14 +388,18 @@ Could_not_import_preferences=Could_not_import_preferences
 Could_not_instantiate_%0_%1=Could_not_instantiate_%0_%1
 
 Could_not_instantiate_%0_%1._Have_you_chosen_the_correct_package_path?=Could_not_instantiate_%0_%1._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_resolve_import_format=Could_not_resolve_import_format
 
 Could_not_run_the_'gnuclient'_program._Make_sure_you_have_the_gnuserv/gnuclient_programs_installed.=Could_not_run_the_'gnuclient'_program._Make_sure_you_have_the_gnuserv/gnuclient_programs_installed.
+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.
 
 Couldn't_find_an_entry_associated_with_this_URL=Couldn't_find_an_entry_associated_with_this_URL
 
@@ -389,6 +434,7 @@ cut_entries=cut_entries
 cut_entry=cut_entry
 
 Cut_pr=Cut
+Database_\:=Database:
 
 Database_encoding=Database_encoding
 
@@ -409,6 +455,7 @@ Default_look_and_feel=Default_look_and_feel
 Default_pattern=Default_pattern
 
 Default_sort_criteria=Default_sort_criteria
+Define_'%0'=Define_'%0'
 
 defined.=defined.
 
@@ -433,6 +480,7 @@ Delete_strings=Delete_strings
 Deleted=Deleted
 
 Delimit_fields_with_semicolon,_ex.=Delimit_fields_with_semicolon,_ex.
+Derby=Derby
 
 Descending=Descending
 
@@ -471,8 +519,14 @@ 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_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
 
@@ -487,6 +541,8 @@ 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
 
@@ -517,12 +573,17 @@ 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
 
@@ -533,6 +594,7 @@ Empty_BibTeX_key._Grouping_may_not_work_for_this_entry.=Empty_BibTeX_key._Groupi
 empty_database=empty_database
 
 Enable_source_editing=Enable_source_editing
+Enable_word/name_autocompletion=Enable_word/name_autocompletion
 
 Endnote=Endnote
 
@@ -554,6 +616,8 @@ entry=entry
 
 Entry_editor=Entry_editor
 
+Entry_has_no_citekey=Entry_has_no_citekey
+
 Entry_in_current_database=Entry_in_current_database
 
 Entry_in_import=Entry_in_import
@@ -571,16 +635,29 @@ Entry_type_names_are_not_allowed_to_contain_white_space_or_the_following_charact
 Entry_types=Entry_types
 
 Error=Error
+Error\:_=Error:_
+Error_converting_Bibtex_to_XMP:_%0=Error_converting_Bibtex_to_XMP:_%0
+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
@@ -604,11 +681,15 @@ 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
@@ -622,9 +703,7 @@ Fetch=Fetch
 Fetch_Articles_Citing_your_Database=Fetch_Articles_Citing_your_Database
 
 Fetch_CiteSeer=Fetch_CiteSeer
-Fetch_CiteSeer_by_ID=Fetch_CiteSeer_by_ID
 
-Fetch_Medline=Fetch_Medline
 
 Fetch_Medline_by_ID=Fetch_Medline_by_ID
 
@@ -648,6 +727,7 @@ field=field
 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
@@ -660,14 +740,23 @@ 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=File_directory
+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
 
@@ -677,7 +766,10 @@ 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.
@@ -708,6 +800,7 @@ 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
 
@@ -752,6 +845,8 @@ Have_you_chosen_the_correct_package_path?=Have_you_chosen_the_correct_package_pa
 
 Help=Help
 
+Help_contents=Help_contents
+
 Help_on_groups=Help_on_groups
 
 Help_on_key_patterns=Help_on_key_patterns
@@ -765,6 +860,8 @@ 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
 
@@ -773,6 +870,7 @@ Hint%c_To_search_specific_fields_only,_enter_for_example%c<p><tt>author%esmith_a
 HTML=HTML
 HTML_table=HTML_table
 HTML_table_(with_Abstract_&_BibTeX)=HTML_table_(with_Abstract_&_BibTeX)
+Icon=Icon
 
 Ignore=Ignore
 
@@ -883,6 +981,7 @@ 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
 
@@ -922,6 +1021,8 @@ 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
 
@@ -931,14 +1032,23 @@ 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_%0_directory=Main_%0_directory
+Main_file_directory=Main_file_directory
 
 Main_layout_file=Main_layout_file
 
@@ -951,6 +1061,7 @@ 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
 
@@ -965,6 +1076,7 @@ Mark_new_entries_with_owner_name=Mark_new_entries_with_owner_name
 Marked_selected=Marked_selected
 
 Medline_entries_fetched=Medline_entries_fetched
+Memory_Stick_Mode=Memory_Stick_Mode
 
 Menu_and_label_font_size=Menu_and_label_font_size
 
@@ -973,8 +1085,7 @@ Merged_external_changes=Merged_external_changes
 Messages=Messages
 
 Messages_and_Hints=Hints_and_Warnings
-
-Miscellaneous=Miscellaneous
+MIS_Quarterly=MIS_Quarterly
 
 Modification_of_field=Modification_of_field
 
@@ -995,6 +1106,9 @@ 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_file_to_file_directory=Move_file_to_file_directory
+Move_files_to_file_directory.=Move_files_to_file_directory
 
 move_group=move_group
 
@@ -1005,12 +1119,17 @@ 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
 
+Native_file_dialog=Native_file_dialog
+
 nested_aux_files=nested_aux_files
 
 New=New
@@ -1029,6 +1148,7 @@ 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
 
@@ -1042,14 +1162,16 @@ No_actual_changes_found.=No_actual_changes_found.
 
 no_base-bibtex-file_specified=no_base-bibtex-file_specified!
 
-No_custom_imports_registered_yet.=No_custom_imports_registered_yet.
-
 no_database_generated=no_database_generated
+No_databases_saved.=No_databases_saved.
 
 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.
@@ -1058,7 +1180,7 @@ No_entries_selected=No_entries_selected
 No_entries_selected.=No_entries_selected.
 
 No_exceptions_have_ocurred.=No_exceptions_have_ocurred.
-No_file_associated=No_file_associated
+No_files_found.=No_files_found.
 
 No_GUI._Only_process_command_line_options.=No_GUI._Only_process_command_line_options.
 
@@ -1067,14 +1189,17 @@ 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_Medline_entries_found.=No_Medline_entries_found.
+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
 
@@ -1098,8 +1223,10 @@ 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
 
@@ -1127,7 +1254,9 @@ 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
 
@@ -1147,36 +1276,45 @@ 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_HTML_viewer=Path_to_HTML_viewer
 
+Path_to_LatexEditor_(LEd.exe)=Path_to_LatexEditor_(LEd.exe)
+
 Path_to_LyX_pipe=Path_to_LyX_pipe
 
 Path_to_PDF_viewer=Path_to_PDF_viewer
 
 Path_to_PS_viewer=Path_to_PS_viewer
+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
 
-Pick_titles=Pick_titles
-
 Plain_text_import=Plain_text_import
 
 Please_check_your_network_connection_to_this_machine.=Please_check_your_network_connection_to_this_machine.
@@ -1190,6 +1328,7 @@ Please_enter_a_semicolon_or_comma_separated_list_of_Medline_IDs_(numbers).=Pleas
 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_refer_to_the_JabRef_help_manual_on_using_the_CiteSeer_tools=Please_refer_to_the_JabRef_help_manual_on_using_the_CiteSeer_tools
 
 Please_refer_to_the_JabRef_help_manual_on_using_the_CiteSeer_tools.=Please_refer_to_the_JabRef_help_manual_on_using_the_CiteSeer_tools.
 
@@ -1198,6 +1337,7 @@ 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_
 
 Please_wait_until_it_has_finished.=Please_wait_until_it_has_finished.
 
@@ -1216,8 +1356,11 @@ 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
@@ -1226,12 +1369,15 @@ Push_entries_to_external_application_(%0)=Push_entries_to_external_application_(
 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
 
@@ -1283,6 +1429,7 @@ 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
 
@@ -1302,6 +1449,8 @@ 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
@@ -1315,12 +1464,14 @@ Removed_group_"%0".=Removed_group_"%0".
 Removed_group_"%0"_and_its_subgroups.=Removed_group_"%0"_and_its_subgroups.
 
 Removed_string=Removed_string
+Rename_to_match_citekey=Rename_to_match_citekey
 
 Renamed_string=Renamed_string
 
 Replace=Replace
 
 Replace_(regular_expression)=Replace_(regular_expression)
+Replace_comma_by_and_where_appropriate=Replace_comma_by_and_where_appropriate
 
 Replace_string=Replace_string
 
@@ -1331,6 +1482,10 @@ 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
 
@@ -1343,12 +1498,17 @@ 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
 
@@ -1361,6 +1521,7 @@ Save_failed_while_committing_changes=Save_failed_while_committing_changes
 Save_in_default_table_sort_order=Save_in_default_table_sort_order
 
 Save_ordered_by_author/editor/year=Save_ordered_by_author/editor/year
+Save_selected_as_...=Save_selected_as_...
 
 Saved_database=Saved_database
 
@@ -1369,6 +1530,7 @@ Saved_selected_to=Saved_selected_to
 Saved_session=Saved_session
 
 Saving=Saving
+Saving_all_databases...=Saving_all_databases...
 
 Saving_database=Saving_database
 
@@ -1389,6 +1551,7 @@ Search_for=Search_for
 Search_general_fields=Search_general_fields
 
 Search_IEEEXplore=Search_IEEEXplore
+Search_IEEExplore=Search_IEEExplore
 
 Search_optional_fields=Search_optional_fields
 
@@ -1404,6 +1567,8 @@ 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
@@ -1426,6 +1591,7 @@ 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
 
@@ -1435,11 +1601,14 @@ Select_the_tree_nodes_to_view_and_accept_or_reject_changes=Select_the_tree_nodes
 Selected_entries=Selected_entries
 
 Selector_enabled_fields=Selector_enabled_fields
+Server_Hostname_\:=Server_Hostname:
+Server_Type_\:=Server_Type:
 Set/clear_fields=Set/clear_fields
 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
 
@@ -1471,6 +1640,8 @@ 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
 
@@ -1506,6 +1677,8 @@ Sort_alphabetically=Sort_alphabetically
 
 Sort_Automatically=Sort_automatically
 
+Sort_order=Sort_order
+
 sort_subgroups=sort_subgroups
 
 Sorted_all_subgroups_recursively.=Sorted_all_subgroups_recursively.
@@ -1516,6 +1689,7 @@ 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
 
@@ -1551,6 +1725,7 @@ 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...
 
@@ -1563,6 +1738,7 @@ 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
 
@@ -1571,11 +1747,17 @@ 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_application_'%0'_associated_with_the_file_type_'%1'_could_not_be_called.=The_application_'%0'_associated_with_the_file_type_'%1'_could_not_be_called.
 
 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_CiteSeer_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!
@@ -1589,6 +1771,7 @@ The_label_of_the_string_can_not_contain_spaces.=The_label_of_the_string_can_not_
 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
 
@@ -1607,11 +1790,16 @@ There_are_possible_duplicates_(marked_with_a_'D'_icon)_that_haven't_been_resolve
 There_is_no_entry_type=There_is_no_entry_type
 
 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
@@ -1625,34 +1813,44 @@ 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_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.
 
 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=Type
 
 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_parse_clipboard_text_as_Bibtex_entries.=Unable_to_parse_clipboard_text_as_Bibtex_entries.
-
+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_parse_the_following_URL=Unable_to_parse_the_following_URL
 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
 
@@ -1689,11 +1887,21 @@ Update_to_current_column_widths=Update_to_current_column_widths
 Updated_group_selection=Updated_group_selection
 
 Updating_entries...=Updating_entries...
+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
@@ -1704,6 +1912,8 @@ 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)
+User_does_not_have_sufficient_privileges.\n=User_does_not_have_sufficient_privileges.\n
+Username_\:=Username:
 
 Uses_default_application=Uses_default_application
 
@@ -1714,12 +1924,16 @@ 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
 
@@ -1730,6 +1944,7 @@ 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
 
@@ -1737,20 +1952,30 @@ 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_have_changed_the_language_setting._You_must_restart_JabRef_for_this_to_come_into_effect.=You_have_changed_the_language_setting._You_must_restart_JabRef_for_this_to_come_into_effect.
+You_have_changed_the_look_and_feel_setting._You_must_restart_JabRef_for_this_to_come_into_effect.=You_have_changed_the_look_and_feel_setting._You_must_restart_JabRef_for_this_to_come_into_effect.
 
 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_enter_an_integer_value_in_the_text_field_for=You_must_enter_an_integer_value_in_the_text_field_for
@@ -1765,205 +1990,50 @@ You_must_set_both_BibTeX_key_and_%0_directory=You_must_set_both_BibTeX_key_and_%
 
 Your_new_key_bindings_have_been_stored.=Your_new_key_bindings_have_been_stored.
 
-Save_all_open_databases=Save_all_open_databases
-
-Automatically_remove_exact_duplicates=Automatically_remove_exact_duplicates
-Enable_word/name_autocompletion=Enable_word/name_autocompletion
-Editor_options=Editor_options
-Use_autocompletion_for_the_following_fields=Use_autocompletion_for_the_following_fields
-Saving_all_databases...=Saving_all_databases...
-Save_all_finished.=Save_all_finished.
-Saved_%0_databases.=Saved_%0_databases.
-No_databases_saved.=No_databases_saved.
-Connection_to_IEEEXplore_failed=Connection_to_IEEEXplore_failed
-
-Link=Link
-File_type=File_type
-Edit_file_link=Edit_file_link
-
-Path_to_LatexEditor_(LEd.exe)=Path_to_LatexEditor_(LEd.exe)
-Move_external_links_to_'file'_field=Move_external_links_to_'file'_field
-Push_selection_to_Vim=Push_selection_to_Vim
-Pushed_citations_to_Vim=Pushed_citations_to_Vim
-
-Waiting_for_ArXiv...=Waiting_for_ArXiv...
-Processing_=Processing_
-Error_while_fetching_from_OIA2=Error_while_fetching_from_OIA2
-
-
-No_entries_found_for_the_search_string_'%0'=No_entries_found_for_the_search_string_'%0'
-
-The_chosen_encoding_'%0'_could_not_encode_the_following_characters\:_=The_chosen_encoding_'%0'_could_not_encode_the_following_characters:_
-Operation_not_supported=Operation_not_supported
-Drag_and_Drop_Error=Drag_and_Drop_Error
-File_download=File_download
-Error_while_downloading_file\:=Error_while_downloading_file:
-Only_one_item_is_supported=Only_one_item_is_supported
-Do_not_write_the_following_fields_to_XMP_Metadata\:=Do_not_write_the_following_fields_to_XMP_Metadata:
-<HTML>Could_not_find_file_'%0'<BR>linked_from_entry_'%1'</HTML>=<HTML>Could_not_find_file_'%0'<BR>linked_from_entry_'%1'</HTML>
-Drop_%0=Drop_%0
-Link_to_file_%0=Link_to_file_%0
-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?
-XMP_metadata_found_in_PDF\:_%0=XMP_metadata_found_in_PDF:_%0
-Link_to_PDF_%0=Link_to_PDF_%0
-Writing_XMP_to_'%0'...=Writing_XMP_to_'%0'...
-Wrote_XMP_to_'%0'.=Wrote_XMP_to_'%0'.
-Error_writing_XMP_to_file\:_%0=Error_writing_XMP_to_file:_%0
-Error_converting_Bibtex_to_XMP:_%0=Error_converting_Bibtex_to_XMP:_%0
-Error_while_converting_BibtexEntry_to_XMP_%0=Error_while_converting_BibtexEntry_to_XMP_%0
-Error_converting_XMP_to_'%0'...=Error_converting_XMP_to_'%0'...
-Could_not_find_directory_for_%0-files\:_%1=Could_not_find_directory_for_%0-files:_%1
-This_operation_requires_at_least_one_entry.=This_operation_requires_at_least_one_entry.
-Write_XMP-metadata=Write_XMP-metadata
-Write_XMP-metadata_for_all_PDFs_in_current_database?=Write_XMP-metadata_for_all_PDFs_in_current_database?
-No_XMP_metadata_found_in_=No_XMP_metadata_found_in_
-Please_refer_to_the_JabRef_help_manual_on_using_the_CiteSeer_tools=Please_refer_to_the_JabRef_help_manual_on_using_the_CiteSeer_tools
-Search_IEEExplore=Search_IEEExplore
-An_Exception_ocurred_while_accessing_'%0'=An_Exception_ocurred_while_accessing_'%0'
-An_SAXException_ocurred_while_parsing_'%0':=An_SAXException_ocurred_while_parsing_'%0':
-An_Error_occurred_while_fetching_from_OAI2_source_(%0)\:=An_Error_occurred_while_fetching_from_OAI2_source_(%0):
-Abbreviated_%0_journal_names.=Abbreviated_%0_journal_names.
-Unabbreviated_%0_journal_names.=Unabbreviated_%0_journal_names.
-
-Help_contents=Help_contents
-Edit_entry=Edit_entry
-Save_database_as_...=Save_database_as_...
-Save_selected_as_...=Save_selected_as_...
-Toggle_search_panel=Toggle_search_panel
-Append_contents_from_a_BibTeX_database_into_the_currently_viewed_database=Append_contents_from_a_BibTeX_database_into_the_currently_viewed_database
-Edit_strings=Edit_strings
-Toggle_groups_interface=Toggle_groups_interface
-Toggle_entry_preview=Toggle_entry_preview
-Highlight_groups_matching_all_selected_entries=Highlight_groups_matching_all_selected_entries
-Highlight_groups_matching_any_selected_entry=Highlight_groups_matching_any_selected_entry
-Autogenerate_BibTeX_keys=Autogenerate_BibTeX_keys
-Will_write_XMP-metadata_to_the_PDFs_linked_from_selected_entries.=Will_write_XMP-metadata_to_the_PDFs_linked_from_selected_entries.
-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)
-Unabbreviate_journal_names_of_the_selected_entries=Unabbreviate_journal_names_of_the_selected_entries
-Do_not_show_splash_window_at_startup=Do_not_show_splash_window_at_startup
-
-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
-Leave_files_in_their_current_directory.=Leave_files_in_their_current_directory.
-Leave_file_in_its_current_directory.=Leave_file_in_its_current_directory.
-Extension=Extension
-Application=Application
-Icon=Icon
-
-Path_to_%0_not_defined=Path_to_%0_not_defined
-Path_to_Vim=Path_to_Vim
-Vim_Server_Name=Vim_Server_Name
-MS_Office_2007=MS_Office_2007
-Manage_external_file_types=Manage_external_file_types
-All_custom_file_types_will_be_lost._Proceed?=All_custom_file_types_will_be_lost._Proceed?
-Reset_file_type_definitons=Reset_file_type_definitions
-Edit_file_type=Edit_file_type
-Could_not_run_the_'vim'_program.=Could_not_run_the_'vim'_program.
-
-Show_file_column=Show_file_column
-This_database_was_written_using_an_older_version_of_JabRef.=This_database_was_written_using_an_older_version_of_JabRef.
-
-File_'%0'_is_already_open.=File_'%0'_is_already_open.
-File_has_been_updated_externally._What_do_you_want_to_do?=File_has_been_updated_externally._What_do_you_want_to_do?
-
-Entry_has_no_citekey=Entry_has_no_citekey
-Rename_to_match_citekey=Rename_to_match_citekey
-Change_file_type=Change_file_type
-Define_'%0'=Define_'%0'
-
-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?
-
-Unable_to_open_file.=Unable_to_open_file.
-Undefined_file_type=Undefined_file_type
-Error\:_=
-
-Do_you_want_JabRef_to_do_the_following_operations?=Do_you_want_JabRef_to_do_the_following_operations?
-Upgrade_file=Upgrade_file
 
-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?
-Upgrade_external_links=Upgrade_external_links
-Upgraded_links.=Upgraded_links.
-
-This_entry_has_no_BibTeX_key._Generate_key_now?=This_entry_has_no_BibTeX_key._Generate_key_now?
-Target_file_cannot_be_a_directory.=Target_file_cannot_be_a_directory.
-
-Finished_autosetting_external_links.=Finished_autosetting_external_links.
-No_files_found.=No_files_found.
-
-External_file_links=External_file_links
-Main_%0_directory=Main_%0_directory
-Synchronize_file_links=Synchronize_file_links
-Upgrade_external_PDF/PS_links_to_use_the_'%0'_field.=Upgrade_external_PDF/PS_links_to_use_the_'%0'_field.
-Broken_link=Broken_link
-Change_table_column_and_General_fields_settings_to_use_the_new_feature=Change_table_column_and_General_fields_settings_to_use_the_new_feature
-Upgrade_old_external_file_links_to_use_the_new_feature=Upgrade_old_external_file_links_to_use_the_new_feature
-Set_main_external_file_directory=Set_main_external_file_directory
-Do_not_show_these_options_in_the_future=Do_not_show_these_options_in_the_future
-File_directory=File_directory
-Autosetting_links=Autosetting_links
-Autoset_external_links=Autoset_external_links
-Link_local_file=Link_local_file
-
-Searching_for_files=Searching_for_files
-Could_not_open_link=Could_not_open_link
-The_application_'%0'_associated_with_the_file_type_'%1'_could_not_be_called.=The_application_'%0'_associated_with_the_file_type_'%1'_could_not_be_called.
-
-Native_file_dialog=Native_file_dialog
-Beta_version=Beta_version
-Do_not_write_the_following_fields_to_XMP_Metadata:=Do_not_write_the_following_fields_to_XMP_Metadata:
-MIS_Quarterly=MIS_Quarterly
-Use_default_viewer=Use_default_viewer
-Select_icon=Select_icon
-
-Copy_to_clipboard=Copy_to_clipboard
-Paste_from_clipboard=Paste_from_clipboard
-lower=lower
-UPPER=UPPER
-Upper_Each_First=Upper_Each_First
-Upper_first=Upper_first
-Replace_comma_by_and_where_appropriate=Replace_comma_by_and_where_appropriate
-
-%0_export_successful=%0_export_successful
-
-
-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.
-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.
-You_have_changed_the_look_and_feel_setting._You_must_restart_JabRef_for_this_to_come_into_effect.=You_have_changed_the_look_and_feel_setting._You_must_restart_JabRef_for_this_to_come_into_effect.
-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
-Could_not_save_file._Character_encoding_'%0'_is_not_supported.=Could_not_save_file._Character_encoding_'%0'_is_not_supported.
-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.
-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.
-All_entries_of_this_type_will_be_declared_typeless._Continue?=All_entries_of_this_type_will_be_declared_typeless._Continue?
-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
-%0_entries_found._To_reduce_server_load,_abstracts_will_only_be_downloaded_for_searches_returning_%1_hits_or_less.=%0_entries_found._To_reduce_server_load,_abstracts_will_only_be_downloaded_for_searches_returning_%1_hits_or_less.
-A_string_with_that_label_already_exists=A_string_with_that_label_already_exists
-
-
-Overwrite=Overwrite
-
-File_directory_is_not_set_or_does_not_exist!=File_directory_is_not_set_or_does_not_exist!
-File_directory_is_'%0':=File_directory_is_'%0':
-Copy_files_to_file_directory.=Copy_files_to_file_directory.
-Move_files_to_file_directory.=Move_files_to_file_directory
-Copy_file_to_file_directory.=Copy_file_to_file_directory.
-Move_file_to_file_directory=Move_file_to_file_directory
-New_file_link_(INSERT)=New_file_link_(INSERT)
-Remove_file_link_(DELETE)=Remove_file_link_(DELETE)
-No_PDF_linked=No_PDF_linked
-PDF_does_not_exist=PDF_does_not_exist
-
-Wrote_XMP-metadata=Wrote_XMP-metadata
-Error_writing_to_%0_file(s).=Error_writing_to_%0_file(s).
-Finished_writing_XMP-metadata._Wrote_to_%0_file(s).=Finished_writing_XMP-metadata._Wrote_to_%0_file(s).
-
-You_have_entered_an_invalid_search_'%0'.=You_have_entered_an_invalid_search_'%0'.
-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?
-
-Remove_link=Remove_link
-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
-Error_converting_Bibtex_to_XMP\:_%0=Error_converting_Bibtex_to_XMP:_%0
-
-Sort_order=Sort_order
+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
+Fetch_Citeseer=Fetch_Citeseer
+Error_fetching_from_Citeseer\:\\n=Error_fetching_from_Citeseer\:\\n
+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_must_restart_JabRef_for_this_to_come_into_effect.=You_have_changed_the_menu_and_label_font_size._You_must_restart_JabRef_for_this_to_come_into_effect.
+
+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=
+
+BibTeX_key_generator=BibTeX_key_generator
+Unable_to_open_link.=Unable_to_open_link.
diff --git a/src/resource/JabRef_en.properties b/src/resource/JabRef_en.properties.bak
similarity index 93%
copy from src/resource/JabRef_en.properties
copy to src/resource/JabRef_en.properties.bak
index cf1e1ba..195699e 100644
--- a/src/resource/JabRef_en.properties
+++ b/src/resource/JabRef_en.properties.bak
@@ -13,6 +13,9 @@
 %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_entries_found._To_reduce_server_load,_abstracts_will_only_be_downloaded_for_searches_returning_%1_hits_or_less.=%0_entries_found._To_reduce_server_load,_abstracts_will_only_be_downloaded_for_searches_returning_%1_hits_or_less.
+
+%0_export_successful=%0_export_successful
 
 %0_field_set=%0_field_set
 
@@ -23,6 +26,7 @@
 %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>
 
 <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>
 
@@ -37,8 +41,12 @@ _on_entry_number_=_on_entry_number_
 A_CiteSeer_fetch_operation_is_currently_in_progress.=A_CiteSeer_fetch_operation_is_currently_in_progress.
 
 A_CiteSeer_import_operation_is_currently_in_progress.=A_CiteSeer_import_operation_is_currently_in_progress.
+A_string_with_that_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
 
@@ -85,18 +93,24 @@ 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_ocurred_while_accessing_'%0'
+An_SAXException_ocurred_while_parsing_'%0':=An_SAXException_ocurred_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.
 
@@ -105,10 +119,12 @@ any_field_that_matches_the_regular_expression_<b>%0</b>=any_field_that_matches_t
 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
 
@@ -123,22 +139,28 @@ Assign_the_original_group's_entries_to_this_group?=Assign_the_original_group's_e
 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
 
@@ -148,6 +170,8 @@ 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
@@ -157,6 +181,8 @@ 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
 
@@ -173,6 +199,7 @@ 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
 
@@ -187,6 +214,7 @@ BibTeX_source=BibTeX_source
 BibTeXML=BibTeXML
 
 Binding=Binding
+Broken_link=Broken_link
 
 Browse=Browse
 
@@ -197,6 +225,7 @@ 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_connect_to_SQL_server_at_the_specified_host.=Cannot_connect_to_SQL_server_at_the_specified_host.
 
 Cannot_merge_this_change=Cannot_merge_this_change
 
@@ -219,6 +248,7 @@ 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
 
@@ -229,6 +259,7 @@ 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
 
@@ -251,6 +282,7 @@ 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
 
 Cite_command_(for_Emacs/WinEdt)=Cite_command_(for_Emacs/WinEdt)
 
@@ -258,8 +290,6 @@ CiteSeer_Error=CiteSeer_Error
 
 CiteSeer_Fetch_Error=CiteSeer_Fetch_Error
 
-CiteSeer_import_entries=CiteSeer_import_entries
-
 CiteSeer_Import_Error=CiteSeer_Import_Error
 
 CiteSeer_Import_Fields=CiteSeer_Import_Fields
@@ -304,6 +334,10 @@ Complete_record=Complete_record
 Completed_Import_Fields_from_CiteSeer.=Completed_Import_Fields_from_CiteSeer.
 
 Completed_import_from_CiteSeer.=Completed_import_from_CiteSeer.
+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
 
@@ -320,6 +354,10 @@ 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
 
@@ -328,6 +366,8 @@ Could_not_connect_to_a_running_gnuserv_process._Make_sure_that_Emacs_or_XEmacs_i
 Could_not_connect_to_host=Could_not_connect_to_host
 
 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_determine_exception_message.=Could_not_determine_exception_message.
 
 Could_not_export_entry_types=Could_not_export_entry_types
 
@@ -336,6 +376,7 @@ 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
@@ -347,14 +388,18 @@ Could_not_import_preferences=Could_not_import_preferences
 Could_not_instantiate_%0_%1=Could_not_instantiate_%0_%1
 
 Could_not_instantiate_%0_%1._Have_you_chosen_the_correct_package_path?=Could_not_instantiate_%0_%1._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_resolve_import_format=Could_not_resolve_import_format
 
 Could_not_run_the_'gnuclient'_program._Make_sure_you_have_the_gnuserv/gnuclient_programs_installed.=Could_not_run_the_'gnuclient'_program._Make_sure_you_have_the_gnuserv/gnuclient_programs_installed.
+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.
 
 Couldn't_find_an_entry_associated_with_this_URL=Couldn't_find_an_entry_associated_with_this_URL
 
@@ -389,6 +434,7 @@ cut_entries=cut_entries
 cut_entry=cut_entry
 
 Cut_pr=Cut
+Database_\:=Database:
 
 Database_encoding=Database_encoding
 
@@ -409,6 +455,7 @@ Default_look_and_feel=Default_look_and_feel
 Default_pattern=Default_pattern
 
 Default_sort_criteria=Default_sort_criteria
+Define_'%0'=Define_'%0'
 
 defined.=defined.
 
@@ -433,6 +480,7 @@ Delete_strings=Delete_strings
 Deleted=Deleted
 
 Delimit_fields_with_semicolon,_ex.=Delimit_fields_with_semicolon,_ex.
+Derby=Derby
 
 Descending=Descending
 
@@ -471,8 +519,14 @@ 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_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
 
@@ -487,6 +541,8 @@ 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
 
@@ -517,12 +573,17 @@ 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
 
@@ -533,6 +594,7 @@ Empty_BibTeX_key._Grouping_may_not_work_for_this_entry.=Empty_BibTeX_key._Groupi
 empty_database=empty_database
 
 Enable_source_editing=Enable_source_editing
+Enable_word/name_autocompletion=Enable_word/name_autocompletion
 
 Endnote=Endnote
 
@@ -554,6 +616,8 @@ entry=entry
 
 Entry_editor=Entry_editor
 
+Entry_has_no_citekey=Entry_has_no_citekey
+
 Entry_in_current_database=Entry_in_current_database
 
 Entry_in_import=Entry_in_import
@@ -571,16 +635,29 @@ Entry_type_names_are_not_allowed_to_contain_white_space_or_the_following_charact
 Entry_types=Entry_types
 
 Error=Error
+Error\:_=Error:_
+Error_converting_Bibtex_to_XMP:_%0=Error_converting_Bibtex_to_XMP:_%0
+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
@@ -604,11 +681,15 @@ 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
@@ -622,9 +703,7 @@ Fetch=Fetch
 Fetch_Articles_Citing_your_Database=Fetch_Articles_Citing_your_Database
 
 Fetch_CiteSeer=Fetch_CiteSeer
-Fetch_CiteSeer_by_ID=Fetch_CiteSeer_by_ID
 
-Fetch_Medline=Fetch_Medline
 
 Fetch_Medline_by_ID=Fetch_Medline_by_ID
 
@@ -648,6 +727,7 @@ field=field
 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
@@ -660,14 +740,23 @@ 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=File_directory
+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
 
@@ -677,7 +766,10 @@ 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.
@@ -708,6 +800,7 @@ 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
 
@@ -752,6 +845,8 @@ Have_you_chosen_the_correct_package_path?=Have_you_chosen_the_correct_package_pa
 
 Help=Help
 
+Help_contents=Help_contents
+
 Help_on_groups=Help_on_groups
 
 Help_on_key_patterns=Help_on_key_patterns
@@ -765,6 +860,8 @@ 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
 
@@ -773,6 +870,7 @@ Hint%c_To_search_specific_fields_only,_enter_for_example%c<p><tt>author%esmith_a
 HTML=HTML
 HTML_table=HTML_table
 HTML_table_(with_Abstract_&_BibTeX)=HTML_table_(with_Abstract_&_BibTeX)
+Icon=Icon
 
 Ignore=Ignore
 
@@ -883,6 +981,7 @@ 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
 
@@ -908,6 +1007,8 @@ Key_bindings_changed=Key_bindings_changed
 
 Key_generator_settings=Key_generator_settings
 
+BibTeX_key_generator=BibTeX_key_generator
+
 Key_pattern=Key_pattern
 
 keys_in_database=keys_in_database
@@ -922,6 +1023,8 @@ 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
 
@@ -931,14 +1034,23 @@ 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_%0_directory=Main_%0_directory
+Main_file_directory=Main_file_directory
 
 Main_layout_file=Main_layout_file
 
@@ -951,6 +1063,7 @@ 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
 
@@ -965,6 +1078,7 @@ Mark_new_entries_with_owner_name=Mark_new_entries_with_owner_name
 Marked_selected=Marked_selected
 
 Medline_entries_fetched=Medline_entries_fetched
+Memory_Stick_Mode=Memory_Stick_Mode
 
 Menu_and_label_font_size=Menu_and_label_font_size
 
@@ -973,8 +1087,7 @@ Merged_external_changes=Merged_external_changes
 Messages=Messages
 
 Messages_and_Hints=Hints_and_Warnings
-
-Miscellaneous=Miscellaneous
+MIS_Quarterly=MIS_Quarterly
 
 Modification_of_field=Modification_of_field
 
@@ -995,6 +1108,9 @@ 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_file_to_file_directory=Move_file_to_file_directory
+Move_files_to_file_directory.=Move_files_to_file_directory
 
 move_group=move_group
 
@@ -1005,12 +1121,17 @@ 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
 
+Native_file_dialog=Native_file_dialog
+
 nested_aux_files=nested_aux_files
 
 New=New
@@ -1029,6 +1150,7 @@ 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
 
@@ -1042,14 +1164,16 @@ No_actual_changes_found.=No_actual_changes_found.
 
 no_base-bibtex-file_specified=no_base-bibtex-file_specified!
 
-No_custom_imports_registered_yet.=No_custom_imports_registered_yet.
-
 no_database_generated=no_database_generated
+No_databases_saved.=No_databases_saved.
 
 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.
@@ -1058,7 +1182,7 @@ No_entries_selected=No_entries_selected
 No_entries_selected.=No_entries_selected.
 
 No_exceptions_have_ocurred.=No_exceptions_have_ocurred.
-No_file_associated=No_file_associated
+No_files_found.=No_files_found.
 
 No_GUI._Only_process_command_line_options.=No_GUI._Only_process_command_line_options.
 
@@ -1067,14 +1191,17 @@ 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_Medline_entries_found.=No_Medline_entries_found.
+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
 
@@ -1098,8 +1225,10 @@ 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
 
@@ -1127,7 +1256,9 @@ 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
 
@@ -1147,36 +1278,45 @@ 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_HTML_viewer=Path_to_HTML_viewer
 
+Path_to_LatexEditor_(LEd.exe)=Path_to_LatexEditor_(LEd.exe)
+
 Path_to_LyX_pipe=Path_to_LyX_pipe
 
 Path_to_PDF_viewer=Path_to_PDF_viewer
 
 Path_to_PS_viewer=Path_to_PS_viewer
+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
 
-Pick_titles=Pick_titles
-
 Plain_text_import=Plain_text_import
 
 Please_check_your_network_connection_to_this_machine.=Please_check_your_network_connection_to_this_machine.
@@ -1190,6 +1330,7 @@ Please_enter_a_semicolon_or_comma_separated_list_of_Medline_IDs_(numbers).=Pleas
 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_refer_to_the_JabRef_help_manual_on_using_the_CiteSeer_tools=Please_refer_to_the_JabRef_help_manual_on_using_the_CiteSeer_tools
 
 Please_refer_to_the_JabRef_help_manual_on_using_the_CiteSeer_tools.=Please_refer_to_the_JabRef_help_manual_on_using_the_CiteSeer_tools.
 
@@ -1198,6 +1339,7 @@ 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_
 
 Please_wait_until_it_has_finished.=Please_wait_until_it_has_finished.
 
@@ -1216,8 +1358,11 @@ 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
@@ -1226,12 +1371,15 @@ Push_entries_to_external_application_(%0)=Push_entries_to_external_application_(
 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
 
@@ -1283,6 +1431,7 @@ 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
 
@@ -1302,6 +1451,8 @@ 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
@@ -1315,12 +1466,14 @@ Removed_group_"%0".=Removed_group_"%0".
 Removed_group_"%0"_and_its_subgroups.=Removed_group_"%0"_and_its_subgroups.
 
 Removed_string=Removed_string
+Rename_to_match_citekey=Rename_to_match_citekey
 
 Renamed_string=Renamed_string
 
 Replace=Replace
 
 Replace_(regular_expression)=Replace_(regular_expression)
+Replace_comma_by_and_where_appropriate=Replace_comma_by_and_where_appropriate
 
 Replace_string=Replace_string
 
@@ -1331,6 +1484,10 @@ 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
 
@@ -1343,12 +1500,17 @@ 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
 
@@ -1361,6 +1523,7 @@ Save_failed_while_committing_changes=Save_failed_while_committing_changes
 Save_in_default_table_sort_order=Save_in_default_table_sort_order
 
 Save_ordered_by_author/editor/year=Save_ordered_by_author/editor/year
+Save_selected_as_...=Save_selected_as_...
 
 Saved_database=Saved_database
 
@@ -1369,6 +1532,7 @@ Saved_selected_to=Saved_selected_to
 Saved_session=Saved_session
 
 Saving=Saving
+Saving_all_databases...=Saving_all_databases...
 
 Saving_database=Saving_database
 
@@ -1389,6 +1553,7 @@ Search_for=Search_for
 Search_general_fields=Search_general_fields
 
 Search_IEEEXplore=Search_IEEEXplore
+Search_IEEExplore=Search_IEEExplore
 
 Search_optional_fields=Search_optional_fields
 
@@ -1404,6 +1569,8 @@ 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
@@ -1426,6 +1593,7 @@ 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
 
@@ -1435,11 +1603,14 @@ Select_the_tree_nodes_to_view_and_accept_or_reject_changes=Select_the_tree_nodes
 Selected_entries=Selected_entries
 
 Selector_enabled_fields=Selector_enabled_fields
+Server_Hostname_\:=Server_Hostname:
+Server_Type_\:=Server_Type:
 Set/clear_fields=Set/clear_fields
 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
 
@@ -1471,6 +1642,8 @@ 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
 
@@ -1506,6 +1679,8 @@ Sort_alphabetically=Sort_alphabetically
 
 Sort_Automatically=Sort_automatically
 
+Sort_order=Sort_order
+
 sort_subgroups=sort_subgroups
 
 Sorted_all_subgroups_recursively.=Sorted_all_subgroups_recursively.
@@ -1516,6 +1691,7 @@ 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
 
@@ -1551,6 +1727,7 @@ 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...
 
@@ -1563,6 +1740,7 @@ 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
 
@@ -1571,11 +1749,17 @@ 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_application_'%0'_associated_with_the_file_type_'%1'_could_not_be_called.=The_application_'%0'_associated_with_the_file_type_'%1'_could_not_be_called.
 
 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_CiteSeer_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!
@@ -1589,6 +1773,7 @@ The_label_of_the_string_can_not_contain_spaces.=The_label_of_the_string_can_not_
 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
 
@@ -1607,11 +1792,16 @@ There_are_possible_duplicates_(marked_with_a_'D'_icon)_that_haven't_been_resolve
 There_is_no_entry_type=There_is_no_entry_type
 
 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
@@ -1625,34 +1815,45 @@ 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_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.
 
 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=Type
 
 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_parse_clipboard_text_as_Bibtex_entries.=Unable_to_parse_clipboard_text_as_Bibtex_entries.
-
+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_open_link.=Unable_to_open_link.
 Unable_to_parse_the_following_URL=Unable_to_parse_the_following_URL
 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
 
@@ -1689,11 +1890,21 @@ Update_to_current_column_widths=Update_to_current_column_widths
 Updated_group_selection=Updated_group_selection
 
 Updating_entries...=Updating_entries...
+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
@@ -1704,6 +1915,8 @@ 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)
+User_does_not_have_sufficient_privileges.\n=User_does_not_have_sufficient_privileges.\n
+Username_\:=Username:
 
 Uses_default_application=Uses_default_application
 
@@ -1714,12 +1927,16 @@ 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
 
@@ -1730,6 +1947,7 @@ 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
 
@@ -1737,20 +1955,30 @@ 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_have_changed_the_language_setting._You_must_restart_JabRef_for_this_to_come_into_effect.=You_have_changed_the_language_setting._You_must_restart_JabRef_for_this_to_come_into_effect.
+You_have_changed_the_look_and_feel_setting._You_must_restart_JabRef_for_this_to_come_into_effect.=You_have_changed_the_look_and_feel_setting._You_must_restart_JabRef_for_this_to_come_into_effect.
 
 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_enter_an_integer_value_in_the_text_field_for=You_must_enter_an_integer_value_in_the_text_field_for
@@ -1765,205 +1993,47 @@ You_must_set_both_BibTeX_key_and_%0_directory=You_must_set_both_BibTeX_key_and_%
 
 Your_new_key_bindings_have_been_stored.=Your_new_key_bindings_have_been_stored.
 
-Save_all_open_databases=Save_all_open_databases
-
-Automatically_remove_exact_duplicates=Automatically_remove_exact_duplicates
-Enable_word/name_autocompletion=Enable_word/name_autocompletion
-Editor_options=Editor_options
-Use_autocompletion_for_the_following_fields=Use_autocompletion_for_the_following_fields
-Saving_all_databases...=Saving_all_databases...
-Save_all_finished.=Save_all_finished.
-Saved_%0_databases.=Saved_%0_databases.
-No_databases_saved.=No_databases_saved.
-Connection_to_IEEEXplore_failed=Connection_to_IEEEXplore_failed
-
-Link=Link
-File_type=File_type
-Edit_file_link=Edit_file_link
-
-Path_to_LatexEditor_(LEd.exe)=Path_to_LatexEditor_(LEd.exe)
-Move_external_links_to_'file'_field=Move_external_links_to_'file'_field
-Push_selection_to_Vim=Push_selection_to_Vim
-Pushed_citations_to_Vim=Pushed_citations_to_Vim
-
-Waiting_for_ArXiv...=Waiting_for_ArXiv...
-Processing_=Processing_
-Error_while_fetching_from_OIA2=Error_while_fetching_from_OIA2
-
-
-No_entries_found_for_the_search_string_'%0'=No_entries_found_for_the_search_string_'%0'
-
-The_chosen_encoding_'%0'_could_not_encode_the_following_characters\:_=The_chosen_encoding_'%0'_could_not_encode_the_following_characters:_
-Operation_not_supported=Operation_not_supported
-Drag_and_Drop_Error=Drag_and_Drop_Error
-File_download=File_download
-Error_while_downloading_file\:=Error_while_downloading_file:
-Only_one_item_is_supported=Only_one_item_is_supported
-Do_not_write_the_following_fields_to_XMP_Metadata\:=Do_not_write_the_following_fields_to_XMP_Metadata:
-<HTML>Could_not_find_file_'%0'<BR>linked_from_entry_'%1'</HTML>=<HTML>Could_not_find_file_'%0'<BR>linked_from_entry_'%1'</HTML>
-Drop_%0=Drop_%0
-Link_to_file_%0=Link_to_file_%0
-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?
-XMP_metadata_found_in_PDF\:_%0=XMP_metadata_found_in_PDF:_%0
-Link_to_PDF_%0=Link_to_PDF_%0
-Writing_XMP_to_'%0'...=Writing_XMP_to_'%0'...
-Wrote_XMP_to_'%0'.=Wrote_XMP_to_'%0'.
-Error_writing_XMP_to_file\:_%0=Error_writing_XMP_to_file:_%0
-Error_converting_Bibtex_to_XMP:_%0=Error_converting_Bibtex_to_XMP:_%0
-Error_while_converting_BibtexEntry_to_XMP_%0=Error_while_converting_BibtexEntry_to_XMP_%0
-Error_converting_XMP_to_'%0'...=Error_converting_XMP_to_'%0'...
-Could_not_find_directory_for_%0-files\:_%1=Could_not_find_directory_for_%0-files:_%1
-This_operation_requires_at_least_one_entry.=This_operation_requires_at_least_one_entry.
-Write_XMP-metadata=Write_XMP-metadata
-Write_XMP-metadata_for_all_PDFs_in_current_database?=Write_XMP-metadata_for_all_PDFs_in_current_database?
-No_XMP_metadata_found_in_=No_XMP_metadata_found_in_
-Please_refer_to_the_JabRef_help_manual_on_using_the_CiteSeer_tools=Please_refer_to_the_JabRef_help_manual_on_using_the_CiteSeer_tools
-Search_IEEExplore=Search_IEEExplore
-An_Exception_ocurred_while_accessing_'%0'=An_Exception_ocurred_while_accessing_'%0'
-An_SAXException_ocurred_while_parsing_'%0':=An_SAXException_ocurred_while_parsing_'%0':
-An_Error_occurred_while_fetching_from_OAI2_source_(%0)\:=An_Error_occurred_while_fetching_from_OAI2_source_(%0):
-Abbreviated_%0_journal_names.=Abbreviated_%0_journal_names.
-Unabbreviated_%0_journal_names.=Unabbreviated_%0_journal_names.
-
-Help_contents=Help_contents
-Edit_entry=Edit_entry
-Save_database_as_...=Save_database_as_...
-Save_selected_as_...=Save_selected_as_...
-Toggle_search_panel=Toggle_search_panel
-Append_contents_from_a_BibTeX_database_into_the_currently_viewed_database=Append_contents_from_a_BibTeX_database_into_the_currently_viewed_database
-Edit_strings=Edit_strings
-Toggle_groups_interface=Toggle_groups_interface
-Toggle_entry_preview=Toggle_entry_preview
-Highlight_groups_matching_all_selected_entries=Highlight_groups_matching_all_selected_entries
-Highlight_groups_matching_any_selected_entry=Highlight_groups_matching_any_selected_entry
-Autogenerate_BibTeX_keys=Autogenerate_BibTeX_keys
-Will_write_XMP-metadata_to_the_PDFs_linked_from_selected_entries.=Will_write_XMP-metadata_to_the_PDFs_linked_from_selected_entries.
-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)
-Unabbreviate_journal_names_of_the_selected_entries=Unabbreviate_journal_names_of_the_selected_entries
-Do_not_show_splash_window_at_startup=Do_not_show_splash_window_at_startup
-
-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
-Leave_files_in_their_current_directory.=Leave_files_in_their_current_directory.
-Leave_file_in_its_current_directory.=Leave_file_in_its_current_directory.
-Extension=Extension
-Application=Application
-Icon=Icon
-
-Path_to_%0_not_defined=Path_to_%0_not_defined
-Path_to_Vim=Path_to_Vim
-Vim_Server_Name=Vim_Server_Name
-MS_Office_2007=MS_Office_2007
-Manage_external_file_types=Manage_external_file_types
-All_custom_file_types_will_be_lost._Proceed?=All_custom_file_types_will_be_lost._Proceed?
-Reset_file_type_definitons=Reset_file_type_definitions
-Edit_file_type=Edit_file_type
-Could_not_run_the_'vim'_program.=Could_not_run_the_'vim'_program.
-
-Show_file_column=Show_file_column
-This_database_was_written_using_an_older_version_of_JabRef.=This_database_was_written_using_an_older_version_of_JabRef.
-
-File_'%0'_is_already_open.=File_'%0'_is_already_open.
-File_has_been_updated_externally._What_do_you_want_to_do?=File_has_been_updated_externally._What_do_you_want_to_do?
-
-Entry_has_no_citekey=Entry_has_no_citekey
-Rename_to_match_citekey=Rename_to_match_citekey
-Change_file_type=Change_file_type
-Define_'%0'=Define_'%0'
-
-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?
-
-Unable_to_open_file.=Unable_to_open_file.
-Undefined_file_type=Undefined_file_type
-Error\:_=
-
-Do_you_want_JabRef_to_do_the_following_operations?=Do_you_want_JabRef_to_do_the_following_operations?
-Upgrade_file=Upgrade_file
 
-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?
-Upgrade_external_links=Upgrade_external_links
-Upgraded_links.=Upgraded_links.
-
-This_entry_has_no_BibTeX_key._Generate_key_now?=This_entry_has_no_BibTeX_key._Generate_key_now?
-Target_file_cannot_be_a_directory.=Target_file_cannot_be_a_directory.
-
-Finished_autosetting_external_links.=Finished_autosetting_external_links.
-No_files_found.=No_files_found.
-
-External_file_links=External_file_links
-Main_%0_directory=Main_%0_directory
-Synchronize_file_links=Synchronize_file_links
-Upgrade_external_PDF/PS_links_to_use_the_'%0'_field.=Upgrade_external_PDF/PS_links_to_use_the_'%0'_field.
-Broken_link=Broken_link
-Change_table_column_and_General_fields_settings_to_use_the_new_feature=Change_table_column_and_General_fields_settings_to_use_the_new_feature
-Upgrade_old_external_file_links_to_use_the_new_feature=Upgrade_old_external_file_links_to_use_the_new_feature
-Set_main_external_file_directory=Set_main_external_file_directory
-Do_not_show_these_options_in_the_future=Do_not_show_these_options_in_the_future
-File_directory=File_directory
-Autosetting_links=Autosetting_links
-Autoset_external_links=Autoset_external_links
-Link_local_file=Link_local_file
-
-Searching_for_files=Searching_for_files
-Could_not_open_link=Could_not_open_link
-The_application_'%0'_associated_with_the_file_type_'%1'_could_not_be_called.=The_application_'%0'_associated_with_the_file_type_'%1'_could_not_be_called.
-
-Native_file_dialog=Native_file_dialog
-Beta_version=Beta_version
-Do_not_write_the_following_fields_to_XMP_Metadata:=Do_not_write_the_following_fields_to_XMP_Metadata:
-MIS_Quarterly=MIS_Quarterly
-Use_default_viewer=Use_default_viewer
-Select_icon=Select_icon
-
-Copy_to_clipboard=Copy_to_clipboard
-Paste_from_clipboard=Paste_from_clipboard
-lower=lower
-UPPER=UPPER
-Upper_Each_First=Upper_Each_First
-Upper_first=Upper_first
-Replace_comma_by_and_where_appropriate=Replace_comma_by_and_where_appropriate
-
-%0_export_successful=%0_export_successful
-
-
-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.
-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.
-You_have_changed_the_look_and_feel_setting._You_must_restart_JabRef_for_this_to_come_into_effect.=You_have_changed_the_look_and_feel_setting._You_must_restart_JabRef_for_this_to_come_into_effect.
-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
-Could_not_save_file._Character_encoding_'%0'_is_not_supported.=Could_not_save_file._Character_encoding_'%0'_is_not_supported.
-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.
-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.
-All_entries_of_this_type_will_be_declared_typeless._Continue?=All_entries_of_this_type_will_be_declared_typeless._Continue?
-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
-%0_entries_found._To_reduce_server_load,_abstracts_will_only_be_downloaded_for_searches_returning_%1_hits_or_less.=%0_entries_found._To_reduce_server_load,_abstracts_will_only_be_downloaded_for_searches_returning_%1_hits_or_less.
-A_string_with_that_label_already_exists=A_string_with_that_label_already_exists
-
-
-Overwrite=Overwrite
-
-File_directory_is_not_set_or_does_not_exist!=File_directory_is_not_set_or_does_not_exist!
-File_directory_is_'%0':=File_directory_is_'%0':
-Copy_files_to_file_directory.=Copy_files_to_file_directory.
-Move_files_to_file_directory.=Move_files_to_file_directory
-Copy_file_to_file_directory.=Copy_file_to_file_directory.
-Move_file_to_file_directory=Move_file_to_file_directory
-New_file_link_(INSERT)=New_file_link_(INSERT)
-Remove_file_link_(DELETE)=Remove_file_link_(DELETE)
-No_PDF_linked=No_PDF_linked
-PDF_does_not_exist=PDF_does_not_exist
-
-Wrote_XMP-metadata=Wrote_XMP-metadata
-Error_writing_to_%0_file(s).=Error_writing_to_%0_file(s).
-Finished_writing_XMP-metadata._Wrote_to_%0_file(s).=Finished_writing_XMP-metadata._Wrote_to_%0_file(s).
-
-You_have_entered_an_invalid_search_'%0'.=You_have_entered_an_invalid_search_'%0'.
-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?
-
-Remove_link=Remove_link
-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
-Error_converting_Bibtex_to_XMP\:_%0=Error_converting_Bibtex_to_XMP:_%0
-
-Sort_order=Sort_order
+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
+Fetch_Citeseer=Fetch_Citeseer
+Error_fetching_from_Citeseer\:\\n=Error_fetching_from_Citeseer\:\\n
+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_must_restart_JabRef_for_this_to_come_into_effect.=You_have_changed_the_menu_and_label_font_size._You_must_restart_JabRef_for_this_to_come_into_effect.
+
+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=
diff --git a/src/resource/JabRef_fr.properties b/src/resource/JabRef_fr.properties
index b63de62..54ce788 100644
--- a/src/resource/JabRef_fr.properties
+++ b/src/resource/JabRef_fr.properties
@@ -7,20 +7,26 @@
 %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_entries_found._To_reduce_server_load,_abstracts_will_only_be_downloaded_for_searches_returning_%1_hits_or_less.=%0_entr\u00E9es_trouv\u00E9es._Pour_r\u00E9duire_la_charge_du_serveur,_les_r\u00E9sum\u00E9_ne_seront_t\u00E9l\u00E9charg\u00E9s_que_pour_les_requ\u00EAtes_renvoyant_%1_r\u00E9sultats_ou_moins.
+%0_export_successful=%0_:_Exportation_r\u00E9ussie
 %0_field_set=D\u00E9finition_du_champ_%0
 %0_import_cancelled.=%0_importation_interrompue.
 %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>
 <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_import/export_pour_Endnote,<BR>pour_une_interop\u00E9rabilit\u00E9_optimale_avec_JabRef</HTML>
 <no_field>=<pas_de_champ>
 <select>=<s\u00E9lectionner>
 <select_word>=<entrer_le_mot-clef>
-
 _on_entry_number_=_pour_le_num\u00e9ro_d'entr\u00e9e_
 A_CiteSeer_fetch_operation_is_currently_in_progress.=Une_op\u00E9ration_de_recherche_sur_CiteSeer_est_en_cours.
 A_CiteSeer_import_operation_is_currently_in_progress.=Une_op\u00E9ration_d'importation_depuis_CiteSeer_est_en_cours.
+A_string_with_that_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
@@ -44,18 +50,26 @@ 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
@@ -63,23 +77,31 @@ 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
@@ -88,6 +110,7 @@ Background_color_for_marked_entries=Couleur_d'arri\u00e8re-plan_pour_les_entr\u0
 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.
@@ -95,11 +118,13 @@ BibTeX_key_not_set._Enter_a_name_for_the_downloaded_file=Clef_BibTeX_ind\u00E9fi
 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_connect_to_SQL_server_at_the_specified_host.=Echec_de_la_connexion_au_serveur_SQL_\u00e0_l'h\u00f4te_sp\u00e9cifi\u00e9.
 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.
@@ -111,11 +136,13 @@ 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
@@ -127,10 +154,10 @@ 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
 Cite_command_(for_Emacs/WinEdt)=Commande_de_citation_(pour_Emacs/WinEdt)_
 CiteSeer_Error=Erreur_CiteSeer
 CiteSeer_Fetch_Error=Erreur_de_recherche_sur_CiteSeer
-CiteSeer_import_entries=Entr\u00E9es_d'importation_depuis_CiteSeer
 CiteSeer_Import_Error=Erreur_d'importation_depuis_CiteSeer
 CiteSeer_Import_Fields=Champs_d'importation_de_CiteSeer
 CiteSeer_Transfer=Transfert_de_CiteSeer
@@ -154,6 +181,10 @@ Command_line_id=Identifiant_de_la_ligne_de_commande
 Complete_record=Compl\u00E9ter_l'enregistrement
 Completed_Import_Fields_from_CiteSeer.=Importation_des_champs_depuis_CiteSeer_termin\u00E9e.
 Completed_import_from_CiteSeer.=Importation_depuis_CiteSeer_termin\u00e9e.
+Connect=Se_connecter
+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
@@ -162,24 +193,34 @@ 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_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_determine_exception_message.=Echec_de_l'identification_du_message_d'exception.
 Could_not_export_entry_types=L'exportation_des_types_d'entr\u00e9es_a_\u00e9chou\u00e9
 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_entry_types=L'importation_des_types_d'entr\u00e9es_a_\u00e9chou\u00e9_
 Could_not_import_preferences=L'importation_des_pr\u00e9f\u00e9rences_a_\u00e9chou\u00e9_
 Could_not_instantiate_%0_%1=N'a_pas_pu_initialiser_%0_%1
 Could_not_instantiate_%0_%1._Have_you_chosen_the_correct_package_path?=%0_%1_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_resolve_import_format=Le_format_d'importation_n'a_pas_\u00e9t\u00e9_d\u00e9cod\u00e9_
 Could_not_run_the_'gnuclient'_program._Make_sure_you_have_the_gnuserv/gnuclient_programs_installed.=Le_programme_'gnuclient'_n'a_pas_pu_\u00EAtre_lanc\u00e9._Assurez-vous_que_les_programmes_gnuserv/gnuclient_sont_install\u00e9s.
+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_sauvegard\u00E9_
+Could_not_save_file._Character_encoding_'%0'_is_not_supported.=Le_fichier_n'a_pas_pu_\u00EAtre_sauvegard\u00E9._L'encodage_de_caract\u00E8res_'%0'_n'est_pas_support\u00E9.
 Couldn't_find_an_entry_associated_with_this_URL=Aucune_entr\u00E9e_associ\u00E9e_\u00E0_cette_URL_n'a_\u00E9t\u00E9_trouv\u00E9e_
 Couldn't_parse_the_'citeseerurl'_field_of_the_following_entries=Le_champ_'citeseerurl'_n'a_pas_pu_\u00EAtre_trait\u00E9_dans_les_entr\u00E9es_suivantes_
 Create_group=Cr\u00E9er_le_groupe
@@ -198,6 +239,7 @@ 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_la_sauvegarder_avant_de_fermer_?
 Database_properties=Propri\u00E9t\u00E9s_de_la_base_de_donn\u00e9es
@@ -208,6 +250,7 @@ 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'
 defined.=d\u00E9fini(e).
 Delete=Supprimer
 Delete_custom=Supprimer_les_d\u00E9finitions_personnalis\u00E9es
@@ -220,6 +263,7 @@ 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.
+Derby=Derby
 Descending=Descendant
 Description=Description
 Deselect_all=Tout_d\u00e9s\u00e9lectionner
@@ -240,7 +284,12 @@ 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_la_sauvegarde_
+Do_not_write_the_following_fields_to_XMP_Metadata:=Ne_pas_\u00E9crire_les_champs_suivants_dans_les_m\u00E9tadonn\u00E9es_XMP_:
+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
 Done=Termin\u00E9
 Down=Bas
@@ -248,6 +297,8 @@ 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.
@@ -263,24 +314,31 @@ Dynamically_group_entries_by_searching_a_field_for_a_keyword=Grouper_dynamiqueme
 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_ajout\u00e9es_ou_supprim\u00e9es_manuellement_de_ce_groupe.
+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_has_no_citekey=L'entr\u00E9e_n'a_pas_de_clef_BibTeX
 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
@@ -290,12 +348,24 @@ 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_Bibtex_to_XMP\:_%0=Erreur_lors_de_la_conversion_BibTeX_vers_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_d'une_recherche_sur_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_?
@@ -308,17 +378,18 @@ 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=Editeur_externe_lanc\u00E9
+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
 Fetch_Articles_Citing_your_Database=Rechercher_les_articles_citant_votre_base
 Fetch_CiteSeer=Recherche_CiteSeer
-Fetch_CiteSeer_by_ID=Recherche_CiteSeer_par_ID
-Fetch_Medline=Recherche_Medline
 Fetch_Medline_by_ID=Recherche_Medline_par_ID
 Fetched_all_citations_from_target_database.=Toutes_les_citations_ont_\u00E9t\u00E9_r\u00E9cup\u00E9r\u00E9es_depuis_la_base_cible.
 Fetching_Citations=Recherche_des_citations_en_cours
@@ -330,22 +401,32 @@ 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=R\u00E9pertoire_de_fichiers
+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
@@ -363,6 +444,7 @@ 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
@@ -385,6 +467,7 @@ 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
@@ -393,11 +476,14 @@ 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
 Illegal_type_name=Nom_de_type_ill\u00e9gal
 Immediate_subgroups=Sous-groupes_directs
@@ -453,6 +539,7 @@ 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
@@ -472,21 +559,32 @@ 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_sauver_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_%0_directory=R\u00E9pertoire_principal_%0
+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_des_entr\u00E9es
 Mark_entry=Etiqueter_l'entr\u00E9e
@@ -494,11 +592,12 @@ Mark_new_entries_with_addition_date=Enregistrer_la_date_d'ajout_pour_les_nouvell
 Mark_new_entries_with_owner_name=Nouvelles_entr\u00E9es_attribu\u00E9es_au_propri\u00E9taire_
 Marked_selected=Etiquetage_de_la_s\u00E9lection
 Medline_entries_fetched=Entr\u00E9es_Medline_r\u00E9cup\u00E9r\u00E9es
+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
-Miscellaneous=Divers
+MIS_Quarterly=MIS_Quarterly
 Modification_of_field=Modification_du_champ
 Modified_group_"%0".=Groupe_"%0"_modifi\u00e9.
 Modified_groups=Groupes_modifi\u00e9s
@@ -509,14 +608,21 @@ 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_file_to_file_directory=D\u00E9placer_le_fichier_vers_le_r\u00E9pertoire_de_fichiers.
+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
+Native_file_dialog=Dialogue_de_fichier_natif
 nested_aux_files=fichiers_AUX_imbriqu\u00E9s
 New=Nouveau
 new=nouveau
@@ -527,30 +633,35 @@ 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_custom_imports_registered_yet.=Pas_encore_d'importation_personnalis\u00e9e_enregistr\u00e9e
 no_database_generated=pas_de_base_cr\u00E9\u00E9e
+No_databases_saved.=Aucune_base_sauv\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_file_associated=Pas_de_fichier_associ\u00e9
+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_Medline_entries_found.=Pas_d'entr\u00e9es_Medline_trouv\u00e9es
+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_sauvegard\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_de_sauvegarde_(session_vide)
@@ -562,7 +673,9 @@ Number_of_references_to_fetch?=Nombre_de_r\u00E9f\u00E9rences_\u00E0_r\u00E9cup\
 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=Cliquer_pour_ouvrir_le
 Open_BibTeX_database=Ouvrir_une_base_BibTeX
 Open_database=Ouvrir_une_base
@@ -577,7 +690,9 @@ 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
@@ -588,21 +703,27 @@ 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_HTML_viewer=Chemin_du_visionneur_HTML_
+Path_to_%0_not_defined=Chemin_vers_%0_non_d\u00E9fini
+Path_to_HTML_viewer=Chemin_de_l'afficheur_HTML_
+Path_to_LatexEditor_(LEd.exe)=Chemin_vers_LatexEditor_(LEd.exe)_
 Path_to_LyX_pipe=Chemin_du_canal_de_transmission_LyX_
-Path_to_PDF_viewer=Chemin_du_visionneur_PDF_
-Path_to_PS_viewer=Chemin_du_visionneur_PS_
+Path_to_PDF_viewer=Chemin_de_l'afficheur_PDF_
+Path_to_PS_viewer=Chemin_de_l'afficheur_PS_
+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
-Pick_titles=S\u00e9lectionnez_des_titres[?]
 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.
@@ -610,10 +731,12 @@ Please_enter_a_search_term._For_example,_to_search_all_fields_for_<b>Smith</b>,_
 Please_enter_a_semicolon_or_comma_separated_list_of_Medline_IDs_(numbers).=SVP,_entrez_une_liste_d'IDs_Medline_(num\u00E9riques)_s\u00E9par\u00E9s_par_un_point-virgule_ou_par_une_virgule
 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_refer_to_the_JabRef_help_manual_on_using_the_CiteSeer_tools=S'il_vous_pla\u00eet,_consultez_le_manuel_d'aide_de_JabRef_sur_l'utilisation_des_outils_CiteSeer
 Please_refer_to_the_JabRef_help_manual_on_using_the_CiteSeer_tools.=SVP,_reportez-vous_au_manuel_d'aide_de_JabRef_\u00E0_propos_de_l'utilisation_des_outils_CiteSeer.
 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_
 Please_wait_until_it_has_finished.=SVP,_attendez_la_fin_de_l'op\u00E9ration.
 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\u00e9rification_pour_trancher.
@@ -623,15 +746,21 @@ 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
@@ -657,6 +786,7 @@ 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
@@ -666,6 +796,7 @@ Remove_group_"%0"_and_its_subgroups?=Supprimer_le_groupe_"%0"_et_ses_sous-groupe
 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_
@@ -673,33 +804,44 @@ Removed_entry_type.=Type_d'entr\u00E9e_supprim\u00E9.
 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
+Rename_to_match_citekey=Renommer_pour_correspondre_\u00E0_la_clef_BibTeX
 Renamed_string=Cha\u00eene_renomm\u00e9e
 Replace=Remplacer
 Replace_(regular_expression)=Remplacer_(expression_r\u00e9guli\u00e8re)_
+Replace_comma_by_and_where_appropriate=Remplacer_les_virgules_quand_appropri\u00E9
 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=V\u00e9rification
 Review_changes=Revoir_les_changements
 Right=Droite
+root=root
 Save=Sauver
+Save_all_finished.=Sauvegarde_de_tout_termin\u00e9e.
+Save_all_open_databases=Sauvegarder_toutes_les_bases_ouvertes
 Save_before_closing=Sauvegarde_avant_fermeture
 Save_database=Sauvegarder_la_base
+Save_database_as_...=Sauvegarder_la_base_sous...
 Save_entries_in_their_original_order=Sauver_les_entr\u00e9es_dans_leur_ordre_original
 Save_failed=Echec_de_la_sauvegarde
 Save_failed_during_backup_creation=La_sauvegarde_a_\u00e9chou\u00e9e_durant_la_cr\u00e9ation_de_la_copie_de_secours
 Save_failed_while_committing_changes=La_sauvegarde_a_\u00e9chou\u00e9e_lors_de_la_soumission_des_changements
 Save_in_default_table_sort_order=Sauver_les_entr\u00e9es_dans_l'ordre_par_d\u00e9faut_de_la_table
 Save_ordered_by_author/editor/year=Sauver_les_entr\u00e9es_selon_author/editor/year
+Save_selected_as_...=Sauvegarder_la_s\u00E9lection_sous...
 Saved_database=Base_sauvegard\u00E9e
 Saved_selected_to=Sauvegarder_la_s\u00E9lection_de
 Saved_session=Session_sauvegard\u00E9e
 Saving=Enregistrement_en_cours
+Saving_all_databases...=Sauvegarde_de_toutes_les_bases...
 Saving_database=Sauvegarde_de_la_base_en_cours
 Scan=D\u00E9marrer
 Search=Recherche
@@ -710,6 +852,7 @@ 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
@@ -717,6 +860,7 @@ Searched_database._Global_number_of_hits=Recherche_effectu\u00e9e._Nombre_total_
 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
@@ -729,15 +873,19 @@ 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/clear_fields=Configurer/vider_les_champs
 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
@@ -753,6 +901,7 @@ Show_confirmation_dialog_when_deleting_entries=Demander_une_confirmation_lors_de
 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
@@ -772,12 +921,14 @@ 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
@@ -796,18 +947,23 @@ 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_application_'%0'_associated_with_the_file_type_'%1'_could_not_be_called.=L'application_'%0'_associ\u00E9e_avec_le_type_de_fichier_'%1'_n'a_pas_pu_\u00EAtre_lanc\u00E9e.
 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_CiteSeer_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.
@@ -815,6 +971,7 @@ The_label_of_the_string_can_not_be_a_number.=L'intitul\u00E9_de_la_cha\u00EEne_n
 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.
@@ -824,8 +981,11 @@ The_URL_field_appears_to_be_empty_on_entry_number_=Le_champ_URL_semble_\u00EAtre
 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_r\u00e9solus._Continuer_?
 There_is_no_entry_type=Il_n'y_a_pas_de_type_d'entr\u00E9e
 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> 
@@ -833,21 +993,31 @@ This_group_contains_entries_in_which_any_field_contains_the_term_<b>%0</b>=Ce_gr
 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_extension_and_check_if_the_file_exists._If_not,_you_will_be_given_options<BR>to_resolve_the_problem.=JabRef_va_consid\u00E9rer_chaque_extension_de_%0_et_v\u00E9rifier_si_le_fichier_existe.<BR>Dans_la_n\u00E9gative,_un_choix_d'options_vous_sera_propos\u00E9_pour_r\u00E9soudre_le_probl\u00E8me.
 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.=Cela_conduit_JabRef_\u00e0_tester_chaque_lien_%0_et_\u00e0_v\u00e9rifier_si_le_fichier_existe._Dans_la_n\u00e9gative,_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=Type
 Type_set_to_'other'=Type_configur\u00E9_comme_'other'_(autre)
-unable_to_access_LyX-pipe=Incapable_d'acc\u00E9der_au_canal_de_transmission_LyX
-Unable_to_create_graphical_interface=Incapable_de_cr\u00e9er_l'interface_graphique
-Unable_to_parse_clipboard_text_as_Bibtex_entries.=Incapable_de_traiter_le_texte_du_presse-papiers_comme_des_entr\u00e9es_BibTeX.
-Unable_to_parse_the_following_URL=Incapable_de_traiter_l'ULR_suivante
+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_parse_the_following_URL=Impossible_de_traiter_l'ULR_suivante
 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=Incapable_d'\u00e9crire_sur
+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
@@ -866,41 +1036,65 @@ Up=Haut
 Update_to_current_column_widths=Figer_les_largeurs_des_colonnes_actuelles
 Updated_group_selection=S\u00E9lection_de_groupe_mise_\u00E0_jour
 Updating_entries...=Mise_\u00E0_jour_des_entr\u00E9es...
+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)
+User_does_not_have_sufficient_privileges.\n=L'utilisateur_n'a_pas_assez_de_privil\u00e8ges.\n
+Username_\:=Nom_d'utilisateur_:
 Uses_default_application=Utilise_l'application_par_d\u00e9faut
 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_have_changed_the_language_setting._You_must_restart_JabRef_for_this_to_come_into_effect.=Vous_avez_modifi\u00E9_la_langue._Vous_devez_red\u00E9marrer_JabRef_pour_que_ce_changement_prenne_effet.
+You_have_changed_the_look_and_feel_setting._You_must_restart_JabRef_for_this_to_come_into_effect.=Vous_avez_chang\u00E9_les_param\u00e8tres_d'apparence._Vous_devez_red\u00E9marrer_JabRef_pour_que_ce_changement_prenne_effet.
 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_enter_an_integer_value_in_the_text_field_for=Vous_devez_entrer_une_valeur_enti\u00e8re_dans_le_champ_texte_pour
 You_must_fill_in_a_name_for_the_entry_type.=Vous_devez_fournir_un_nom_pour_le_type_d'entr\u00E9e.
@@ -908,207 +1102,49 @@ You_must_restart_JabRef_for_the_new_key_bindings_to_work_properly.=Vous_devez_re
 You_must_select_at_least_one_row_to_perform_this_operation.=Vous_devez_s\u00E9lectionner_au_moins_une_colonne_pour_effectuer_cette_op\u00E9ration.
 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_sauvegard\u00E9e
-Save_all_open_databases=Sauvegarder_toutes_les_bases_ouvertes
-Automatically_remove_exact_duplicates=Supprimer_automatiquement_les_doublons_identiques
-Enable_word/name_autocompletion=Autoriser_l'auto-g\u00e9n\u00e9ration_des_mots/noms
-Editor_options=Options_d'\u00e9diteur
-Use_autocompletion_for_the_following_fields=Utiliser_l'auto-g\u00e9n\u00e9ration_pour_les_champs_suivants
-Saving_all_databases...=Sauvegarde_de_toutes_les_bases...
-Save_all_finished.=Sauvegarde_de_tout_termin\u00e9e.
-Saved_%0_databases.=%0_bases_sauv\u00e9es.
-No_databases_saved.=Aucune_base_sauv\u00e9e.
-Connection_to_IEEEXplore_failed=Echec_de_la_connexion_\u00e0_IEEEXplore
-Link=Lien
-File_type=Type_de_fichier
-Edit_file_link=Editer_le_lien_de_fichier
-Path_to_LatexEditor_(LEd.exe)=Chemin_vers_LatexEditor_(LEd.exe)_
-Move_external_links_to_'file'_field=D\u00E9placer_les_liens_externes_vers_le_champ_'fichier'
-Push_selection_to_Vim=Envoyer_la_s\u00E9lection_dans_Vim
-Pushed_citations_to_Vim=Envoyer_les_citations_dans_Vim
-
-Waiting_for_ArXiv...=Attente_de_ArXiv...
-Processing_=Traitement_de_
-Error_while_fetching_from_OIA2=Erreur_lors_d'une_recherche_sur_OIA2
-
-No_entries_found_for_the_search_string_'%0'=Pas_d'entr\u00E9e_pour_la_cha\u00EEne_de_recherche_'%0'
-
-
+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
+Fetch_Citeseer=Recherche_sur_Citeseer
+Error_fetching_from_Citeseer\:\\n=Erreur_lors_la_recherche_Citeseer\:\\n
+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_Medline_en_cours_par_id...
+Fetching_Medline_by_term...=Recherche_Medline_en_cours_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
 
 
-The_chosen_encoding_'%0'_could_not_encode_the_following_characters\:_=L'encodage_'%0'_choisi_ne_peut_pas_encoder_les_caract\u00e8res_suivants_:_
-Operation_not_supported=Op\u00e9ration_non_support\u00e9e
-Drag_and_Drop_Error=Erreur_de_Glisser-D\u00e9poser
-File_download=T\u00e9l\u00e9chargement_de_fichier
-Error_while_downloading_file\:=Erreur_lors_du_t\u00e9l\u00e9chargement_du_fichier_:
-Only_one_item_is_supported=Un_seul_objet_est_support\u00e9
-Do_not_write_the_following_fields_to_XMP_Metadata\:=Ne_pas_\u00e9crire_les_champs_suivants_dans_les_m\u00e9tadonn\u00e9es_XMP_:
-<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>
-Drop_%0=D\u00e9poser_%0
-Link_to_file_%0=Lien_vers_le_fichier_%0
-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_?
-XMP_metadata_found_in_PDF\:_%0=M\u00e9tadonn\u00e9es_XMP_trouv\u00e9es_dans_le_PDF:_%0
-Link_to_PDF_%0=Lien_vers_PDF_%0
-Writing_XMP_to_'%0'...=Ecriture_des_XMP_dans_'%0'...
-Wrote_XMP_to_'%0'.=XMP_\u00e9crites_dans_'%0'.
-Error_writing_XMP_to_file\:_%0=Erreur_lors_de_l'\u00e9criture_des_XMP_dans_le_fichier_%0
-Error_converting_Bibtex_to_XMP:_%0=Erreur_lors_de_la_conversion_de_BibTeX_en_XMP_:_%0
-Error_while_converting_BibtexEntry_to_XMP_%0=Erreur_lors_de_la_conversion_de_l'entr\u00e9e_BibTeX_en_XMP_%0
-Error_converting_XMP_to_'%0'...=Erreur_lors_de_la_conversion_d'XMP_en_'%0'
-Could_not_find_directory_for_%0-files\:_%1=Le_r\u00e9pertoire_n'a_pas_pu_\u00EAtre_trouv\u00e9_pour_les_fichiers_%0_:_%1
-This_operation_requires_at_least_one_entry.=Cette_op\u00e9ration_n\u00e9cessite_au_moins_une_entr\u00e9e.
-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_?
-No_XMP_metadata_found_in_=Pas_de_m\u00e9tadonn\u00e9es_XMP_trouv\u00e9es_dans_
-Please_refer_to_the_JabRef_help_manual_on_using_the_CiteSeer_tools=S'il_vous_pla\u00eet,_consultez_le_manuel_d'aide_de_JabRef_sur_l'utilisation_des_outils_CiteSeer
-Search_IEEExplore=Recherche_IEEExplore
-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'_:
-An_Error_occurred_while_fetching_from_OAI2_source_(%0)\:=Une_erreur_est_survenue_lors_de_la_recherche_\u00e0_partir_de_la_source_OAI2_(%0)_:
-Abbreviated_%0_journal_names.=%0_noms_de_journaux_abr\u00e9g\u00e9s.
-Unabbreviated_%0_journal_names.=%0_noms_de_journaux_d\u00e9velopp\u00e9s.
+Show_results_in_dialog=Afficher_les_r\u00e9sultats_dans_une_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
 
-Help_contents=Contenu_de_l'aide
-Edit_entry=Editer_l'entr\u00E9e
-Save_database_as_...=Sauvegarder_la_base_sous...
-Save_selected_as_...=Sauvegarder_la_s\u00E9lection_sous...
-Toggle_search_panel=Afficher/Masquer_la_fen\u00EAtre_de_recherche
-Append_contents_from_a_BibTeX_database_into_the_currently_viewed_database=Ajouter_le_contenu_d'une_base_BibTeX_\u00E0_la_base_actuelle
-Edit_strings=Editer_les_cha\u00EEnes
-Toggle_groups_interface=Afficher/Masquer_l'interface_des_groupes
-Toggle_entry_preview=Afficher/Masquer_l'aper\u00E7u
-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
-Autogenerate_BibTeX_keys=Cr\u00E9ation_automatique_des_clefs_BibTeX
-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
-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)
-Unabbreviate_journal_names_of_the_selected_entries=D\u00e9velopper_les_noms_de_journaux_des_entr\u00e9es_s\u00e9lectionn\u00e9es
-Do_not_show_splash_window_at_startup=Ne_pas_montrer_l'\u00e9cran_de_garde_lors_du_lancement
-
-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
-Leave_files_in_their_current_directory.=Laisser_les_fichiers_dans_le_r\u00e9pertoire_courant
-Leave_file_in_its_current_directory.=Laisser_le_fichier_dans_son_r\u00e9pertoire_courant
-Extension=Extension
-Application=Application
-Icon=Ic\u00f4ne
-
-Path_to_%0_not_defined=Chemin_vers_%0_non_d\u00E9fini
-
-Path_to_Vim=Chemin_de_Vim_
-Vim_Server_Name=Nom_du_serveur_Vim_
-MS_Office_2007=MS_Office_2007
-Manage_external_file_types=G\u00E9rer_les_types_de_fichiers_externes
-All_custom_file_types_will_be_lost._Proceed?=Tous_les_types_de_fichiers_personnalis\u00E9s_seront_perdus._Continuer_?
-Reset_file_type_definitons=R\u00E9tablir_les_d\u00E9finitions_de_type_de_fichier
-Edit_file_type=Editer_le_type_de_fichier
-Could_not_run_the_'vim'_program.=Le_programme_'vim'_n'a_pas_pu_\u00EAtre_lanc\u00e9.
-
-Show_file_column=Afficher_la_colonne_Fichier
-This_database_was_written_using_an_older_version_of_JabRef.=Cette_base_a_\u00E9t\u00E9_\u00E9crite_par_une_version_ant\u00E9rieure_de_JabRef.
-
-File_'%0'_is_already_open.=Le_fichier_'%0'_est_d\u00E9j\u00E0_ouvert.
-
-File_has_been_updated_externally._What_do_you_want_to_do?=Le_fichier_a_\u00E9t\u00E9_mis_\u00E0_jour_externalement._Que_voulez-vous_faire_?
-
-Entry_has_no_citekey=L'entr\u00E9e_n'a_pas_de_clef_BibTeX
-Rename_to_match_citekey=Renommer_pour_correspondre_\u00E0_la_clef_BibTeX
-
-Change_file_type=Changer_le_type_de_fichier
-Define_'%0'=D\u00E9finir_'%0'
-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_?
-Unable_to_open_file.=Impossible_d'ouvrir_le_fichier
-Undefined_file_type=Type_de_fichier_ind\u00E9fini
+You_have_changed_the_menu_and_label_font_size._You_must_restart_JabRef_for_this_to_come_into_effect.=Vous_avez_modifi\u00e9_la_taille_de_police_des_menus_et_des_\u00e9tiquettes._Vous_devez_red\u00E9marrer_JabRef_pour_que_ce_changement_prenne_effet.
 
-Error\:_=Erreur_:_
-
-Do_you_want_JabRef_to_do_the_following_operations?=Voulez-vous_que_JabRef_fasse_les_op\u00E9rations_suivantes_?
-Upgrade_file=Mettre_\u00E0_jour_le_fichier
-
-This_will_move_all_external_links_from_the_'pdf'_and_'ps'_fields_into_the_'%0'_field._Proceed?=Ceci_d\u00E09placera_tous_les_liens_externes_des_champs_'pdf'_et_'ps'_dans_le_champ_'%0'._Continuer_?
-
-Upgrade_external_links=Mettre_\u00E0_jour_les_liens_externes
-Upgraded_links.=Liens_mis_\u00E0_jour.
-This_entry_has_no_BibTeX_key._Generate_key_now?=Cette_entr\u00E9e_n'a_pas_de_clef_BibTeX._En_g\u00E9n\u00E9rer_une_maintenant_?
-Target_file_cannot_be_a_directory.=Le_fichier_cible_ne_peut_pas_\u00EAtre_un_r\u00E9pertoire.
-
-
-Finished_autosetting_external_links.=La_d\u00E9finition_automatique_des_liens_externes_est_termin\u00E9e.
-No_files_found.=Fichiers_non_trouv\u00E9s.
-
-External_file_links=Liens_vers_les_fichiers_externes
-Main_%0_directory=R\u00E9pertoire_principal_%0
-Synchronize_file_links=Synchroniser_les_liens_vers_les_fichiers
-Upgrade_external_PDF/PS_links_to_use_the_'%0'_field.=Mettre_\u00E0_jour_les_liens_externes_PDF/PS_pour_utiliser_le_champ_'%0'.
-Broken_link=Lien_invalide
-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
-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
-Set_main_external_file_directory=D\u00E9finir_le_r\u00E9pertoire_principal_des_fichiers_externes
-Do_not_show_these_options_in_the_future=Ne_pas_afficher_ces_options_\u00E0_l'avenir
-File_directory=R\u00E9pertoire_de_fichiers
-Autosetting_links=D\u00E9finition_automatique_des_liens
-Autoset_external_links=D\u00E9finir_automatiquement_les_liens_externes
-Link_local_file=Lier_le_fichier_local
-
-Searching_for_files=Recherche_de_fichiers...
-
-Could_not_open_link=Le_lien_n'a_pas_pu_\u00EAtre_ouvert
-The_application_'%0'_associated_with_the_file_type_'%1'_could_not_be_called.=L'application_'%0'_associ\u00E9e_avec_le_type_de_fichier_'%1'_n'a_pas_pu_\u00EAtre_lanc\u00E9e.
-
-Native_file_dialog=Dialogue_de_fichier_natif
-Beta_version=Version_Beta
-Do_not_write_the_following_fields_to_XMP_Metadata:=Ne_pas_\u00E9crire_les_champs_suivants_dans_les_m\u00E9tadonn\u00E9es_XMP_:
-MIS_Quarterly=MIS_Quarterly
-Use_default_viewer=Utiliser_l'afficheur_par_d\u00E9faut
-Select_icon=S\u00E9lectionner_un_ic\u00f4ne
-
-Copy_to_clipboard=Copier_dans_le_presse-papier
-Paste_from_clipboard=Coller_depuis_le_presse-papier
-lower=minuscule
-UPPER=MAJUSCULE
-Upper_Each_First=Majuscule_Chaque_Premi\u00E8re
-Upper_first=Majuscule_premi\u00E8re
-Replace_comma_by_and_where_appropriate=Remplacer_les_virgules_quand_appropri\u00E9
-
-%0_export_successful=%0_:_Exportation_r\u00E9ussie
-
-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.
-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_va_consid\u00E9rer_chaque_extension_de_%0_et_v\u00E9rifier_si_le_fichier_existe.<BR>Dans_la_n\u00E9gative,_un_choix_d'options_vous_sera_propos\u00E9_pour_r\u00E9soudre_le_probl\u00E8me.
-You_have_changed_the_look_and_feel_setting._You_must_restart_JabRef_for_this_to_come_into_effect.=Vous_avez_chang\u00E9_les_param\u00e8tres_d'apparence._Vous_devez_red\u00E9marrer_JabRef_pour_que_ce_changement_prenne_effet.
-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
-Could_not_save_file._Character_encoding_'%0'_is_not_supported.=Le_fichier_n'a_pas_pu_\u00EAtre_sauvegard\u00E9._L'encodage_de_caract\u00E8res_'%0'_n'est_pas_support\u00E9.
-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.
-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.
-All_entries_of_this_type_will_be_declared_typeless._Continue?=Toutes_les_entr\u00E9es_de_ce_type_seront_d\u00E9clar\u00E9es_'sans_type'._Continuer_?
-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
-%0_entries_found._To_reduce_server_load,_abstracts_will_only_be_downloaded_for_searches_returning_%1_hits_or_less.=%0_entr\u00E9es_trouv\u00E9es._Pour_r\u00E9duire_la_charge_du_serveur,_les_r\u00E9sum\u00E9_ne_seront_t\u00E9l\u00E9charg\u00E9s_que_pour_les_requ\u00EAtes_renvoyant_%1_r\u00E9sultats_ou_moins.
-A_string_with_that_label_already_exists=Une_cha\u00EEne_avec_ce_nom_existe_d\u00E9j\u00e0
-
-Overwrite=Ecraser
-
-File_directory_is_not_set_or_does_not_exist!=Le_r\u00E9pertoire_de_fichiers_n'est_pas_configur\u00E9_ou_n'existe_pas_!
-File_directory_is_'%0':=Le_r\u00E9pertoire_de_fichier_est_'%0'_:
-Copy_files_to_file_directory.=Copier_les_fichiers_vers_le_r\u00E9pertoire_de_fichiers.
-Move_files_to_file_directory.=D\u00E9placer_les_fichiers_vers_le_r\u00E9pertoire_de_fichiers.
-Copy_file_to_file_directory.=Copier_le_fichier_vers_le_r\u00E9pertoire_de_fichiers.
-Move_file_to_file_directory=D\u00E9placer_le_fichier_vers_le_r\u00E9pertoire_de_fichiers.
-New_file_link_(INSERT)=Nouveau_lien_de_fichier_(INSERT)
-Remove_file_link_(DELETE)=Supprimer_le_lien_de_fichier_(DELETE)
-
-No_PDF_linked=Pas_de_PDF_li\u00E9
-PDF_does_not_exist=Le_PDF_n'existe_pas
-Wrote_XMP-metadata=M\u00E9ta-donn\u00E9es_XMP_\u00E9crites
-
-Error_writing_to_%0_file(s).=Erreur_lors_de_l'\u00E9criture_de_%0_fichier(s).
-Finished_writing_XMP-metadata._Wrote_to_%0_file(s).=Ecriture_des_m\u00E9ta-donn\u00E9es_XMP_termin\u00E9e._Ecriture_de_%0_fichier(s).
-
-You_have_entered_an_invalid_search_'%0'.=Vous_avez_entr\u00E9_une_recherche_invalide_'%0'.
-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_?
-
-Remove_link=Supprimer_le_lien
-
-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_uniquement_les_fichiers_correspondant_�_la_clef_BibTeX
-Error_converting_Bibtex_to_XMP\:_%0=Erreur_lors_de_la_conversion_BibTeX_vers_XMP\:_%0
-
-Sort_order=Ordre_de_tri
+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_de_sauver_la_base
+BibTeX_key_generator=g\u00E9n\u00E9rateur_de_clefs_BibTeX
+Unable_to_open_link.=Impossible_d'ouvrir_un_lien.
diff --git a/src/resource/JabRef_fr.properties b/src/resource/JabRef_fr.properties.bak
similarity index 91%
copy from src/resource/JabRef_fr.properties
copy to src/resource/JabRef_fr.properties.bak
index b63de62..54ce788 100644
--- a/src/resource/JabRef_fr.properties
+++ b/src/resource/JabRef_fr.properties.bak
@@ -7,20 +7,26 @@
 %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_entries_found._To_reduce_server_load,_abstracts_will_only_be_downloaded_for_searches_returning_%1_hits_or_less.=%0_entr\u00E9es_trouv\u00E9es._Pour_r\u00E9duire_la_charge_du_serveur,_les_r\u00E9sum\u00E9_ne_seront_t\u00E9l\u00E9charg\u00E9s_que_pour_les_requ\u00EAtes_renvoyant_%1_r\u00E9sultats_ou_moins.
+%0_export_successful=%0_:_Exportation_r\u00E9ussie
 %0_field_set=D\u00E9finition_du_champ_%0
 %0_import_cancelled.=%0_importation_interrompue.
 %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>
 <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_import/export_pour_Endnote,<BR>pour_une_interop\u00E9rabilit\u00E9_optimale_avec_JabRef</HTML>
 <no_field>=<pas_de_champ>
 <select>=<s\u00E9lectionner>
 <select_word>=<entrer_le_mot-clef>
-
 _on_entry_number_=_pour_le_num\u00e9ro_d'entr\u00e9e_
 A_CiteSeer_fetch_operation_is_currently_in_progress.=Une_op\u00E9ration_de_recherche_sur_CiteSeer_est_en_cours.
 A_CiteSeer_import_operation_is_currently_in_progress.=Une_op\u00E9ration_d'importation_depuis_CiteSeer_est_en_cours.
+A_string_with_that_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
@@ -44,18 +50,26 @@ 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
@@ -63,23 +77,31 @@ 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
@@ -88,6 +110,7 @@ Background_color_for_marked_entries=Couleur_d'arri\u00e8re-plan_pour_les_entr\u0
 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.
@@ -95,11 +118,13 @@ BibTeX_key_not_set._Enter_a_name_for_the_downloaded_file=Clef_BibTeX_ind\u00E9fi
 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_connect_to_SQL_server_at_the_specified_host.=Echec_de_la_connexion_au_serveur_SQL_\u00e0_l'h\u00f4te_sp\u00e9cifi\u00e9.
 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.
@@ -111,11 +136,13 @@ 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
@@ -127,10 +154,10 @@ 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
 Cite_command_(for_Emacs/WinEdt)=Commande_de_citation_(pour_Emacs/WinEdt)_
 CiteSeer_Error=Erreur_CiteSeer
 CiteSeer_Fetch_Error=Erreur_de_recherche_sur_CiteSeer
-CiteSeer_import_entries=Entr\u00E9es_d'importation_depuis_CiteSeer
 CiteSeer_Import_Error=Erreur_d'importation_depuis_CiteSeer
 CiteSeer_Import_Fields=Champs_d'importation_de_CiteSeer
 CiteSeer_Transfer=Transfert_de_CiteSeer
@@ -154,6 +181,10 @@ Command_line_id=Identifiant_de_la_ligne_de_commande
 Complete_record=Compl\u00E9ter_l'enregistrement
 Completed_Import_Fields_from_CiteSeer.=Importation_des_champs_depuis_CiteSeer_termin\u00E9e.
 Completed_import_from_CiteSeer.=Importation_depuis_CiteSeer_termin\u00e9e.
+Connect=Se_connecter
+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
@@ -162,24 +193,34 @@ 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_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_determine_exception_message.=Echec_de_l'identification_du_message_d'exception.
 Could_not_export_entry_types=L'exportation_des_types_d'entr\u00e9es_a_\u00e9chou\u00e9
 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_entry_types=L'importation_des_types_d'entr\u00e9es_a_\u00e9chou\u00e9_
 Could_not_import_preferences=L'importation_des_pr\u00e9f\u00e9rences_a_\u00e9chou\u00e9_
 Could_not_instantiate_%0_%1=N'a_pas_pu_initialiser_%0_%1
 Could_not_instantiate_%0_%1._Have_you_chosen_the_correct_package_path?=%0_%1_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_resolve_import_format=Le_format_d'importation_n'a_pas_\u00e9t\u00e9_d\u00e9cod\u00e9_
 Could_not_run_the_'gnuclient'_program._Make_sure_you_have_the_gnuserv/gnuclient_programs_installed.=Le_programme_'gnuclient'_n'a_pas_pu_\u00EAtre_lanc\u00e9._Assurez-vous_que_les_programmes_gnuserv/gnuclient_sont_install\u00e9s.
+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_sauvegard\u00E9_
+Could_not_save_file._Character_encoding_'%0'_is_not_supported.=Le_fichier_n'a_pas_pu_\u00EAtre_sauvegard\u00E9._L'encodage_de_caract\u00E8res_'%0'_n'est_pas_support\u00E9.
 Couldn't_find_an_entry_associated_with_this_URL=Aucune_entr\u00E9e_associ\u00E9e_\u00E0_cette_URL_n'a_\u00E9t\u00E9_trouv\u00E9e_
 Couldn't_parse_the_'citeseerurl'_field_of_the_following_entries=Le_champ_'citeseerurl'_n'a_pas_pu_\u00EAtre_trait\u00E9_dans_les_entr\u00E9es_suivantes_
 Create_group=Cr\u00E9er_le_groupe
@@ -198,6 +239,7 @@ 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_la_sauvegarder_avant_de_fermer_?
 Database_properties=Propri\u00E9t\u00E9s_de_la_base_de_donn\u00e9es
@@ -208,6 +250,7 @@ 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'
 defined.=d\u00E9fini(e).
 Delete=Supprimer
 Delete_custom=Supprimer_les_d\u00E9finitions_personnalis\u00E9es
@@ -220,6 +263,7 @@ 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.
+Derby=Derby
 Descending=Descendant
 Description=Description
 Deselect_all=Tout_d\u00e9s\u00e9lectionner
@@ -240,7 +284,12 @@ 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_la_sauvegarde_
+Do_not_write_the_following_fields_to_XMP_Metadata:=Ne_pas_\u00E9crire_les_champs_suivants_dans_les_m\u00E9tadonn\u00E9es_XMP_:
+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
 Done=Termin\u00E9
 Down=Bas
@@ -248,6 +297,8 @@ 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.
@@ -263,24 +314,31 @@ Dynamically_group_entries_by_searching_a_field_for_a_keyword=Grouper_dynamiqueme
 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_ajout\u00e9es_ou_supprim\u00e9es_manuellement_de_ce_groupe.
+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_has_no_citekey=L'entr\u00E9e_n'a_pas_de_clef_BibTeX
 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
@@ -290,12 +348,24 @@ 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_Bibtex_to_XMP\:_%0=Erreur_lors_de_la_conversion_BibTeX_vers_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_d'une_recherche_sur_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_?
@@ -308,17 +378,18 @@ 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=Editeur_externe_lanc\u00E9
+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
 Fetch_Articles_Citing_your_Database=Rechercher_les_articles_citant_votre_base
 Fetch_CiteSeer=Recherche_CiteSeer
-Fetch_CiteSeer_by_ID=Recherche_CiteSeer_par_ID
-Fetch_Medline=Recherche_Medline
 Fetch_Medline_by_ID=Recherche_Medline_par_ID
 Fetched_all_citations_from_target_database.=Toutes_les_citations_ont_\u00E9t\u00E9_r\u00E9cup\u00E9r\u00E9es_depuis_la_base_cible.
 Fetching_Citations=Recherche_des_citations_en_cours
@@ -330,22 +401,32 @@ 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=R\u00E9pertoire_de_fichiers
+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
@@ -363,6 +444,7 @@ 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
@@ -385,6 +467,7 @@ 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
@@ -393,11 +476,14 @@ 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
 Illegal_type_name=Nom_de_type_ill\u00e9gal
 Immediate_subgroups=Sous-groupes_directs
@@ -453,6 +539,7 @@ 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
@@ -472,21 +559,32 @@ 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_sauver_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_%0_directory=R\u00E9pertoire_principal_%0
+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_des_entr\u00E9es
 Mark_entry=Etiqueter_l'entr\u00E9e
@@ -494,11 +592,12 @@ Mark_new_entries_with_addition_date=Enregistrer_la_date_d'ajout_pour_les_nouvell
 Mark_new_entries_with_owner_name=Nouvelles_entr\u00E9es_attribu\u00E9es_au_propri\u00E9taire_
 Marked_selected=Etiquetage_de_la_s\u00E9lection
 Medline_entries_fetched=Entr\u00E9es_Medline_r\u00E9cup\u00E9r\u00E9es
+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
-Miscellaneous=Divers
+MIS_Quarterly=MIS_Quarterly
 Modification_of_field=Modification_du_champ
 Modified_group_"%0".=Groupe_"%0"_modifi\u00e9.
 Modified_groups=Groupes_modifi\u00e9s
@@ -509,14 +608,21 @@ 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_file_to_file_directory=D\u00E9placer_le_fichier_vers_le_r\u00E9pertoire_de_fichiers.
+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
+Native_file_dialog=Dialogue_de_fichier_natif
 nested_aux_files=fichiers_AUX_imbriqu\u00E9s
 New=Nouveau
 new=nouveau
@@ -527,30 +633,35 @@ 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_custom_imports_registered_yet.=Pas_encore_d'importation_personnalis\u00e9e_enregistr\u00e9e
 no_database_generated=pas_de_base_cr\u00E9\u00E9e
+No_databases_saved.=Aucune_base_sauv\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_file_associated=Pas_de_fichier_associ\u00e9
+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_Medline_entries_found.=Pas_d'entr\u00e9es_Medline_trouv\u00e9es
+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_sauvegard\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_de_sauvegarde_(session_vide)
@@ -562,7 +673,9 @@ Number_of_references_to_fetch?=Nombre_de_r\u00E9f\u00E9rences_\u00E0_r\u00E9cup\
 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=Cliquer_pour_ouvrir_le
 Open_BibTeX_database=Ouvrir_une_base_BibTeX
 Open_database=Ouvrir_une_base
@@ -577,7 +690,9 @@ 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
@@ -588,21 +703,27 @@ 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_HTML_viewer=Chemin_du_visionneur_HTML_
+Path_to_%0_not_defined=Chemin_vers_%0_non_d\u00E9fini
+Path_to_HTML_viewer=Chemin_de_l'afficheur_HTML_
+Path_to_LatexEditor_(LEd.exe)=Chemin_vers_LatexEditor_(LEd.exe)_
 Path_to_LyX_pipe=Chemin_du_canal_de_transmission_LyX_
-Path_to_PDF_viewer=Chemin_du_visionneur_PDF_
-Path_to_PS_viewer=Chemin_du_visionneur_PS_
+Path_to_PDF_viewer=Chemin_de_l'afficheur_PDF_
+Path_to_PS_viewer=Chemin_de_l'afficheur_PS_
+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
-Pick_titles=S\u00e9lectionnez_des_titres[?]
 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.
@@ -610,10 +731,12 @@ Please_enter_a_search_term._For_example,_to_search_all_fields_for_<b>Smith</b>,_
 Please_enter_a_semicolon_or_comma_separated_list_of_Medline_IDs_(numbers).=SVP,_entrez_une_liste_d'IDs_Medline_(num\u00E9riques)_s\u00E9par\u00E9s_par_un_point-virgule_ou_par_une_virgule
 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_refer_to_the_JabRef_help_manual_on_using_the_CiteSeer_tools=S'il_vous_pla\u00eet,_consultez_le_manuel_d'aide_de_JabRef_sur_l'utilisation_des_outils_CiteSeer
 Please_refer_to_the_JabRef_help_manual_on_using_the_CiteSeer_tools.=SVP,_reportez-vous_au_manuel_d'aide_de_JabRef_\u00E0_propos_de_l'utilisation_des_outils_CiteSeer.
 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_
 Please_wait_until_it_has_finished.=SVP,_attendez_la_fin_de_l'op\u00E9ration.
 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\u00e9rification_pour_trancher.
@@ -623,15 +746,21 @@ 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
@@ -657,6 +786,7 @@ 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
@@ -666,6 +796,7 @@ Remove_group_"%0"_and_its_subgroups?=Supprimer_le_groupe_"%0"_et_ses_sous-groupe
 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_
@@ -673,33 +804,44 @@ Removed_entry_type.=Type_d'entr\u00E9e_supprim\u00E9.
 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
+Rename_to_match_citekey=Renommer_pour_correspondre_\u00E0_la_clef_BibTeX
 Renamed_string=Cha\u00eene_renomm\u00e9e
 Replace=Remplacer
 Replace_(regular_expression)=Remplacer_(expression_r\u00e9guli\u00e8re)_
+Replace_comma_by_and_where_appropriate=Remplacer_les_virgules_quand_appropri\u00E9
 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=V\u00e9rification
 Review_changes=Revoir_les_changements
 Right=Droite
+root=root
 Save=Sauver
+Save_all_finished.=Sauvegarde_de_tout_termin\u00e9e.
+Save_all_open_databases=Sauvegarder_toutes_les_bases_ouvertes
 Save_before_closing=Sauvegarde_avant_fermeture
 Save_database=Sauvegarder_la_base
+Save_database_as_...=Sauvegarder_la_base_sous...
 Save_entries_in_their_original_order=Sauver_les_entr\u00e9es_dans_leur_ordre_original
 Save_failed=Echec_de_la_sauvegarde
 Save_failed_during_backup_creation=La_sauvegarde_a_\u00e9chou\u00e9e_durant_la_cr\u00e9ation_de_la_copie_de_secours
 Save_failed_while_committing_changes=La_sauvegarde_a_\u00e9chou\u00e9e_lors_de_la_soumission_des_changements
 Save_in_default_table_sort_order=Sauver_les_entr\u00e9es_dans_l'ordre_par_d\u00e9faut_de_la_table
 Save_ordered_by_author/editor/year=Sauver_les_entr\u00e9es_selon_author/editor/year
+Save_selected_as_...=Sauvegarder_la_s\u00E9lection_sous...
 Saved_database=Base_sauvegard\u00E9e
 Saved_selected_to=Sauvegarder_la_s\u00E9lection_de
 Saved_session=Session_sauvegard\u00E9e
 Saving=Enregistrement_en_cours
+Saving_all_databases...=Sauvegarde_de_toutes_les_bases...
 Saving_database=Sauvegarde_de_la_base_en_cours
 Scan=D\u00E9marrer
 Search=Recherche
@@ -710,6 +852,7 @@ 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
@@ -717,6 +860,7 @@ Searched_database._Global_number_of_hits=Recherche_effectu\u00e9e._Nombre_total_
 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
@@ -729,15 +873,19 @@ 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/clear_fields=Configurer/vider_les_champs
 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
@@ -753,6 +901,7 @@ Show_confirmation_dialog_when_deleting_entries=Demander_une_confirmation_lors_de
 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
@@ -772,12 +921,14 @@ 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
@@ -796,18 +947,23 @@ 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_application_'%0'_associated_with_the_file_type_'%1'_could_not_be_called.=L'application_'%0'_associ\u00E9e_avec_le_type_de_fichier_'%1'_n'a_pas_pu_\u00EAtre_lanc\u00E9e.
 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_CiteSeer_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.
@@ -815,6 +971,7 @@ The_label_of_the_string_can_not_be_a_number.=L'intitul\u00E9_de_la_cha\u00EEne_n
 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.
@@ -824,8 +981,11 @@ The_URL_field_appears_to_be_empty_on_entry_number_=Le_champ_URL_semble_\u00EAtre
 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_r\u00e9solus._Continuer_?
 There_is_no_entry_type=Il_n'y_a_pas_de_type_d'entr\u00E9e
 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> 
@@ -833,21 +993,31 @@ This_group_contains_entries_in_which_any_field_contains_the_term_<b>%0</b>=Ce_gr
 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_extension_and_check_if_the_file_exists._If_not,_you_will_be_given_options<BR>to_resolve_the_problem.=JabRef_va_consid\u00E9rer_chaque_extension_de_%0_et_v\u00E9rifier_si_le_fichier_existe.<BR>Dans_la_n\u00E9gative,_un_choix_d'options_vous_sera_propos\u00E9_pour_r\u00E9soudre_le_probl\u00E8me.
 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.=Cela_conduit_JabRef_\u00e0_tester_chaque_lien_%0_et_\u00e0_v\u00e9rifier_si_le_fichier_existe._Dans_la_n\u00e9gative,_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=Type
 Type_set_to_'other'=Type_configur\u00E9_comme_'other'_(autre)
-unable_to_access_LyX-pipe=Incapable_d'acc\u00E9der_au_canal_de_transmission_LyX
-Unable_to_create_graphical_interface=Incapable_de_cr\u00e9er_l'interface_graphique
-Unable_to_parse_clipboard_text_as_Bibtex_entries.=Incapable_de_traiter_le_texte_du_presse-papiers_comme_des_entr\u00e9es_BibTeX.
-Unable_to_parse_the_following_URL=Incapable_de_traiter_l'ULR_suivante
+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_parse_the_following_URL=Impossible_de_traiter_l'ULR_suivante
 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=Incapable_d'\u00e9crire_sur
+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
@@ -866,41 +1036,65 @@ Up=Haut
 Update_to_current_column_widths=Figer_les_largeurs_des_colonnes_actuelles
 Updated_group_selection=S\u00E9lection_de_groupe_mise_\u00E0_jour
 Updating_entries...=Mise_\u00E0_jour_des_entr\u00E9es...
+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)
+User_does_not_have_sufficient_privileges.\n=L'utilisateur_n'a_pas_assez_de_privil\u00e8ges.\n
+Username_\:=Nom_d'utilisateur_:
 Uses_default_application=Utilise_l'application_par_d\u00e9faut
 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_have_changed_the_language_setting._You_must_restart_JabRef_for_this_to_come_into_effect.=Vous_avez_modifi\u00E9_la_langue._Vous_devez_red\u00E9marrer_JabRef_pour_que_ce_changement_prenne_effet.
+You_have_changed_the_look_and_feel_setting._You_must_restart_JabRef_for_this_to_come_into_effect.=Vous_avez_chang\u00E9_les_param\u00e8tres_d'apparence._Vous_devez_red\u00E9marrer_JabRef_pour_que_ce_changement_prenne_effet.
 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_enter_an_integer_value_in_the_text_field_for=Vous_devez_entrer_une_valeur_enti\u00e8re_dans_le_champ_texte_pour
 You_must_fill_in_a_name_for_the_entry_type.=Vous_devez_fournir_un_nom_pour_le_type_d'entr\u00E9e.
@@ -908,207 +1102,49 @@ You_must_restart_JabRef_for_the_new_key_bindings_to_work_properly.=Vous_devez_re
 You_must_select_at_least_one_row_to_perform_this_operation.=Vous_devez_s\u00E9lectionner_au_moins_une_colonne_pour_effectuer_cette_op\u00E9ration.
 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_sauvegard\u00E9e
-Save_all_open_databases=Sauvegarder_toutes_les_bases_ouvertes
-Automatically_remove_exact_duplicates=Supprimer_automatiquement_les_doublons_identiques
-Enable_word/name_autocompletion=Autoriser_l'auto-g\u00e9n\u00e9ration_des_mots/noms
-Editor_options=Options_d'\u00e9diteur
-Use_autocompletion_for_the_following_fields=Utiliser_l'auto-g\u00e9n\u00e9ration_pour_les_champs_suivants
-Saving_all_databases...=Sauvegarde_de_toutes_les_bases...
-Save_all_finished.=Sauvegarde_de_tout_termin\u00e9e.
-Saved_%0_databases.=%0_bases_sauv\u00e9es.
-No_databases_saved.=Aucune_base_sauv\u00e9e.
-Connection_to_IEEEXplore_failed=Echec_de_la_connexion_\u00e0_IEEEXplore
-Link=Lien
-File_type=Type_de_fichier
-Edit_file_link=Editer_le_lien_de_fichier
-Path_to_LatexEditor_(LEd.exe)=Chemin_vers_LatexEditor_(LEd.exe)_
-Move_external_links_to_'file'_field=D\u00E9placer_les_liens_externes_vers_le_champ_'fichier'
-Push_selection_to_Vim=Envoyer_la_s\u00E9lection_dans_Vim
-Pushed_citations_to_Vim=Envoyer_les_citations_dans_Vim
-
-Waiting_for_ArXiv...=Attente_de_ArXiv...
-Processing_=Traitement_de_
-Error_while_fetching_from_OIA2=Erreur_lors_d'une_recherche_sur_OIA2
-
-No_entries_found_for_the_search_string_'%0'=Pas_d'entr\u00E9e_pour_la_cha\u00EEne_de_recherche_'%0'
-
-
+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
+Fetch_Citeseer=Recherche_sur_Citeseer
+Error_fetching_from_Citeseer\:\\n=Erreur_lors_la_recherche_Citeseer\:\\n
+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_Medline_en_cours_par_id...
+Fetching_Medline_by_term...=Recherche_Medline_en_cours_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
 
 
-The_chosen_encoding_'%0'_could_not_encode_the_following_characters\:_=L'encodage_'%0'_choisi_ne_peut_pas_encoder_les_caract\u00e8res_suivants_:_
-Operation_not_supported=Op\u00e9ration_non_support\u00e9e
-Drag_and_Drop_Error=Erreur_de_Glisser-D\u00e9poser
-File_download=T\u00e9l\u00e9chargement_de_fichier
-Error_while_downloading_file\:=Erreur_lors_du_t\u00e9l\u00e9chargement_du_fichier_:
-Only_one_item_is_supported=Un_seul_objet_est_support\u00e9
-Do_not_write_the_following_fields_to_XMP_Metadata\:=Ne_pas_\u00e9crire_les_champs_suivants_dans_les_m\u00e9tadonn\u00e9es_XMP_:
-<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>
-Drop_%0=D\u00e9poser_%0
-Link_to_file_%0=Lien_vers_le_fichier_%0
-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_?
-XMP_metadata_found_in_PDF\:_%0=M\u00e9tadonn\u00e9es_XMP_trouv\u00e9es_dans_le_PDF:_%0
-Link_to_PDF_%0=Lien_vers_PDF_%0
-Writing_XMP_to_'%0'...=Ecriture_des_XMP_dans_'%0'...
-Wrote_XMP_to_'%0'.=XMP_\u00e9crites_dans_'%0'.
-Error_writing_XMP_to_file\:_%0=Erreur_lors_de_l'\u00e9criture_des_XMP_dans_le_fichier_%0
-Error_converting_Bibtex_to_XMP:_%0=Erreur_lors_de_la_conversion_de_BibTeX_en_XMP_:_%0
-Error_while_converting_BibtexEntry_to_XMP_%0=Erreur_lors_de_la_conversion_de_l'entr\u00e9e_BibTeX_en_XMP_%0
-Error_converting_XMP_to_'%0'...=Erreur_lors_de_la_conversion_d'XMP_en_'%0'
-Could_not_find_directory_for_%0-files\:_%1=Le_r\u00e9pertoire_n'a_pas_pu_\u00EAtre_trouv\u00e9_pour_les_fichiers_%0_:_%1
-This_operation_requires_at_least_one_entry.=Cette_op\u00e9ration_n\u00e9cessite_au_moins_une_entr\u00e9e.
-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_?
-No_XMP_metadata_found_in_=Pas_de_m\u00e9tadonn\u00e9es_XMP_trouv\u00e9es_dans_
-Please_refer_to_the_JabRef_help_manual_on_using_the_CiteSeer_tools=S'il_vous_pla\u00eet,_consultez_le_manuel_d'aide_de_JabRef_sur_l'utilisation_des_outils_CiteSeer
-Search_IEEExplore=Recherche_IEEExplore
-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'_:
-An_Error_occurred_while_fetching_from_OAI2_source_(%0)\:=Une_erreur_est_survenue_lors_de_la_recherche_\u00e0_partir_de_la_source_OAI2_(%0)_:
-Abbreviated_%0_journal_names.=%0_noms_de_journaux_abr\u00e9g\u00e9s.
-Unabbreviated_%0_journal_names.=%0_noms_de_journaux_d\u00e9velopp\u00e9s.
+Show_results_in_dialog=Afficher_les_r\u00e9sultats_dans_une_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
 
-Help_contents=Contenu_de_l'aide
-Edit_entry=Editer_l'entr\u00E9e
-Save_database_as_...=Sauvegarder_la_base_sous...
-Save_selected_as_...=Sauvegarder_la_s\u00E9lection_sous...
-Toggle_search_panel=Afficher/Masquer_la_fen\u00EAtre_de_recherche
-Append_contents_from_a_BibTeX_database_into_the_currently_viewed_database=Ajouter_le_contenu_d'une_base_BibTeX_\u00E0_la_base_actuelle
-Edit_strings=Editer_les_cha\u00EEnes
-Toggle_groups_interface=Afficher/Masquer_l'interface_des_groupes
-Toggle_entry_preview=Afficher/Masquer_l'aper\u00E7u
-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
-Autogenerate_BibTeX_keys=Cr\u00E9ation_automatique_des_clefs_BibTeX
-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
-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)
-Unabbreviate_journal_names_of_the_selected_entries=D\u00e9velopper_les_noms_de_journaux_des_entr\u00e9es_s\u00e9lectionn\u00e9es
-Do_not_show_splash_window_at_startup=Ne_pas_montrer_l'\u00e9cran_de_garde_lors_du_lancement
-
-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
-Leave_files_in_their_current_directory.=Laisser_les_fichiers_dans_le_r\u00e9pertoire_courant
-Leave_file_in_its_current_directory.=Laisser_le_fichier_dans_son_r\u00e9pertoire_courant
-Extension=Extension
-Application=Application
-Icon=Ic\u00f4ne
-
-Path_to_%0_not_defined=Chemin_vers_%0_non_d\u00E9fini
-
-Path_to_Vim=Chemin_de_Vim_
-Vim_Server_Name=Nom_du_serveur_Vim_
-MS_Office_2007=MS_Office_2007
-Manage_external_file_types=G\u00E9rer_les_types_de_fichiers_externes
-All_custom_file_types_will_be_lost._Proceed?=Tous_les_types_de_fichiers_personnalis\u00E9s_seront_perdus._Continuer_?
-Reset_file_type_definitons=R\u00E9tablir_les_d\u00E9finitions_de_type_de_fichier
-Edit_file_type=Editer_le_type_de_fichier
-Could_not_run_the_'vim'_program.=Le_programme_'vim'_n'a_pas_pu_\u00EAtre_lanc\u00e9.
-
-Show_file_column=Afficher_la_colonne_Fichier
-This_database_was_written_using_an_older_version_of_JabRef.=Cette_base_a_\u00E9t\u00E9_\u00E9crite_par_une_version_ant\u00E9rieure_de_JabRef.
-
-File_'%0'_is_already_open.=Le_fichier_'%0'_est_d\u00E9j\u00E0_ouvert.
-
-File_has_been_updated_externally._What_do_you_want_to_do?=Le_fichier_a_\u00E9t\u00E9_mis_\u00E0_jour_externalement._Que_voulez-vous_faire_?
-
-Entry_has_no_citekey=L'entr\u00E9e_n'a_pas_de_clef_BibTeX
-Rename_to_match_citekey=Renommer_pour_correspondre_\u00E0_la_clef_BibTeX
-
-Change_file_type=Changer_le_type_de_fichier
-Define_'%0'=D\u00E9finir_'%0'
-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_?
-Unable_to_open_file.=Impossible_d'ouvrir_le_fichier
-Undefined_file_type=Type_de_fichier_ind\u00E9fini
+You_have_changed_the_menu_and_label_font_size._You_must_restart_JabRef_for_this_to_come_into_effect.=Vous_avez_modifi\u00e9_la_taille_de_police_des_menus_et_des_\u00e9tiquettes._Vous_devez_red\u00E9marrer_JabRef_pour_que_ce_changement_prenne_effet.
 
-Error\:_=Erreur_:_
-
-Do_you_want_JabRef_to_do_the_following_operations?=Voulez-vous_que_JabRef_fasse_les_op\u00E9rations_suivantes_?
-Upgrade_file=Mettre_\u00E0_jour_le_fichier
-
-This_will_move_all_external_links_from_the_'pdf'_and_'ps'_fields_into_the_'%0'_field._Proceed?=Ceci_d\u00E09placera_tous_les_liens_externes_des_champs_'pdf'_et_'ps'_dans_le_champ_'%0'._Continuer_?
-
-Upgrade_external_links=Mettre_\u00E0_jour_les_liens_externes
-Upgraded_links.=Liens_mis_\u00E0_jour.
-This_entry_has_no_BibTeX_key._Generate_key_now?=Cette_entr\u00E9e_n'a_pas_de_clef_BibTeX._En_g\u00E9n\u00E9rer_une_maintenant_?
-Target_file_cannot_be_a_directory.=Le_fichier_cible_ne_peut_pas_\u00EAtre_un_r\u00E9pertoire.
-
-
-Finished_autosetting_external_links.=La_d\u00E9finition_automatique_des_liens_externes_est_termin\u00E9e.
-No_files_found.=Fichiers_non_trouv\u00E9s.
-
-External_file_links=Liens_vers_les_fichiers_externes
-Main_%0_directory=R\u00E9pertoire_principal_%0
-Synchronize_file_links=Synchroniser_les_liens_vers_les_fichiers
-Upgrade_external_PDF/PS_links_to_use_the_'%0'_field.=Mettre_\u00E0_jour_les_liens_externes_PDF/PS_pour_utiliser_le_champ_'%0'.
-Broken_link=Lien_invalide
-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
-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
-Set_main_external_file_directory=D\u00E9finir_le_r\u00E9pertoire_principal_des_fichiers_externes
-Do_not_show_these_options_in_the_future=Ne_pas_afficher_ces_options_\u00E0_l'avenir
-File_directory=R\u00E9pertoire_de_fichiers
-Autosetting_links=D\u00E9finition_automatique_des_liens
-Autoset_external_links=D\u00E9finir_automatiquement_les_liens_externes
-Link_local_file=Lier_le_fichier_local
-
-Searching_for_files=Recherche_de_fichiers...
-
-Could_not_open_link=Le_lien_n'a_pas_pu_\u00EAtre_ouvert
-The_application_'%0'_associated_with_the_file_type_'%1'_could_not_be_called.=L'application_'%0'_associ\u00E9e_avec_le_type_de_fichier_'%1'_n'a_pas_pu_\u00EAtre_lanc\u00E9e.
-
-Native_file_dialog=Dialogue_de_fichier_natif
-Beta_version=Version_Beta
-Do_not_write_the_following_fields_to_XMP_Metadata:=Ne_pas_\u00E9crire_les_champs_suivants_dans_les_m\u00E9tadonn\u00E9es_XMP_:
-MIS_Quarterly=MIS_Quarterly
-Use_default_viewer=Utiliser_l'afficheur_par_d\u00E9faut
-Select_icon=S\u00E9lectionner_un_ic\u00f4ne
-
-Copy_to_clipboard=Copier_dans_le_presse-papier
-Paste_from_clipboard=Coller_depuis_le_presse-papier
-lower=minuscule
-UPPER=MAJUSCULE
-Upper_Each_First=Majuscule_Chaque_Premi\u00E8re
-Upper_first=Majuscule_premi\u00E8re
-Replace_comma_by_and_where_appropriate=Remplacer_les_virgules_quand_appropri\u00E9
-
-%0_export_successful=%0_:_Exportation_r\u00E9ussie
-
-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.
-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_va_consid\u00E9rer_chaque_extension_de_%0_et_v\u00E9rifier_si_le_fichier_existe.<BR>Dans_la_n\u00E9gative,_un_choix_d'options_vous_sera_propos\u00E9_pour_r\u00E9soudre_le_probl\u00E8me.
-You_have_changed_the_look_and_feel_setting._You_must_restart_JabRef_for_this_to_come_into_effect.=Vous_avez_chang\u00E9_les_param\u00e8tres_d'apparence._Vous_devez_red\u00E9marrer_JabRef_pour_que_ce_changement_prenne_effet.
-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
-Could_not_save_file._Character_encoding_'%0'_is_not_supported.=Le_fichier_n'a_pas_pu_\u00EAtre_sauvegard\u00E9._L'encodage_de_caract\u00E8res_'%0'_n'est_pas_support\u00E9.
-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.
-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.
-All_entries_of_this_type_will_be_declared_typeless._Continue?=Toutes_les_entr\u00E9es_de_ce_type_seront_d\u00E9clar\u00E9es_'sans_type'._Continuer_?
-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
-%0_entries_found._To_reduce_server_load,_abstracts_will_only_be_downloaded_for_searches_returning_%1_hits_or_less.=%0_entr\u00E9es_trouv\u00E9es._Pour_r\u00E9duire_la_charge_du_serveur,_les_r\u00E9sum\u00E9_ne_seront_t\u00E9l\u00E9charg\u00E9s_que_pour_les_requ\u00EAtes_renvoyant_%1_r\u00E9sultats_ou_moins.
-A_string_with_that_label_already_exists=Une_cha\u00EEne_avec_ce_nom_existe_d\u00E9j\u00e0
-
-Overwrite=Ecraser
-
-File_directory_is_not_set_or_does_not_exist!=Le_r\u00E9pertoire_de_fichiers_n'est_pas_configur\u00E9_ou_n'existe_pas_!
-File_directory_is_'%0':=Le_r\u00E9pertoire_de_fichier_est_'%0'_:
-Copy_files_to_file_directory.=Copier_les_fichiers_vers_le_r\u00E9pertoire_de_fichiers.
-Move_files_to_file_directory.=D\u00E9placer_les_fichiers_vers_le_r\u00E9pertoire_de_fichiers.
-Copy_file_to_file_directory.=Copier_le_fichier_vers_le_r\u00E9pertoire_de_fichiers.
-Move_file_to_file_directory=D\u00E9placer_le_fichier_vers_le_r\u00E9pertoire_de_fichiers.
-New_file_link_(INSERT)=Nouveau_lien_de_fichier_(INSERT)
-Remove_file_link_(DELETE)=Supprimer_le_lien_de_fichier_(DELETE)
-
-No_PDF_linked=Pas_de_PDF_li\u00E9
-PDF_does_not_exist=Le_PDF_n'existe_pas
-Wrote_XMP-metadata=M\u00E9ta-donn\u00E9es_XMP_\u00E9crites
-
-Error_writing_to_%0_file(s).=Erreur_lors_de_l'\u00E9criture_de_%0_fichier(s).
-Finished_writing_XMP-metadata._Wrote_to_%0_file(s).=Ecriture_des_m\u00E9ta-donn\u00E9es_XMP_termin\u00E9e._Ecriture_de_%0_fichier(s).
-
-You_have_entered_an_invalid_search_'%0'.=Vous_avez_entr\u00E9_une_recherche_invalide_'%0'.
-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_?
-
-Remove_link=Supprimer_le_lien
-
-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_uniquement_les_fichiers_correspondant_�_la_clef_BibTeX
-Error_converting_Bibtex_to_XMP\:_%0=Erreur_lors_de_la_conversion_BibTeX_vers_XMP\:_%0
-
-Sort_order=Ordre_de_tri
+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_de_sauver_la_base
+BibTeX_key_generator=g\u00E9n\u00E9rateur_de_clefs_BibTeX
+Unable_to_open_link.=Impossible_d'ouvrir_un_lien.
diff --git a/src/resource/JabRef_it.properties b/src/resource/JabRef_it.properties
index b103c6c..da95511 100644
--- a/src/resource/JabRef_it.properties
+++ b/src/resource/JabRef_it.properties
@@ -7,11 +7,15 @@
 %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_entries_found._To_reduce_server_load,_abstracts_will_only_be_downloaded_for_searches_returning_%1_hits_or_less.=%0_voci_trovate._Per_ridurre_il_carico_sul_server,_i_riassunti_saranno_scaricati_solo_per_ricerche_che_forniscano_meno_di_%1_risultati.
+
+%0_export_successful=%0_esportazioni_riuscite
 %0_field_set=Definizione_del_campo_%0
 %0_import_cancelled.=Importazione_di_%0_interrotta
 %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>
 <HTML>Unpack_the_zip_file_containing_import/export_filters_for_Endnote,<BR>for_optimal_interoperability_with_JabRef</HTML>=<HTML>Decompattare_il_file_zip_contenente_i_filtri_import/export_per_EndNote,<BR>per_una_interoperabilit\u00E0_ottimale_con_JabRef</HTML>
 <no_field>=<nessun_campo>
 <select>=<seleziona>
@@ -19,7 +23,11 @@
 _on_entry_number_=_per_la_voce_numero_
 A_CiteSeer_fetch_operation_is_currently_in_progress.=Una_operazione_di_ricerca_su_CiteSeer_\u00E8_in_corso
 A_CiteSeer_import_operation_is_currently_in_progress.=Una_operazione_di_importazione_da_CiteSeer_\u00E8_in_corso
+A_string_with_that_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
@@ -43,18 +51,26 @@ 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)\:=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
@@ -62,23 +78,34 @@ 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
@@ -87,6 +114,7 @@ Background_color_for_marked_entries=Colore_di_sfondo_per_le_voci_contrassegnate
 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.
@@ -95,12 +123,14 @@ 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_connect_to_SQL_server_at_the_specified_host.=Impossibile_conettersi_al_server_SQL_sull'host_specificato.
 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
@@ -112,11 +142,14 @@ 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
@@ -129,10 +162,10 @@ Characters_to_ignore=Caratteri_da_ignorare
 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
 Cite_command_(for_Emacs/WinEdt)=Comando_di_citazione_(per_Emacs/WinEdt)
 CiteSeer_Error=Errore_CiteSeer
 CiteSeer_Fetch_Error=Errore_nel_recupero_da_CiteSeer
-CiteSeer_import_entries=Voci_da_importare_da_CiteSeer
 CiteSeer_Import_Error=Errore_di_importazione_da_CiteSeer
 CiteSeer_Import_Fields=Campi_di_importazione_da_CiteSeer
 CiteSeer_Transfer=Trasferimento_da_CoteSeer
@@ -159,6 +192,10 @@ Command_line_id=Identificativo_della_riga_di_comando
 Complete_record=Completa_la_registrazione
 Completed_Import_Fields_from_CiteSeer.=Importazione_dei_campi_da_CiteSeer_completa.
 Completed_import_from_CiteSeer.=Importazione_da_CiteSeer_completa
+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
@@ -167,24 +204,36 @@ 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.
+Copy_files_to_file_directory.=Copia_i_file_nella_cartella.
+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_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_determine_exception_message.=Impossibile_determinare_il_messaggio_dell'eccezione
 Could_not_export_entry_types=Non_\u00e8_possibile_l'esportazione_dei_tipi_di_voce
 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_entry_types=Non_\u00e8_possibile_l'importazione_dei_tipi_di_voce
 Could_not_import_preferences=Impossibile_importare_le_preferenze
 Could_not_instantiate_%0_%1=Impossibile_inizializzare_%0_%1
 Could_not_instantiate_%0_%1._Have_you_chosen_the_correct_package_path?=Impossibile_inizializzare_%0_%1._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_resolve_import_format=Impossibile_decodificare_il_formato_di_importazione
 Could_not_run_the_'gnuclient'_program._Make_sure_you_have_the_gnuserv/gnuclient_programs_installed.=Impossibile_eseguire_il_programma_'gnuclient'._Assicurarsi_che_i_programmi_gnuserv/gnuclient_siano_installati.
+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.
 Couldn't_find_an_entry_associated_with_this_URL=Impossibile_trovare_voci_associate_a_questo_URL
 Couldn't_parse_the_'citeseerurl'_field_of_the_following_entries=Non_\u00e8_stato_possibile_interpretare_il_campo_'citeseerurl'_delle_voci_seguenti
 Create_group=Crea_gruppo
@@ -203,6 +252,7 @@ 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
@@ -213,6 +263,7 @@ 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'
 # or "definita"?. In Italian the gender of the adjective must match that of the name
 defined.=definito.
 Delete=Cancella
@@ -226,6 +277,7 @@ Delete_rows=Cancella_voci
 Delete_strings=Cancella_stringhe
 Deleted=Cancellato
 Delimit_fields_with_semicolon,_ex.=Campi_delimitati_da_punto_e_virgola,_ex.
+Derby=Derby
 Descending=Discendente
 Description=Descrizione
 Deselect_all=Deseleziona_tutto
@@ -247,7 +299,14 @@ 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
+# key below already already present with colon "escaped" by a backslash
+Do_not_write_the_following_fields_to_XMP_Metadata:=Non_scrivere_i_dati_dei_campi_seguenti_nei_metadati_XMP:
+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
 Done=Fatto
 Down=Gi\u00f9
@@ -255,6 +314,9 @@ 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.
@@ -271,14 +333,20 @@ Dynamically_group_entries_by_searching_a_field_for_a_keyword=Raggruppa_dinamicam
 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
@@ -289,6 +357,8 @@ 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_has_no_citekey=La_voce_non_ha_chiave_BibTeX
 Entry_in_current_database=Voce_nel_database_corrente
 Entry_in_import=Voce_nell'importazione
 Entry_preview=Anteprima_della_voce
@@ -298,12 +368,25 @@ 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_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?
@@ -316,8 +399,12 @@ 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
@@ -327,8 +414,6 @@ Fetch=Recupera
 Fetch_Articles_Citing_your_Database=Recupera_gli_articoli_che_citano_il_tuo_database
 Fetch_CiteSeer=Recupera_da_CiteSeer
 
-Fetch_CiteSeer_by_ID=Ricerca_su_CiteSeer_per_ID
-Fetch_Medline=Recupera_da_Medline
 Fetch_Medline_by_ID=Recupera_da_Medline_per_ID
 Fetched_all_citations_from_target_database.=Tutte_le_citazioni_sono_state_recuperate_dal_database.
 Fetching_Citations=Recupero_delle_citazioni_in_corso
@@ -340,6 +425,7 @@ 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
@@ -347,17 +433,30 @@ 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=Cartella_file
+File_directory_is_'%0':=La_cartella_dei_file_\u00e8_'%0':
+
+File_directory_is_not_set_or_does_not_exist!=La_cartella_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.
 ## check below: is %0 a number?
 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
@@ -375,6 +474,7 @@ 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
@@ -401,6 +501,8 @@ 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
@@ -410,6 +512,8 @@ Hide_non-matching_entries=Nascondi_le_voci_non_corrispondenti
 ## check below
 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
@@ -417,6 +521,7 @@ HTML=HTML
 HTML_table=Tabella_HTML
 
 HTML_table_(with_Abstract_&_BibTeX)=Tabella_HTML_(con_riassunto_e_BibTeX)
+Icon=Icona
 Ignore=Ignora
 Illegal_type_name=Nome_di_tipo_illegale
 Immediate_subgroups=Sottogruppi_diretti
@@ -472,6 +577,7 @@ 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
@@ -492,15 +598,29 @@ 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
+# Extension: What does it means exactly??
+# FDAR (French translation): no idea...
+# FDAR: I contacted the programmer. Now simplified...
+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_%0_directory=Cartella_%0_principale
+Main_file_directory=Cartella_file_principale
 
 Main_layout_file=File_di_layout_principale
 Main_PDF_directory=Cartella_file_PDF_principale
@@ -508,6 +628,7 @@ 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
@@ -515,11 +636,12 @@ Mark_new_entries_with_addition_date=Contrassegna_le_nuove_voci_con_la_data_di_ag
 Mark_new_entries_with_owner_name=Contrassegna_le_nuove_voci_con_il_nome_del_proprietario
 Marked_selected=Contrassegna_la_selezione
 Medline_entries_fetched=Voci_Medline_recuperate
+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
-Miscellaneous=Varie
+MIS_Quarterly=MIS_Quarterly
 Modification_of_field=Modifica_del_campo
 Modified_group_"%0".=Gruppo_"%0"_modificato.
 Modified_groups=Gruppi_modificati
@@ -530,14 +652,22 @@ 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_file_to_file_directory=Sposta_il_file_nella_cartella.
+Move_files_to_file_directory.=Sposta_i_file_nella_cartella.
 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
+
+Native_file_dialog=Dialogo_File_nativo
 nested_aux_files=File_AUX_nidificati
 New=Nuovo
 new=nuovo
@@ -548,30 +678,37 @@ 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_custom_imports_registered_yet.=Non_ancora_registrata_alcuna_importazione_personalizzata.
 no_database_generated=nessun_database_creato
+No_databases_saved.=Nessun_database_salvato.
 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_file_associated=Nessun_file_associato
+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_Medline_entries_found.=Nessuna_voce_Medline_trovata.
+
+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)
@@ -583,7 +720,9 @@ 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
@@ -600,7 +739,9 @@ 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
@@ -613,22 +754,32 @@ 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_HTML_viewer=Percorso_per_il_visualizzatore_HTML
+
+Path_to_LatexEditor_(LEd.exe)=Percorso_per_LatexEditor_(LEd.exe)
 Path_to_LyX_pipe=Percorso_per_la_pipe_LyX
 Path_to_PDF_viewer=Percorso_per_il_visualizzatore_PDF
 Path_to_PS_viewer=Percorso_per_il_visualizzatore_PS
+# key below duplicate, also with colon "escaped" by a backslash 
+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
-Pick_titles=Scegli_titoli
 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
@@ -636,10 +787,12 @@ Please_enter_a_search_term._For_example,_to_search_all_fields_for_<b>Smith</b>,_
 Please_enter_a_semicolon_or_comma_separated_list_of_Medline_IDs_(numbers).=Immettere_una_lista_di_ID_Medline_(numerici)_separati_da_virgola_o_punto_e_virgola
 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_refer_to_the_JabRef_help_manual_on_using_the_CiteSeer_tools=Consulta_l'aiuto_in_linea_sull'utilizzo_degli_strumenti_CiteSeer
 Please_refer_to_the_JabRef_help_manual_on_using_the_CiteSeer_tools.=Fare_riferimento_al_manuale_in_linea_per_l'utilizzo_degli_strumenti_CiteSeer.
 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_
 Please_wait_until_it_has_finished.=Attendere_la_fine_dell'operazione.
 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.
@@ -649,15 +802,21 @@ 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
@@ -685,6 +844,7 @@ 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
@@ -694,6 +854,8 @@ Remove_group_"%0"_and_its_subgroups?=Rimuovere_il_gruppo_"%0"_ed_i_suoi_sottogru
 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_
@@ -701,14 +863,20 @@ Removed_entry_type.=Tipo_di_voce_rimosso.
 Removed_group_"%0".=Rimosso_gruppo_"%0".
 Removed_group_"%0"_and_its_subgroups.=Rimosso_gruppo_"%0"_e_suoi_sottogruppi.
 Removed_string=Stringa_rimossa
+Rename_to_match_citekey=Rinomina_concordemente_alla_chiave_BibTeX
 Renamed_string=Stringa_rinominata
 Replace=Sostituisci
 Replace_(regular_expression)=Sostituisci_(espressione_regolare)
+Replace_comma_by_and_where_appropriate=Sostituisci_le_virgole_con_'and'_dove_appropriato
 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
@@ -716,19 +884,26 @@ Revert_to_original_source=Ripristina_il_contenuto_iniziale
 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_in_default_table_sort_order=Salvare_nell'ordine_predefinito_per_la_tabella
 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
@@ -740,6 +915,7 @@ 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
@@ -747,6 +923,8 @@ Searched_database._Global_number_of_hits=Ricerca_effettuata._Numero_totale_di_ri
 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
@@ -759,17 +937,21 @@ 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/clear_fields=Imposta/annulla_i_campi
 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
@@ -786,6 +968,8 @@ Show_confirmation_dialog_when_deleting_entries=Chiedere_conferma_della_cancellaz
 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
@@ -806,12 +990,15 @@ 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
@@ -831,18 +1018,25 @@ 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.
 ## Removed? Switches_between_full_and_abbreviated_journal_name=Alterna_tra_nomi_delle_riviste_completi_e_abbreviati
 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_application_'%0'_associated_with_the_file_type_'%1'_could_not_be_called.=Impossibile_avviare_l'applicazione_'%0'_associata_con_il_tipo_di_file'%1'.
 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_CiteSeer_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.
@@ -850,6 +1044,7 @@ The_label_of_the_string_can_not_be_a_number.=L'etichetta_della_stringa_non_pu\u0
 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.
@@ -859,8 +1054,11 @@ The_URL_field_appears_to_be_empty_on_entry_number_=Il_campo_URL_sembra_essere_vu
 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?
 There_is_no_entry_type=Nessun_tipo_di_voce
 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>
@@ -868,21 +1066,31 @@ This_group_contains_entries_in_which_any_field_contains_the_term_<b>%0</b>=Quest
 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_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.
 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.=Questo_fa_in_modo_che_JabRef_verifichi_ciascuno_dei_%0_collegamenti_per_l'esistenza_del_file._In_caso_negativo_verranno_proposte_delle_opzioni_<BR>per_risolvere_il_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=Tipo
 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_parse_clipboard_text_as_Bibtex_entries.=Impossibile_interpretare_il_testo_negli_appunti_come_voci_BibTeX
+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_parse_the_following_URL=Impossibile_interpretare_il_seguente_URL
 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
@@ -903,23 +1111,39 @@ Up=Su
 Update_to_current_column_widths=Aggiorna_la_larghezza_delle_colonne_ai_valori_correnti
 Updated_group_selection=Selezione_di_gruppo_aggiornata
 Updating_entries...=Aggiornamento_delle_voci_in_corso...
+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
+User_does_not_have_sufficient_privileges.\n=L'utente_non_ha_privilegi_sufficienti.\n
+Username_\:=Username:
 Uses_default_application=Usa_l'applicazione_predefinita
 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
@@ -927,22 +1151,32 @@ 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_have_changed_the_language_setting._You_must_restart_JabRef_for_this_to_come_into_effect.=La_lingua_\u00e8_stata_modificata._Riavviare_Jabref_per_rendere_effettiva_la_modifica.
+You_have_changed_the_look_and_feel_setting._You_must_restart_JabRef_for_this_to_come_into_effect.=Le_impostazioni_dell'aspetto_dell'applicazione_sono_stati_cambiati._Riavviare_Jabref_per_rendere_effettive_le_modifiche.
 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_enter_an_integer_value_in_the_text_field_for=Immettere_un_numero_intero_nel_campo_di_testo_per
 You_must_fill_in_a_name_for_the_entry_type.=Fornire_un_nome_per_il_tipo_di_voce.
@@ -950,211 +1184,48 @@ You_must_restart_JabRef_for_the_new_key_bindings_to_work_properly.=Riavviare_Jab
 You_must_select_at_least_one_row_to_perform_this_operation.=Selezionare_almeno_una_riga_per_effettuare_questa_operazione
 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
+Fetch_Citeseer=Recupera_da_Citeseer
+Error_fetching_from_Citeseer\:\\n=Errore_durante_la_ricerca_Citeseer\:\\n
+Progress:_%0_of_%1=Stato_d'avanzamento:_%0_di_%1
+Error_while_fetching_from_JSTOR=Errore_durante_la_ricerca_JSTOR
+Fetching_Medline_by_id...=Ricerca_Medline_per_id...
+Fetching_Medline_by_term...=Ricerca_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
 
-Save_all_open_databases=Salva_tutti_i_database_aperti
-
-Automatically_remove_exact_duplicates=Rimuovi_automaticamente_i_duplicati_esatti
-Enable_word/name_autocompletion=Abilita_autocompletamento_di_parole/nomi
-Editor_options=Opzioni_dell'editor
-Use_autocompletion_for_the_following_fields=Usa_l'autocompletamento_per_i_seguenti_campi
-Saving_all_databases...=Salvataggio_di_tutti_i_database...
-Save_all_finished.=Terminato_il_salvataggio_di_tutti_i_database.
-Saved_%0_databases.=Salvati_%0_database.
-No_databases_saved.=Nessun_database_salvato.
-Connection_to_IEEEXplore_failed=Connessione_a_IEEEXplore_fallita
-
-Link=Collegamento
-File_type=Tipo_di_file
-Edit_file_link=Modifica_il_collegamento_al_file
-
-Path_to_LatexEditor_(LEd.exe)=Percorso_per_LatexEditor_(LEd.exe)
-Move_external_links_to_'file'_field=Sposta_i_collegamenti_esterni_nel_campo_'file'
-Push_selection_to_Vim=Invia_le_voci_selezionate_a_Vim
-Pushed_citations_to_Vim=Citazioni_inviate_a_Vim
-
-Waiting_for_ArXiv...=In_attesa_di_ArXiv...
-Processing_=Elaborazione_di_
-Error_while_fetching_from_OIA2=Errore_durante_una_ricerca_da_OIA2
-
-No_entries_found_for_the_search_string_'%0'=Nessuna_voce_trovata_in_base_alla_stringa_di_ricerca_'%0'
-
-The_chosen_encoding_'%0'_could_not_encode_the_following_characters\:_=La_codifica_scelta_'%0'_non_pu\u00f2_codificare_i_caratteri_seguenti:_
-Operation_not_supported=Operazione_non_supportata
-Drag_and_Drop_Error=Errore_di_'Drag_&_Drop'
-File_download=Download_di_file
-Error_while_downloading_file\:=Errore_nel_corso_del_download_del_file:
-Only_one_item_is_supported=Un_solo_elemento_\u00e8_supportato
-Do_not_write_the_following_fields_to_XMP_Metadata\:=Non_scrivere_i_dati_dei_campi_seguenti_nei_metadati_XMP:
-<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>
-# Check translation below
-Drop_%0=Rilascia_%0
-Link_to_file_%0=Collegamento_al_file_%0
-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?
-XMP_metadata_found_in_PDF\:_%0=Metadati_XMP_trovati_nel_file_PDF:_%0
-Link_to_PDF_%0=Collegamento_al_file_PDF_%0
-Writing_XMP_to_'%0'...=Scrittura_dei_metadati_XMP_in_'%0'...
-Wrote_XMP_to_'%0'.=Scritti_i_metadati_XMP_in_'%0'.
-Error_writing_XMP_to_file\:_%0=Errore_durante_la_scrittura_dei_metadati_XMP_nel_file:_%0_
-Error_converting_Bibtex_to_XMP:_%0=Errore_durante_la_conversione_della_voce_BibTeX_in_XMP:_%0
-Error_while_converting_BibtexEntry_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'...
-Could_not_find_directory_for_%0-files\:_%1=Impossibile_trovare_la_cartella_per_i_file_%0:_%1
-This_operation_requires_at_least_one_entry.=Questa_operazione_richiede_almeno_una_voce.
-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?
-No_XMP_metadata_found_in_=Non_sono_stati_trovati_metadati_XMP_in_
-Please_refer_to_the_JabRef_help_manual_on_using_the_CiteSeer_tools=Consulta_l'aiuto_in_linea_sull'utilizzo_degli_strumenti_CiteSeer
-Search_IEEExplore=Ricerca_in_IEEExplore
-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':
-An_Error_occurred_while_fetching_from_OAI2_source_(%0)\:=Errore_durante_il_recupero_dalla_fonte_OAI2_(%0):
-Abbreviated_%0_journal_names.=%0_nomi_di_riviste_abbreviati.
-Unabbreviated_%0_journal_names.=%0_nomi_di_riviste_per_esteso.
-
-Help_contents=Contenuti_dell'aiuto
-Edit_entry=Modifica_voce
-Save_database_as_...=Salva_il_database_come...
-Save_selected_as_...=Salva_la_selezione_come...
-Toggle_search_panel=Mostra/Nascondi_il_pannello_di_ricerca
-Append_contents_from_a_BibTeX_database_into_the_currently_viewed_database=Accoda_il_contenuto_di_un_database_BibTeX_al_database_corrente
-Edit_strings=Modifica_le_stringhe
-Toggle_groups_interface=Mostra/Nascondi_l'interfaccia_dei_gruppi
-Toggle_entry_preview=Mostra/Nascondi_l'anteprima
-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
-Autogenerate_BibTeX_keys=Generazione_automatica_delle_chiavi_BibTeX
-Will_write_XMP-metadata_to_the_PDFs_linked_from_selected_entries.=Scrive_i_metadati_XMP_nei_file_PDF_collegati_alle_voci_selezionate
-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)
-Unabbreviate_journal_names_of_the_selected_entries=Mostra_il_nome_completo_delle_riviste_per_le_voci_selezionate
-Do_not_show_splash_window_at_startup=Non_mostrare_la_schermata_d'avvio
+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_di_file_principale?
+Rename_to_'%0'=Rinomina_in_'%0'
+Move_to_file_directory=Sposta_nella_cartella_di_file_principale
 
-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
-# Extension: What does it means exactly??
-# FDAR (French translation): no idea...
-# FDAR: I contacted the programmer. Now simplified...
-Leave_files_in_their_current_directory.=Lascia_i_file_nella_cartella_corrente
-Leave_file_in_its_current_directory.=Lascia_il_file_nella_cartella_corrente
-Extension=Estensione
-Application=Applicazione
-Icon=Icona
-
-Path_to_%0_not_defined=Percorso_per_%0_non_definito
-
-Path_to_Vim=Percorso_per_Vim
-Vim_Server_Name=Nome_del_server_Vim
-MS_Office_2007=MS_Office_2007
-Manage_external_file_types=Gestione_dei_tipi_di_file_esterni
-All_custom_file_types_will_be_lost._Proceed?=Tutti_i_tipi_di_file_personalizzati_andranno_perduti._Continuare?
-Reset_file_type_definitons=Ristabilisci_le_definizioni_originali_dei_tipi_di_file
-Edit_file_type=Modifica_il_tipo_di_file
-Could_not_run_the_'vim'_program.=Impossibile_eseguire_il_programma_'vim'.
-
-Show_file_column=Visualizza_la_colonna_File
-This_database_was_written_using_an_older_version_of_JabRef.=Questo_database_\u00e8_stato_generato_da_una_versione_precedente_di_JabRef.
-
-File_'%0'_is_already_open.=Il_file_'%0'__\u00e8_gi\u00e0_aperto.
+You_have_changed_the_menu_and_label_font_size._You_must_restart_JabRef_for_this_to_come_into_effect.=Sono_state_modificate_le_dimensioni_del_carattere_di_menu_ed_etichette._Riavviare_Jabref_per_rendere_effettive_le_modifiche.
 
-File_has_been_updated_externally._What_do_you_want_to_do?=Il_file_\u00e8_stato_aggiornato_da_un'applicazione_esterna._Cosa_vuoi_fare?
-
-Entry_has_no_citekey=La_voce_non_ha_chiave_BibTeX
-Rename_to_match_citekey=Rinomina_concordemente_alla_chiave_BibTeX
-
-Change_file_type=Cambia_il_tipo_di_file
-Define_'%0'=Definisci_'%0'
-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?
-Unable_to_open_file.=Impossibile_aprire_il_file
-Undefined_file_type=Tipo_di_file_non_definito
-
-Error\:_=Errore:_
-
-Do_you_want_JabRef_to_do_the_following_operations?=Vuoi_che_JabRef_esegua_le_operazioni_seguenti?
-Upgrade_file=Aggiornamento_del_file
-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?
-Upgrade_external_links=Aggiorna_i_collegamenti_esterni
-Upgraded_links.=Collegamenti_aggiornati.
-This_entry_has_no_BibTeX_key._Generate_key_now?=Questa_voce_\u00e8_priva_di_una_chiave_BibTeX._Generarla_ora?
-Target_file_cannot_be_a_directory.=L'oggetto_deve_essere_un_file,_non_una_cartella.
-
-Finished_autosetting_external_links.=Impostazione_automatica_dei_collegamenti_esterni_terminata.
-No_files_found.=Nessun_file_trovato.
-
-External_file_links=Collegamenti_a_file_esterni
-Main_%0_directory=Cartella_%0_principale
-Synchronize_file_links=Sincronizza_il_collegamento_ai_file
-Upgrade_external_PDF/PS_links_to_use_the_'%0'_field.=Aggiornare_i_collegamenti_esterni_PDF/PS_per_utilizzare_il_campo_'%0'.
-Broken_link=Collegamento_interrotto
-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
-Upgrade_old_external_file_links_to_use_the_new_feature=Aggiornare_i_vecchi_collegamenti_ai_file_esterni_per_utilizzare_la_nuova_funzione
-Set_main_external_file_directory=Impostare_la_cartella_principale_dei_file_esterni
-Do_not_show_these_options_in_the_future=Non_mostrare_queste_opzioni_in_futuro
-File_directory=Cartella_file
-Autosetting_links=Impostazione_automatica_dei_collegamenti
-Autoset_external_links=Impostazione_automatica_dei_collegamenti_esterni
-Link_local_file=Collegamento_al_file_locale
-
-Searching_for_files=Ricerca_dei_file
-
-
-Could_not_open_link=Impossibile_aprire_il_collegamento
-The_application_'%0'_associated_with_the_file_type_'%1'_could_not_be_called.=Impossibile_avviare_l'applicazione_'%0'_associata_con_il_tipo_di_file'%1'.
-
-Native_file_dialog=Dialogo_File_nativo
-Beta_version=Versione_Beta
-# key below already already present with colon "escaped" by a backslash
-Do_not_write_the_following_fields_to_XMP_Metadata:=Non_scrivere_i_dati_dei_campi_seguenti_nei_metadati_XMP:
-MIS_Quarterly=MIS_Quarterly
-Use_default_viewer=Usa_il_visualizzatore_predefinito
-Select_icon=Seleziona_l'icona
-Copy_to_clipboard=Copia_negli_appunti
-
-Paste_from_clipboard=Incolla_dagli_appunti
-lower=minuscolo
-UPPER=MAIUSCOLO
-Upper_Each_First=Prime_Lettere_In_Maiuscolo
-Upper_first=Prima_lettera_in_maiuscolo
-Replace_comma_by_and_where_appropriate=Sostituisci_le_virgole_con_'and'_dove_appropriato
-
-%0_export_successful=%0_esportazioni_riuscite
-
-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.
-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.
-You_have_changed_the_look_and_feel_setting._You_must_restart_JabRef_for_this_to_come_into_effect.=Le_impostazioni_dell'aspetto_dell'applicazione_sono_stati_cambiati._\u00c8_necessario_riavviare_JabRef_affich\u00e9_i_cambiamenti_abbiano_effetto.
-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
-Could_not_save_file._Character_encoding_'%0'_is_not_supported.=Impossibile_salvare_il_file._La_codifica_dei_caratteri_'%0'_non_\u00e8_supportata.
-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.
-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.
-All_entries_of_this_type_will_be_declared_typeless._Continue?=Tutte_le_voci_di_questo_tipo_saranno_definite_'senza_tipo'._Continuare?
-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
-%0_entries_found._To_reduce_server_load,_abstracts_will_only_be_downloaded_for_searches_returning_%1_hits_or_less.=%0_voci_trovate._Per_ridurre_il_carico_sul_server,_i_riassunti_saranno_scaricati_solo_per_ricerche_che_forniscano_meno_di_%1_risultati.
-A_string_with_that_label_already_exists=Una_stringa_con_questa_etichetta_esiste_gi\u00e0
-Overwrite=Sovrascrivi
-
-File_directory_is_not_set_or_does_not_exist!=La_cartella_non_\u00e8_impostata_o_non_esiste!
-File_directory_is_'%0':=La_cartella_dei_file_\u00e8_'%0':
-Copy_files_to_file_directory.=Copia_i_file_nella_cartella.
-Move_files_to_file_directory.=Sposta_i_file_nella_cartella.
-Copy_file_to_file_directory.=Copia_il_file_nella_cartella.
-Move_file_to_file_directory=Sposta_il_file_nella_cartella.
-New_file_link_(INSERT)=Nuovo_collegamento_a_file_(INSERT)
-Remove_file_link_(DELETE)=Rimuovi_collegamento_a_file_(DELETE)
-
-No_PDF_linked=Nessun_file_PDF_collegato
-PDF_does_not_exist=Il_file_PDF_non_esiste
-Wrote_XMP-metadata=Metadati_XMP_scritti
-
-Error_writing_to_%0_file(s).=Errore_di_scrittura_di_%0_file.
-Finished_writing_XMP-metadata._Wrote_to_%0_file(s).=Scrittura_dei_metadati_XMP_terminata._Scrittura_eseguita_su_%0_file.
-
-You_have_entered_an_invalid_search_'%0'.=\u00c8_stata_inserita_una_ricerca_non_valida_'%0'.
-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?
-
-Remove_link=Rimuovere_il_collegamento
-
-
-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
-Error_converting_Bibtex_to_XMP\:_%0=Errore_durante_la_conversione_della_voce_BibTeX_in_XMP:_%0
-
-Sort_order=Ordinamento
+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.
diff --git a/src/resource/JabRef_it.properties b/src/resource/JabRef_it.properties.bak
similarity index 92%
copy from src/resource/JabRef_it.properties
copy to src/resource/JabRef_it.properties.bak
index b103c6c..d8b6446 100644
--- a/src/resource/JabRef_it.properties
+++ b/src/resource/JabRef_it.properties.bak
@@ -7,11 +7,15 @@
 %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_entries_found._To_reduce_server_load,_abstracts_will_only_be_downloaded_for_searches_returning_%1_hits_or_less.=%0_voci_trovate._Per_ridurre_il_carico_sul_server,_i_riassunti_saranno_scaricati_solo_per_ricerche_che_forniscano_meno_di_%1_risultati.
+
+%0_export_successful=%0_esportazioni_riuscite
 %0_field_set=Definizione_del_campo_%0
 %0_import_cancelled.=Importazione_di_%0_interrotta
 %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>
 <HTML>Unpack_the_zip_file_containing_import/export_filters_for_Endnote,<BR>for_optimal_interoperability_with_JabRef</HTML>=<HTML>Decompattare_il_file_zip_contenente_i_filtri_import/export_per_EndNote,<BR>per_una_interoperabilit\u00E0_ottimale_con_JabRef</HTML>
 <no_field>=<nessun_campo>
 <select>=<seleziona>
@@ -19,7 +23,11 @@
 _on_entry_number_=_per_la_voce_numero_
 A_CiteSeer_fetch_operation_is_currently_in_progress.=Una_operazione_di_ricerca_su_CiteSeer_\u00E8_in_corso
 A_CiteSeer_import_operation_is_currently_in_progress.=Una_operazione_di_importazione_da_CiteSeer_\u00E8_in_corso
+A_string_with_that_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
@@ -43,18 +51,26 @@ 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)\:=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
@@ -62,23 +78,34 @@ 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
@@ -87,6 +114,7 @@ Background_color_for_marked_entries=Colore_di_sfondo_per_le_voci_contrassegnate
 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.
@@ -95,12 +123,14 @@ 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_connect_to_SQL_server_at_the_specified_host.=Impossibile_conettersi_al_server_SQL_sull'host_specificato.
 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
@@ -112,11 +142,14 @@ 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
@@ -129,10 +162,10 @@ Characters_to_ignore=Caratteri_da_ignorare
 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
 Cite_command_(for_Emacs/WinEdt)=Comando_di_citazione_(per_Emacs/WinEdt)
 CiteSeer_Error=Errore_CiteSeer
 CiteSeer_Fetch_Error=Errore_nel_recupero_da_CiteSeer
-CiteSeer_import_entries=Voci_da_importare_da_CiteSeer
 CiteSeer_Import_Error=Errore_di_importazione_da_CiteSeer
 CiteSeer_Import_Fields=Campi_di_importazione_da_CiteSeer
 CiteSeer_Transfer=Trasferimento_da_CoteSeer
@@ -159,6 +192,10 @@ Command_line_id=Identificativo_della_riga_di_comando
 Complete_record=Completa_la_registrazione
 Completed_Import_Fields_from_CiteSeer.=Importazione_dei_campi_da_CiteSeer_completa.
 Completed_import_from_CiteSeer.=Importazione_da_CiteSeer_completa
+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
@@ -167,24 +204,36 @@ 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.
+Copy_files_to_file_directory.=Copia_i_file_nella_cartella.
+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_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_determine_exception_message.=Impossibile_determinare_il_messaggio_dell'eccezione
 Could_not_export_entry_types=Non_\u00e8_possibile_l'esportazione_dei_tipi_di_voce
 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_entry_types=Non_\u00e8_possibile_l'importazione_dei_tipi_di_voce
 Could_not_import_preferences=Impossibile_importare_le_preferenze
 Could_not_instantiate_%0_%1=Impossibile_inizializzare_%0_%1
 Could_not_instantiate_%0_%1._Have_you_chosen_the_correct_package_path?=Impossibile_inizializzare_%0_%1._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_resolve_import_format=Impossibile_decodificare_il_formato_di_importazione
 Could_not_run_the_'gnuclient'_program._Make_sure_you_have_the_gnuserv/gnuclient_programs_installed.=Impossibile_eseguire_il_programma_'gnuclient'._Assicurarsi_che_i_programmi_gnuserv/gnuclient_siano_installati.
+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.
 Couldn't_find_an_entry_associated_with_this_URL=Impossibile_trovare_voci_associate_a_questo_URL
 Couldn't_parse_the_'citeseerurl'_field_of_the_following_entries=Non_\u00e8_stato_possibile_interpretare_il_campo_'citeseerurl'_delle_voci_seguenti
 Create_group=Crea_gruppo
@@ -203,6 +252,7 @@ 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
@@ -213,6 +263,7 @@ 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'
 # or "definita"?. In Italian the gender of the adjective must match that of the name
 defined.=definito.
 Delete=Cancella
@@ -226,6 +277,7 @@ Delete_rows=Cancella_voci
 Delete_strings=Cancella_stringhe
 Deleted=Cancellato
 Delimit_fields_with_semicolon,_ex.=Campi_delimitati_da_punto_e_virgola,_ex.
+Derby=Derby
 Descending=Discendente
 Description=Descrizione
 Deselect_all=Deseleziona_tutto
@@ -247,7 +299,14 @@ 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
+# key below already already present with colon "escaped" by a backslash
+Do_not_write_the_following_fields_to_XMP_Metadata:=Non_scrivere_i_dati_dei_campi_seguenti_nei_metadati_XMP:
+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
 Done=Fatto
 Down=Gi\u00f9
@@ -255,6 +314,9 @@ 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.
@@ -271,14 +333,20 @@ Dynamically_group_entries_by_searching_a_field_for_a_keyword=Raggruppa_dinamicam
 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
@@ -289,6 +357,8 @@ 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_has_no_citekey=La_voce_non_ha_chiave_BibTeX
 Entry_in_current_database=Voce_nel_database_corrente
 Entry_in_import=Voce_nell'importazione
 Entry_preview=Anteprima_della_voce
@@ -298,12 +368,25 @@ 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_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?
@@ -316,8 +399,12 @@ 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
@@ -327,8 +414,6 @@ Fetch=Recupera
 Fetch_Articles_Citing_your_Database=Recupera_gli_articoli_che_citano_il_tuo_database
 Fetch_CiteSeer=Recupera_da_CiteSeer
 
-Fetch_CiteSeer_by_ID=Ricerca_su_CiteSeer_per_ID
-Fetch_Medline=Recupera_da_Medline
 Fetch_Medline_by_ID=Recupera_da_Medline_per_ID
 Fetched_all_citations_from_target_database.=Tutte_le_citazioni_sono_state_recuperate_dal_database.
 Fetching_Citations=Recupero_delle_citazioni_in_corso
@@ -340,6 +425,7 @@ 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
@@ -347,17 +433,30 @@ 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=Cartella_file
+File_directory_is_'%0':=La_cartella_dei_file_\u00e8_'%0':
+
+File_directory_is_not_set_or_does_not_exist!=La_cartella_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.
 ## check below: is %0 a number?
 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
@@ -375,6 +474,7 @@ 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
@@ -401,6 +501,8 @@ 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
@@ -410,6 +512,8 @@ Hide_non-matching_entries=Nascondi_le_voci_non_corrispondenti
 ## check below
 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
@@ -417,6 +521,7 @@ HTML=HTML
 HTML_table=Tabella_HTML
 
 HTML_table_(with_Abstract_&_BibTeX)=Tabella_HTML_(con_riassunto_e_BibTeX)
+Icon=Icona
 Ignore=Ignora
 Illegal_type_name=Nome_di_tipo_illegale
 Immediate_subgroups=Sottogruppi_diretti
@@ -472,6 +577,7 @@ 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
@@ -492,15 +598,29 @@ 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
+# Extension: What does it means exactly??
+# FDAR (French translation): no idea...
+# FDAR: I contacted the programmer. Now simplified...
+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_%0_directory=Cartella_%0_principale
+Main_file_directory=Cartella_file_principale
 
 Main_layout_file=File_di_layout_principale
 Main_PDF_directory=Cartella_file_PDF_principale
@@ -508,6 +628,7 @@ 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
@@ -515,11 +636,12 @@ Mark_new_entries_with_addition_date=Contrassegna_le_nuove_voci_con_la_data_di_ag
 Mark_new_entries_with_owner_name=Contrassegna_le_nuove_voci_con_il_nome_del_proprietario
 Marked_selected=Contrassegna_la_selezione
 Medline_entries_fetched=Voci_Medline_recuperate
+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
-Miscellaneous=Varie
+MIS_Quarterly=MIS_Quarterly
 Modification_of_field=Modifica_del_campo
 Modified_group_"%0".=Gruppo_"%0"_modificato.
 Modified_groups=Gruppi_modificati
@@ -530,14 +652,22 @@ 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_file_to_file_directory=Sposta_il_file_nella_cartella.
+Move_files_to_file_directory.=Sposta_i_file_nella_cartella.
 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
+
+Native_file_dialog=Dialogo_File_nativo
 nested_aux_files=File_AUX_nidificati
 New=Nuovo
 new=nuovo
@@ -548,30 +678,37 @@ 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_custom_imports_registered_yet.=Non_ancora_registrata_alcuna_importazione_personalizzata.
 no_database_generated=nessun_database_creato
+No_databases_saved.=Nessun_database_salvato.
 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_file_associated=Nessun_file_associato
+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_Medline_entries_found.=Nessuna_voce_Medline_trovata.
+
+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)
@@ -583,7 +720,9 @@ 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
@@ -600,7 +739,9 @@ 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
@@ -613,22 +754,32 @@ 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_HTML_viewer=Percorso_per_il_visualizzatore_HTML
+
+Path_to_LatexEditor_(LEd.exe)=Percorso_per_LatexEditor_(LEd.exe)
 Path_to_LyX_pipe=Percorso_per_la_pipe_LyX
 Path_to_PDF_viewer=Percorso_per_il_visualizzatore_PDF
 Path_to_PS_viewer=Percorso_per_il_visualizzatore_PS
+# key below duplicate, also with colon "escaped" by a backslash 
+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
-Pick_titles=Scegli_titoli
 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
@@ -636,10 +787,12 @@ Please_enter_a_search_term._For_example,_to_search_all_fields_for_<b>Smith</b>,_
 Please_enter_a_semicolon_or_comma_separated_list_of_Medline_IDs_(numbers).=Immettere_una_lista_di_ID_Medline_(numerici)_separati_da_virgola_o_punto_e_virgola
 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_refer_to_the_JabRef_help_manual_on_using_the_CiteSeer_tools=Consulta_l'aiuto_in_linea_sull'utilizzo_degli_strumenti_CiteSeer
 Please_refer_to_the_JabRef_help_manual_on_using_the_CiteSeer_tools.=Fare_riferimento_al_manuale_in_linea_per_l'utilizzo_degli_strumenti_CiteSeer.
 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_
 Please_wait_until_it_has_finished.=Attendere_la_fine_dell'operazione.
 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.
@@ -649,15 +802,21 @@ 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
@@ -685,6 +844,7 @@ 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
@@ -694,6 +854,8 @@ Remove_group_"%0"_and_its_subgroups?=Rimuovere_il_gruppo_"%0"_ed_i_suoi_sottogru
 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_
@@ -701,14 +863,20 @@ Removed_entry_type.=Tipo_di_voce_rimosso.
 Removed_group_"%0".=Rimosso_gruppo_"%0".
 Removed_group_"%0"_and_its_subgroups.=Rimosso_gruppo_"%0"_e_suoi_sottogruppi.
 Removed_string=Stringa_rimossa
+Rename_to_match_citekey=Rinomina_concordemente_alla_chiave_BibTeX
 Renamed_string=Stringa_rinominata
 Replace=Sostituisci
 Replace_(regular_expression)=Sostituisci_(espressione_regolare)
+Replace_comma_by_and_where_appropriate=Sostituisci_le_virgole_con_'and'_dove_appropriato
 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
@@ -716,19 +884,26 @@ Revert_to_original_source=Ripristina_il_contenuto_iniziale
 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_in_default_table_sort_order=Salvare_nell'ordine_predefinito_per_la_tabella
 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
@@ -740,6 +915,7 @@ 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
@@ -747,6 +923,8 @@ Searched_database._Global_number_of_hits=Ricerca_effettuata._Numero_totale_di_ri
 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
@@ -759,17 +937,21 @@ 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/clear_fields=Imposta/annulla_i_campi
 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
@@ -786,6 +968,8 @@ Show_confirmation_dialog_when_deleting_entries=Chiedere_conferma_della_cancellaz
 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
@@ -806,12 +990,15 @@ 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
@@ -831,18 +1018,25 @@ 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.
 ## Removed? Switches_between_full_and_abbreviated_journal_name=Alterna_tra_nomi_delle_riviste_completi_e_abbreviati
 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_application_'%0'_associated_with_the_file_type_'%1'_could_not_be_called.=Impossibile_avviare_l'applicazione_'%0'_associata_con_il_tipo_di_file'%1'.
 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_CiteSeer_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.
@@ -850,6 +1044,7 @@ The_label_of_the_string_can_not_be_a_number.=L'etichetta_della_stringa_non_pu\u0
 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.
@@ -859,8 +1054,11 @@ The_URL_field_appears_to_be_empty_on_entry_number_=Il_campo_URL_sembra_essere_vu
 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?
 There_is_no_entry_type=Nessun_tipo_di_voce
 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>
@@ -868,21 +1066,31 @@ This_group_contains_entries_in_which_any_field_contains_the_term_<b>%0</b>=Quest
 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_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.
 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.=Questo_fa_in_modo_che_JabRef_verifichi_ciascuno_dei_%0_collegamenti_per_l'esistenza_del_file._In_caso_negativo_verranno_proposte_delle_opzioni_<BR>per_risolvere_il_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=Tipo
 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_parse_clipboard_text_as_Bibtex_entries.=Impossibile_interpretare_il_testo_negli_appunti_come_voci_BibTeX
+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_parse_the_following_URL=Impossibile_interpretare_il_seguente_URL
 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
@@ -903,23 +1111,39 @@ Up=Su
 Update_to_current_column_widths=Aggiorna_la_larghezza_delle_colonne_ai_valori_correnti
 Updated_group_selection=Selezione_di_gruppo_aggiornata
 Updating_entries...=Aggiornamento_delle_voci_in_corso...
+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
+User_does_not_have_sufficient_privileges.\n=L'utente_non_ha_privilegi_sufficienti.\n
+Username_\:=Username:
 Uses_default_application=Usa_l'applicazione_predefinita
 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
@@ -927,22 +1151,32 @@ 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_have_changed_the_language_setting._You_must_restart_JabRef_for_this_to_come_into_effect.=La_lingua_\u00e8_stata_modificata._Riavviare_Jabref_per_rendere_effettiva_la_modifica.
+You_have_changed_the_look_and_feel_setting._You_must_restart_JabRef_for_this_to_come_into_effect.=Le_impostazioni_dell'aspetto_dell'applicazione_sono_stati_cambiati._Riavviare_Jabref_per_rendere_effettive_le_modifiche.
 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_enter_an_integer_value_in_the_text_field_for=Immettere_un_numero_intero_nel_campo_di_testo_per
 You_must_fill_in_a_name_for_the_entry_type.=Fornire_un_nome_per_il_tipo_di_voce.
@@ -950,211 +1184,49 @@ You_must_restart_JabRef_for_the_new_key_bindings_to_work_properly.=Riavviare_Jab
 You_must_select_at_least_one_row_to_perform_this_operation.=Selezionare_almeno_una_riga_per_effettuare_questa_operazione
 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
+Fetch_Citeseer=Recupera_da_Citeseer
+Error_fetching_from_Citeseer\:\\n=Errore_durante_la_ricerca_Citeseer\:\\n
+Progress:_%0_of_%1=Stato_d'avanzamento:_%0_di_%1
+Error_while_fetching_from_JSTOR=Errore_durante_la_ricerca_JSTOR
+Fetching_Medline_by_id...=Ricerca_Medline_per_id...
+Fetching_Medline_by_term...=Ricerca_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
 
-Save_all_open_databases=Salva_tutti_i_database_aperti
-
-Automatically_remove_exact_duplicates=Rimuovi_automaticamente_i_duplicati_esatti
-Enable_word/name_autocompletion=Abilita_autocompletamento_di_parole/nomi
-Editor_options=Opzioni_dell'editor
-Use_autocompletion_for_the_following_fields=Usa_l'autocompletamento_per_i_seguenti_campi
-Saving_all_databases...=Salvataggio_di_tutti_i_database...
-Save_all_finished.=Terminato_il_salvataggio_di_tutti_i_database.
-Saved_%0_databases.=Salvati_%0_database.
-No_databases_saved.=Nessun_database_salvato.
-Connection_to_IEEEXplore_failed=Connessione_a_IEEEXplore_fallita
-
-Link=Collegamento
-File_type=Tipo_di_file
-Edit_file_link=Modifica_il_collegamento_al_file
-
-Path_to_LatexEditor_(LEd.exe)=Percorso_per_LatexEditor_(LEd.exe)
-Move_external_links_to_'file'_field=Sposta_i_collegamenti_esterni_nel_campo_'file'
-Push_selection_to_Vim=Invia_le_voci_selezionate_a_Vim
-Pushed_citations_to_Vim=Citazioni_inviate_a_Vim
-
-Waiting_for_ArXiv...=In_attesa_di_ArXiv...
-Processing_=Elaborazione_di_
-Error_while_fetching_from_OIA2=Errore_durante_una_ricerca_da_OIA2
-
-No_entries_found_for_the_search_string_'%0'=Nessuna_voce_trovata_in_base_alla_stringa_di_ricerca_'%0'
-
-The_chosen_encoding_'%0'_could_not_encode_the_following_characters\:_=La_codifica_scelta_'%0'_non_pu\u00f2_codificare_i_caratteri_seguenti:_
-Operation_not_supported=Operazione_non_supportata
-Drag_and_Drop_Error=Errore_di_'Drag_&_Drop'
-File_download=Download_di_file
-Error_while_downloading_file\:=Errore_nel_corso_del_download_del_file:
-Only_one_item_is_supported=Un_solo_elemento_\u00e8_supportato
-Do_not_write_the_following_fields_to_XMP_Metadata\:=Non_scrivere_i_dati_dei_campi_seguenti_nei_metadati_XMP:
-<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>
-# Check translation below
-Drop_%0=Rilascia_%0
-Link_to_file_%0=Collegamento_al_file_%0
-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?
-XMP_metadata_found_in_PDF\:_%0=Metadati_XMP_trovati_nel_file_PDF:_%0
-Link_to_PDF_%0=Collegamento_al_file_PDF_%0
-Writing_XMP_to_'%0'...=Scrittura_dei_metadati_XMP_in_'%0'...
-Wrote_XMP_to_'%0'.=Scritti_i_metadati_XMP_in_'%0'.
-Error_writing_XMP_to_file\:_%0=Errore_durante_la_scrittura_dei_metadati_XMP_nel_file:_%0_
-Error_converting_Bibtex_to_XMP:_%0=Errore_durante_la_conversione_della_voce_BibTeX_in_XMP:_%0
-Error_while_converting_BibtexEntry_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'...
-Could_not_find_directory_for_%0-files\:_%1=Impossibile_trovare_la_cartella_per_i_file_%0:_%1
-This_operation_requires_at_least_one_entry.=Questa_operazione_richiede_almeno_una_voce.
-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?
-No_XMP_metadata_found_in_=Non_sono_stati_trovati_metadati_XMP_in_
-Please_refer_to_the_JabRef_help_manual_on_using_the_CiteSeer_tools=Consulta_l'aiuto_in_linea_sull'utilizzo_degli_strumenti_CiteSeer
-Search_IEEExplore=Ricerca_in_IEEExplore
-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':
-An_Error_occurred_while_fetching_from_OAI2_source_(%0)\:=Errore_durante_il_recupero_dalla_fonte_OAI2_(%0):
-Abbreviated_%0_journal_names.=%0_nomi_di_riviste_abbreviati.
-Unabbreviated_%0_journal_names.=%0_nomi_di_riviste_per_esteso.
-
-Help_contents=Contenuti_dell'aiuto
-Edit_entry=Modifica_voce
-Save_database_as_...=Salva_il_database_come...
-Save_selected_as_...=Salva_la_selezione_come...
-Toggle_search_panel=Mostra/Nascondi_il_pannello_di_ricerca
-Append_contents_from_a_BibTeX_database_into_the_currently_viewed_database=Accoda_il_contenuto_di_un_database_BibTeX_al_database_corrente
-Edit_strings=Modifica_le_stringhe
-Toggle_groups_interface=Mostra/Nascondi_l'interfaccia_dei_gruppi
-Toggle_entry_preview=Mostra/Nascondi_l'anteprima
-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
-Autogenerate_BibTeX_keys=Generazione_automatica_delle_chiavi_BibTeX
-Will_write_XMP-metadata_to_the_PDFs_linked_from_selected_entries.=Scrive_i_metadati_XMP_nei_file_PDF_collegati_alle_voci_selezionate
-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)
-Unabbreviate_journal_names_of_the_selected_entries=Mostra_il_nome_completo_delle_riviste_per_le_voci_selezionate
-Do_not_show_splash_window_at_startup=Non_mostrare_la_schermata_d'avvio
-
-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
-# Extension: What does it means exactly??
-# FDAR (French translation): no idea...
-# FDAR: I contacted the programmer. Now simplified...
-Leave_files_in_their_current_directory.=Lascia_i_file_nella_cartella_corrente
-Leave_file_in_its_current_directory.=Lascia_il_file_nella_cartella_corrente
-Extension=Estensione
-Application=Applicazione
-Icon=Icona
-
-Path_to_%0_not_defined=Percorso_per_%0_non_definito
-
-Path_to_Vim=Percorso_per_Vim
-Vim_Server_Name=Nome_del_server_Vim
-MS_Office_2007=MS_Office_2007
-Manage_external_file_types=Gestione_dei_tipi_di_file_esterni
-All_custom_file_types_will_be_lost._Proceed?=Tutti_i_tipi_di_file_personalizzati_andranno_perduti._Continuare?
-Reset_file_type_definitons=Ristabilisci_le_definizioni_originali_dei_tipi_di_file
-Edit_file_type=Modifica_il_tipo_di_file
-Could_not_run_the_'vim'_program.=Impossibile_eseguire_il_programma_'vim'.
-
-Show_file_column=Visualizza_la_colonna_File
-This_database_was_written_using_an_older_version_of_JabRef.=Questo_database_\u00e8_stato_generato_da_una_versione_precedente_di_JabRef.
-
-File_'%0'_is_already_open.=Il_file_'%0'__\u00e8_gi\u00e0_aperto.
-
-File_has_been_updated_externally._What_do_you_want_to_do?=Il_file_\u00e8_stato_aggiornato_da_un'applicazione_esterna._Cosa_vuoi_fare?
-
-Entry_has_no_citekey=La_voce_non_ha_chiave_BibTeX
-Rename_to_match_citekey=Rinomina_concordemente_alla_chiave_BibTeX
-
-Change_file_type=Cambia_il_tipo_di_file
-Define_'%0'=Definisci_'%0'
-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?
-Unable_to_open_file.=Impossibile_aprire_il_file
-Undefined_file_type=Tipo_di_file_non_definito
-
-Error\:_=Errore:_
+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_di_file_principale?
+Rename_to_'%0'=Rinomina_in_'%0'
+Move_to_file_directory=Sposta_nella_cartella_di_file_principale
 
-Do_you_want_JabRef_to_do_the_following_operations?=Vuoi_che_JabRef_esegua_le_operazioni_seguenti?
-Upgrade_file=Aggiornamento_del_file
-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?
-Upgrade_external_links=Aggiorna_i_collegamenti_esterni
-Upgraded_links.=Collegamenti_aggiornati.
-This_entry_has_no_BibTeX_key._Generate_key_now?=Questa_voce_\u00e8_priva_di_una_chiave_BibTeX._Generarla_ora?
-Target_file_cannot_be_a_directory.=L'oggetto_deve_essere_un_file,_non_una_cartella.
+You_have_changed_the_menu_and_label_font_size._You_must_restart_JabRef_for_this_to_come_into_effect.=Sono_state_modificate_le_dimensioni_del_carattere_di_menu_ed_etichette._Riavviare_Jabref_per_rendere_effettive_le_modifiche.
 
-Finished_autosetting_external_links.=Impostazione_automatica_dei_collegamenti_esterni_terminata.
-No_files_found.=Nessun_file_trovato.
+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.
 
-External_file_links=Collegamenti_a_file_esterni
-Main_%0_directory=Cartella_%0_principale
-Synchronize_file_links=Sincronizza_il_collegamento_ai_file
-Upgrade_external_PDF/PS_links_to_use_the_'%0'_field.=Aggiornare_i_collegamenti_esterni_PDF/PS_per_utilizzare_il_campo_'%0'.
-Broken_link=Collegamento_interrotto
-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
-Upgrade_old_external_file_links_to_use_the_new_feature=Aggiornare_i_vecchi_collegamenti_ai_file_esterni_per_utilizzare_la_nuova_funzione
-Set_main_external_file_directory=Impostare_la_cartella_principale_dei_file_esterni
-Do_not_show_these_options_in_the_future=Non_mostrare_queste_opzioni_in_futuro
-File_directory=Cartella_file
-Autosetting_links=Impostazione_automatica_dei_collegamenti
-Autoset_external_links=Impostazione_automatica_dei_collegamenti_esterni
-Link_local_file=Collegamento_al_file_locale
-
-Searching_for_files=Ricerca_dei_file
-
-
-Could_not_open_link=Impossibile_aprire_il_collegamento
-The_application_'%0'_associated_with_the_file_type_'%1'_could_not_be_called.=Impossibile_avviare_l'applicazione_'%0'_associata_con_il_tipo_di_file'%1'.
-
-Native_file_dialog=Dialogo_File_nativo
-Beta_version=Versione_Beta
-# key below already already present with colon "escaped" by a backslash
-Do_not_write_the_following_fields_to_XMP_Metadata:=Non_scrivere_i_dati_dei_campi_seguenti_nei_metadati_XMP:
-MIS_Quarterly=MIS_Quarterly
-Use_default_viewer=Usa_il_visualizzatore_predefinito
-Select_icon=Seleziona_l'icona
-Copy_to_clipboard=Copia_negli_appunti
-
-Paste_from_clipboard=Incolla_dagli_appunti
-lower=minuscolo
-UPPER=MAIUSCOLO
-Upper_Each_First=Prime_Lettere_In_Maiuscolo
-Upper_first=Prima_lettera_in_maiuscolo
-Replace_comma_by_and_where_appropriate=Sostituisci_le_virgole_con_'and'_dove_appropriato
-
-%0_export_successful=%0_esportazioni_riuscite
-
-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.
-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.
-You_have_changed_the_look_and_feel_setting._You_must_restart_JabRef_for_this_to_come_into_effect.=Le_impostazioni_dell'aspetto_dell'applicazione_sono_stati_cambiati._\u00c8_necessario_riavviare_JabRef_affich\u00e9_i_cambiamenti_abbiano_effetto.
-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
-Could_not_save_file._Character_encoding_'%0'_is_not_supported.=Impossibile_salvare_il_file._La_codifica_dei_caratteri_'%0'_non_\u00e8_supportata.
-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.
-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.
-All_entries_of_this_type_will_be_declared_typeless._Continue?=Tutte_le_voci_di_questo_tipo_saranno_definite_'senza_tipo'._Continuare?
-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
-%0_entries_found._To_reduce_server_load,_abstracts_will_only_be_downloaded_for_searches_returning_%1_hits_or_less.=%0_voci_trovate._Per_ridurre_il_carico_sul_server,_i_riassunti_saranno_scaricati_solo_per_ricerche_che_forniscano_meno_di_%1_risultati.
-A_string_with_that_label_already_exists=Una_stringa_con_questa_etichetta_esiste_gi\u00e0
-Overwrite=Sovrascrivi
-
-File_directory_is_not_set_or_does_not_exist!=La_cartella_non_\u00e8_impostata_o_non_esiste!
-File_directory_is_'%0':=La_cartella_dei_file_\u00e8_'%0':
-Copy_files_to_file_directory.=Copia_i_file_nella_cartella.
-Move_files_to_file_directory.=Sposta_i_file_nella_cartella.
-Copy_file_to_file_directory.=Copia_il_file_nella_cartella.
-Move_file_to_file_directory=Sposta_il_file_nella_cartella.
-New_file_link_(INSERT)=Nuovo_collegamento_a_file_(INSERT)
-Remove_file_link_(DELETE)=Rimuovi_collegamento_a_file_(DELETE)
-
-No_PDF_linked=Nessun_file_PDF_collegato
-PDF_does_not_exist=Il_file_PDF_non_esiste
-Wrote_XMP-metadata=Metadati_XMP_scritti
-
-Error_writing_to_%0_file(s).=Errore_di_scrittura_di_%0_file.
-Finished_writing_XMP-metadata._Wrote_to_%0_file(s).=Scrittura_dei_metadati_XMP_terminata._Scrittura_eseguita_su_%0_file.
-
-You_have_entered_an_invalid_search_'%0'.=\u00c8_stata_inserita_una_ricerca_non_valida_'%0'.
-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?
-
-Remove_link=Rimuovere_il_collegamento
-
-
-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
-Error_converting_Bibtex_to_XMP\:_%0=Errore_durante_la_conversione_della_voce_BibTeX_in_XMP:_%0
-
-Sort_order=Ordinamento
diff --git a/src/resource/JabRef_no.properties b/src/resource/JabRef_no.properties
index e2f3177..ba60abf 100644
--- a/src/resource/JabRef_no.properties
+++ b/src/resource/JabRef_no.properties
@@ -7,11 +7,14 @@
 %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_entries_found._To_reduce_server_load,_abstracts_will_only_be_downloaded_for_searches_returning_%1_hits_or_less.=%0_enheter_funnet._For_\u00E5_redusere_belastningen_p\u00E5_serveren_vil_sammendrag_bare_bli_lastet_ned_for_s\u00F8k_som_returnerer_%1_eller_f\u00e6rre_treff.
+%0_export_successful=%0-eksport_lyktes
 %0_field_set=%0-felt_satt
 %0_import_cancelled.=%0-import_kansellert.
 %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>
 <HTML>Unpack_the_zip_file_containing_import/export_filters_for_Endnote,<BR>for_optimal_interoperability_with_JabRef</HTML>=<HTML>Pakk_ut_zip-filen_som_inneholder_import-_og_eksportfiltre_for<BR>EndNote,_for_best_mulig_kompatibilitet_med_JabRef</HTML>
 <no_field>=<ingen_felter>
 <select>=<velg>
@@ -19,7 +22,12 @@
 _on_entry_number_=_ved_enhet_nummer_
 A_CiteSeer_fetch_operation_is_currently_in_progress.=En_henteoperasjon_fra_CiteSeer_p\u00E5g\u00E5r_allerede.
 A_CiteSeer_import_operation_is_currently_in_progress.=En_importoperasjon_fra_CiteSeer_p\u00E5g\u00E5r_allerede.
+
+A_string_with_that_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
@@ -44,18 +52,26 @@ 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_Error_occurred_while_fetching_from_OAI2_source_(%0)\:=En_feil_oppsto_ved_nedlasting_fra_OIA2-kilde_(%0):
+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\:=
 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
@@ -63,23 +79,33 @@ 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.=
 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...=
 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
@@ -88,6 +114,7 @@ Background_color_for_marked_entries=Bakgrunnsfarge_for_merkede_enheter
 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
@@ -95,11 +122,13 @@ BibTeX_key_not_set._Enter_a_name_for_the_downloaded_file=BibTeX-n\u00F8kkel_er_i
 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_connect_to_SQL_server_at_the_specified_host.=
 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.
@@ -111,11 +140,14 @@ 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
@@ -127,11 +159,11 @@ 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=
 
 Cite_command_(for_Emacs/WinEdt)=Kommando_for_referanser_(for_Emacs/WinEdt)
 CiteSeer_Error=CiteSeer-feil
 CiteSeer_Fetch_Error=Feil_ved_henting_fra_CiteSeer
-CiteSeer_import_entries=CiteSeer_importer_enheter
 CiteSeer_Import_Error=Feil_ved_import_fra_CiteSeer
 CiteSeer_Import_Fields=CiteSeer_importer_felter
 CiteSeer_Transfer=CiteSeer-overf\u00F8ring
@@ -156,6 +188,10 @@ Command_line_id=Kommandolinje-id
 Complete_record=Komplett_form
 Completed_Import_Fields_from_CiteSeer.=Fullf\u00F8rte_import_av_felter_fra_CiteSeer
 Completed_import_from_CiteSeer.=Fullf\u00F8rte_import_fra_CiteSeer
+Connect=
+Connect_to_SQL_database=
+Connect_to_SQL_Database=
+Connection_to_IEEEXplore_failed=Oppkobling_til_IEEExplore_mislyktes
 Contained_in=Inneholdt_i
 Content=Innhold
 Copied=Kopierte
@@ -164,15 +200,23 @@ 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_til_vert
 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_determine_exception_message.=
 Could_not_export_entry_types=Kunne_ikke_eksportere_enhetstyper
 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=Kunne_ikke_finne_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_entry_types=Kunne_ikke_importere_enhetstyper
@@ -180,10 +224,15 @@ Could_not_import_preferences=Kunne_ikke_importere_innstillinger
 Could_not_instantiate_%0_%1=Kunne_ikke_instansiere_%0_%1
 
 Could_not_instantiate_%0_%1._Have_you_chosen_the_correct_package_path?=Kunne_ikke_instansiere_%0_%1._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=
 Could_not_resolve_import_format=Kunne_ikke_bestemme_importformat
 Could_not_run_the_'gnuclient'_program._Make_sure_you_have_the_gnuserv/gnuclient_programs_installed.=Kunne_ikke_kalle_'gnuclient'-programmet._Kontroller_at_du_har_installert_gnuserv/gnuclient-programmene.
+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.
 Couldn't_find_an_entry_associated_with_this_URL=Fant_ingen_enhet_for_f\u00F8lgende_URL
 Couldn't_parse_the_'citeseerurl'_field_of_the_following_entries=Kunne_ikke_tolke_'citeseerurl'-feltet_for_f\u00F8lgende_enheter
 Create_group=Opprett_gruppe
@@ -203,6 +252,7 @@ Cut=Klipp_ut
 cut_entries=klippet_ut
 cut_entry=klipp_ut_enhet
 Cut_pr=Klippet_ut
+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
@@ -213,6 +263,7 @@ 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'
 defined.=er_definert.
 Delete=Slett
 Delete_custom=Slett_tilpasset
@@ -225,6 +276,7 @@ Delete_rows=Slett_rader
 Delete_strings=Slett_strenger
 Deleted=Slettet
 Delimit_fields_with_semicolon,_ex.=Avgrens_felter_med_semikolon,_f.eks.
+Derby=
 Descending=Synkende
 Description=Beskrivelse
 Deselect_all=Velg_ingen
@@ -246,7 +298,13 @@ 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:=
+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
 Done=Ferdig
 Down=Ned
@@ -254,6 +312,9 @@ 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.
@@ -269,14 +330,20 @@ Dynamically_group_entries_by_searching_a_field_for_a_keyword=Grupper_enheter_dyn
 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
@@ -287,6 +354,8 @@ 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_has_no_citekey=Enheten_har_ingen_BibTeX-n\u00F8kkel
 Entry_in_current_database=Enhet_i_eksisterende_database
 Entry_in_import=Enhet_i_import
 Entry_preview=Forh\u00E5ndsvisning
@@ -296,13 +365,27 @@ 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\:_=
+Error_converting_Bibtex_to_XMP:_%0=
+
+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.=
 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\:=
+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_til_filen_'%0'
+
+Establishing_SQL_connection...=
 Exceptions=Feilinformasjon
 Existing_file=Eksisterende_fil
 exists._Overwrite_file?=eksisterer._Erstatt_filen?
@@ -315,8 +398,12 @@ 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=
 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
@@ -325,8 +412,6 @@ Fetch=Hent
 Fetch_Articles_Citing_your_Database=Hent_publikasjoner_som_refererer_enheter_i_din_database
 Fetch_CiteSeer=Hent_CiteSeer
 
-Fetch_CiteSeer_by_ID=Hent_CiteSeer_ved_hjelp_av_ID
-Fetch_Medline=Hent_Medline
 Fetch_Medline_by_ID=Hent_Medline_ved_hjelp_av_ID
 Fetched_all_citations_from_target_database.=Hentet_alle_refererende_publikasjoner_fra_CiteSeer.
 Fetching_Citations=Henter_referanser
@@ -339,6 +424,7 @@ 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
@@ -346,17 +432,31 @@ 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=Filkatalog
+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).=
 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
@@ -374,6 +474,7 @@ Format_used=Format_brukt
 Formatter_Name=Navn_p\u00e5_formaterer
 Formatter_not_found=Ukjent_formaterer
 found=funnet
+Found_%0_plugin(s)=
 found_in_aux_file=funnet_i_aux-fil
 Full_name=Fullt_navn
 General=Generelt
@@ -398,8 +499,10 @@ Groups=Gruppering
 Harvard_RTF=Harvard_RTF
 Have_you_chosen_the_correct_package_path?=
 Help=Hjelp
+
+Help_contents=Oversikt_over_hjelpefiler
 Help_on_groups=Hjelp_om_grupper
-Help_on_key_patterns=Hjelp_om_n\u00F8kkeloppskrifter
+Help_on_key_patterns=Hjelp_om_n\u00F8kkelgenerering
 Help_on_Preview_Settings=
 Help_on_Regular_Expression_Search=
 Hide_non-hits=Skjul_ikke-treff
@@ -407,12 +510,15 @@ 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
 Illegal_type_name=Ugyldig_typenavn
 Immediate_subgroups=N\u00e6rmeste_undergrupper
@@ -468,6 +574,7 @@ Inverted=Invertert
 is_a_standard_type.=er_en_standardtype.
 ISO_abbreviation=ISO-forkortelse
 Item_list_for_field=Ordliste_for_felt
+jabref=
 JabRef_help=JabRef-hjelp
 JabRef_preferences=JabRef-oppsett
 Journal_abbreviations=Journalforkortelser
@@ -480,22 +587,35 @@ Keep_upper=Behold_\u00F8verste
 Key_bindings=Hurtigtaster
 Key_bindings_changed=Hurtigtaster_endret
 Key_generator_settings=Innstillinger_for_n\u00F8kkelgenerering
-Key_pattern=N\u00F8kkeloppskrift
+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=
 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)=
 Load_session=Gjenopprett_tilstand
 Loading_session...=Gjenoppretter_tilstand...
+localhost=
 Look_and_feel=Utseende
 Looking_for_pdf...=Ser_etter_pdf...
+lower=sm\u00E5_bokstaver
+Main_%0_directory=Hovedkatalog_for_%0-filer
+Main_file_directory=
 
 Main_layout_file=Hoved-layoutfil
 Main_PDF_directory=Hovedkatalog_for_PDF-filer
@@ -503,6 +623,7 @@ 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
@@ -510,11 +631,12 @@ 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
 Medline_entries_fetched=Medline-enheter_hentet
+Memory_Stick_Mode=
 Menu_and_label_font_size=St\u00F8rrelse_av_menyfonter
 Merged_external_changes=Inkorporerte_eksterne_endringer
 Messages=Meldinger
 Messages_and_Hints=Beskjeder_og_hint
-Miscellaneous=Diverse
+MIS_Quarterly=MIS_Quarterly
 Modification_of_field=Endring_av_felt
 Modified_group_"%0".=Endret_gruppen_"%0".
 Modified_groups=Endrede_grupper
@@ -525,14 +647,22 @@ 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_file_to_file_directory=Flytt_fil_til_filkatalog.
+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_database=
 Name=Navn
 Name_formatter=Navneformaterer
 Natbib_style=Natbib-stil
+
+Native_file_dialog=System-fildialog
 nested_aux_files=n\u00F8stede_aux-filer
 New=Ny
 new=ny
@@ -543,30 +673,36 @@ 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_custom_imports_registered_yet.=Ingen_egne_importformater_er_definert.
 no_database_generated=ingen_database_generert
+No_databases_saved.=Ingen_databaser_lagret.
 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.=
-No_file_associated=Ingen_assosiert_fil
+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_Medline_entries_found.=Ingen_Medline-enheter_funnet
+
+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\:=
 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)
@@ -579,7 +715,9 @@ 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
@@ -595,7 +733,9 @@ Opening=\u00C5pner
 Opening_preferences...=\u00C5pner_innstillinger...
 
 OpenOffice_Calc=OpenOffice_Calc
+OpenOffice_CSV=
 Operation_canceled.\n=Operasjonen_avbrutt.\n
+Operation_not_supported=Operasjonen_er_ikke_st\u00F8ttet
 Optional_fields=Valgfrie_felter
 Options=Valg
 or=eller
@@ -607,21 +747,29 @@ Override_default_file_directories=
 
 Override_default_font_settings=Overstyr_standardfonter
 override_the_bibtex_key_by_the_selected_text=
+Overwrite=Skriv_over
 Overwrite_existing_field_values=Skriv_over_eksisterende_verdier
 Overwrite_keys=Skriv_over_n\u00F8kler
 pairs_processed=par_revidert
+Password_\:=
 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_HTML_viewer=Sti_til_HTML-leser
+Path_to_LatexEditor_(LEd.exe)=Sti_til_LatexEditor_(LEd.exe)
 Path_to_LyX_pipe=Sti_til_LyX-pipe
 Path_to_PDF_viewer=Sti_til_PDF-leser
 Path_to_PS_viewer=Sti_til_PS-leser
+
+Path_to_Vim=Sti_til_Vim
 Path_to_WinEdt.exe=Sti_til_WinEdt.exe
 PDF_directory=
+PDF_does_not_exist=PDF-filen_finnes_ikke
 Personal_journal_list=Personlig_journalliste
-Pick_titles=Velg_titler
 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.
@@ -629,10 +777,12 @@ Please_enter_a_search_term._For_example,_to_search_all_fields_for_<b>Smith</b>,_
 Please_enter_a_semicolon_or_comma_separated_list_of_Medline_IDs_(numbers).=Du_m\u00E5_oppgi_en_semikolon-_eller_kommaseparert_liste_av_Medline-IDer_(tall).
 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_refer_to_the_JabRef_help_manual_on_using_the_CiteSeer_tools=Se_i_JabRef-manualen_for_informasjon_om_bruk_av_CiteSeer-verkt\u00F8yene
 Please_refer_to_the_JabRef_help_manual_on_using_the_CiteSeer_tools.=Vennligst_se_JabRef-dokumentasjonen_for_informasjon_om_bruk_av_CiteSeer-verkt\u00F8yene.
 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_=
 Please_wait_until_it_has_finished.=Vennligst_vent_til_den_er_fullf\u00F8rt.
 Possible_duplicate_entries=Mulige_duplikater
 Possible_duplicate_of_existing_entry._Click_to_resolve.=Mulig_duplikat_av_eksisterende_enhet._Klikk_for_\u00e5_h\u00e5ndtere.
@@ -642,15 +792,21 @@ Preferences_recorded.=Lagret_oppsett.
 Preview=Forh\u00E5ndsvisning
 Previous_entry=Forrige_enhet
 Primary_sort_criterion=Prim\u00e6rt_sorteringskriterium
+Print_Preview=
+Printing_Entry_Preview=
 Problem_with_parsing_entry=Problem_med_\u00E5_lese_enhet
+Processing_=Arbeider_
 Program_output=Output_fra_program
 PS_directory=
 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=
+Pushed_citations_to_%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
@@ -677,6 +833,7 @@ 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
@@ -686,6 +843,7 @@ 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_
@@ -693,33 +851,46 @@ Removed_entry_type.=Slettet_enhetstype.
 Removed_group_"%0".=Fjernet_gruppen_"%0"
 Removed_group_"%0"_and_its_subgroups.=Fjernet_gruppen_"%0"_og_dens_undergrupper
 Removed_string=Fjernet_streng
+
+Rename_to_match_citekey=Endre_navn_for_\u00E5_samsvare_med_BibTeX-n\u00F8kkel
 Renamed_string=Endret_navn_p\u00e5_streng
 Replace=
 Replace_(regular_expression)=Erstatt_(regul\u00e6ruttrykk)
+Replace_comma_by_and_where_appropriate=Bytt_ut_komma_med_'and'_der_det_passer
 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=
 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_in_default_table_sort_order=Lagre_i_standardsortering_for_tabell
 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
@@ -731,6 +902,8 @@ Search_expression=S\u00F8keuttrykk
 Search_for=S\u00F8k_etter
 Search_general_fields=S\u00f8k_i_generelle_felter
 Search_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)
@@ -738,6 +911,8 @@ Searched_database._Global_number_of_hits=
 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
@@ -750,16 +925,20 @@ 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_\:=
+Server_Type_\:=
 
 Set/clear_fields=Sett/fjern_felter
 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
@@ -775,6 +954,8 @@ Show_confirmation_dialog_when_deleting_entries=Vis_dialog_for_\u00E5_bekrefte_sl
 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
@@ -795,12 +976,15 @@ 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.=
 Start_incremental_search=Start_inkrementelt_s\u00F8k
 Start_search=Start_s\u00f8k
 Starting_import=Starter_import
@@ -819,18 +1003,24 @@ 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_application_'%0'_associated_with_the_file_type_'%1'_could_not_be_called.=Applikasjonen_'%0'_assosiert_med_filtypen_'%1'_kunne_ikke_startes.
 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_de_f\u00F8lgende_tegnene:_
 The_CiteSeer_fetch_operation_returned_zero_results.=Nedlastingen_fra_CiteSeer_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.
@@ -838,6 +1028,7 @@ The_label_of_the_string_can_not_be_a_number.=Navnet_p\u00E5_strengen_kan_ikke_v\
 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.
@@ -847,8 +1038,11 @@ The_URL_field_appears_to_be_empty_on_entry_number_=URL-feltet_ser_ut_til_\u00E5_
 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?
 There_is_no_entry_type=Ingen_enhetstype
 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
@@ -856,21 +1050,32 @@ This_group_contains_entries_in_which_any_field_contains_the_term_<b>%0</b>=Denne
 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_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_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=Type
 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_parse_clipboard_text_as_Bibtex_entries.=Kunne_ikke_lese_tekst_p\u00E5_utklippstavlen_som_BibTeX-enheter.
+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_parse_the_following_URL=Kunne_ikke_tolke_f\u00F8lgende_URL
 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
@@ -889,44 +1094,69 @@ Up=Opp
 Update_to_current_column_widths=Bruk_n\u00E5v\u00E6rende_kolonnebredder
 Updated_group_selection=Updated_group_selection
 Updating_entries...=Oppdaterer_enheter...
+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=
 Use_regular_expressions=Bruk_"regular_expressions"
 Use_the_following_delimiter_character(s)=Use_the_following_delimiter_character(s)
+User_does_not_have_sufficient_privileges.\n=
+Username_\:=
 Uses_default_application=Bruker_standardprogram
 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.=
 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_have_changed_the_language_setting._You_must_restart_JabRef_for_this_to_come_into_effect.=Du_har_valgt_et_nytt_spr\u00E5k._Du_m\u00E5_starte_JabRef_p\u00E5_nytt_for_at_dette_skal_tre_i_kraft.
+You_have_changed_the_look_and_feel_setting._You_must_restart_JabRef_for_this_to_come_into_effect.=Du_har_endret_instillingen_for_utseende._Du_m\u00E5_starte_JabRef_p\u00E5_nytt_for_at_dette_skal_tre_i_kraft.
 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_enter_an_integer_value_in_the_text_field_for=Du_m\u00E5_skrive_et_heltall_i_tekstfeltet_for
 You_must_fill_in_a_name_for_the_entry_type.=Du_m\u00E5_velge_et_navn_for_enhetstypen.
@@ -934,206 +1164,48 @@ You_must_restart_JabRef_for_the_new_key_bindings_to_work_properly.=Du_m\u00E5_st
 You_must_select_at_least_one_row_to_perform_this_operation.=Du_m\u00E5_velge_minst_\u00E9n_rad_f\u00F8r_du_kan_bruke_denne_operasjonen.
 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:=
+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=
+Fetch_Citeseer=
+Error_fetching_from_Citeseer\:\\n=
+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=
 
-Save_all_open_databases=Lagre_alle_\u00E5pne_databaser
-
-Automatically_remove_exact_duplicates=Fjern_eksakte_duplikater_automatisk
-Enable_word/name_autocompletion=Aktiver_autokomplettering_av_navn/ord
-Editor_options=Alternativer_for_redigering
-Use_autocompletion_for_the_following_fields=Bruk_autokomplettering_for_f\u00F8lgende_felter
-Saving_all_databases...=Lagrer_alle_databaser...
-Save_all_finished.=Fullf\u00F8rte_lagring_av_alle_databaser
-Saved_%0_databases.=Lagret_%0_databaser.
-No_databases_saved.=Ingen_databaser_lagret.
-Connection_to_IEEEXplore_failed=Oppkobling_til_IEEExplore_mislyktes
-
-Link=Link
-File_type=Filtype
-Edit_file_link=Rediger_link
-Path_to_LatexEditor_(LEd.exe)=Sti_til_LatexEditor_(LEd.exe)
-Move_external_links_to_'file'_field=Flytt_eksterne_linker_til_'file'-feltet
-Push_selection_to_Vim=Send_valgte_enheter_til_Vim
-Pushed_citations_to_Vim=Sendte_enheter_til_Vim
-Waiting_for_ArXiv...=Venter_p\u00E5_ArXiv
-Processing_=Arbeider_
-Error_while_fetching_from_OIA2=Feil_ved_nedlasting_fra_OIA2
-No_entries_found_for_the_search_string_'%0'=Fant_ingen_enheter_for_s\u00F8keteksten_'%0'
-
-The_chosen_encoding_'%0'_could_not_encode_the_following_characters\:_=Den_valgte_tegnkodingen_'%0'_kunne_ikke_kode_de_f\u00F8lgende_tegnene:_
-Operation_not_supported=Operasjonen_er_ikke_st\u00F8ttet
-
-Drag_and_Drop_Error=Feil_ved_trekk-og-slipp
-
-File_download=Filnedlasting
-Error_while_downloading_file\:=Feil_ved_nedlasting_av_fil
-Only_one_item_is_supported=Bare_ett_element_av_gangen_er_st\u00F8ttet
-Do_not_write_the_following_fields_to_XMP_Metadata\:=Ikke_skriv_de_f\u00F8lgende_feltene_til_XMP-metadata
-<HTML>Could_not_find_file_'%0'<BR>linked_from_entry_'%1'</HTML>=<HTML>Kunne_ikke_finne_filen_'%0'<BR>linket_fra_enheten_'%1'</HTML>
-Drop_%0=Slipp_%0
-
-Link_to_file_%0=Link_til_filen_%0
-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?
-XMP_metadata_found_in_PDF\:_%0=XMP-metadata_funnet_i_PDF:_%0
-Link_to_PDF_%0=Link_til_PDF_%0
-Writing_XMP_to_'%0'...=Skriver_XMP_til_'%0'
-Wrote_XMP_to_'%0'.=Skrev_XMP_til_'%0'
-Error_writing_XMP_to_file\:_%0=Feil_ved_skriving_av_XMP_til_filen_'%0'
-Error_converting_Bibtex_to_XMP:_%0=
-Error_while_converting_BibtexEntry_to_XMP_%0=Feil_ved_konvertering_av_BibTeX-enheten_til_XMP_%0
-Error_converting_XMP_to_'%0'...=Feil_ved_tilpassing_av_XMP_for_'%0'...
-
-Could_not_find_directory_for_%0-files\:_%1=Kunne_ikke_finne_katalog_for_%0-filer:_%1
-This_operation_requires_at_least_one_entry.=Denne_operasjonen_krever_minst_en_enhet.
-Write_XMP-metadata=Skriv_XMP-metadata
-Write_XMP-metadata_for_all_PDFs_in_current_database?=Skriv_XMP-metadata_for_alle_PDFer_i_denne_databasen?
-No_XMP_metadata_found_in_=Ingen_XMP-metadata_funnet_i_
-Please_refer_to_the_JabRef_help_manual_on_using_the_CiteSeer_tools=Se_i_JabRef-manualen_for_informasjon_om_bruk_av_CiteSeer-verkt\u00F8yene
-
-Search_IEEExplore=S\u00F8k_IEEExplore
-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':
-An_Error_occurred_while_fetching_from_OAI2_source_(%0)\:=En_feil_oppsto_ved_nedlasting_fra_OIA2-kilde_(%0):
-Abbreviated_%0_journal_names.=Fortkortet_%0_journalnavn.
-Unabbreviated_%0_journal_names.=Ekspanderte_%0_journalnavn.
-
-Help_contents=Oversikt_over_hjelpefiler
-Edit_entry=Rediger_enhet
-Save_database_as_...=Lagre_database_som_...
-Save_selected_as_...=Lagre_valgte_som_...
-Toggle_search_panel=Vis/skjul_s\u00F8kepanel
-Append_contents_from_a_BibTeX_database_into_the_currently_viewed_database=Legg_til_innhold_fra_en_BibTeX-database_i_den_\u00E5pne_database
-Edit_strings=Rediger_strenger
-Toggle_groups_interface=Vis/skjul_grupperingskontroll
-Toggle_entry_preview=Vis/skjul_forh\u00E5ndsvisning
-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
-Autogenerate_BibTeX_keys=Autogenerer_BibTeX-n\u00F8kler
-Will_write_XMP-metadata_to_the_PDFs_linked_from_selected_entries.=
-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)
-Unabbreviate_journal_names_of_the_selected_entries=Ekspander_journalnavn_for_de_valgte_enhetene
-Do_not_show_splash_window_at_startup=Ikke_vis_JabRef-informasjonsvindu_ved_oppstart
-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
-
-Leave_files_in_their_current_directory.=La_filene_ligge_i_katalogen_de_ligger_i_n\u00E5.
-Leave_file_in_its_current_directory.=La_filen_ligge_i_katalogen_den_ligger_i_n\u00E5.
-Extension=Etternavn
-Application=Applikasjon
-Icon=Ikon
+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=
 
-Path_to_%0_not_defined=Sti_til_%0_ikke_definert
-
-Path_to_Vim=Sti_til_Vim
-Vim_Server_Name=Navn_p\u00E5_Vim-server
-MS_Office_2007=MS_Office_2007
-Manage_external_file_types=Sett_opp_eksterne_filtyper
-All_custom_file_types_will_be_lost._Proceed?=Alle_egendefinerte_filtyper_vil_bli_slettet._Fortsette?
-Reset_file_type_definitons=Gjenopprett_opprinnelige_filtyper
-Edit_file_type=Rediger_filtype
-Could_not_run_the_'vim'_program.=Kunne_ikke_kj\u00F8re_'vim'-programmet
-
-Show_file_column=Vis_'file'-kolonne
-This_database_was_written_using_an_older_version_of_JabRef.=Denne_databasen_ble_lagret_fra_en_eldre_versjon_av_JabRef.
-
-File_'%0'_is_already_open.=Filen_'%0'_er_allerede_\u00E5pen.
+You_have_changed_the_menu_and_label_font_size._You_must_restart_JabRef_for_this_to_come_into_effect.=
 
-File_has_been_updated_externally._What_do_you_want_to_do?=Filen_har_blitt_endret_eksternt._Hva_vil_du_gj\u00F8re?
-
-Entry_has_no_citekey=Enheten_har_ingen_BibTeX-n\u00F8kkel
-
-Rename_to_match_citekey=Endre_navn_for_\u00E5_samsvare_med_BibTeX-n\u00F8kkel
-
-Change_file_type=Endre_filtype
-Define_'%0'=Definer_'%0'
-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?
-Unable_to_open_file.=Kan_ikke_\u00E5pne_fil.
-Undefined_file_type=Udefinert_filtype
-Error\:_=
-
-Do_you_want_JabRef_to_do_the_following_operations?=Vil_du_at_JabRef_skal_gj\u00F8re_de_f\u00F8lgende_operasjonene?
-Upgrade_file=Oppgrader_fil
-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?
-Upgrade_external_links=Oppgrader_eksterne_linker
-Upgraded_links.=Oppgraderte_linker.
-This_entry_has_no_BibTeX_key._Generate_key_now?=Denne_enheten_har_ingen_BibTeX-n\u00F8kkel._Generer_n\u00F8kkel_n\u00E5?
-Target_file_cannot_be_a_directory.=M\u00E5lfilen_kan_ikke_v\u00e6re_en_katalog.
-
-Finished_autosetting_external_links.=Fullf\u00F8rte_automatisk_setting_av_eksterne_linker.
-No_files_found.=Ingen_filer_funnet.
-
-External_file_links=Eksterne_linker
-Main_%0_directory=Hovedkatalog_for_%0-filer
-Synchronize_file_links=Synkroniser_eksterne_linker
-Upgrade_external_PDF/PS_links_to_use_the_'%0'_field.=Oppgrader_eksterne_PDF-_og_PS-linker_til_\u00E5_bruke_'%0'-feltet.
-Broken_link=Ugyldig_link
-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
-Upgrade_old_external_file_links_to_use_the_new_feature=Oppgrader_gamle_eksterne_linker_for_\u00E5_bruke_den_nye_funksjonen
-Set_main_external_file_directory=Sett_hovedkatalog_for_eksterne_linker
-Do_not_show_these_options_in_the_future=Ikke_vis_disse_valgene_igjen
-File_directory=Filkatalog
-Autosetting_links=Setter_linker_automatisk
-Autoset_external_links=Sett_linker_automatisk
-Link_local_file=Link_til_lokal_fil
-
-Searching_for_files=S\u00F8ker_etter_filer
-
-Could_not_open_link=Kunne_ikke_\u00E5pne_link
-The_application_'%0'_associated_with_the_file_type_'%1'_could_not_be_called.=Applikasjonen_'%0'_assosiert_med_filtypen_'%1'_kunne_ikke_startes.
-
-Native_file_dialog=System-fildialog
-Beta_version=Betaversjon
-Do_not_write_the_following_fields_to_XMP_Metadata:=
-MIS_Quarterly=MIS_Quarterly
-Use_default_viewer=Bruk_standardprogram_for_filtypen
-Select_icon=Velg_ikon
-
-Copy_to_clipboard=Kopier_til_utklippstavle
-Paste_from_clipboard=Lim_inn_fra_utklippstavle
-lower=sm\u00E5_bokstaver
-UPPER=STORE_BOKSTAVER
-Upper_Each_First=Stor_Forbokstav
-Upper_first=Stor_forbokstav_f\u00F8rst
-Replace_comma_by_and_where_appropriate=Bytt_ut_komma_med_'and'_der_det_passer
-%0_export_successful=%0-eksport_lyktes
-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.
-
-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.=
-You_have_changed_the_look_and_feel_setting._You_must_restart_JabRef_for_this_to_come_into_effect.=Du_har_endret_instillingen_for_utseende._Du_m\u00E5_starte_JabRef_p\u00E5_nytt_for_at_dette_skal_tre_i_kraft.
-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
-Could_not_save_file._Character_encoding_'%0'_is_not_supported.=Kunne_ikke_lagre_fil._Tegnkodingen_'%0'_er_ikke_st\u00F8ttet.
-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.
-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.
-All_entries_of_this_type_will_be_declared_typeless._Continue?=Alle_enhetene_av_denne_typen_vil_bli_klassifisert_som_typel\u00F8se._Fortsette?
-Field_names_are_not_allowed_to_contain_white_space_or_the_following_characters=Feltnavn_kan_ikke_inneholde_opperom_eller_de_f\u00F8lgende_tegnene
-%0_entries_found._To_reduce_server_load,_abstracts_will_only_be_downloaded_for_searches_returning_%1_hits_or_less.=%0_enheter_funnet._For_\u00E5_redusere_belastningen_p\u00E5_serveren_vil_sammendrag_bare_bli_lastet_ned_for_s\u00F8k_som_returnerer_%1_eller_f\u00e6rre_treff.
-
-A_string_with_that_label_already_exists=Det_finnes_allerede_en_streng_med_det_navnet
-Overwrite=Skriv_over
-
-File_directory_is_not_set_or_does_not_exist!=Filkatalogen_er_ikke_satt_eller_eksisterer_ikke!
-File_directory_is_'%0':=Filkatalogen_er_'%0':
-Copy_files_to_file_directory.=Kopier_filer_til_filkatalog.
-Move_files_to_file_directory.=Flytt_filer_til_filkatalog.
-Copy_file_to_file_directory.=Kopier_fil_til_filkatalog.
-Move_file_to_file_directory=Flytt_fil_til_filkatalog.
-New_file_link_(INSERT)=Ny_link_(INSERT)
-Remove_file_link_(DELETE)=Slett_link_(DELETE)
-
-No_PDF_linked=Ingen_PDF_linket
-PDF_does_not_exist=PDF-filen_finnes_ikke
-Wrote_XMP-metadata=Skrev_XMP-metadata
-
-Error_writing_to_%0_file(s).=Feil_ved_skriving_til_%0_fil(er).
-Finished_writing_XMP-metadata._Wrote_to_%0_file(s).=Fullf\u00F8rte_skriving_av_XMP-metadata._Skrev_til_%0_fil(er).
-
-You_have_entered_an_invalid_search_'%0'.=Ugyldig_s\u00F8keuttrykk_'%0'.
-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?
-Remove_link=Slett_link
-
-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
-
-Error_converting_Bibtex_to_XMP\:_%0=Feil_ved_konvertering_av_BibTeX_til_XMP:_%0
-
-Sort_order=Sortering
+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=BibTeX-n\u00F8kkelgenerator
+Unable_to_open_link.=
diff --git a/src/resource/JabRef_no.properties b/src/resource/JabRef_no.properties.bak
similarity index 96%
copy from src/resource/JabRef_no.properties
copy to src/resource/JabRef_no.properties.bak
index e2f3177..db07d53 100644
--- a/src/resource/JabRef_no.properties
+++ b/src/resource/JabRef_no.properties.bak
@@ -7,11 +7,14 @@
 %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_entries_found._To_reduce_server_load,_abstracts_will_only_be_downloaded_for_searches_returning_%1_hits_or_less.=%0_enheter_funnet._For_\u00E5_redusere_belastningen_p\u00E5_serveren_vil_sammendrag_bare_bli_lastet_ned_for_s\u00F8k_som_returnerer_%1_eller_f\u00e6rre_treff.
+%0_export_successful=%0-eksport_lyktes
 %0_field_set=%0-felt_satt
 %0_import_cancelled.=%0-import_kansellert.
 %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>
 <HTML>Unpack_the_zip_file_containing_import/export_filters_for_Endnote,<BR>for_optimal_interoperability_with_JabRef</HTML>=<HTML>Pakk_ut_zip-filen_som_inneholder_import-_og_eksportfiltre_for<BR>EndNote,_for_best_mulig_kompatibilitet_med_JabRef</HTML>
 <no_field>=<ingen_felter>
 <select>=<velg>
@@ -19,7 +22,12 @@
 _on_entry_number_=_ved_enhet_nummer_
 A_CiteSeer_fetch_operation_is_currently_in_progress.=En_henteoperasjon_fra_CiteSeer_p\u00E5g\u00E5r_allerede.
 A_CiteSeer_import_operation_is_currently_in_progress.=En_importoperasjon_fra_CiteSeer_p\u00E5g\u00E5r_allerede.
+
+A_string_with_that_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
@@ -44,18 +52,26 @@ 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_Error_occurred_while_fetching_from_OAI2_source_(%0)\:=En_feil_oppsto_ved_nedlasting_fra_OIA2-kilde_(%0):
+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\:=
 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
@@ -63,23 +79,33 @@ 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.=
 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...=
 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
@@ -88,6 +114,7 @@ Background_color_for_marked_entries=Bakgrunnsfarge_for_merkede_enheter
 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
@@ -95,11 +122,13 @@ BibTeX_key_not_set._Enter_a_name_for_the_downloaded_file=BibTeX-n\u00F8kkel_er_i
 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_connect_to_SQL_server_at_the_specified_host.=
 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.
@@ -111,11 +140,14 @@ 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
@@ -127,11 +159,11 @@ 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=
 
 Cite_command_(for_Emacs/WinEdt)=Kommando_for_referanser_(for_Emacs/WinEdt)
 CiteSeer_Error=CiteSeer-feil
 CiteSeer_Fetch_Error=Feil_ved_henting_fra_CiteSeer
-CiteSeer_import_entries=CiteSeer_importer_enheter
 CiteSeer_Import_Error=Feil_ved_import_fra_CiteSeer
 CiteSeer_Import_Fields=CiteSeer_importer_felter
 CiteSeer_Transfer=CiteSeer-overf\u00F8ring
@@ -156,6 +188,10 @@ Command_line_id=Kommandolinje-id
 Complete_record=Komplett_form
 Completed_Import_Fields_from_CiteSeer.=Fullf\u00F8rte_import_av_felter_fra_CiteSeer
 Completed_import_from_CiteSeer.=Fullf\u00F8rte_import_fra_CiteSeer
+Connect=
+Connect_to_SQL_database=
+Connect_to_SQL_Database=
+Connection_to_IEEEXplore_failed=Oppkobling_til_IEEExplore_mislyktes
 Contained_in=Inneholdt_i
 Content=Innhold
 Copied=Kopierte
@@ -164,15 +200,23 @@ 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_til_vert
 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_determine_exception_message.=
 Could_not_export_entry_types=Kunne_ikke_eksportere_enhetstyper
 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=Kunne_ikke_finne_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_entry_types=Kunne_ikke_importere_enhetstyper
@@ -180,10 +224,15 @@ Could_not_import_preferences=Kunne_ikke_importere_innstillinger
 Could_not_instantiate_%0_%1=Kunne_ikke_instansiere_%0_%1
 
 Could_not_instantiate_%0_%1._Have_you_chosen_the_correct_package_path?=Kunne_ikke_instansiere_%0_%1._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=
 Could_not_resolve_import_format=Kunne_ikke_bestemme_importformat
 Could_not_run_the_'gnuclient'_program._Make_sure_you_have_the_gnuserv/gnuclient_programs_installed.=Kunne_ikke_kalle_'gnuclient'-programmet._Kontroller_at_du_har_installert_gnuserv/gnuclient-programmene.
+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.
 Couldn't_find_an_entry_associated_with_this_URL=Fant_ingen_enhet_for_f\u00F8lgende_URL
 Couldn't_parse_the_'citeseerurl'_field_of_the_following_entries=Kunne_ikke_tolke_'citeseerurl'-feltet_for_f\u00F8lgende_enheter
 Create_group=Opprett_gruppe
@@ -203,6 +252,7 @@ Cut=Klipp_ut
 cut_entries=klippet_ut
 cut_entry=klipp_ut_enhet
 Cut_pr=Klippet_ut
+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
@@ -213,6 +263,7 @@ 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'
 defined.=er_definert.
 Delete=Slett
 Delete_custom=Slett_tilpasset
@@ -225,6 +276,7 @@ Delete_rows=Slett_rader
 Delete_strings=Slett_strenger
 Deleted=Slettet
 Delimit_fields_with_semicolon,_ex.=Avgrens_felter_med_semikolon,_f.eks.
+Derby=
 Descending=Synkende
 Description=Beskrivelse
 Deselect_all=Velg_ingen
@@ -246,7 +298,13 @@ 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:=
+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
 Done=Ferdig
 Down=Ned
@@ -254,6 +312,9 @@ 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.
@@ -269,14 +330,20 @@ Dynamically_group_entries_by_searching_a_field_for_a_keyword=Grupper_enheter_dyn
 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
@@ -287,6 +354,8 @@ 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_has_no_citekey=Enheten_har_ingen_BibTeX-n\u00F8kkel
 Entry_in_current_database=Enhet_i_eksisterende_database
 Entry_in_import=Enhet_i_import
 Entry_preview=Forh\u00E5ndsvisning
@@ -296,13 +365,27 @@ 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\:_=
+Error_converting_Bibtex_to_XMP:_%0=
+
+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.=
 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\:=
+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_til_filen_'%0'
+
+Establishing_SQL_connection...=
 Exceptions=Feilinformasjon
 Existing_file=Eksisterende_fil
 exists._Overwrite_file?=eksisterer._Erstatt_filen?
@@ -315,8 +398,12 @@ 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=
 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
@@ -325,8 +412,6 @@ Fetch=Hent
 Fetch_Articles_Citing_your_Database=Hent_publikasjoner_som_refererer_enheter_i_din_database
 Fetch_CiteSeer=Hent_CiteSeer
 
-Fetch_CiteSeer_by_ID=Hent_CiteSeer_ved_hjelp_av_ID
-Fetch_Medline=Hent_Medline
 Fetch_Medline_by_ID=Hent_Medline_ved_hjelp_av_ID
 Fetched_all_citations_from_target_database.=Hentet_alle_refererende_publikasjoner_fra_CiteSeer.
 Fetching_Citations=Henter_referanser
@@ -339,6 +424,7 @@ 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
@@ -346,17 +432,31 @@ 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=Filkatalog
+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).=
 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
@@ -374,6 +474,7 @@ Format_used=Format_brukt
 Formatter_Name=Navn_p\u00e5_formaterer
 Formatter_not_found=Ukjent_formaterer
 found=funnet
+Found_%0_plugin(s)=
 found_in_aux_file=funnet_i_aux-fil
 Full_name=Fullt_navn
 General=Generelt
@@ -398,8 +499,10 @@ Groups=Gruppering
 Harvard_RTF=Harvard_RTF
 Have_you_chosen_the_correct_package_path?=
 Help=Hjelp
+
+Help_contents=Oversikt_over_hjelpefiler
 Help_on_groups=Hjelp_om_grupper
-Help_on_key_patterns=Hjelp_om_n\u00F8kkeloppskrifter
+Help_on_key_patterns=Hjelp_om_n\u00F8kkelgenerering
 Help_on_Preview_Settings=
 Help_on_Regular_Expression_Search=
 Hide_non-hits=Skjul_ikke-treff
@@ -407,12 +510,15 @@ 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
 Illegal_type_name=Ugyldig_typenavn
 Immediate_subgroups=N\u00e6rmeste_undergrupper
@@ -468,6 +574,7 @@ Inverted=Invertert
 is_a_standard_type.=er_en_standardtype.
 ISO_abbreviation=ISO-forkortelse
 Item_list_for_field=Ordliste_for_felt
+jabref=
 JabRef_help=JabRef-hjelp
 JabRef_preferences=JabRef-oppsett
 Journal_abbreviations=Journalforkortelser
@@ -480,22 +587,36 @@ Keep_upper=Behold_\u00F8verste
 Key_bindings=Hurtigtaster
 Key_bindings_changed=Hurtigtaster_endret
 Key_generator_settings=Innstillinger_for_n\u00F8kkelgenerering
-Key_pattern=N\u00F8kkeloppskrift
+Key_pattern=M\u00F8nster
+BibTeX_key_generator=BibTeX-n\u00F8kkelgenerator
 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=
 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)=
 Load_session=Gjenopprett_tilstand
 Loading_session...=Gjenoppretter_tilstand...
+localhost=
 Look_and_feel=Utseende
 Looking_for_pdf...=Ser_etter_pdf...
+lower=sm\u00E5_bokstaver
+Main_%0_directory=Hovedkatalog_for_%0-filer
+Main_file_directory=
 
 Main_layout_file=Hoved-layoutfil
 Main_PDF_directory=Hovedkatalog_for_PDF-filer
@@ -503,6 +624,7 @@ 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
@@ -510,11 +632,12 @@ 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
 Medline_entries_fetched=Medline-enheter_hentet
+Memory_Stick_Mode=
 Menu_and_label_font_size=St\u00F8rrelse_av_menyfonter
 Merged_external_changes=Inkorporerte_eksterne_endringer
 Messages=Meldinger
 Messages_and_Hints=Beskjeder_og_hint
-Miscellaneous=Diverse
+MIS_Quarterly=MIS_Quarterly
 Modification_of_field=Endring_av_felt
 Modified_group_"%0".=Endret_gruppen_"%0".
 Modified_groups=Endrede_grupper
@@ -525,14 +648,22 @@ 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_file_to_file_directory=Flytt_fil_til_filkatalog.
+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_database=
 Name=Navn
 Name_formatter=Navneformaterer
 Natbib_style=Natbib-stil
+
+Native_file_dialog=System-fildialog
 nested_aux_files=n\u00F8stede_aux-filer
 New=Ny
 new=ny
@@ -543,30 +674,36 @@ 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_custom_imports_registered_yet.=Ingen_egne_importformater_er_definert.
 no_database_generated=ingen_database_generert
+No_databases_saved.=Ingen_databaser_lagret.
 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.=
-No_file_associated=Ingen_assosiert_fil
+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_Medline_entries_found.=Ingen_Medline-enheter_funnet
+
+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\:=
 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)
@@ -579,7 +716,9 @@ 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
@@ -595,7 +734,9 @@ Opening=\u00C5pner
 Opening_preferences...=\u00C5pner_innstillinger...
 
 OpenOffice_Calc=OpenOffice_Calc
+OpenOffice_CSV=
 Operation_canceled.\n=Operasjonen_avbrutt.\n
+Operation_not_supported=Operasjonen_er_ikke_st\u00F8ttet
 Optional_fields=Valgfrie_felter
 Options=Valg
 or=eller
@@ -607,21 +748,29 @@ Override_default_file_directories=
 
 Override_default_font_settings=Overstyr_standardfonter
 override_the_bibtex_key_by_the_selected_text=
+Overwrite=Skriv_over
 Overwrite_existing_field_values=Skriv_over_eksisterende_verdier
 Overwrite_keys=Skriv_over_n\u00F8kler
 pairs_processed=par_revidert
+Password_\:=
 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_HTML_viewer=Sti_til_HTML-leser
+Path_to_LatexEditor_(LEd.exe)=Sti_til_LatexEditor_(LEd.exe)
 Path_to_LyX_pipe=Sti_til_LyX-pipe
 Path_to_PDF_viewer=Sti_til_PDF-leser
 Path_to_PS_viewer=Sti_til_PS-leser
+
+Path_to_Vim=Sti_til_Vim
 Path_to_WinEdt.exe=Sti_til_WinEdt.exe
 PDF_directory=
+PDF_does_not_exist=PDF-filen_finnes_ikke
 Personal_journal_list=Personlig_journalliste
-Pick_titles=Velg_titler
 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.
@@ -629,10 +778,12 @@ Please_enter_a_search_term._For_example,_to_search_all_fields_for_<b>Smith</b>,_
 Please_enter_a_semicolon_or_comma_separated_list_of_Medline_IDs_(numbers).=Du_m\u00E5_oppgi_en_semikolon-_eller_kommaseparert_liste_av_Medline-IDer_(tall).
 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_refer_to_the_JabRef_help_manual_on_using_the_CiteSeer_tools=Se_i_JabRef-manualen_for_informasjon_om_bruk_av_CiteSeer-verkt\u00F8yene
 Please_refer_to_the_JabRef_help_manual_on_using_the_CiteSeer_tools.=Vennligst_se_JabRef-dokumentasjonen_for_informasjon_om_bruk_av_CiteSeer-verkt\u00F8yene.
 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_=
 Please_wait_until_it_has_finished.=Vennligst_vent_til_den_er_fullf\u00F8rt.
 Possible_duplicate_entries=Mulige_duplikater
 Possible_duplicate_of_existing_entry._Click_to_resolve.=Mulig_duplikat_av_eksisterende_enhet._Klikk_for_\u00e5_h\u00e5ndtere.
@@ -642,15 +793,21 @@ Preferences_recorded.=Lagret_oppsett.
 Preview=Forh\u00E5ndsvisning
 Previous_entry=Forrige_enhet
 Primary_sort_criterion=Prim\u00e6rt_sorteringskriterium
+Print_Preview=
+Printing_Entry_Preview=
 Problem_with_parsing_entry=Problem_med_\u00E5_lese_enhet
+Processing_=Arbeider_
 Program_output=Output_fra_program
 PS_directory=
 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=
+Pushed_citations_to_%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
@@ -677,6 +834,7 @@ 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
@@ -686,6 +844,7 @@ 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_
@@ -693,33 +852,46 @@ Removed_entry_type.=Slettet_enhetstype.
 Removed_group_"%0".=Fjernet_gruppen_"%0"
 Removed_group_"%0"_and_its_subgroups.=Fjernet_gruppen_"%0"_og_dens_undergrupper
 Removed_string=Fjernet_streng
+
+Rename_to_match_citekey=Endre_navn_for_\u00E5_samsvare_med_BibTeX-n\u00F8kkel
 Renamed_string=Endret_navn_p\u00e5_streng
 Replace=
 Replace_(regular_expression)=Erstatt_(regul\u00e6ruttrykk)
+Replace_comma_by_and_where_appropriate=Bytt_ut_komma_med_'and'_der_det_passer
 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=
 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_in_default_table_sort_order=Lagre_i_standardsortering_for_tabell
 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
@@ -731,6 +903,8 @@ Search_expression=S\u00F8keuttrykk
 Search_for=S\u00F8k_etter
 Search_general_fields=S\u00f8k_i_generelle_felter
 Search_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)
@@ -738,6 +912,8 @@ Searched_database._Global_number_of_hits=
 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
@@ -750,16 +926,20 @@ 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_\:=
+Server_Type_\:=
 
 Set/clear_fields=Sett/fjern_felter
 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
@@ -775,6 +955,8 @@ Show_confirmation_dialog_when_deleting_entries=Vis_dialog_for_\u00E5_bekrefte_sl
 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
@@ -795,12 +977,15 @@ 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.=
 Start_incremental_search=Start_inkrementelt_s\u00F8k
 Start_search=Start_s\u00f8k
 Starting_import=Starter_import
@@ -819,18 +1004,24 @@ 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_application_'%0'_associated_with_the_file_type_'%1'_could_not_be_called.=Applikasjonen_'%0'_assosiert_med_filtypen_'%1'_kunne_ikke_startes.
 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_de_f\u00F8lgende_tegnene:_
 The_CiteSeer_fetch_operation_returned_zero_results.=Nedlastingen_fra_CiteSeer_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.
@@ -838,6 +1029,7 @@ The_label_of_the_string_can_not_be_a_number.=Navnet_p\u00E5_strengen_kan_ikke_v\
 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.
@@ -847,8 +1039,11 @@ The_URL_field_appears_to_be_empty_on_entry_number_=URL-feltet_ser_ut_til_\u00E5_
 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?
 There_is_no_entry_type=Ingen_enhetstype
 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
@@ -856,21 +1051,32 @@ This_group_contains_entries_in_which_any_field_contains_the_term_<b>%0</b>=Denne
 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_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_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=Type
 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_parse_clipboard_text_as_Bibtex_entries.=Kunne_ikke_lese_tekst_p\u00E5_utklippstavlen_som_BibTeX-enheter.
+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_parse_the_following_URL=Kunne_ikke_tolke_f\u00F8lgende_URL
 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
@@ -889,44 +1095,69 @@ Up=Opp
 Update_to_current_column_widths=Bruk_n\u00E5v\u00E6rende_kolonnebredder
 Updated_group_selection=Updated_group_selection
 Updating_entries...=Oppdaterer_enheter...
+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=
 Use_regular_expressions=Bruk_"regular_expressions"
 Use_the_following_delimiter_character(s)=Use_the_following_delimiter_character(s)
+User_does_not_have_sufficient_privileges.\n=
+Username_\:=
 Uses_default_application=Bruker_standardprogram
 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.=
 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_have_changed_the_language_setting._You_must_restart_JabRef_for_this_to_come_into_effect.=Du_har_valgt_et_nytt_spr\u00E5k._Du_m\u00E5_starte_JabRef_p\u00E5_nytt_for_at_dette_skal_tre_i_kraft.
+You_have_changed_the_look_and_feel_setting._You_must_restart_JabRef_for_this_to_come_into_effect.=Du_har_endret_instillingen_for_utseende._Du_m\u00E5_starte_JabRef_p\u00E5_nytt_for_at_dette_skal_tre_i_kraft.
 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_enter_an_integer_value_in_the_text_field_for=Du_m\u00E5_skrive_et_heltall_i_tekstfeltet_for
 You_must_fill_in_a_name_for_the_entry_type.=Du_m\u00E5_velge_et_navn_for_enhetstypen.
@@ -934,206 +1165,50 @@ You_must_restart_JabRef_for_the_new_key_bindings_to_work_properly.=Du_m\u00E5_st
 You_must_select_at_least_one_row_to_perform_this_operation.=Du_m\u00E5_velge_minst_\u00E9n_rad_f\u00F8r_du_kan_bruke_denne_operasjonen.
 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:=
+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=
+Fetch_Citeseer=
+Error_fetching_from_Citeseer\:\\n=
+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\:_=
+Error_fetching_from_Citeseer\:\\n=
+Connect_to_external_SQL_database=
+Export_to_external_SQL_database=
 
-Save_all_open_databases=Lagre_alle_\u00E5pne_databaser
-
-Automatically_remove_exact_duplicates=Fjern_eksakte_duplikater_automatisk
-Enable_word/name_autocompletion=Aktiver_autokomplettering_av_navn/ord
-Editor_options=Alternativer_for_redigering
-Use_autocompletion_for_the_following_fields=Bruk_autokomplettering_for_f\u00F8lgende_felter
-Saving_all_databases...=Lagrer_alle_databaser...
-Save_all_finished.=Fullf\u00F8rte_lagring_av_alle_databaser
-Saved_%0_databases.=Lagret_%0_databaser.
-No_databases_saved.=Ingen_databaser_lagret.
-Connection_to_IEEEXplore_failed=Oppkobling_til_IEEExplore_mislyktes
-
-Link=Link
-File_type=Filtype
-Edit_file_link=Rediger_link
-Path_to_LatexEditor_(LEd.exe)=Sti_til_LatexEditor_(LEd.exe)
-Move_external_links_to_'file'_field=Flytt_eksterne_linker_til_'file'-feltet
-Push_selection_to_Vim=Send_valgte_enheter_til_Vim
-Pushed_citations_to_Vim=Sendte_enheter_til_Vim
-Waiting_for_ArXiv...=Venter_p\u00E5_ArXiv
-Processing_=Arbeider_
-Error_while_fetching_from_OIA2=Feil_ved_nedlasting_fra_OIA2
-No_entries_found_for_the_search_string_'%0'=Fant_ingen_enheter_for_s\u00F8keteksten_'%0'
-
-The_chosen_encoding_'%0'_could_not_encode_the_following_characters\:_=Den_valgte_tegnkodingen_'%0'_kunne_ikke_kode_de_f\u00F8lgende_tegnene:_
-Operation_not_supported=Operasjonen_er_ikke_st\u00F8ttet
-
-Drag_and_Drop_Error=Feil_ved_trekk-og-slipp
-
-File_download=Filnedlasting
-Error_while_downloading_file\:=Feil_ved_nedlasting_av_fil
-Only_one_item_is_supported=Bare_ett_element_av_gangen_er_st\u00F8ttet
-Do_not_write_the_following_fields_to_XMP_Metadata\:=Ikke_skriv_de_f\u00F8lgende_feltene_til_XMP-metadata
-<HTML>Could_not_find_file_'%0'<BR>linked_from_entry_'%1'</HTML>=<HTML>Kunne_ikke_finne_filen_'%0'<BR>linket_fra_enheten_'%1'</HTML>
-Drop_%0=Slipp_%0
-
-Link_to_file_%0=Link_til_filen_%0
-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?
-XMP_metadata_found_in_PDF\:_%0=XMP-metadata_funnet_i_PDF:_%0
-Link_to_PDF_%0=Link_til_PDF_%0
-Writing_XMP_to_'%0'...=Skriver_XMP_til_'%0'
-Wrote_XMP_to_'%0'.=Skrev_XMP_til_'%0'
-Error_writing_XMP_to_file\:_%0=Feil_ved_skriving_av_XMP_til_filen_'%0'
-Error_converting_Bibtex_to_XMP:_%0=
-Error_while_converting_BibtexEntry_to_XMP_%0=Feil_ved_konvertering_av_BibTeX-enheten_til_XMP_%0
-Error_converting_XMP_to_'%0'...=Feil_ved_tilpassing_av_XMP_for_'%0'...
-
-Could_not_find_directory_for_%0-files\:_%1=Kunne_ikke_finne_katalog_for_%0-filer:_%1
-This_operation_requires_at_least_one_entry.=Denne_operasjonen_krever_minst_en_enhet.
-Write_XMP-metadata=Skriv_XMP-metadata
-Write_XMP-metadata_for_all_PDFs_in_current_database?=Skriv_XMP-metadata_for_alle_PDFer_i_denne_databasen?
-No_XMP_metadata_found_in_=Ingen_XMP-metadata_funnet_i_
-Please_refer_to_the_JabRef_help_manual_on_using_the_CiteSeer_tools=Se_i_JabRef-manualen_for_informasjon_om_bruk_av_CiteSeer-verkt\u00F8yene
-
-Search_IEEExplore=S\u00F8k_IEEExplore
-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':
-An_Error_occurred_while_fetching_from_OAI2_source_(%0)\:=En_feil_oppsto_ved_nedlasting_fra_OIA2-kilde_(%0):
-Abbreviated_%0_journal_names.=Fortkortet_%0_journalnavn.
-Unabbreviated_%0_journal_names.=Ekspanderte_%0_journalnavn.
-
-Help_contents=Oversikt_over_hjelpefiler
-Edit_entry=Rediger_enhet
-Save_database_as_...=Lagre_database_som_...
-Save_selected_as_...=Lagre_valgte_som_...
-Toggle_search_panel=Vis/skjul_s\u00F8kepanel
-Append_contents_from_a_BibTeX_database_into_the_currently_viewed_database=Legg_til_innhold_fra_en_BibTeX-database_i_den_\u00E5pne_database
-Edit_strings=Rediger_strenger
-Toggle_groups_interface=Vis/skjul_grupperingskontroll
-Toggle_entry_preview=Vis/skjul_forh\u00E5ndsvisning
-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
-Autogenerate_BibTeX_keys=Autogenerer_BibTeX-n\u00F8kler
-Will_write_XMP-metadata_to_the_PDFs_linked_from_selected_entries.=
-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)
-Unabbreviate_journal_names_of_the_selected_entries=Ekspander_journalnavn_for_de_valgte_enhetene
-Do_not_show_splash_window_at_startup=Ikke_vis_JabRef-informasjonsvindu_ved_oppstart
-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
-
-Leave_files_in_their_current_directory.=La_filene_ligge_i_katalogen_de_ligger_i_n\u00E5.
-Leave_file_in_its_current_directory.=La_filen_ligge_i_katalogen_den_ligger_i_n\u00E5.
-Extension=Etternavn
-Application=Applikasjon
-Icon=Ikon
-
-Path_to_%0_not_defined=Sti_til_%0_ikke_definert
-
-Path_to_Vim=Sti_til_Vim
-Vim_Server_Name=Navn_p\u00E5_Vim-server
-MS_Office_2007=MS_Office_2007
-Manage_external_file_types=Sett_opp_eksterne_filtyper
-All_custom_file_types_will_be_lost._Proceed?=Alle_egendefinerte_filtyper_vil_bli_slettet._Fortsette?
-Reset_file_type_definitons=Gjenopprett_opprinnelige_filtyper
-Edit_file_type=Rediger_filtype
-Could_not_run_the_'vim'_program.=Kunne_ikke_kj\u00F8re_'vim'-programmet
-
-Show_file_column=Vis_'file'-kolonne
-This_database_was_written_using_an_older_version_of_JabRef.=Denne_databasen_ble_lagret_fra_en_eldre_versjon_av_JabRef.
-
-File_'%0'_is_already_open.=Filen_'%0'_er_allerede_\u00E5pen.
-
-File_has_been_updated_externally._What_do_you_want_to_do?=Filen_har_blitt_endret_eksternt._Hva_vil_du_gj\u00F8re?
-
-Entry_has_no_citekey=Enheten_har_ingen_BibTeX-n\u00F8kkel
-
-Rename_to_match_citekey=Endre_navn_for_\u00E5_samsvare_med_BibTeX-n\u00F8kkel
-
-Change_file_type=Endre_filtype
-Define_'%0'=Definer_'%0'
-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?
-Unable_to_open_file.=Kan_ikke_\u00E5pne_fil.
-Undefined_file_type=Udefinert_filtype
-Error\:_=
-
-Do_you_want_JabRef_to_do_the_following_operations?=Vil_du_at_JabRef_skal_gj\u00F8re_de_f\u00F8lgende_operasjonene?
-Upgrade_file=Oppgrader_fil
-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?
-Upgrade_external_links=Oppgrader_eksterne_linker
-Upgraded_links.=Oppgraderte_linker.
-This_entry_has_no_BibTeX_key._Generate_key_now?=Denne_enheten_har_ingen_BibTeX-n\u00F8kkel._Generer_n\u00F8kkel_n\u00E5?
-Target_file_cannot_be_a_directory.=M\u00E5lfilen_kan_ikke_v\u00e6re_en_katalog.
-
-Finished_autosetting_external_links.=Fullf\u00F8rte_automatisk_setting_av_eksterne_linker.
-No_files_found.=Ingen_filer_funnet.
+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=
 
-External_file_links=Eksterne_linker
-Main_%0_directory=Hovedkatalog_for_%0-filer
-Synchronize_file_links=Synkroniser_eksterne_linker
-Upgrade_external_PDF/PS_links_to_use_the_'%0'_field.=Oppgrader_eksterne_PDF-_og_PS-linker_til_\u00E5_bruke_'%0'-feltet.
-Broken_link=Ugyldig_link
-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
-Upgrade_old_external_file_links_to_use_the_new_feature=Oppgrader_gamle_eksterne_linker_for_\u00E5_bruke_den_nye_funksjonen
-Set_main_external_file_directory=Sett_hovedkatalog_for_eksterne_linker
-Do_not_show_these_options_in_the_future=Ikke_vis_disse_valgene_igjen
-File_directory=Filkatalog
-Autosetting_links=Setter_linker_automatisk
-Autoset_external_links=Sett_linker_automatisk
-Link_local_file=Link_til_lokal_fil
-
-Searching_for_files=S\u00F8ker_etter_filer
+You_have_changed_the_menu_and_label_font_size._You_must_restart_JabRef_for_this_to_come_into_effect.=
 
-Could_not_open_link=Kunne_ikke_\u00E5pne_link
-The_application_'%0'_associated_with_the_file_type_'%1'_could_not_be_called.=Applikasjonen_'%0'_assosiert_med_filtypen_'%1'_kunne_ikke_startes.
+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=
+Unable_to_open_link.=
 
-Native_file_dialog=System-fildialog
-Beta_version=Betaversjon
-Do_not_write_the_following_fields_to_XMP_Metadata:=
-MIS_Quarterly=MIS_Quarterly
-Use_default_viewer=Bruk_standardprogram_for_filtypen
-Select_icon=Velg_ikon
 
-Copy_to_clipboard=Kopier_til_utklippstavle
-Paste_from_clipboard=Lim_inn_fra_utklippstavle
-lower=sm\u00E5_bokstaver
-UPPER=STORE_BOKSTAVER
-Upper_Each_First=Stor_Forbokstav
-Upper_first=Stor_forbokstav_f\u00F8rst
-Replace_comma_by_and_where_appropriate=Bytt_ut_komma_med_'and'_der_det_passer
-%0_export_successful=%0-eksport_lyktes
-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.
-
-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.=
-You_have_changed_the_look_and_feel_setting._You_must_restart_JabRef_for_this_to_come_into_effect.=Du_har_endret_instillingen_for_utseende._Du_m\u00E5_starte_JabRef_p\u00E5_nytt_for_at_dette_skal_tre_i_kraft.
-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
-Could_not_save_file._Character_encoding_'%0'_is_not_supported.=Kunne_ikke_lagre_fil._Tegnkodingen_'%0'_er_ikke_st\u00F8ttet.
-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.
-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.
-All_entries_of_this_type_will_be_declared_typeless._Continue?=Alle_enhetene_av_denne_typen_vil_bli_klassifisert_som_typel\u00F8se._Fortsette?
-Field_names_are_not_allowed_to_contain_white_space_or_the_following_characters=Feltnavn_kan_ikke_inneholde_opperom_eller_de_f\u00F8lgende_tegnene
-%0_entries_found._To_reduce_server_load,_abstracts_will_only_be_downloaded_for_searches_returning_%1_hits_or_less.=%0_enheter_funnet._For_\u00E5_redusere_belastningen_p\u00E5_serveren_vil_sammendrag_bare_bli_lastet_ned_for_s\u00F8k_som_returnerer_%1_eller_f\u00e6rre_treff.
-
-A_string_with_that_label_already_exists=Det_finnes_allerede_en_streng_med_det_navnet
-Overwrite=Skriv_over
-
-File_directory_is_not_set_or_does_not_exist!=Filkatalogen_er_ikke_satt_eller_eksisterer_ikke!
-File_directory_is_'%0':=Filkatalogen_er_'%0':
-Copy_files_to_file_directory.=Kopier_filer_til_filkatalog.
-Move_files_to_file_directory.=Flytt_filer_til_filkatalog.
-Copy_file_to_file_directory.=Kopier_fil_til_filkatalog.
-Move_file_to_file_directory=Flytt_fil_til_filkatalog.
-New_file_link_(INSERT)=Ny_link_(INSERT)
-Remove_file_link_(DELETE)=Slett_link_(DELETE)
-
-No_PDF_linked=Ingen_PDF_linket
-PDF_does_not_exist=PDF-filen_finnes_ikke
-Wrote_XMP-metadata=Skrev_XMP-metadata
-
-Error_writing_to_%0_file(s).=Feil_ved_skriving_til_%0_fil(er).
-Finished_writing_XMP-metadata._Wrote_to_%0_file(s).=Fullf\u00F8rte_skriving_av_XMP-metadata._Skrev_til_%0_fil(er).
-
-You_have_entered_an_invalid_search_'%0'.=Ugyldig_s\u00F8keuttrykk_'%0'.
-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?
-Remove_link=Slett_link
-
-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
-
-Error_converting_Bibtex_to_XMP\:_%0=Feil_ved_konvertering_av_BibTeX_til_XMP:_%0
-
-Sort_order=Sortering
diff --git a/src/resource/Menu_de.properties b/src/resource/Menu_de.properties
index a72f6fa..7c43dcd 100644
--- a/src/resource/Menu_de.properties
+++ b/src/resource/Menu_de.properties
@@ -206,3 +206,10 @@ 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_durchsuchen
+Fetch_SPIRES=SPIRES_abrufen
+Fetch_CiteSeer_by_ID=CiteSeer_mittels_ID_abrufen
+Search_Medline=Medline_durchsuchen
diff --git a/src/resource/Menu_du.properties b/src/resource/Menu_du.properties
index cdb7611..e5b8648 100644
--- a/src/resource/Menu_du.properties
+++ b/src/resource/Menu_du.properties
@@ -213,3 +213,10 @@ 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_CiteSeer_by_ID=Ophalen_van_CiteSeer_op_ID
+Search_Medline=
diff --git a/src/resource/Menu_en.properties b/src/resource/Menu_en.properties
index 8253edc..a680eab 100644
--- a/src/resource/Menu_en.properties
+++ b/src/resource/Menu_en.properties
@@ -121,4 +121,13 @@ Save_all=Save_all
 Upgrade_external_links=Upgrade_external_links
 Manage_external_file_types=Manage_external_file_types
 
-Open_file=Open_file
\ No newline at end of file
+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_CiteSeer_by_ID=Fetch_CiteSeer_by_ID
+Search_Medline=Search_Medline
+
diff --git a/src/resource/Menu_es.properties b/src/resource/Menu_es.properties
index 5ff035c..578712d 100644
--- a/src/resource/Menu_es.properties
+++ b/src/resource/Menu_es.properties
@@ -1,126 +1,133 @@
-#!
-#! 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_citations_from_CiteSeer=Importar_citas_desde_&CiteSeer
-Fetch_CiteSeer=importar_CiteSeer
-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
-Import_Fields_from_CiteSeer=Importar_campos_desde_&CiteSeer
-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
-
-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
-Unpack_EndNote_filter_set=Desempaquetar_conjunto_de_filtros_de_&EndNote
-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
-
-Manage_journal_abbreviations=
\ No newline at end of file
+#!
+#! 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_citations_from_CiteSeer=Importar_citas_desde_&CiteSeer
+Fetch_CiteSeer=importar_CiteSeer
+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
+Import_Fields_from_CiteSeer=Importar_campos_desde_&CiteSeer
+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
+Unpack_EndNote_filter_set=Desempaquetar_conjunto_de_filtros_de_&EndNote
+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_CiteSeer_by_ID=
+Search_Medline=
diff --git a/src/resource/Menu_fr.properties b/src/resource/Menu_fr.properties
index 57ce93b..27c91c6 100644
--- a/src/resource/Menu_fr.properties
+++ b/src/resource/Menu_fr.properties
@@ -47,7 +47,7 @@ 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
+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
@@ -109,4 +109,11 @@ Save_all=Sauvegarder_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
\ No newline at end of file
+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=Recherche_JSTOR
+Fetch_SPIRES=Recherche_SPIRES
+Fetch_CiteSeer_by_ID=Recherche_CiteSeer_par_ID
+Search_Medline=Recherche_Medline
diff --git a/src/resource/Menu_it.properties b/src/resource/Menu_it.properties
index aa488ed..4d8a128 100644
--- a/src/resource/Menu_it.properties
+++ b/src/resource/Menu_it.properties
@@ -119,3 +119,10 @@ Upgrade_external_links=Aggiorna_i_collegamenti_esterni
 Manage_external_file_types=Gestione_dei_tipi_di_file_esterni
 
 Open_file=Apri_file
+Plugins=
+Connect_to_external_SQL_database=
+Export_to_external_SQL_database=
+Search_JSTOR=
+Fetch_SPIRES=
+Fetch_CiteSeer_by_ID=Ricerca_su_CiteSeer_per_ID
+Search_Medline=
diff --git a/src/resource/Menu_no.properties b/src/resource/Menu_no.properties
index 7ac43b8..681cbe5 100644
--- a/src/resource/Menu_no.properties
+++ b/src/resource/Menu_no.properties
@@ -30,6 +30,7 @@ Fetch_Medline=Hent_&Medline
 
 # Menu names
 File=&Fil
+Find_And_Fix=
 Find_and_remove_exact_duplicates=&Finn_og_fjern_eksakte_duplikater
 Find_duplicates=S\u00F8k_etter_&duplikater
 Help=&Hjelp
@@ -49,6 +50,8 @@ 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
@@ -116,5 +119,10 @@ Upgrade_external_links=&Oppgrader_eksterne_linker
 Manage_external_file_types=Sett_opp_eksterne_&filtyper
 
 Open_file=\u00C5pne_fil
-
-Manage_journal_abbreviations=Sett_opp_&journalforkortelser
\ No newline at end of file
+Plugins=
+Connect_to_external_SQL_database=
+Export_to_external_SQL_database=
+Search_JSTOR=
+Fetch_SPIRES=
+Fetch_CiteSeer_by_ID=Hent_CiteSeer_ved_hjelp_av_ID
+Search_Medline=
diff --git a/src/resource/build.properties b/src/resource/build.properties
index eb67569..947ebfc 100644
--- a/src/resource/build.properties
+++ b/src/resource/build.properties
@@ -1,3 +1,3 @@
-builddate=November 29 2007
-build=335
-version=2.3.1
\ No newline at end of file
+builddate=March 12 2008
+build=15
+version=2.4b
\ No newline at end of file
diff --git a/src/java/tests/net/sf/jabref/imports/CopacImporterTest1.txt b/src/tests/net/sf/jabref/imports/CopacImporterTest1.txt
similarity index 100%
rename from src/java/tests/net/sf/jabref/imports/CopacImporterTest1.txt
rename to src/tests/net/sf/jabref/imports/CopacImporterTest1.txt
diff --git a/src/java/tests/net/sf/jabref/imports/CopacImporterTest2.txt b/src/tests/net/sf/jabref/imports/CopacImporterTest2.txt
similarity index 100%
rename from src/java/tests/net/sf/jabref/imports/CopacImporterTest2.txt
rename to src/tests/net/sf/jabref/imports/CopacImporterTest2.txt
diff --git a/src/java/tests/net/sf/jabref/imports/IEEEImport1.txt b/src/tests/net/sf/jabref/imports/IEEEImport1.txt
similarity index 100%
rename from src/java/tests/net/sf/jabref/imports/IEEEImport1.txt
rename to src/tests/net/sf/jabref/imports/IEEEImport1.txt
diff --git a/src/java/tests/net/sf/jabref/imports/IsiImporterTest1.isi b/src/tests/net/sf/jabref/imports/IsiImporterTest1.isi
similarity index 100%
rename from src/java/tests/net/sf/jabref/imports/IsiImporterTest1.isi
rename to src/tests/net/sf/jabref/imports/IsiImporterTest1.isi
diff --git a/src/java/tests/net/sf/jabref/imports/IsiImporterTestInspec.isi b/src/tests/net/sf/jabref/imports/IsiImporterTestInspec.isi
similarity index 100%
rename from src/java/tests/net/sf/jabref/imports/IsiImporterTestInspec.isi
rename to src/tests/net/sf/jabref/imports/IsiImporterTestInspec.isi
diff --git a/src/java/tests/net/sf/jabref/imports/IsiImporterTestMedline.isi b/src/tests/net/sf/jabref/imports/IsiImporterTestMedline.isi
similarity index 100%
rename from src/java/tests/net/sf/jabref/imports/IsiImporterTestMedline.isi
rename to src/tests/net/sf/jabref/imports/IsiImporterTestMedline.isi
diff --git a/src/java/tests/net/sf/jabref/imports/IsiImporterTestWOS.isi b/src/tests/net/sf/jabref/imports/IsiImporterTestWOS.isi
similarity index 100%
rename from src/java/tests/net/sf/jabref/imports/IsiImporterTestWOS.isi
rename to src/tests/net/sf/jabref/imports/IsiImporterTestWOS.isi
diff --git a/src/java/tests/net/sf/jabref/imports/oai2.xml b/src/tests/net/sf/jabref/imports/oai2.xml
similarity index 100%
rename from src/java/tests/net/sf/jabref/imports/oai2.xml
rename to src/tests/net/sf/jabref/imports/oai2.xml
diff --git a/src/java/tests/net/sf/jabref/imports/oai22.xml b/src/tests/net/sf/jabref/imports/oai22.xml
similarity index 100%
rename from src/java/tests/net/sf/jabref/imports/oai22.xml
rename to src/tests/net/sf/jabref/imports/oai22.xml
diff --git a/src/java/tests/net/sf/jabref/imports/oai23.xml b/src/tests/net/sf/jabref/imports/oai23.xml
similarity index 100%
rename from src/java/tests/net/sf/jabref/imports/oai23.xml
rename to src/tests/net/sf/jabref/imports/oai23.xml
diff --git a/src/tests/net/sf/jabref/util/twente.bib b/src/tests/net/sf/jabref/util/twente.bib
new file mode 100644
index 0000000..f8d4d51
--- /dev/null
+++ b/src/tests/net/sf/jabref/util/twente.bib
@@ -0,0 +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:}
+
diff --git a/src/txt/README b/src/txt/CHANGELOG
similarity index 89%
copy from src/txt/README
copy to src/txt/CHANGELOG
index 776577e..4679569 100644
--- a/src/txt/README
+++ b/src/txt/CHANGELOG
@@ -1,90 +1,48 @@
 
-JabRef 2.3.1
-------------
 
-
-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 open source software, distributed under the GNU General
-Public Licence. See the enclosed text file 'gpl.txt', or the About
-dialog, for details about the GPL.
-
-JabRef also uses libraries distributed by other porties; 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.
-
-Change log:
-
-2.3.1
-    - 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.
-    - [ 1620792 ] Fixed: JabRef randomly hangs during Medline fetch
+2.4b
+    - 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.
+	- [ 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
@@ -95,7 +53,7 @@ Change log:
     - 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).
+      (Debian bug #448027).    
 2.3b3
     - Export formats that output the character encoding now use common names for encodings
       instead of Java-specific names.
@@ -127,6 +85,8 @@ Change log:
     - 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
@@ -146,10 +106,10 @@ Change log:
       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. 
+    - 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 "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 '%'.
@@ -158,10 +118,8 @@ Change log:
     - Fixed bug that made it possible to accidentally close database without saving, when error
       occurs during the save operation.
 2.3b
-	- Added % at start of signature text in BibTeX output. Parser now reads both
-	  old and new style.
 	- Added MIS Quarterly export format.
-    - Added support for COPAC file 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.
@@ -184,9 +142,9 @@ Change log:
 	- 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 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.
@@ -196,7 +154,7 @@ Change log:
         - 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: 
+        - 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.
@@ -229,7 +187,7 @@ Change log:
         - 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..." 
+          - "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.
@@ -253,11 +211,11 @@ Change log:
         - 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" 
+        - New LayoutFormatter: AuthorOrgSci - first author is in "last, first"
           all others in "first last". First names are abbreviated.
-        - New LayoutFormatter: NoSpaceBetweenAbbreviations - spaces between multiple 
+        - New LayoutFormatter: NoSpaceBetweenAbbreviations - spaces between multiple
           abbreviated first names are removed.
-        - Improved PDF link resolver to produce proper URIs.
+        - 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
@@ -285,7 +243,7 @@ Change log:
           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 
+        - 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.
@@ -353,7 +311,7 @@ Change log:
         - 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.                   
+          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
@@ -424,7 +382,7 @@ Change log:
         - 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 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.
@@ -451,7 +409,7 @@ Change log:
         - 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 "\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.
@@ -663,26 +621,3 @@ Change log:
           new types.
 1.0:	First release.
 
-
-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 CVS
-repository; instructions for downloading are found on the
-homepage. Note that the CVS version may contain untested features, or
-have other stability issues. Unless you're feeling extremely lucky, go
-for the version in the HEAD branch of the module 'jabref'.
-
-
-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/INSTALL b/src/txt/INSTALL
index bc4938d..8b624dc 100644
--- a/src/txt/INSTALL
+++ b/src/txt/INSTALL
@@ -3,17 +3,16 @@ Quick instructions, compiling JabRef from source
 
 To compile JabRef from source, you need:
 
-* A Java compiler, supporting Java 1.4 or higher.
+* A Java compiler, supporting Java 1.5 or higher.
 * Jakarta Ant (http://ant.apache.org). Don't know what version is
   needed; the latest stable version should work fine.
 
-To compile, use the command "ant compile unjarlib jars".
+To compile, use the command "ant jars".
 After the build is finished, you can find the executable jar file
-named "jabref.jar" in the "build/lib" directory. Enjoy!
+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".
-Note that this will not run the "unjarlib" target that bundles 3rd party
-libraries inside the jar file.
 
 On Mac OS X you should include the targets osx and osxjar,
 making the correct command "ant compile unjarlib osx jars osxjar".
@@ -28,4 +27,4 @@ avoid these libraries being bundled inside the JabRef jar.
 
 
 Morten Alver
-Revised June 11, 2005.
+Revised October 9, 2007.
diff --git a/src/txt/README b/src/txt/README
index 776577e..4fa210e 100644
--- a/src/txt/README
+++ b/src/txt/README
@@ -1,7 +1,6 @@
 
-JabRef 2.3.1
-------------
-
+JabRef 2.4 beta
+---------------
 
 Introduction:
 
@@ -78,591 +77,6 @@ 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.
 
-Change log:
-
-2.3.1
-    - 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.
-    - [ 1620792 ] Fixed: JabRef randomly hangs during Medline fetch
-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
-    - 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 % at start of signature text in BibTeX output. Parser now reads both
-	  old and new style.
-	- 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.
-        - [ 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.
-
 
 Bug reports, suggestions, other feedback:
 We are thankful for any bug reports or other feedback. If there are
diff --git a/src/txt/TODO b/src/txt/TODO
new file mode 100644
index 0000000..9d6f499
--- /dev/null
+++ b/src/txt/TODO
@@ -0,0 +1,43 @@
+
+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:
+
+* Spires fetcher: needs some documentation on search queries
+* Open spires entry: ("openSpires" action). Think about better integration of this?
+* Merge patch for entry types (see patch for IEEEXploreFetcher)
+* [OK?] Improve duplicate check.
+* Add "Copy all externally linked files for this set of entries"-feature.
+  Basic functionality in AccessLinksForEntries.
+* Strange bug: when editing a field in entry editor, then clicking an entry of different type
+   in the table, current entry is stored, but the selection drops back to the first entry.
+* Problem setting today with Microba calendar.
+
+* [MADE WORKAROUND] Native FileDialog does not work for selecting a directory.
+  - workaround is to autodisable native file dialog for dir selection.
+
+* [OK? Extension fields only] MODS exports "file" in raw form.
+* [POSTPONE] Icon selection for external file types: - select arbitrary images from disk?
+* [POSTPONE] Fix Save/Export file dialog stuff
+* [POSTPONE] Look up Vista problem with opening file chooser:
+    Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException:
+    3184
+       at sun.awt.shell.Win32ShellFolder2.getFileChooserIcon(Unknown Source)
+       at sun.awt.shell.Win32ShellFolderManager2.get(Unknown Source)
+       at sun.awt.shell.ShellFolder.get(Unknown Source)
+       at com.sun.java.swing.plaf.windows.WindowsLookAndFeel$LazyWindowsIcon.createVal
+    ue(Unknown Source)
+       at javax.swing.UIDefaults.getFromHashtable(Unknown Source)
+       at javax.swing.UIDefaults.get(Unknown Source)
+       at javax.swing.MultiUIDefaults.get(Unknown Source)
+       at javax.swing.UIDefaults.getIcon(Unknown Source)
+       at javax.swing.UIManager.getIcon(Unknown Source)
+       at javax.swing.plaf.basic.BasicFileChooserUI.installIcons(Unknown Source)
+
+
diff --git a/src/windows/JabRef-Logo.gif b/src/windows/JabRef-Logo.gif
deleted file mode 100644
index 89fefc4..0000000
Binary files a/src/windows/JabRef-Logo.gif and /dev/null differ
diff --git a/src/windows/jabref.jsmooth b/src/windows/jabref.jsmooth
deleted file mode 100644
index 0d81dad..0000000
--- a/src/windows/jabref.jsmooth
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<jsmoothproject>
-<JVMSearchPath>registry</JVMSearchPath>
-<JVMSearchPath>javahome</JVMSearchPath>
-<JVMSearchPath>jrepath</JVMSearchPath>
-<JVMSearchPath>jdkpath</JVMSearchPath>
-<JVMSearchPath>exepath</JVMSearchPath>
-<JVMSearchPath>jview</JVMSearchPath>
-<classPath>jabref.jar</classPath>
-<currentDirectory>.</currentDirectory>
-<embeddedJar>false</embeddedJar>
-<executableName>jabref.exe</executableName>
-<iconLocation>JabRef-Logo.gif</iconLocation>
-<initialMemoryHeap>-1</initialMemoryHeap>
-<mainClassName>net.sf.jabref.JabRef</mainClassName>
-<maximumMemoryHeap>-1</maximumMemoryHeap>
-<maximumVersion></maximumVersion>
-<minimumVersion>1.4.0</minimumVersion>
-<skeletonName>Windowed Wrapper</skeletonName>
-<skeletonProperties>
-<key>Message</key>
-<value>Java has not been found on your computer. Do you want to download it?</value>
-</skeletonProperties>
-<skeletonProperties>
-<key>URL</key>
-<value>http://www.java.com</value>
-</skeletonProperties>
-<skeletonProperties>
-<key>SingleProcess</key>
-<value>0</value>
-</skeletonProperties>
-<skeletonProperties>
-<key>Debug</key>
-<value>0</value>
-</skeletonProperties>
-</jsmoothproject>
diff --git a/src/windows/jabref.wxs b/src/windows/jabref.wxs
deleted file mode 100644
index b4490a4..0000000
--- a/src/windows/jabref.wxs
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Wix xmlns="http://schemas.microsoft.com/wix/2003/01/wi">
-    <Product Name="JabRef 2.0.1" Id="118b0801-c924-4071-a0ab-6ec9844cc55a"
-            Version="2.0.1" Manufacturer="http://jabref.sf.net/"
-            Language="1033">
-        <Package Id="????????-????-????-????-????????????"
-                Comments="This MSI file installs JabRef."
-                Manufacturer="http://jabref.sf.net/" InstallerVersion="200"
-                Languages="1033" Compressed="yes"/>
-        <Media Id="1" EmbedCab="yes" Cabinet="JabRef.cab"/>
-        <Directory Id="TARGETDIR" Name="SourceDir">
-            <Directory Id="ProgramFilesFolder" Name="PFiles">
-                <Directory Id="JabRefDir" Name="JabRef" LongName="JabRef 2.0.1">
-                        <Component Id="Libraries"
-                                Guid="6922b877-d0ea-4c52-a2b4-1e1339c398f5">
-                            <File Id="jabrefjar" Name="JabRef.jar" LongName="jabref.jar" DiskId="1" src="jabref.jar" />
-                        </Component>
-                        <Component Id="Executables"
-                                Guid="bed93d86-d9c3-4c02-8cca-dfc7977b31a7">
-                            <File Id="jabref.exe" Name="JabRef.exe" DiskId="1"
-                                    src="jabref.exe">
-                                <Shortcut Id="shortcut"
-                                        Directory="ProgramMenuFolder" Name="JabRef"
-                                        LongName="JabRef 2.0.1"
-                                        Show="normal"
-                                        WorkingDirectory="TARGETDIR"/>
-                            </File>
-                        </Component>
-                </Directory>
-            </Directory>
-            <Directory Id="ProgramMenuFolder" Name="PMFolder"></Directory>
-        </Directory>
-        <Feature Id="DefaultFeature" Level="1">
-            <ComponentRef Id="Libraries"/>
-            <ComponentRef Id="Executables"/>
-        </Feature>
-    <UIRef Id="WixUI" />
-    </Product>
-</Wix>
\ No newline at end of file
diff --git a/src/windows/nsis/fileassoc.nsh b/src/windows/nsis/fileassoc.nsh
deleted file mode 100644
index c03f62e..0000000
--- a/src/windows/nsis/fileassoc.nsh
+++ /dev/null
@@ -1,119 +0,0 @@
-; 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 
\ No newline at end of file
diff --git a/src/windows/nsis/installer_languages/german.nsh b/src/windows/nsis/installer_languages/german.nsh
index c7ad736..eec1f23 100644
--- a/src/windows/nsis/installer_languages/german.nsh
+++ b/src/windows/nsis/installer_languages/german.nsh
@@ -8,7 +8,7 @@
 
 LicenseLangString JabRefLicenseData ${JabRef_LANG} "${PRODUCT_LICENSE_FILE}"
 
-LangString WelcomePageText "${JabRef_LANG}" "Dieser Assistent wird Sie durch die Installation von LyX begleiten.\r\n\
+LangString WelcomePageText "${JabRef_LANG}" "Dieser Assistent wird Sie durch die Installation von JabRef begleiten.\r\n\
 					     \r\n\
 					     $_CLICK"
 
diff --git a/src/windows/nsis/setup.nsi b/src/windows/nsis/setup.nsi
index d348d55..ef45440 100644
--- a/src/windows/nsis/setup.nsi
+++ b/src/windows/nsis/setup.nsi
@@ -235,7 +235,7 @@ Section "un.JabRef" un.SecUnProgramFiles
   ; delete desktop icon
   Delete "$DESKTOP\$(^Name).lnk"
   
-  # remove file extension .lyx
+  # remove file extension 
   ReadRegStr $R0 SHCTX "Software\Classes\${PRODUCT_EXT}" ""
   ${if} $R0 == "${PRODUCT_REGNAME}"
    DeleteRegKey SHCTX "Software\Classes\${PRODUCT_EXT}"
@@ -258,11 +258,12 @@ SectionEnd
 # Installer functions
 Function .onInit
 
+  StrCpy $StartmenuFolder ${PRODUCT_NAME}
 
  # check if the same Jabref version is already installed
   ReadRegStr $0 SHCTX "${PRODUCT_UNINST_KEY}" "Publisher"
   ${if} $0 != ""
-   MessageBox MB_OK|MB_ICONSTOP "$(StillInstalled)"
+   MessageBox MB_OK|MB_ICONSTOP "$(StillInstalled)" /SD IDOK
    Abort
   ${endif}
   
@@ -293,14 +294,14 @@ Function un.onInit
    # check if the Jabref has been installed with admin permisions
    ReadRegStr $0 HKLM "${PRODUCT_UNINST_KEY}" "Publisher"
    ${if} $0 != ""
-    MessageBox MB_OK|MB_ICONSTOP "$(UnNotAdminLabel)"
+    MessageBox MB_OK|MB_ICONSTOP "$(UnNotAdminLabel)" /SD IDOK
     Abort
    ${endif}
    SetShellVarContext current
   ${endif}
   
   ; ask if it should really be removed
-  MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "$(UnReallyRemoveLabel)" IDYES +2
+  MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "$(UnReallyRemoveLabel)" /SD IDYES IDYES +2
   Abort
 
 FunctionEnd
@@ -308,7 +309,7 @@ FunctionEnd
 Function un.onUninstSuccess
 
   HideWindow
-  MessageBox MB_ICONINFORMATION|MB_OK "$(UnRemoveSuccessLabel)"
+  MessageBox MB_ICONINFORMATION|MB_OK "$(UnRemoveSuccessLabel)" /SD IDOK
 
 FunctionEnd
 

-- 
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