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

gregor herrmann gregoa at debian.org
Thu Sep 15 20:39:48 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 ef3a1c7ca14f323254707947151c8cb118570ce8
Author: gregor herrmann <gregoa at debian.org>
Date:   Sat Jun 30 14:23:24 2007 +0000

    [svn-upgrade] Integrating new upstream version, jabref (2.3~beta1)
---
 build.number                                       |    4 +-
 build.xml                                          |   34 +-
 lib/forms-1.0.5.jar                                |  Bin 0 -> 85502 bytes
 lib/glazedlists-1.7.0_java14.jar                   |  Bin 525078 -> 0 bytes
 lib/glazedlists-1.7.0_java15.jar                   |  Bin 0 -> 609094 bytes
 lib/log4j-1.2.6.jar                                |  Bin 0 -> 350525 bytes
 lib/log4j-1.2.9.jar                                |  Bin 0 -> 352291 bytes
 src/help/About.html                                |    6 +-
 src/help/BibtexHelp.html                           |   15 +-
 src/help/Contents.html                             |    3 +-
 src/help/CustomExports.html                        |   13 +-
 src/help/EndNoteFilters.html                       |   11 +-
 src/help/ExternalFiles.html                        |    2 +
 src/help/FileLinks.html                            |   50 +
 src/help/LabelPatterns.html                        |    2 +
 src/help/StringEditorHelp.html                     |   11 +-
 src/help/credits.txt                               |    1 +
 src/help/de/About.html                             |    3 +
 src/help/de/BibtexHelp.html                        |   12 +
 src/help/de/Contents.html                          |    3 +-
 src/help/de/CustomExports.html                     |   31 +-
 src/help/de/EndNoteFilters.html                    |    9 +-
 src/help/de/EntryEditorHelp.html                   |    2 +-
 src/help/de/ExternalFiles.html                     |    4 +-
 src/help/de/FileLinks.html                         |   36 +
 src/help/de/JabRef-UserManual_de.bib               |   37 +-
 src/help/de/JabRef-UserManual_de.tex               |  923 +++----
 src/help/de/LabelPatterns.html                     |    1 +
 src/help/de/StringEditorHelp.html                  |    7 +-
 src/help/fr/About.html                             |   14 +-
 src/help/fr/BibtexHelp.html                        |   10 +
 src/help/fr/CustomExports.html                     |    8 +-
 src/help/fr/EndNoteFilters.html                    |   25 +-
 src/help/fr/LabelPatterns.html                     |   11 +-
 src/help/fr/StringEditorHelp.html                  |   19 +-
 src/images/JabRef-icon.png                         |  Bin 0 -> 657 bytes
 src/images/crystal_16/Icons.properties             |    6 +
 src/images/crystal_16/colors.png                   |  Bin 0 -> 857 bytes
 src/images/crystal_16/openoffice.png               |  Bin 0 -> 1206 bytes
 src/images/crystal_16/save_all.png                 |  Bin 0 -> 769 bytes
 src/images/crystal_16/vim.png                      |  Bin 0 -> 919 bytes
 src/images/splash.png                              |  Bin 171478 -> 175120 bytes
 src/java/net/sf/jabref/AdvancedTab.java            |   14 +-
 src/java/net/sf/jabref/AuthorList.java             |   76 +-
 src/java/net/sf/jabref/BasePanel.java              |  436 ++--
 src/java/net/sf/jabref/BibtexDatabase.java         |  226 +-
 src/java/net/sf/jabref/BibtexEntry.java            |    5 -
 src/java/net/sf/jabref/BibtexFields.java           |   26 +
 src/java/net/sf/jabref/ContentSelectorDialog2.java |   22 +-
 .../net/sf/jabref/DuplicateResolverDialog.java     |   24 +-
 src/java/net/sf/jabref/DuplicateSearch.java        |  142 +-
 src/java/net/sf/jabref/EntryEditor.java            | 2556 ++++++++++----------
 src/java/net/sf/jabref/EntryEditorPrefsTab.java    |  128 +
 src/java/net/sf/jabref/EntryEditorTab.java         |  132 +-
 src/java/net/sf/jabref/ExternalProgramsTab.java    |  143 --
 src/java/net/sf/jabref/ExternalTab.java            |   92 +-
 src/java/net/sf/jabref/FieldEditor.java            |    7 +-
 src/java/net/sf/jabref/FieldTextArea.java          |   11 +-
 src/java/net/sf/jabref/FieldTextField.java         |   27 +-
 src/java/net/sf/jabref/FieldTextMenu.java          |    5 +-
 src/java/net/sf/jabref/GUIGlobals.java             |   17 +-
 src/java/net/sf/jabref/GeneralTab.java             |   91 +-
 src/java/net/sf/jabref/Globals.java                |   75 +-
 src/java/net/sf/jabref/JabRef.java                 |   31 +-
 src/java/net/sf/jabref/JabRefFileChooser.java      |   26 +
 src/java/net/sf/jabref/JabRefFrame.java            |  644 +++--
 src/java/net/sf/jabref/JabRefPreferences.java      |  150 +-
 src/java/net/sf/jabref/PrefsDialog2.java           |    1 -
 src/java/net/sf/jabref/PrefsDialog3.java           |    7 +-
 src/java/net/sf/jabref/PreviewPanel.java           |    4 +-
 src/java/net/sf/jabref/RightClickMenu.java         |    8 +
 src/java/net/sf/jabref/SidePaneManager.java        |    2 +-
 src/java/net/sf/jabref/TablePrefsTab.java          |   37 +-
 src/java/net/sf/jabref/Util.java                   |  498 +++-
 src/java/net/sf/jabref/XmpPrefsTab.java            |    4 +-
 src/java/net/sf/jabref/export/ExportFormats.java   |   40 +-
 src/java/net/sf/jabref/export/FileActions.java     |    7 +-
 .../net/sf/jabref/export/LatexFieldFormatter.java  |   32 +-
 ...odsExportFormat.java => MSBibExportFormat.java} |   27 +-
 .../net/sf/jabref/export/ModsExportFormat.java     |    2 +-
 src/java/net/sf/jabref/export/SaveAllAction.java   |   71 +
 .../net/sf/jabref/export/layout/LayoutEntry.java   |   59 +-
 .../layout/format/AuthorFirstFirstCommas.java      |   22 +
 .../jabref/export/layout/format/AuthorNatBib.java  |   18 +
 .../export/layout/format/RemoveLatexCommands.java  |   18 +-
 .../jabref/export/layout/format/RemoveTilde.java   |   59 +
 .../sf/jabref/external/AccessLinksForEntries.java  |  196 ++
 .../external/AutoSetExternalFileForEntries.java    |  131 +-
 .../external/ConfirmCloseFileListEntryEditor.java  |   13 +
 .../sf/jabref/external/DownloadExternalFile.java   |  230 ++
 .../net/sf/jabref/external/DroppedFileHandler.java |  712 +++---
 .../sf/jabref/external/ExternalFileMenuItem.java   |   44 +-
 .../net/sf/jabref/external/ExternalFilePanel.java  |   25 +-
 .../net/sf/jabref/external/ExternalFileType.java   |   93 +-
 .../sf/jabref/external/ExternalFileTypeEditor.java |  332 +++
 .../external/ExternalFileTypeEntryEditor.java      |  234 ++
 .../jabref/external/FileLinksUpgradeWarning.java   |  203 ++
 .../jabref/external/PushToApplicationButton.java   |    2 +-
 .../net/sf/jabref/external/PushToLatexEditor.java  |   13 +-
 src/java/net/sf/jabref/external/PushToVim.java     |  109 +
 src/java/net/sf/jabref/external/PushToWinEdt.java  |   14 +-
 .../sf/jabref/external/SynchronizeFileField.java   |  329 +++
 .../jabref/external/UnknownExternalFileType.java   |   16 +
 .../sf/jabref/external/UpgradeExternalLinks.java   |   33 +
 .../net/sf/jabref/external/WriteXMPAction.java     |   11 +-
 .../jabref/groups/EntryTableTransferHandler.java   |    2 +-
 .../net/sf/jabref/gui/AutoCompleteListener.java    |  181 ++
 src/java/net/sf/jabref/gui/AutoCompleter.java      |   67 +
 .../net/sf/jabref/gui/CheckBoxFileChooser.java     |  104 +
 .../sf/jabref/gui/DatabasePropertiesDialog.java    |   38 +-
 src/java/net/sf/jabref/gui/FileListEditor.java     |  507 ++++
 src/java/net/sf/jabref/gui/FileListEntry.java      |   47 +
 .../net/sf/jabref/gui/FileListEntryEditor.java     |  210 ++
 src/java/net/sf/jabref/gui/FileListTableModel.java |  204 ++
 src/java/net/sf/jabref/gui/GlazedEntrySorter.java  |    1 -
 .../net/sf/jabref/gui/ImportInspectionDialog.java  |  215 +-
 src/java/net/sf/jabref/gui/MainTableFormat.java    |    5 +-
 .../sf/jabref/gui/MainTableSelectionListener.java  |  101 +-
 src/java/net/sf/jabref/imports/BibtexParser.java   |   88 +-
 .../imports/CheckForNewEntryTypesAction.java       |   55 +
 src/java/net/sf/jabref/imports/CopacImporter.java  |  157 ++
 .../net/sf/jabref/imports/EndnoteImporter.java     |   32 +-
 src/java/net/sf/jabref/imports/EntryFetcher.java   |  107 +-
 .../net/sf/jabref/imports/FieldContentParser.java  |   40 +-
 .../net/sf/jabref/imports/IEEEXploreFetcher.java   |    7 +
 .../net/sf/jabref/imports/ImportFormatReader.java  |   38 +-
 src/java/net/sf/jabref/imports/ImportMenuItem.java |    4 +-
 src/java/net/sf/jabref/imports/MedlineHandler.java |   17 +-
 src/java/net/sf/jabref/imports/MsBibImporter.java  |   76 +
 src/java/net/sf/jabref/imports/OAI2Fetcher.java    |  543 +++--
 src/java/net/sf/jabref/imports/OAI2Handler.java    |  169 +-
 .../net/sf/jabref/imports/OpenDatabaseAction.java  |  120 +-
 src/java/net/sf/jabref/imports/ParserResult.java   |   48 +-
 src/java/net/sf/jabref/imports/PostOpenAction.java |   37 +
 src/java/net/sf/jabref/imports/RisImporter.java    |   65 +-
 .../sf/jabref/labelPattern/LabelPatternUtil.java   |   31 +-
 src/java/net/sf/jabref/mods/MODSEntry.java         |   95 +-
 src/java/net/sf/jabref/mods/PageNumbers.java       |   17 +-
 src/java/net/sf/jabref/mods/PersonName.java        |   52 +-
 src/java/net/sf/jabref/msbib/MSBibDatabase.java    |  119 +
 src/java/net/sf/jabref/msbib/MSBibEntry.java       | 1162 +++++++++
 src/java/net/sf/jabref/util/ResourceExtractor.java |    1 +
 src/java/net/sf/jabref/util/XMPSchemaBibtex.java   |   48 +-
 src/java/net/sf/jabref/util/XMPUtil.java           |  286 ++-
 src/java/tests/net/sf/jabref/AllTests.java         |    7 +-
 .../tests/net/sf/jabref/BibtexDatabaseTest.java    |   36 +
 .../tests/net/sf/jabref/FileBasedTestCase.java     |   16 +-
 src/java/tests/net/sf/jabref/UtilFindFileTest.java |   24 +-
 src/java/tests/net/sf/jabref/UtilTest.java         |   11 +-
 .../net/sf/jabref/export/layout/AllTests.java      |    2 +-
 .../sf/jabref/export/layout/format/AllTests.java   |   31 +-
 .../format/BibtexNameLayoutFormatterTest.java      |    2 -
 .../export/layout/format/RemoveTildeTest.java      |   31 +
 src/java/tests/net/sf/jabref/imports/AllTests.java |    3 +-
 .../net/sf/jabref/imports/BibtexParserTest.java    |    2 +-
 .../net/sf/jabref/imports/CopacImporterTest.java   |   80 +
 .../net/sf/jabref/imports/CopacImporterTest1.txt   |    9 +
 .../net/sf/jabref/imports/CopacImporterTest2.txt   |   34 +
 .../net/sf/jabref/imports/IsiImporterTest.java     |    5 +-
 .../net/sf/jabref/imports/OAI2ImportTest.java      |  170 +-
 src/java/tests/net/sf/jabref/imports/oai2.xml      |   10 +-
 src/java/tests/net/sf/jabref/imports/oai23.xml     |   37 +
 .../net/sf/jabref/util/XMPSchemaBibtexTest.java    |    2 +-
 src/java/tests/net/sf/jabref/util/XMPUtilTest.java |  809 ++++---
 src/resource/JabRef_de.properties                  |  731 ++----
 src/resource/JabRef_du.properties                  |  716 ++----
 src/resource/JabRef_en.properties                  |  701 ++----
 src/resource/JabRef_fr.properties                  |  530 ++--
 src/resource/JabRef_it.properties                  |  505 ++--
 src/resource/JabRef_no.properties                  |  483 ++--
 src/resource/Menu_de.properties                    |   51 +-
 src/resource/Menu_du.properties                    |   12 +-
 src/resource/Menu_en.properties                    |    5 +
 src/resource/Menu_fr.properties                    |    4 +
 src/resource/Menu_it.properties                    |   19 +-
 src/resource/Menu_no.properties                    |    6 +-
 src/resource/build.properties                      |    6 +-
 src/resource/layout/harvard/harvard.article.layout |    4 +-
 .../layout/harvard/harvard.incollection.layout     |    2 +-
 .../layout/harvard/harvard.inproceedings.layout    |    2 +-
 src/resource/layout/harvard/harvard.layout         |    2 +-
 .../layout/harvard/harvard.mastersthesis.layout    |    2 +-
 .../layout/harvard/harvard.phdthesis.layout        |    2 +-
 src/resource/layout/misq/misq.article.layout       |   18 +
 src/resource/layout/misq/misq.begin.layout         |    3 +
 src/resource/layout/misq/misq.book.layout          |   21 +
 src/resource/layout/misq/misq.end.layout           |    1 +
 .../{harvard/harvard.layout => misq/misq.layout}   |   13 +-
 src/resource/layout/misq/readme.txt                |   13 +
 src/txt/README                                     |   60 +-
 src/txt/TODO                                       |   31 +-
 src/windows/nsis/README.txt                        |    9 +-
 src/windows/nsis/installer_languages/english.nsh   |   37 +
 src/windows/nsis/installer_languages/french.nsh    |   37 +
 src/windows/nsis/installer_languages/german.nsh    |   37 +
 src/windows/nsis/installer_languages/italian.nsh   |   37 +
 src/windows/nsis/setup.nsi                         |  315 ++-
 197 files changed, 13822 insertions(+), 7085 deletions(-)

diff --git a/build.number b/build.number
index 0ed842d..208a056 100644
--- a/build.number
+++ b/build.number
@@ -1,3 +1,3 @@
 #Build Number for ANT. Do not edit!
-#Tue Jan 30 19:44:09 CET 2007
-build.number=437
+#Fri Jun 29 14:17:55 CEST 2007
+build.number=84
diff --git a/build.xml b/build.xml
index 2c8a2ae..5b36cd7 100644
--- a/build.xml
+++ b/build.xml
@@ -15,16 +15,16 @@
                help mailing list:      must be inserted
 
    Precondition: 1. Ant should be installed.
-                 2. JAVA_HOME environment variable contains the path to JDK1.4 or higher
+                 2. JAVA_HOME environment variable contains the path to JDK1.5 or higher
                  3. ANT_HOME environment variable contains the path to ant's home directory
 
    Language: XML
    Compiler: Ant
    Authors:  Joerg K. Wegner, wegnerj at informatik.uni-tuebingen.de
              Morten O. Alver
-   Version:  $Revision: 1.78 $
-             $Date: 2006/11/29 00:51:22 $
-             $Author: coezbek $
+   Version:  $Revision: 1.82.2.1 $
+             $Date: 2007/06/20 18:51:59 $
+             $Author: mortenalver $
 
    modified:
              23.11.2006 c.oezbek
@@ -47,7 +47,7 @@
      ========================================================================================== -->
 
 	<!-- some version information -->
-	<property name="jabref.version" value="2.2" />
+	<property name="jabref.version" value="2.3b" />
 	<property name="jabref.placeholder.version" value="@version@" />
 	<!-- used by replace task -->
 
@@ -101,7 +101,6 @@
 		<and>
 			<os family="windows" />
 			<isset property="nsis.executable" />
-<!--			<available file="${nsis.executable}" /> -->
 		</and>
 	</condition>
 
@@ -117,7 +116,7 @@
 		<pathelement location="${library.directory}/looks-2.0.4.jar" />
 		<pathelement location="${library.directory}/forms-1.0.4.jar" />
 		<pathelement location="${library.directory}/spin.jar" />
-		<pathelement location="${library.directory}/glazedlists-1.7.0_java14.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" />
@@ -157,7 +156,7 @@
 	<!-- Compiles project -->
 	<target name="compile">
 		<mkdir dir="${build.classes}" />
-		<javac debug="off" deprecation="on" destdir="${build.classes}" source="1.4" target="1.4">
+		<javac debug="on" deprecation="on" destdir="${build.classes}" source="1.5" target="1.5">
 			<src path="${java.dir}" />
 			<exclude name="tests/**" />
 			<classpath refid="classpath" />
@@ -168,7 +167,7 @@
 	<target name="compiletest">
 		<mkdir dir="${build.classes}" />
 		<!--deprecation="on"-->
-		<javac srcdir="${java.dir}/tests" debug="off" destdir="${build.classes}" source="1.4" target="1.4">
+		<javac srcdir="${java.dir}/tests" debug="off" destdir="${build.classes}" source="1.5" target="1.5">
 			<classpath refid="classpath" />
 		</javac>
 	</target>
@@ -177,7 +176,7 @@
 	<target name="osx">
 		<mkdir dir="${build.classes}" />
 
-		<javac srcdir="${osx.dir}" debug="on" destdir="${build.classes}" target="1.4">
+		<javac srcdir="${osx.dir}" debug="on" destdir="${build.classes}" target="1.5">
 		</javac>
 	</target>
 
@@ -362,7 +361,7 @@ version=${jabref.version}</echo>
 		<unjar src="${library.directory}/looks-2.0.4.jar" dest="${build.tmp}" />
 		<unjar src="${library.directory}/forms-1.0.4.jar" dest="${build.tmp}" />
 		<unjar src="${library.directory}/spin.jar" dest="${build.tmp}" />
-		<unjar src="${library.directory}/glazedlists-1.7.0_java14.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}" />
@@ -384,17 +383,19 @@ version=${jabref.version}</echo>
 	<!--++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-->
 
 	<target name="win.installer.clean" description="Delete Installer and Exe-Wrapper + Temp-files">
-		<delete dir="${win.installer.dir}/dist" />
+		<delete failonerror="false" dir="${win.installer.dir}/dist" />
 		<delete file="${win.installer.dir}/JabRefSetup.exe" />
 	</target>
 
-	<target name="win.installer" if="is.windows" description="Copy files in place to be used by the installer">
+	<target name="win.installer" description="Copy files in place to be used by the installer" depends="jars">
 
+		<fail unless="is.windows" message="Not running on windows or NSIS not found. Please make sure that user.properties exists"/>
+		
 		<!-- Gather everything that will go into the installer in dist -->
 		<mkdir dir="${win.installer.dir}/dist" />
 
-		<!--    	<copy file="${build.lib}/${jabref.bin}.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}"/>
 		
@@ -417,6 +418,9 @@ version=${jabref.version}</echo>
 		<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>
 
 	<!--++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
diff --git a/lib/forms-1.0.5.jar b/lib/forms-1.0.5.jar
new file mode 100644
index 0000000..ddd8acb
Binary files /dev/null and b/lib/forms-1.0.5.jar differ
diff --git a/lib/glazedlists-1.7.0_java14.jar b/lib/glazedlists-1.7.0_java14.jar
deleted file mode 100644
index 1d2611b..0000000
Binary files a/lib/glazedlists-1.7.0_java14.jar and /dev/null differ
diff --git a/lib/glazedlists-1.7.0_java15.jar b/lib/glazedlists-1.7.0_java15.jar
new file mode 100644
index 0000000..38fb8c1
Binary files /dev/null and b/lib/glazedlists-1.7.0_java15.jar differ
diff --git a/lib/log4j-1.2.6.jar b/lib/log4j-1.2.6.jar
new file mode 100755
index 0000000..be4a917
Binary files /dev/null and b/lib/log4j-1.2.6.jar differ
diff --git a/lib/log4j-1.2.9.jar b/lib/log4j-1.2.9.jar
new file mode 100644
index 0000000..a6568b0
Binary files /dev/null and b/lib/log4j-1.2.9.jar differ
diff --git a/src/help/About.html b/src/help/About.html
index 2726ab4..46d72ca 100755
--- a/src/help/About.html
+++ b/src/help/About.html
@@ -20,6 +20,7 @@ Nizar N. Batada,
 Michel Baylac,
 Guillaume Gardey,
 Cyrille d'Haese,
+S M Mahbub Murshed,
 Raik Nagel,
 Christopher Oezbek,
 Ellen Reitmayr,
@@ -36,13 +37,14 @@ Jörg Zieren
 <H2>Contributions from:</H2>
 
 Michael Beckmann,
-Oliver B�ckmann, 
+Oliver B�ckmann, 
 Kolja Brix,
 Frédéric Darboux,
 Fabrice Dessaint,
 Nathan Dunn,
 Brian Van Essen,
 Alexis Gallagher,
+David Gleich,
 Sascha Hunold,
 Bernd Kalbfuss,
 Martin Kähmer,
@@ -51,7 +53,9 @@ Krzysztof A. Kościuszkiewicz,
 Christian Kopf,
 Jeffrey Kuhn,
 Alex Montgomery,
+S. M. Mahbub Murshed,
 Ambrogio Oliva,
+Stephan Rave,
 John Relph,
 Hannes Restel,
 Moritz Ringler,
diff --git a/src/help/BibtexHelp.html b/src/help/BibtexHelp.html
index bbe448f..e6156f5 100755
--- a/src/help/BibtexHelp.html
+++ b/src/help/BibtexHelp.html
@@ -22,7 +22,7 @@ program.
 
 
 There is a lot of different fields in <em>bibtex</em>, and some
-additional fields that you can set in JabRef. 
+additional fields that you can set in JabRef.
 <p>
 Generally, you can use LaTeX commands inside of fields containing
 text. <em>Bibtex</em> will automatically format your reference lists,
@@ -262,6 +262,17 @@ information.  Here is a list of some of the more common fields:
     <br>
 
   </li>
+
+  <li><strong>doi<br>
+    </strong>The Digital Object Identifier, a permanent identifier given to documents.<br>
+    <br>
+
+  </li>
+  <li><strong>eid<br>
+    </strong>The Electronic identifier is for electronic journals that also appear in print. This number replaces the page number, and is used to find the article within the printed volume. Sometimes also called <em>citation number</em>.<br>
+    <br>
+
+  </li>
   <li><strong><span style="font-weight: normal; font-style: italic;">contents*</span><br>
     </strong>A Table of Contents<br>
     <br>
@@ -366,4 +377,4 @@ information.  Here is a list of some of the more common fields:
 
 
 
-</body></html> 
\ No newline at end of file
+</body></html>
\ No newline at end of file
diff --git a/src/help/Contents.html b/src/help/Contents.html
index dbaa422..d1f609b 100755
--- a/src/help/Contents.html
+++ b/src/help/Contents.html
@@ -17,6 +17,7 @@
     <a href="GeneralFields.html">Customizing general fields</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="CiteSeerHelp.html">Fetching entries from <em>CiteSeer</em></a><br>
     <a href="MedlineHelp.html">Fetching entries from <em>Medline</em></a><br>
@@ -35,4 +36,4 @@
     <a href="PreviewHelp.html">Entry preview setup</a><br>
     <a href="XMPHelp.html">XMP metadata support in JabRef</a>
 
-</HTML>
\ No newline at end of file
+</HTML>
diff --git a/src/help/CustomExports.html b/src/help/CustomExports.html
index 29d4f69..02967fe 100644
--- a/src/help/CustomExports.html
+++ b/src/help/CustomExports.html
@@ -17,7 +17,8 @@ The only requirement for a valid export filter is the existence of a file with
 the extension <b>.layout</b>. To add a new custom export filter, open the
 dialog box <b>Options -> Manage custom exports</b>, and click <b>Add new</b>.
 A new dialog box will appear, allowing you to specify a name for the export filter
-(which will appear in the <b>File -> Custom export</b> menu of the JabRef window),
+(which will appear as one of the choices in the File type dropdown menu of the file dialog
+when you use the <b>File -> Export</b> menu choice in the JabRef window),
 the path to the <b>.layout</b> file, and the preferred file extension for the export
 filter (which will be the suggested extension in the file dialog when you use the
 export filter).
@@ -128,8 +129,10 @@ to have been run earlier.
 <li><code>AuthorAndsReplacer</code> : replaces "and" between names with ";", and "&" between the last two.
 <li><code>AuthorAndsCommaReplacer</code> : replaces "and" between names with ",", and "&" between the last two.
 <li><code>AuthorOrgSci</code> : first author is in "last, first" all others in "first last". First names are abbreviated.
-<li><code>AuthorAbbreviator : to be documented.
-
+<li><code>AuthorAbbreviator</code> : to be documented.
+<li><code>AuthorNatBib</code> : formats author names in NatBib style, with last names only, separating names by "and"
+    if there are two authors, and giving the first author followed by "et al." if there are more than
+    two authors.
 <li><code>NoSpaceBetweenAbbreviations</code> : spaces between multiple abbreviated first names are removed.
 <li><code>FormatPagesForHTML</code> : replaces "--" with "-".
   <li><code>FormatPagesForXML</code> : replaces "--" with an XML en-dash.
@@ -139,6 +142,8 @@ to have been run earlier.
 <li><code>RemoveWhitespace</code> : to be documented.
 <li><code>RemoveLatexCommands</code> : removes LaTeX commands like <code>\em</code>, <code>\textbf</code>, etc. If
   used together with <code>HTMLChars</code> or <code>XMLChars</code>, this formatter should be called last.
+<li><code>RemoveTilde</code> : replaces the tilde character used in LaTeX as a non-breakable space by a regular space. Useful 
+in combination with the NameFormatter discussed in the next section.
 <li><code>ToLowerCase</code> : turns all characters into lower case.
 
 <li><code>CompositeFormat</code> : to be documented.
@@ -161,7 +166,7 @@ to have been run earlier.
 <p>With JabRef 2.2 it is now possible to define custom name formatters using the bibtex-sty-file syntax. 
 This allows ultimate flexibility, but is a cumbersome to write</p>
 <p>You can define your own formatter in the preference tab "Name Formatter" using the following format
-and then use it with the name given to it as any other name formatter</p>
+and then use it with the name given to it as any other formatter</p>
 
 <code>
   <case1>@<range11>@<format>@<range12>@<format>@<range13>...@@<br>
diff --git a/src/help/EndNoteFilters.html b/src/help/EndNoteFilters.html
index 75ff8e1..01737d0 100644
--- a/src/help/EndNoteFilters.html
+++ b/src/help/EndNoteFilters.html
@@ -8,7 +8,7 @@
 <h2>Export from JabRef</h2>
 
 JabRef can export databases to EndNote-readable files.
-To use this feature, choose <b>Tools -> EndNote</b>, 
+To use this feature, choose <b>File -> Export</b>, choose the file type <b>Endnote (txt)</b> and
 then specify the name of the export file.
 
 <h2>Import to EndNote</h2>
@@ -78,8 +78,7 @@ and therefore will be improperly formatted.
 The default EndNote Import filter does not properly parse authors. The
 EndNote Import from JabRef filter does.  Additionally, this filter
 will recognize a field endnotereftype that will override the default
-mapping. To install the filter, extract the EndNote Extras (<b>File -> 
-Export - > Unpack EndNote filter set</b>) and unpack the Zip file which is created.
+mapping. To install the filter, extract the EndNote Extras (<b>Tools -> Unpack EndNote filter set</b>) and unpack the Zip file which is created.
 Then follow the directions in the file Readme.txt.<p>
 
 <h3>Modifying EndNote Reference Types</h3>
@@ -94,12 +93,12 @@ appear in the entry window. To modify the EndNote Reference Types,
 extract the EndNote Extras and follow the directions in the file
 readme.txt.<p>
 
-<h3>Export to JabRef</h3> 
+<h3>Export to JabRef</h3>
 
 EndNote comes with an export style BibTeX. However, this does not
 support all BibTeX types and fields, and does not support the
 additional General Fields supported by JabRef (<i>pdf, owner, key,</i> etc.)
 If you wish to have these fields supported, extract the EndNote
-Extras and follow the directions in the file readme.txt.<p>
+Extras (<b>Tools -> Unpack EndNote filter set</b>) and follow the directions in the file readme.txt.<p>
 
-</HTML>
+</HTML>
\ No newline at end of file
diff --git a/src/help/ExternalFiles.html b/src/help/ExternalFiles.html
index 61ea300..f4af9c0 100644
--- a/src/help/ExternalFiles.html
+++ b/src/help/ExternalFiles.html
@@ -5,6 +5,8 @@
 
 <H1>PDF/PS/URL/DOI links in JabRef</H1>
 
+<b>Note:</b> JabRef 2.3 and later versions offer an <a href="FileLinks.html">improved system for external file links</a>.
+<p>
 JabRef lets you link up your entries with PDF or PS files stored on your system, as well as
 links to the document on the web in the form of an URL or a DOI identifier.
 
diff --git a/src/help/FileLinks.html b/src/help/FileLinks.html
new file mode 100644
index 0000000..a2e9792
--- /dev/null
+++ b/src/help/FileLinks.html
@@ -0,0 +1,50 @@
+<HTML>
+
+<BODY text="#275856">
+<basefont size="4" color="#2F4958" face="arial">
+
+<H1>File links in JabRef</H1>
+
+JabRef lets you link up your entries with files of any type stored on your system, as well as
+links to the document on the web in the form of an URL or a DOI identifier. Each entry can
+have an arbitrary number of file links, and each linked file can be opened quickly from
+JabRef.
+<p>
+In BibTeX terms, the file links of an entry are encoded in a single field. However, from
+within JabRef they appear as an editable list of links accessed from the entry editor
+along with other BibTeX fields.
+
+<H2>Setting up external file types</H2>
+
+For each file link, a file type must be chosen, to determine what icon should be used and what
+application should be called to open the file. The list of file types can be viewed and edited
+by choosing <b>Options -> Manage external file types</b>, or by clicking the <b>Manage external
+file types</b> button in the <b>External programs</b> tab of the Preferences dialog.
+<p>
+A file type is specified by its name, a graphical icon, a file extension and an application view the files. On Windows, the name of the application can be omitted in
+order to use Window's default viewer instead.
+
+<h2>Adding external links to an entry</h2>
+
+If the "file" field is included in <a href="GeneralFields.html">General fields</a>,
+you can edit the list of external links for an entry in the <a href="EntryEditorHelp.html">Entry editor</a>. The editor includes buttons for inserting,
+editing and removing links, as well as buttons for reordering the list of links.
+<p>
+If you have a file within or below your file directory (set up in <b>Preferences -> External programs -> External file links -> Main file directory</b>) with an extension
+matching one of the defined external file types, and a name containing a BibTeX entry's
+BibTeX key, the file can be autolinked by clicking on the <b>Auto</b> button in the entry editor. The rules for which file names can be autolinked to a BibTeX key can be set up in
+<b>Preferences -> External programs -> External file links -> Use regular expression search</b>.
+<p>
+If you want to download a file and link to it from a BibTeX entry, you can do this by
+clicking the <b>Download</b> button in the entry editor. A dialog box will appear, prompting you to enter the URL. The file will be downloaded to your main file directory,  named based on the entry's BibTeX key, and finally linked from the entry.
+
+<h2>Opening external files</h2>
+
+There are several ways to open an external file or web page. In the entry table you can select an entry and use the menu choice, keyboard shortcut
+or the right-click menu to open an entry's first external link. Alternatively, if the entry table is set up to show the <b>file</b> column (set up in <b>Preferences -> Entry table -> Special table columns -> Show file column</b>), you can click on
+the file icon to open an entry's first link. To access any of an entry's links, click
+on the icon with the right mouse button (or <b>Ctrl-click</b> on Max OS X) to bring up
+a menu showing all links.
+
+</body>
+</html>
\ No newline at end of file
diff --git a/src/help/LabelPatterns.html b/src/help/LabelPatterns.html
index cee6fd0..c4330c9 100644
--- a/src/help/LabelPatterns.html
+++ b/src/help/LabelPatterns.html
@@ -32,6 +32,8 @@ no more than N characters.<BR>
 <li><b>[<code>authN</code>]</b>: The first N characters of the first author's last name<BR>
 <li><b>[<code>authN_M</code>]</b>: The first N characters of the Mth author's last name<BR>
 <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><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><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>
 </ul>
 <b>Note:</b> If there is no author (as in the case of an edited book), then all of the above <b><code>[auth...]</code></b> markers will use the editor(s) (if any) as a fallback. Thus, the editor(s) of a book with no author will be treated as the author(s) for label-generation purposes. If you do not want this behaviour, i.e. you require a marker which expands to nothing if there is no author, use  <b><code>pureauth</code></b> instead of <b><code>auth</code></b> in the above codes. For ex [...]
diff --git a/src/help/StringEditorHelp.html b/src/help/StringEditorHelp.html
index 411d8da..e869da1 100755
--- a/src/help/StringEditorHelp.html
+++ b/src/help/StringEditorHelp.html
@@ -22,10 +22,15 @@ name in each entry, the characters '#JTB#' (without quotes) are put into the
 identically each time.
 
 <P>
-A string reference can appear anywhere in any field, always by enclosing
+A string reference can appear anywhere in a field, always by enclosing
 the string's name in a pair of '#' characters. This syntax is specific for
 JabRef, and differs slightly from the <em>bibtex</em> notation that
-is produced when you save your database.
+is produced when you save your database. Strings can by default be used for all
+standard BibTeX fields, and in <b>Preferences -> General -> File</b> you can opt to
+enable strings for non-standard fields as well. In the latter case you can specify a
+set of fields that are excepted from string resolving, and here it is recommended
+to include the 'url' field and other fields that may need to contain the '#' character
+and that may be processed by BibTeX/LaTeX.
 
 <P>
 A string may in the same way be referred in the content of another
@@ -38,4 +43,4 @@ in alphabetical order in the string editor, and stored in the same order, except
 a different ordering is required by BibTeX.
 
 </BODY>
-</HTML> 
\ No newline at end of file
+</HTML>
\ No newline at end of file
diff --git a/src/help/credits.txt b/src/help/credits.txt
index f60fac9..5b28037 100644
--- a/src/help/credits.txt
+++ b/src/help/credits.txt
@@ -33,6 +33,7 @@ Rudolf Seemann
 Mike Smoot
 Ulrich St�rk
 Martin Stolle
+Matthias Stuermer
 David Weitzman
 Seb Wills
 
diff --git a/src/help/de/About.html b/src/help/de/About.html
index 44c95ac..b47ff1d 100644
--- a/src/help/de/About.html
+++ b/src/help/de/About.html
@@ -43,6 +43,7 @@ Fabrice Dessaint,
 Nathan Dunn,
 Brian Van Essen,
 Alexis Gallagher,
+David Gleich,
 Sascha Hunold,
 Bernd Kalbfuss,
 Martin Kähmer,
@@ -51,7 +52,9 @@ Krzysztof A. Kościuszkiewicz,
 Christian Kopf,
 Jeffrey Kuhn,
 Alex Montgomery,
+S. M. Mahbub Murshed,
 Ambrogio Oliva,
+Stephan Rave,
 John Relph,
 Hannes Restel,
 Moritz Ringler,
diff --git a/src/help/de/BibtexHelp.html b/src/help/de/BibtexHelp.html
index 28d27cf..4cfabf0 100644
--- a/src/help/de/BibtexHelp.html
+++ b/src/help/de/BibtexHelp.html
@@ -191,6 +191,18 @@ Feldnamen, die mit einem Stern* versehen sind, werden nicht direkt von JabRef un
     </strong>Copyright-Informationen.<br>
     <br>
   </li>
+
+  <li><strong>doi<br>
+    </strong>Der <em>Digital Object Identifier</em> ist eine permanente Kennung von Dokumenten.<br>
+    <br>
+
+  </li>
+  <li><strong>eid<br>
+    </strong>Der EID (<em>Electronic identifier</em>) wird für elektronische Zeitschriften benutzt, die auch im Druck erscheinen. Mit dieser Nummer, die die Seitenzahlen ersetzt, lässt sich der Artikel in der gedruckten Ausgabe finden. Der EID wird manchmal auch <em>citation number</em> genannt.<br>
+    <br>
+
+  </li>
+
   <li><strong><span style="font-weight: normal; font-style: italic;">ISBN*</span><br>
     </strong>Die Internationale Standardbuchnummer.<br>
     <br>
diff --git a/src/help/de/Contents.html b/src/help/de/Contents.html
index 1fd0a95..c12d472 100644
--- a/src/help/de/Contents.html
+++ b/src/help/de/Contents.html
@@ -28,7 +28,8 @@
 <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="ExternalFiles.html">Links zu externen Dateien (PDF/PS/URL/DOI) in JabRef</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>
diff --git a/src/help/de/CustomExports.html b/src/help/de/CustomExports.html
index 857ed29..df92a23 100644
--- a/src/help/de/CustomExports.html
+++ b/src/help/de/CustomExports.html
@@ -16,7 +16,8 @@ Die einzige Voraussetzung für einen Exportfilter ist, daß eine Datei
 Endung <b>.layout</b> vorhanden ist. Um einen neuen, eigenen Exportfilter hinzuzufügen,
 öffnen Sie das Dialogfenster <b>Optionen -> Verwalte externe Exportfilter</b> und klicken
 auf die Schaltfläche <b>Neu</b>. Es öffnet sich ein neues Fenster, in dem Sie einen
-Namen (der im Menü <b>Datei -> Externe Exportfilter</b> angezeigt wird), eine Pfadangabe
+Namen (der als Auswahl im Dateityp-Dropdownmenü erscheint, wenn man <b>Datei -> Exportieren</b>
+im JabRef-Hauptfenster wählt), eine Pfadangabe
 zur <b>.layout</b>-Datei und die gewünschte Dateiendung für den Exportfilter angeben
 können. Wenn Sie den Exportfilter benutzen, wird diese Endung im Datei-Dialog automatisch
 vorgeschlagen.
@@ -101,24 +102,52 @@ Formatierern auflisten.
 <ul>
 <li><code>HTMLChars</code> : ersetzt TeX-spezifische Sonderzeichen (z.B. {\^a} oder {\"{o}})
   durch ihre HTML-Entsprechungen.
+<li><code>HTMLParagraphs</code> : interpretiert zwei aufeinanderfolgende Zeilenumbrüche (z.B. \n   \n) als Beginn eines neuen Absatzes und erstellt dementsprechend Absatz-HTML-Tags.
 <li><code>XMLChars</code> : ersetzt TeX-spezifische Sonderzeichen (z.B. {\^a} oder {\"{o}})
   durch ihre XML-Entsprechungen.
+
 <li><code>CreateDocBookAuthors</code> : formatiert das author-Feld im DocBook-Stil.
+<li><code>CreateDocBookEditors</code> : Dokumentation folgt.
+
+<li><code>CurrentDate</code> : gibt das aktuelle Datum aus. Ohne Argument gibt dieser Formatierer das aktuelle Datum im Format "JJJJ.MM.TT HH:MM:SS Z" (Datum, Zeit und Zeitzone) aus. Mit einem anderen Format-String als Argument kann das Datum angepasst werden. So ergibt <code>\format[CurrentDate]{yyyy.MM.dd}</code> nur das Datum, z.B. 2005.11.30.
+
 <li><code>AuthorFirstFirst</code> : formatiert die Felder author/editor mit den Vornamen zuerst.
 <li><code>AuthorFirstFirstCommas</code> : formatiert die Felder author/editor mit den Vornamen zuerst
 und abgetrennt durch Kommas.
+<li><code>AuthorFirstAbbrLastCommas</code> : Dokumentation folgt.
+<li><code>AuthorFirstAbbrLastOxfordCommas</code> : Dokumentation folgt.
+<li><code>AuthorFirstLastOxfordCommas </code> : Dokumentation folgt.
+
 <li><code>AuthorLastFirst</code> : formatiert die Felder author/editor mit den Nachnamen zuerst.
 <li><code>AuthorLastFirstAbbreviator</code> : kürzt die Vornamen aller Autoren.
 Dieser Formatierer kann nur angewendet werden, wenn <code>AuthorLastFirst</code> bereits benutzt wurde.
+<li><code>AuthorLastFirstCommas</code> : Dokumentation folgt.
+<li><code>AuthorLastFirstOxfordCommas</code> : Dokumentation folgt.
+<li><code>AuthorLastFirstAbbrCommas</code> : Dokumentation folgt.
+<li><code>AuthorLastFirstAbbrOxfordCommas</code> : Dokumentation folgt.
+
 <li><code>AuthorAndsReplacer</code> : ersetzt "and" zwischen den Namen durch ";", zwischen den letzten beiden Autoren steht "&".
 <li><code>AuthorAndsCommaReplacer</code> : ersetzt "and" zwischen den Namen durch "," sowie "&" zwischen den beiden letzten.
+
+<li><code>AuthorOrgSci</code> : Der erste Autor erscheint als "Nachname, Vorname", alle anderen als "Vorname Nachname". Vornamen werden abgekürzt.
+<li><code>AuthorAbbreviator</code> : Dokumentation folgt.
+<li><code>AuthorNatBib</code> : formatiert Autorennamen im Natbib-Stil, also nur mit Nachnamen; zwei Autoren werden durch ein "and" voneinander getrennt, bei mehr als zwei Autoren wird der erste angegeben, gefolgt von "et al."
+<li><code>NoSpaceBetweenAbbreviations</code> : Leerzeichen zwischen mehreren abgekürzten Vornamen werden gelöscht.
+
 <li><code>FormatPagesForHTML</code> : ersetzt "--" durch "-".
 <li><code>FormatPagesForXML</code> : ersetzt "--" durch einen XML en-dash (Gedanken- bzw. Bis-Strich).
 <li><code>RemoveBrackets</code> : entfernt alle geschweiften Klammern "{" oder "}".
+<li><code>RemoveBracketsAddComma</code> : Dokumentation folgt.
+<li><code>RemoveWhitespace</code> : Dokumentation folgt.
 <li><code>RemoveLatexCommands</code> : entfernt LaTeX Kommandos wie <code>\em</code>, <code>\textbf</code>
 etc. Zusammen mit <code>HTMLChars</code> oder <code>XMLChars</code> sollte dieser Formatierer
 zuletzt aufgerufen werden.
 <li><code>ToLowerCase</code> : macht aus allen Buchstaben Kleinbuchstaben.
+
+<li><code>CompositeFormat</code> : Dokumentation folgt.
+<li><code>GetOpenOfficeType</code> : Dokumentation folgt.
+<li><code>RTFChars</code> : Dokumentation folgt.
+<li><code>ResolvePDF</code> : Dokumentation folgt.
 </ul>
 
 <p>Falls keiner der verfügbaren Formatierer das Ergebnis erzielt, das Sie erreichen möchten,
diff --git a/src/help/de/EndNoteFilters.html b/src/help/de/EndNoteFilters.html
index 7201c0e..f2482ed 100644
--- a/src/help/de/EndNoteFilters.html
+++ b/src/help/de/EndNoteFilters.html
@@ -8,8 +8,7 @@
 <h2>Exportieren aus JabRef</h2>
 
 JabRef kann Dateien so exportieren, dass EndNote sie lesen kann.
-Um diese Funktion zu nutzen, wählen Sie <b>Extras -> Endnote</b>
-und wählen dann den Namen der Export-Datei.
+Um diese Funktion zu nutzen, wählen Sie <b>Datei -> Exportieren</b>, wählen als Dateityp <b>Endnote (txt)</b> und dann den Namen der Export-Datei.
 
 <h2>Importieren in EndNote</h2>
 
@@ -77,8 +76,8 @@ und demzufolge unpassend formatiert.
 Der vorgegebene EndNote-Importfilter kann das Feld author nicht richtig analysieren.
 Der EndNote Import from JabRef Filter kann dies. Außerdem erkennt dieser Filter
 ein Feld <code>endnotereftype</code>, das die vorgegebene Zuordnung überschreibt.
-Um den Filter zu installieren, extrahieren Sie die EndNote Extras (<b>Datei -> Exportieren
--> EndNote Filter-Set auspacken</b>) und entpacken die Zip-Datei, die dabei erstellt wird. Dann folgen Sie den Angaben in der Datei <code>readme.txt</code>.
+Um den Filter zu installieren, extrahieren Sie die EndNote Extras (<b>Extras
+-> EndNote Filter-Set entpacken</b>) und entpacken die Zip-Datei, die dabei erstellt wird. Dann folgen Sie den Angaben in der Datei <code>readme.txt</code>.
 
 <h3>Ändern der EndNote Referenztypen</h3>
 
@@ -95,7 +94,7 @@ Datei <code>readme.txt</code> folgen.
 
 EndNote hat einen Export-Stil BibTeX, der allerdings nicht alle Eintragstypen und Felder von BibTeX
 und auch nicht die zusätzlich von JabRef genutzten Allgemeinen Felder (<i>pdf, owner, key</i>
-usw.) unterstützt. Falls Sie diese Felder nutzen wollen, extrahieren Sie die EndNote Extras
+usw.) unterstützt. Falls Sie diese Felder nutzen wollen, extrahieren Sie die EndNote Extras (<b>Extras -> EndNote Filter-Set entpacken</b>)
 und folgen den Anweisungen in der Datei <code>readme.txt</code>.<p>
 
 </HTML>
\ No newline at end of file
diff --git a/src/help/de/EntryEditorHelp.html b/src/help/de/EntryEditorHelp.html
index 29cca8c..4fa71f9 100644
--- a/src/help/de/EntryEditorHelp.html
+++ b/src/help/de/EntryEditorHelp.html
@@ -6,7 +6,7 @@
 <H1>Der Eintrags-Editor</H1>
 
 <em>Geöffnet wird der Eintrags-Editor im Hauptfenster durch einen Doppelklick
-auf die linke Spalte eines Eintrags (bzw. irgendwo auf die Zeile des Eintrags, wenn "Bearbeiten in der Tabelle zulassen" im Dialog <strong>Optionen --> Einstellungen --> Allgemein</strong> nicht ausgewählt ist), oder durch Drücken auf ENTER. Der
+auf die Zeile eines Eintrags oder durch Drücken auf ENTER. Der
 Eintrags-Editor wird geschlossen, indem man auf ESC drückt.</em>
 <P>
 Im Eintrags-Editor können Sie alle relevanten Informationen eines Eintrags festlegen.
diff --git a/src/help/de/ExternalFiles.html b/src/help/de/ExternalFiles.html
index f40ead6..b4d58ed 100644
--- a/src/help/de/ExternalFiles.html
+++ b/src/help/de/ExternalFiles.html
@@ -3,8 +3,10 @@
 <BODY text="#275856">
 <basefont size="4" color="#2F4958" face="arial">
 
-<H1>Links zu PDF/PS/URL/DOI-Dateien in JabRef</H1>
+<H1>Links zu PDF- und PS-Dateien, URLs und DOIs in JabRef</H1>
 
+<b>Anmerkung:</b> Ab JabRef 2.3 gibt es ein <a href="FileLinks.html">verbessertes System für Links zu externen Dateien</a>.
+<p>
 Mit JabRef können Sie Ihre Einträge mit den entsprechenden PDF- oder PS-Dateien,
 die sich auf Ihrem Computer befinden, verlinken. Ebenso ist es möglich, Dateien
 im Internet über ein URL oder DOI zu verlinken.
diff --git a/src/help/de/FileLinks.html b/src/help/de/FileLinks.html
new file mode 100644
index 0000000..f7f8074
--- /dev/null
+++ b/src/help/de/FileLinks.html
@@ -0,0 +1,36 @@
+<HTML>
+
+<BODY text="#275856">
+<basefont size="4" color="#2F4958" face="arial">
+
+<H1>Datei-Links in JabRef</H1>
+
+JabRef lässt Sie Ihre Einträge mit Dateien jeden Typs verlinken, die Sie auf Ihrem System gespeichert haben. Außerdem sind Links zu Dokumenten im Internet in der Form eines URL oder eines DOI möglich. Jedem Eintrag kann eine beliebige Anzahl von Datei-Links zugeordnet werden und jede verlinkte Datei kann schnell aus JabRef heraus geöffnet werden.
+
+<p>
+Was BibTeX angeht, werden die Datei-Links eines Eintrags in ein einzelnes Feld geschrieben. In JabRef erscheinen sie aber als editierbare Liste von Links, die im Eintrags-Editor zugänglich sind.
+
+<H2>Einrichten der Dateitypen</H2>
+
+Für jeden Datei-Link muss ein Dateityp gewählt werden, damit das richtige Programm zum Öffnen der Datei und das entsprechende Icon gefunden werden. Die Liste der Dateitypen können Sie einsehen und bearbeiten, indem Sie <b>Optionen -> Externe Dateitypen verwalten</b> wählen oder auf die Schaltfläche <b>Externe Dateitypen verwalten</b> im Bereich <b>Externe Programme</b> des Einstellungs-Dialogs klicken.
+<p>
+Ein Dateityp besteht aus einem Namen, einem graphischen Icon, einer Dateierweiterung und einer Anwendung zum Öffnen der Dateien. Wenn Sie Windows benutzen, können Sie den Namen der Anwendung weglassen, wenn Sie das Standardprogramm verwenden wollen.
+
+<h2>Datei-Links zu einem Eintrag hinzufügen</h2>
+
+Wenn bei den <a href="GeneralFields.html">Allgemeinen Feldern</a> das Feld "file" eingetragen ist,
+können Sie die Liste der externen Links im <a href="EntryEditorHelp.html">Eintrags-Editor</a> bearbeiten.
+Der Editor hat dann Schaltflächen zum Einfügen, Bearbeiten, Löschen und Sortieren der Links.
+
+<p>
+Eine Datei kann mit Hilfe der <b>Auto</b>-Schaltfläche automatisch verlinkt werden, falls sie in Ihrem Dateiverzeichnis (<b>Einstellungen -> Externe Programme -> Links zu externen Dateien -> Hauptverzeichnis</b>) oder einem Unterordner liegt, eine Dateierweiterung hat, die JabRef bekannt ist, und einen Namen hat, der mit dem BibTeX-Key des Eintrags übereinstimmt. Die Regeln, nach denen Dateinamen mit BibTeX-Keys automatisch verknüpft werden, können eingestellt werden  [...]
+
+<p>
+Um eine Datei herunterzuladen und mit einem Eintrag zu verlinken, benutzen Sie die Schaltfläche <b>Download</b> im Eintrags-Editor. Es erscheint ein Dialog, in dem Sie den URL eingeben müssen. Die Datei wird dann in Ihr Hauptverzeichnis gespeichert, anhand des BibTeX-Keys benannt und mit dem Eintrag verknüpft.
+
+<h2>Externe Dateien öffnen</h2>
+
+Es gibt mehrere Möglichkeiten, externe Dateien oder Internetseiten zu öffnen. In der Tabellenansicht können Sie einen Eintrag auswählen und mit dem Menü, einem Tastenkürzel oder dem Kontextmenü den ersten externen Link öffnen. Falls in der Tabellenansicht die Spalte <b>file</b> angezeigt wird (<b>Einstellungen -> Tabellenansicht -> Spezielle Spalten -> Datei-Spalten anzeigen</b>), können Sie auch auf das Icon klicken, um den ersten Link eines  [...]
+
+</body>
+</html>
\ No newline at end of file
diff --git a/src/help/de/JabRef-UserManual_de.bib b/src/help/de/JabRef-UserManual_de.bib
index 7dcf672..a8ffc89 100644
--- a/src/help/de/JabRef-UserManual_de.bib
+++ b/src/help/de/JabRef-UserManual_de.bib
@@ -1,7 +1,7 @@
-This file was created with JabRef 2.2b2.
+This file was created with JabRef 2.2.
 Encoding: ISO8859_1
 
- at ARTICLE{Fenn2006,
+ at PERIODICAL{Fenn2006,
   author = {Fenn, J�rgen},
   title = {Managing Citations and Your Bibliography with \bibtex{}},
   journal = {The Prac\TeX{} Journal},
@@ -12,7 +12,6 @@ Encoding: ISO8859_1
 	von \bibtex{}. Auch f�r Anf�nger geeignet; englisch.},
   timestamp = {2006-12-09},
   url = {http://www.tug.org/pracjourn/2006-4/fenn},
-  urldate = {9.\,12.\,2006}
 }
 
 @UNPUBLISHED{Markey2005,
@@ -25,46 +24,54 @@ Encoding: ISO8859_1
 	bib-Dateien �ber die Programmierung bis hin zu kleinen n�tzlichen
 	Tipps und Tricks und dem "`Missbrauch"' von Bib\TeX{} als Adressbuch
 	oder Glossar~\ldots{}; englisch.},
-  timestamp = {2005-11-15},
+  timestamp = {2007-02-01},
   titleaddon = {The B to X of Bib\TeX}
 }
 
 @UNPUBLISHED{btxdoc,
   author = {Oren Patashnik},
   title = {Bib\TeX{}ing},
-  note = {\ctan{biblio\slash{}bibtex\slash{}distribs\slash{}doc\slash{}btxdoc.tex}},
+  note = {\ctan{biblio\slash{}bibtex\slash{}contrib\slash{}doc\slash{}btxdoc.pdf}},
   month = {8.\,} # feb,
   year = {1988},
   abstract = {Documentation for general {\BibTeX} users},
   annote = {Einf�hrung in die Benutzung von Bib\TeX{}, vom Autor des Programms
-	selbst; englisch. Dokumentation von Bib\TeX{}, die bei jeder \LaTeX{}-Distribution
-	dabei sein sollte.},
+	selbst; englisch.},
   timestamp = {2005-11-15}
 }
 
 @UNPUBLISHED{btxhak,
   author = {Oren Patashnik},
   title = {Designing Bib\TeX{} Styles},
-  note = {\ctan{biblio\slash{}bibtex\slash{}distribs\slash{}doc\slash{}btxhak.tex}},
+  note = {\ctan{biblio\slash{}bibtex\slash{}contrib\slash{}doc\slash{}btxhak.pdf}},
   month = {8.\,} # feb,
   year = {1988},
   abstract = {The part of \BibTeX's documentation that's not meant for general users},
   annote = {Einf�hrung in die Bib\TeX{}-Programmierung, vom Autor des Programms
-	selbst; englisch. Dokumentation von Bib\TeX{}, die bei jeder \LaTeX{}-Distribution
-	dabei sein sollte. },
+	selbst; englisch.},
   timestamp = {2005-11-15}
 }
 
 @UNPUBLISHED{Raichle2002,
   author = {Raichle, Bernd},
   title = {Tutorium: Einf�hrung in die Bib\TeX{}-Programmierung},
-  note = {\href{http://www.dante.de/dante/events/dante2002/handouts/raichle-bibtexprog.pdf}{http://www.dante.de/dante/events/dante2002/handouts/raichle-bibtexprog.pdf}},
+  url = {http://www.dante.de/dante/events/dante2002/handouts/raichle-bibtexprog.pdf},
   year = {2002},
   address = {Erlangen},
-  annote = {Gibt eine kurze Einf�hrung in den Aufbau einer Bib\TeX{}-Datei, hat
-	seinen Schwerpunkt aber vor allem auf der Erstellung eines Bib\TeX{}-Styles
-	(.bst). Erkl�rt auch die f�r Bib\TeX{} verwendete Programmiersprache
-	UPN (Umgekehrte Polnische Notation); deutsch.},
+  annote = {Kurze Einf�hrung in den Aufbau einer Bib\TeX{}"=Datei, wobei der
+   Schwerpunkt vor allem auf der Erstellung eines Bib\TeX{}"=Styles
+	(\texttt{.bst}) liegt. Auch die f�r Bib\TeX{} verwendete Programmiersprache
+	UPN (Umgekehrte Polnische Notation) wird erkl�rt; deutsch.},
   timestamp = {2005-11-15}
 }
 
+ at UNPUBLISHED{btxfaq,
+  author = {Shell, Michael and Hoadley, David},
+  title = {\bibtex{} Tips and FAQ},
+  note = {\ctan{biblio\slash{}bibtex\slash{}contrib\slash{}doc\slash{}btxFAQ.pdf}},
+  month = jan,
+  year = {2007},
+  annote = {Allgemeine Hinweise und Antworten auf h�ufig gestellte Fragen rund
+	um \bibtex{}; englisch.}
+}
+
diff --git a/src/help/de/JabRef-UserManual_de.tex b/src/help/de/JabRef-UserManual_de.tex
index 1a22acd..bdbe4f9 100644
--- a/src/help/de/JabRef-UserManual_de.tex
+++ b/src/help/de/JabRef-UserManual_de.tex
@@ -1,12 +1,18 @@
-\documentclass[10pt,normalheadings]{scrartcl}
+%%%%% To do %%%%%
+% DW 2007-03-23
+% - Bibliographie mit biblatex statt jurabib?
+\documentclass[10pt,normalheadings,ngerman]{scrartcl}
 \usepackage[T1]{fontenc}
 \usepackage[latin1]{inputenc}
 \usepackage{textcomp}
 \setcounter{secnumdepth}{2}
 \setcounter{tocdepth}{4}
+\usepackage{xspace}
 
-%%% version date
-\newcommand{\versiondate}{in Bearb.}%19.\,12.\,2006
+%%%%% author, version of file %%%%%
+\newcommand{\versiondate}{in Bearb.}%8.\,6.\,2007 20:44
+\def\FileAuthor{Dominik Wa�enhoven}
+\def\FileTitle{\jabrefversion{} Benutzerhandbuch}
 
 %%%%% Page Dimensions %%%%%
 \usepackage{geometry}
@@ -24,10 +30,7 @@
 
 \makeatletter
 %%%%% LyX command %%%%%
-\providecommand{\LyX}{L\kern-.1667em\lower.25em\hbox{Y}\kern-.125emX\@}
-
-%%%%% Because html converters don't know tabularnewline %%%%%
-\providecommand{\tabularnewline}{\\}
+\providecommand{\LyX}{L\kern-.1667em\lower.25em\hbox{Y}\kern-.125emX\@\xspace}
 
 %%%%% Listings %%%%%
 \usepackage{listings}
@@ -35,7 +38,7 @@
   frame=none,
   %backgroundcolor=\color{pyellow},
   language=[LaTeX]TeX,
-  basicstyle=\ttfamily\small,
+  basicstyle=\ttfamily,%\small,
   commentstyle=\color{red},
   keywordstyle=, % LaTeX-Befehle werden nicht fett dargestellt
   numbers=none,%left/right
@@ -61,28 +64,36 @@
 \pdfoptionpdfminorversion 2
 
 %%%%% Colors %%%%%
-\usepackage{color}
+\usepackage[dvipsnames]{xcolor}
 \definecolor{dkblue}{rgb}{0,0.1,0.5} % dark blue
 \definecolor{dkred}{rgb}{0.66,0.04,0.04} % dark red
 \definecolor{pyellow}{rgb}{1,0.97,0.75} % pale yellow
 
 %%%%% New commands %%%%%
 %%% JabRef "logo"
-\newcommand{\jabref}{%
-\mbox{%
-  \textit{%
-    {\color{dkred}J}\hspace{-.015em}{\color{black}ab}%
-    \hspace{-.02em}%
-    {\color{dkblue}R}\hspace{-.025em}\raisebox{.15ex}{\color{black}ef}%
-    }%
-  }%
+\DeclareRobustCommand{\jabref}{%
+  \texorpdfstring{% TeX string
+	  \raisebox{-.32ex}{\color{dkred}J}\kern-.06em%
+	    \hbox{$\m at th$% %% force math size calculations
+	          \csname S@\f at size\endcsname
+	          \fontsize\sf at size\z@
+	          \math at fontsfalse\selectfont
+	          \color{orange}A\kern-.025emB}\-%
+	  \hbox{\kern-.06em\-R\hspace{-.08em}%
+	    \raisebox{.16ex}{$\m at th$% %% force math size calculations
+	          \csname S@\f at size\endcsname
+	          \fontsize\sf at size\z@
+	          \math at fontsfalse\selectfont
+	          E\kern-.025emF}}\xspace}%
+	  {JabRef\xspace}% PDF string
 }
+
 %%% version number
-\newcommand{\versionnr}{2.2} %
+\newcommand{\versionnr}{\texorpdfstring{2.3\,(beta)}{2.3 (beta)}} %
 %%% JabRef logo with version nr
-\newcommand{\jabrefversion}{\jabref{}~\versionnr}
-%%% BibTeX-shortcut
-\newcommand{\bibtex}{\texorpdfstring{Bib\kern-.125em\TeX}{BibTeX}}
+\newcommand{\jabrefversion}{\jabref~\versionnr}
+%%% BibTeX logo
+\newcommand{\bibtex}{\texorpdfstring{Bib\kern-.125em\TeX\xspace}{BibTeX}}
 %%% for Menu references
 \newcommand{\menu}[1]{\texorpdfstring{{\color{dkred}\textit{#1}}}{#1}}
 %%% Menu separator
@@ -90,7 +101,7 @@
 %%% yellow box with dark blue text
 \newcommand{\tip}[2][Tipp: ]{%
   \begin{center}%
-  \colorbox{pyellow}{\parbox{0.7\textwidth}{%
+  \colorbox{pyellow}{\parbox{0.85\textwidth}{%
     \color{dkblue}\textit{#1}#2}}%
   \end{center}%
 }%
@@ -104,18 +115,12 @@
     #2\par%
   \end{hangparas}
 }%
-%\newcommand{\faq}[2]{%
-%  \subsection{#1}
-%  #2}%
+
 %%% for CTAN references
 \newcommand{\ctan}[1]{%
-  {CTAN: \color{dkblue}#1}%
+  {\textsc{ctan}: \color{dkred}#1}%
 }
 
-%%%%% author, version of file %%%%%
-\def\FileAuthor{Dominik Wa�enhoven}
-\def\FileTitle{\jabrefversion{} Benutzerhandbuch}
-
 %%%%% Headings %%%%%
 \usepackage{scrpage2}
 \pagestyle{scrheadings}
@@ -130,6 +135,7 @@
 %%%%% Fonts %%%%%
 \usepackage{charter}
 \addtokomafont{sectioning}{\rmfamily} % Headings with serifs
+\renewcommand{\headfont}{\normalfont\itshape} % Headlines italic, not slanted ***
 \usepackage[scaled=.83]{beramono}
 
 %%%%% Other stuff %%%%%
@@ -137,7 +143,7 @@
 %\usepackage{microtype} % micro typography
 
 %%%%% Mini TOCs %%%%%
-\usepackage[ngerman]{minitoc}
+\usepackage{minitoc}
 \mtcsetrules{secttoc}{off}
 %\mtcsetdepth{secttoc}{3}
 \mtcsetfont{secttoc}{subsection}{}
@@ -145,17 +151,27 @@
 %\mtcsettitlefont{secttoc}{\itshape}
 
 %%%%% Language %%%%%
-\usepackage[ngerman]{babel}
-\hyphenation{
-LaTeX
-BibTeX
-Da-tei-na-men
-Me-n�-be-feh-le
-}
+\usepackage{babel}
 
 %%%%% Bibliography %%%%%
 \usepackage{jurabib}
-\jurabibsetup{annote=true,authorformat=year}
+\jurabibsetup{%
+  annote=true,
+  authorformat=year,
+  dotafter=bibentry
+}
+\renewcommand{\biblnfont}{}			% Autoren-Nachnamen (Standard: fett)
+\renewcommand{\bibfnfont}{}			% Autoren-Vornamen (Standard: fett)
+\renewcommand{\bibelnfont}{}			% Hrsg-Nachnamen (Standard: fett)
+\renewcommand{\bibefnfont}{}			% Hrsg-Vornamen (Standard: fett)
+\renewcommand{\bibtfont}{\textit}	% Titel (B�cher)
+\renewcommand{\bibbtfont}{\textit}	% Titel (Sammelwerke)
+\renewcommand{\bibjtfont}{\textit}	% Titel (Zeitschriften)
+\renewcommand{\bibpldelim}{(}			% runde Klammern bei...
+\renewcommand{\bibprdelim}{)}			% ...Zeitschriften (Jahr)
+\renewcommand{\ajtsep}{}				% kein Komma nach Zs-Titeln
+\renewcommand{\biburlprefix}{\jblangle\textsc{url: }}	% Klammer und Text vor einer URL (Standard: "URL: ")
+
 \renewcommand{\bib at heading}{\addsec{Kommentiertes Literaturverzeichnis}}
 
 %%%%% Hyperref %%%%%
@@ -174,11 +190,22 @@ pdfstartview=FitH,%
 bookmarksopen=true,%
 bookmarksopenlevel=1,%
 }
+\urlstyle{rm}
+
+\hyphenation{
+LaTeX
+BibTeX
+Da-tei-na-men
+Me-n�-be-feh-le
+For-mat-erken-nung% verhindert Trennung "Formater-kennung"
+}
 
 \makeatother
+
+%%%%% %%%%% %%%%% %%%%% %%%%% %%%%% %%%%% %%%%% %%%%% %%%%% %%%%% %%%%%
 \begin{document}
 
-\subject{\includegraphics[scale=.5]{../../images/JabRef-icon-48.png}}
+\subject{\includegraphics[scale=.5]{../../images/JabRef-icon-48}}
 
 
 \title{\jabrefversion{}\\
@@ -189,28 +216,29 @@ Benutzerhandbuch}
 {\normalsize (\href{mailto:domwass at users.sourceforge.net}{domwass at users.sourceforge.net})}}
 
 
-\date{{}}
+\date{\small \versiondate}
 
 \maketitle
+
 \begin{abstract}
-\jabref{} ist eine grafische Java-Anwendung zur Bearbeitung von \bibtex{}-Dateien
-(.bib). Mit \jabref{} k�nnen Literaturangaben in Gruppen organisiert
+\jabref ist eine grafische Java-Anwendung zur Bearbeitung von \bibtex{}-Dateien
+(.bib). Mit \jabref k�nnen Literaturangaben in Gruppen organisiert
 und mit einem einfachen Klick die Ansicht auf eine einzelne Gruppe,
 eine Schnittmenge von Gruppen oder die Gesamtmenge mehrerer Gruppen
-eingegrenzt werden. \jabref{} kann Literaturangaben sortieren (f�r
+eingegrenzt werden. \jabref kann Literaturangaben sortieren (f�r
 alle Standard-\bibtex{}-Felder) und automatisch \bibtex{}-Keys erzeugen.
-Auch Links zu PDF-Dateien oder Webseiten k�nnen mit \jabref{} einfach
+Auch Links zu PDF-Dateien oder Webseiten k�nnen mit \jabref einfach
 erstellt werden.
 
-\jabref{} kann verschiedene Dateiformate importieren und exportieren,
-au�erdem k�nnen die Exportfilter angepasst werden. \jabref{} kann
+\jabref kann verschiedene Dateiformate importieren und exportieren,
+au�erdem k�nnen die Exportfilter angepasst werden. \jabref kann
 auch von der Kommandozeile gestartet werden, um von einem Importformat
 in ein Exportformat zu konvertieren, ohne die grafische Benutzeroberfl�che
 zu starten.
 \end{abstract}
 \begin{quote}
 \begin{spacing}{0.7}
-\begin{center}{\scriptsize Copyright \textcopyright{} 2005--2006, Dominik
+\begin{center}{\scriptsize Copyright \textcopyright{} 2005--2007, Dominik
 Wa�enhoven}
 \end{center}
 {\scriptsize Der Inhalt dieses Handbuchs wird unter den Bedingungen der Creative Commons Public License ">Namensnennung"=NichtKommerziell"=Weitergabe unter gleichen Bedingungen 2.0 Deutschland"< zur Verf�gung gestellt. Um den Lizenzvertrag anzusehen, gehen Sie bitte zu \href{http://creativecommons.org/licenses/by-nc-sa/2.0/de/}{http://creativecommons.org\slash{}licenses\slash{}by-nc-sa\slash{}2.0\slash{}de\slash{}} oder schicken einen Brief an Creative Commons, 559 Nathan Abbott Way, Sta [...]
@@ -228,14 +256,14 @@ Wa
 \section{Einleitung}
 \secttoc
 
-\subsection{�ber dieses Handbuch}
+\subsection{�ber dieses Handbuch}\label{subsec:about}
 
 Dieses Handbuch will eine kurze Einf�hrung zu den n�tzlichsten Funktionen
-von \jabref{} bieten, ohne dabei eine ersch�pfende Beschreibung aller
-Funktionalit�ten dieser Software zu liefern. \emph{}\jabref{} ist
+von \jabref bieten, ohne dabei eine ersch�pfende Beschreibung aller
+Funktionalit�ten dieser Software zu liefern. \emph{}\jabref ist
 das Ergebnis der Verschmelzung von \emph{BibKeeper} und \emph{JBibtexManager}.
-Weitere Informationen gibt es im Internet unter \url{http://jabref.sourceforge.net}
-sowie im Programm selbst unter \menu{Hilfe} \msep{} \menu{Inhalt}.
+Weitere Informationen gibt es im Programm selbst unter \menu{Hilfe} \msep{} \menu{Inhalt}
+sowie im Internet unter \url{http://jabref.sourceforge.net}. Wer dann immer noch keine Antwort auf seine Frage oder keine L�sung zu seinem Problem hat, kann �ber die Foren oder die Mailingliste auf der Projektseite bei Sourceforge weitere Hilfe bekommen (siehe dazu den Abschnitt \nameref{sec:faq}).
 
 Die Anleitungen basieren auf den Hilfeseiten des Programms. Da dieses
 Handbuch und die Hilfeseiten unabh�ngig voneinander gepflegt und aktualisiert
@@ -252,23 +280,55 @@ mit dunkelblauer Schrift dargestellt. Hyperlinks sind ebenfalls dunkelblau
 und anklickbar~-- das gilt sowohl f�r die Navigation innerhalb des
 Dokuments als auch f�r Links ins Internet.
 
-�ber den Stand und die >>Geschichte<< dieses Handbuchs gibt der
-Abschnitt >>Versionsgeschichte<< (S.\,\pageref{RevisionHistory})
-Auskunft.
-
+Wenn Ihnen in diesem Handbuch Fehler auf"|fallen oder wenn Sie Anregungen zum Handbuch haben, w�rde ich mich �ber eine kurze Nachricht per \href{mailto:domwass at users.sourceforge.net}{E-Mail} freuen. �ber den Stand und die Versionen dieses Handbuchs gibt der Abschnitt ">\nameref{RevisionHistory}"< Auskunft.
 
 \subsection{Einf�hrung in \bibtex{}}
 
-\label{BibtexHelp}\tip[]{\jabref{} hilft Ihnen bei der Arbeit mit
+\label{BibtexHelp}\tip[]{\jabref hilft Ihnen bei der Arbeit mit
 Ihren \bibtex{}-Dateien, aber es m�ssen dennoch Regeln beachtet werden,
 wenn Sie Ihre Eintr�ge bearbeiten. Nur so kann sichergestellt werden,
 dass \bibtex{} Ihre Datei richtig verarbeiten kann.}
 
-\noindent Im Folgenden k�nnen nur einige allgemeine Hinweise gegeben werden. Ausf�hrlichere Einf�hrungen und weitere Erl�uterungen zu \bibtex{} finden Sie bei \cite{Fenn2006,Markey2005,btxdoc,btxhak,Raichle2002}.
+\noindent Im Folgenden k�nnen nur einige allgemeine Hinweise gegeben werden. Ausf�hrlichere Einf�hrungen und weitere Erl�uterungen zu \bibtex{} finden Sie bei den im \hyperlink{bibliography}{kommentierten Literaturverzeichnis} aufgef�hrten Beitr�gen.
+
+\subsubsection{\bibtex{}-Eintragstypen}
+\label{Eintragstypen}
+Je nachdem, ob sie ein Buch, einen Zeitschriftenartikel, einen Sammelband oder ein anderes Dokument referenzieren m�chten, h�lt \bibtex{} unterschiedliche Eintragstypen bereit. Hier folgt eine kurze Aufstellung der meist gebrauchten Eintragstypen.\footnote{Vgl. \cite[12--17]{Markey2005}; \cite[7--9]{btxdoc}.} Manche Paktete (wie ">jurabib"<) stellen weitere Eintragstypen zur Verf�gung, die Sie nat�rlich auch in \jabref verwenden k�nnen (mehr dazu im Abschnitt \nameref{CustomEntriesHelp}) [...]
+
+\begin{itemize}
+\item \emph{@article}\\
+Ein Artikel in einer Zeitschrift.
+\item \emph{@book}\\
+Ein Buch, von einem Verlag ver�ffentlicht.
+\item \emph{@booklet}\\
+Ein gedrucktes und gebundenes Buch ohne Verlag.
+\item \emph{@conference}\\
+Siehe \emph{@inproceedings}
+\item \emph{@inbook}\\
+Ein Teil eines Buches, z.\,B. ein Kapitel oder Abschnitt.
+\item \emph{@incollection}\\
+Ein Beitrag aus einem Buch, z.\,B. einem Sammelband.
+\item \emph{@inproceedings}\\
+Ein Artikel aus einem Tagungsbericht, der nicht zwangsl�ufig in einem Verlag erschienen ist.
+\item \emph{@manual}\\
+Eine Dokumentation oder ein Handbuch.
+\item \emph{@mastersthesis}\\
+Eine Diplom-/Magisterarbeit.
+\item \emph{@misc}\\
+Dieser Typ kann benutzt werden, wenn nichts anderes passt.
+\item \emph{@phdthesis}\\
+Eine (unver�ffentlichte) Dissertation.
+\item \emph{@proceedings}\\
+Ein Tagungsbericht.
+\item \emph{@techreport}\\
+Von einer Universit�t oder Institution (normalerweise in einer Reihe) ver�ffentlichter Bericht.
+\item \emph{@unpublished}\\
+Ein Dokument mit Autor und Titel, unver�ffentlicht.
+\end{itemize}
 
 \subsubsection{\bibtex{}-Felder}
 
-Es gibt viele unterschiedliche Felder in \bibtex{} und einige zus�tzliche Felder, die Sie in \jabref{} einsetzen k�nnen.
+Es gibt viele unterschiedliche Felder in \bibtex{} und einige zus�tzliche Felder, die Sie in \jabref einsetzen k�nnen.
 Grunds�tzlich k�nnen Sie \LaTeX{}-Befehle in Feldern, die Text beinhalten, einsetzen. \bibtex{} wird Ihr Literaturverzeichnis automatisch formatieren und je nach \bibtex{} style (Stildatei .bst) Gro�buchstaben verkleinern. Um sicherzustellen, dass Anfangsbuchstaben gro� bleiben, m�ssen Sie die W�rter in geschweifte Klammern einschlie�en, wie im Wort \{Belgien\}.\footnote{Die meisten deutschen \bibtex{}-Stile behalten die Gro�buchstaben ohnehin bei.}
 
 Hinweise zu einigen Feldtypen:
@@ -294,7 +354,7 @@ Die zweite Form sollte f
   \item \emph{crossref}\\
     Der \texttt{key} eines Eintrags, auf den ein Querverweis gesetzt wird. Damit lassen sich beispielsweise die Daten eines Sammelbandes in einem Eintrag f�r einen Aufsatztitel wiederverwenden, ohne sie bei jedem Aufsatztitel explizit einzutragen. Die Funktionalit�t von \texttt{crossref} ist jedoch nicht in jedem Fall praktikabel.
   \item \emph{edition}\\
-    Die Auflage eines Buch, z.\,B. \texttt{Zweite}. Die Ordnungszahl sollte mit einem Gro�buchstaben beginnen; sie wird von den Standardstilen gegebenenfalls in Kleinbuchstaben umgewandelt. Manche Stile verlangen hier eine Ziffer.
+    Die Auflage eines Buchs, z.\,B. \texttt{Zweite}. Die Ordnungszahl sollte mit einem Gro�buchstaben beginnen; sie wird von den Standardstilen gegebenenfalls in Kleinbuchstaben umgewandelt. Manche Stile verlangen hier eine Ziffer.
   \item \emph{editor}\\
     Dieses Feld ist analog zu dem \emph{author}-Feld.
 Falls zus�tzlich ein \texttt{author}-Feld angegeben wird, bezeichnet das \texttt{editor}-Feld den Herausgeber des Buches oder des Sammelbandes, in dem die referenzierte Literatur erschienen ist.
@@ -303,11 +363,11 @@ Falls zus
   \item \emph{institution}\\
     Die f�rdernde Institutions eines technischen Reports.
   \item \emph{journal}\\
-    Ein Zeitschriftenname.
-Mit Hilfe von ">Strings"< k�nnen Zeitschriftennamen abgek�rzt werden. Zum Erstellen eines solchen Strings k�nnen Sie den \nameref{StringEditorHelp} benutzen oder die Funktionalit�t zur \nameref{JournalAbbreviations} %Abk�rzung von Zeitschriftentiteln 
+    Der Name einer Zeitschrift.
+Mit Hilfe von ">Strings"< k�nnen Zeitschriftentitel abgek�rzt werden. Zum Erstellen eines solchen Strings k�nnen Sie den \nameref{StringEditorHelp} benutzen oder die Funktionalit�t zur \nameref{JournalAbbreviations} %Abk�rzung von Zeitschriftentiteln 
 verwenden.
   \item \emph{key}\\
-    Dieses Feld wird zur Sortierung, zur Erstellung von Labels (falls kein \texttt{author} vorhanden ist) und f�r Querverweise (\texttt{crossref}) verwendet. Verwechseln Sie dieses Feld nicht mit dem \texttt{Bibtexkey}, der f�r die \texttt{\textbackslash cite}-Kommandos gebraucht wird und am Anfang jedes Eintrags erscheint (im \bibtex{}-Quelltext).
+    Dieses Feld wird zur Sortierung, zur Erstellung von Labels (falls kein \texttt{author} vorhanden ist) und f�r Querverweise (\texttt{crossref}) verwendet. Verwechseln Sie dieses Feld nicht mit dem \texttt{Bibtexkey}, der f�r die \texttt{\textbackslash cite}-Kommandos gebraucht wird und am Anfang jedes Eintrags erscheint (im \bibtex{}"=Quelltext).
   \item \emph{month}\\
     Der Monat, in dem ein Werk ver�ffentlicht oder geschrieben wurde. Benutzen Sie am besten die englischen Abk�rzungen (jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec).
   \item \emph{note}\\
@@ -318,7 +378,7 @@ Die Nummer einer Zeitschrift, eines technischen Reports oder eines Bandes innerh
     Die Organisation, die einen Konferenzband f�rdert.
   \item \emph{pages}\\
     Die Seitenzahl(en) oder der Seitenzahlbereich, z.\,B. \texttt{42-111} oder \texttt{7,41,73-97} or \texttt{43+} (das \texttt{+} deutet auf folgende Seiten, die nicht einen einfachen Bereich umfassen).
-Ein einfacher Bindestrich (wie in \texttt{7-33}) wird in einen doppelten Bindestrich (\texttt{-{-}}) verwandelt, der in TeX den bis-Strich anzeigt (also 7--33).
+Ein einfacher Bindestrich (wie in \texttt{7-33}) wird in einen doppelten Bindestrich (\texttt{-{-}}) verwandelt, der in der Ausgabe als bis-Strich erscheint (also 7--33).
   \item \emph{publisher}\\
     Der Name des Verlags.
   \item \emph{school}\\
@@ -342,7 +402,7 @@ Falls die B
 Bibliographie-Stile f�r \bibtex{} wurden von vielen Leuten entwickelt,
 und einige haben weitere Felder erstellt. Es folgt eine kleine Auswahl.
 
-Feldnamen, die mit einem Stern* versehen sind, werden nicht direkt von \jabref{} unterst�tzt, k�nnen aber eingebunden werden (siehe Abschnitt~\ref{CustomEntriesHelp} \nameref{CustomEntriesHelp}).
+Feldnamen, die mit einem Stern* versehen sind, werden nicht direkt von \jabref unterst�tzt, k�nnen aber eingebunden werden (mehr dazu im Abschnitt \nameref{CustomEntriesHelp}).
 
 \begin{itemize}
   \item \emph{affiliation*}\\
@@ -353,18 +413,22 @@ Feldnamen, die mit einem Stern* versehen sind, werden nicht direkt von \jabref{}
     Ein Inhaltsverzeichnis.
   \item \emph{copyright*}\\
     Copyright-Informationen.
+  \item \emph{doi}\\
+    Der \emph{Digital Object Identifier} ist eine permanente Kennung von Dokumenten.
+  \item \emph{eid}\\
+    Der EID \emph{(Electronic identifier)} wird f�r elektronische Zeitschriften benutzt, die auch im Druck erscheinen. Mit dieser Nummer, die die Seitenzahlen ersetzt, l�sst sich der Artikel in der gedruckten Ausgabe finden. Der EID wird manchmal auch \emph{citation number} genannt.
   \item \emph{ISBN*}\\
     Die Internationale Standardbuchnummer.
   \item \emph{ISSN*}\\
     Die Internationale Standardseriennummer (f�r Zeitschriften).
   \item \emph{keywords}\\
-    Stichworte, k�nnen in \jabref{} gut zum Gruppieren verwendet werden.
+    Stichworte~-- sie k�nnen in \jabref gut zum Gruppieren verwendet werden.
   \item \emph{language*}\\
     Die Sprache des Werks.
   \item \emph{location*}\\
     Der Ort, der mit einem Werk in Verbindung steht, z.\,B. die Stadt, in der eine Konferenz stattgefunden hat.
   \item \emph{LCCN*}\\
-    Die \emph{Library of Congress Call Number}.  Manchmal hei�t das Feld auch \texttt{lib-congress}.
+    Die \emph{Library of Congress Call Number}.  Das Feld kann auch \texttt{lib-congress} hei�en.
   \item \emph{mrnumber*}\\
     Die \emph{Mathematical Reviews}-Nummer.
   \item \emph{price*}\\
@@ -372,7 +436,7 @@ Feldnamen, die mit einem Stern* versehen sind, werden nicht direkt von \jabref{}
   \item \emph{size*}\\
     Die physische Gr��e eines Dokuments.
   \item \emph{url}\\
-    Der \emph{Uniform Resource Locator} (URL, "einheitlicher Quellenanzeiger"), der auf eine Webseite im Internet verweist.
+    Der \emph{Uniform Resource Locator} (URL, ">einheitlicher Quellenanzeiger"<), der auf eine Webseite im Internet verweist.
   \item \emph{urldate}\\
     Das Datum, an dem eine Webseite zuletzt besucht wurde.
 \end{itemize}
@@ -383,14 +447,14 @@ Feldnamen, die mit einem Stern* versehen sind, werden nicht direkt von \jabref{}
 \secttoc
 
 \subsection{System-Voraussetzungen}
-
-\jabref{} ist in Java programmiert und somit betriebssystemunabh�ngig,
+\label{subsec:System-Voraussetzungen}
+\jabref ist in Java programmiert und somit betriebssystemunabh�ngig,
 kann prinzipiell also unter Windows, Mac OS X, Linux und anderen UNIX-Systemen
 betrieben werden. Voraussetzung ist allerdings, dass die \emph{Java
-Virtual Machine} mindestens in der Version~1.4.2 installiert ist.
+Virtual Machine} mindestens in der Version~1.5 installiert ist.\footnote{Bis zur Version 2.2 von \jabref reichte Java~1.4.2 aus.}
 Sie ist kostenlos und kann unter \url{http://java.sun.com/} heruntergeladen
 werden. Im Normalfall sollte das \emph{Java Runtime Environment} (JRE) ausreichen;
-nur wenn Sie \jabref{} kompilieren m�chten, ben�tigen Sie das \emph{Java
+nur wenn Sie \jabref kompilieren m�chten, ben�tigen Sie das \emph{Java
 Development Kit} (JDK).
 
 
@@ -399,8 +463,8 @@ Development Kit} (JDK).
 
 \subsubsection{Installer (msi)}
 
-\jabref{} gibt es im Windows Installer-Format (\texttt{.msi}). Ein
-Doppelklick auf die MSI-Datei installiert \jabref{} und f�gt dem
+\jabref gibt es im Windows Installer-Format (\texttt{.msi}). Ein
+Doppelklick auf die MSI-Datei installiert \jabref und f�gt dem
 Startmen� eine Verkn�pfung hinzu. Falls Java nicht installiert ist,
 wird eine Warnmeldung ausgegeben.%
 \footnote{Die Windows-Installation wurde von Dale Visser erstellt, der dazu
@@ -412,11 +476,11 @@ ein Tool zum Kompilieren von MSI-Dateien aus einer XML-Spezifikation
 
 
 \subsubsection{Batch-Datei (jar)}
-
+\label{subsub:jar}
 Wenn Sie die ausf�hrbare jar-Datei (\texttt{.jar}) heruntergeladen
 haben, probieren Sie zun�chst, ob ein Doppelklick darauf das Programm
 startet~-- dies funktioniert zumindest auf einigen Systemen. Falls
-\jabref{} nicht direkt startet (Windows also nicht wei�, was es mit
+\jabref nicht direkt startet (Windows also nicht wei�, was es mit
 einer jar-Datei anfangen soll), fahren Sie folgenderma�en fort:
 
 Erstellen Sie in dem Ordner, in dem Sie die Datei \emph{JabRef.jar}
@@ -426,41 +490,43 @@ Diese Datei soll nur eine Zeile enthalten:
 \begin{lstlisting}
 start javaw -jar JabRef.jar
 \end{lstlisting}
-Mit einem Doppelklick auf die Batch-Datei starten Sie \jabref{}.
+Mit einem Doppelklick auf die Batch-Datei starten Sie \jabref.
 
 
-\subsection{Starten von der Kommandozeile}
+\subsection{Starten von der Kommandozeile}\label{subsec:Starten-Kommandozeile}
 
 \begin{enumerate}
 \item mit dem \emph{Java Runtime Environment}:
-
-
-\texttt{jre -new -jar <Pfad zur jar-Datei>}
-
+\begin{lstlisting}
+jre -new -jar <Pfad zur jar-Datei>
+\end{lstlisting}
 oder
-
-\texttt{jrew -new -jar <Pfad zur jar-Datei>}
-
+\begin{lstlisting}
+jrew -new -jar <Pfad zur jar-Datei>
+\end{lstlisting}
 \item mit dem \emph{Java Development Kit}:
-
-
-\texttt{java -jar <Pfad zur jar-Datei>}
-
+\begin{lstlisting}
+java -jar <Pfad zur jar-Datei>
+\end{lstlisting}
 \end{enumerate}
-Es wird empfohlen, \jabref{} mit dem Java 5.0 JRE zu benutzen. Falls
-Sie dies tun, sollten Sie die Option \texttt{-Dswing.aatext=true}
-vor der Option \texttt{-jar} einf�gen, um das Benutzen von Anti-Alias-Schriften
+Es wird empfohlen, \jabref mit Java 1.5 zu benutzen und die Option \lstinline{-Dswing.aatext=true}
+vor der Option \lstinline{-jar} einf�gen, um das Benutzen von Anti-Alias-Schriften
 im Programm zu erm�glichen.
 
-Die jar-Datei, die \jabref{} enth�lt, kann entpackt werden mit den
-Kommandos \texttt{jar xf <Pfad zur jar-Datei>} bzw. \texttt{jar xf
-<Pfad zur jar-Datei> <Liste der Dateien, die entpackt werden sollen>}.
+Die jar-Datei, die \jabref enth�lt, kann entpackt werden mit den
+Kommandos 
+\begin{lstlisting}
+jar xf <Pfad zur jar-Datei>
+\end{lstlisting}
+bzw. 
+\begin{lstlisting}
+jar xf <Pfad zur jar-Datei> <Liste der Dateien, die entpackt werden sollen>
+\end{lstlisting}
 Das Entpacken der jar-Datei ist nicht notwendig, um das Programm zu
 starten!
 
-Weitere Hinweise zur Installation finden Sie auf der \jabref{}-Homepage
-unter \url{http://jabref.sourceforge.net} und in der Datei INSTALL
-(zum Kompilieren aus den \emph{sourcen}).
+Weitere Hinweise zur Installation finden Sie in der Datei INSTALL
+(zum Kompilieren aus den \emph{sourcen}) und auf der \href{http://jabref.sourceforge.net}{\jabref-Homepage}.
 
 
 \clearpage 
@@ -468,28 +534,26 @@ unter \url{http://jabref.sourceforge.net} und in der Datei INSTALL
 \secttoc
 \bigskip
 
-\noindent \label{JabRefHelp}\jabref{} ist ein Programm zur Verwaltung von
+\noindent \label{JabRefHelp}\jabref ist ein Programm zur Verwaltung von
 \bibtex{}-Dateien. Es benutzt kein eigenes Dateiformat, d.\,h. dass
 Sie Ihre Dateien direkt im \bibtex{}-Format (Dateiendung \texttt{.bib})
 laden und speichern. Sie k�nnen aber auch bibliographische Datenbanken
-in anderen Formaten in \jabref{} importieren.
+anderer Formate in \jabref importieren.
 
-\jabref{} unterst�tzt Sortier- und Suchfunktionen, um einen �berblick
+\jabref unterst�tzt Sortier- und Suchfunktionen, um einen �berblick
 �ber den Inhalt Ihrer Datei zu bekommen. Sie k�nnen der Datei ganz
 einfach neue Eintr�ge hinzuf�gen, ohne sich daran erinnern zu m�ssen,
-welche Informationen ben�tigt werden. Au�erdem kann \jabref{} \bibtex{}-Keys
-automatisch generieren. \jabref{} ist sehr n�tzlich, wenn Sie \bibtex{}
-oder CiteMaker benutzen, kann aber auch f�r diejenigen sinnvoll sein,
+welche Informationen ben�tigt werden. Au�erdem kann \jabref \bibtex{}-Keys
+automatisch generieren. \jabref ist sehr n�tzlich, wenn Sie \bibtex{}
+oder CiteMaker verwenden, kann aber auch f�r diejenigen sinnvoll sein,
 die andere Bibliographie-Systeme benutzen oder schlicht und einfach
 ihre Literaturquellen organisieren wollen.
 
 \subsection{Das Hauptfenster}
 
-\begin{quote}
 \tip[]{Die meisten Men�funktionen, auf die im Folgenden hingewiesen
 wird, haben Tastenk�rzel, und viele Funktionen k�nnen �ber die Werkzeugleiste
 aufgerufen werden.}
-\end{quote}
 \label{BaseFrameHelp}Im Hauptfenster, in dem Sie mit Ihrer Datei
 arbeiten, befindet sich unter der Men�leiste und der Werkzeugleiste
 die Tableiste mit Tabs (Reitern) f�r jede Ihrer ge�ffneten Dateien.
@@ -498,7 +562,7 @@ alle Datens
 
 Mit einem Doppelklick auf eine Tabellenzeile k�nnen Sie den Inhalt bearbeiten (der \nameref{EntryEditorHelp} wird ge�ffnet). Sie k�nnen mit den Pfeiltasten innerhalb der Tabelle navigieren. Wenn Sie einen Buchstaben dr�cken, springen Sie zu dem ersten Eintrag, der mit diesem Buchstaben beginnt (abh�ngig von der Spalte, nach der Sie die Tabelle sortiert haben).
 
-Die Sortierung der Tabelle erfolgt nach einem Feld Ihrer Wahl. Sie k�nnen das Standardverhalten unter \menu{Optionen \msep{} Einstellungen \msep{} Tabellenansicht} angeben. Um die Sortierreihenfolge schnell zu �ndern, klicken Sie einfach auf die Kopfzeile einer Spalte; damit haben Sie das prim�re Sortierkriterium definiert. Klicken Sie erneut auf den Spaltenkopf, um die Sortierrichtung umzukehren. Ein weiterer Klick sorgt daf�r, dass die Spalte nicht mehr zur Sortierung herangezogen wird [...]
+Die Sortierung der Tabelle erfolgt nach einem Feld Ihrer Wahl. Sie k�nnen das Standardverhalten unter \menu{Optionen \msep{} Einstellungen \msep{} Tabellenansicht} angeben. Um die Sortierreihenfolge schnell zu �ndern, klicken Sie einfach auf die Kopfzeile einer Spalte; damit haben Sie das prim�re Sortierkriterium definiert. Klicken Sie erneut auf den Spaltenkopf, um die Sortierrichtung umzukehren. Ein weiterer Klick sorgt daf�r, dass die Spalte nicht mehr zur Sortierung herangezogen wird [...]
 
 Welche Felder (Spalten) in der Tabelle angezeigt werden sollen, k�nnen
 Sie im \menu{Einstellungs}-Dialog ausw�hlen. Auch die Breite der
@@ -524,7 +588,7 @@ aber einen Querverweis enth
 \item Eine \colorbox{green}{gr�ne} Zelle kennzeichnet ein optionales Feld.
 \item Eine farblose (wei�e) Zelle kennzeichnet ein Feld, das von \bibtex{}
 f�r diesen Eintragstyp nicht benutzt wird. Das Feld kann selbstverst�ndlich
-in \jabref{} bearbeitet werden.
+in \jabref bearbeitet werden.
 \end{itemize}
 
 \subsubsection{Einen neuen Eintrag hinzuf�gen}
@@ -548,37 +612,31 @@ f
 
 Um den \nameref{EntryEditorHelp} zur Bearbeitung
 eines existierenden Eintrags zu �ffnen, klicken Sie einfach doppelt
-auf die linke Spalte der entsprechenden Zeile oder markieren den Eintrag
-und dr�cken auf ENTER. Falls \menu{Bearbeiten in der Tabelle zulassen}
-nicht ausgew�hlt ist (im Dialog \menu{Optionen} \msep{} \menu{Einstellungen}
-\msep{} \menu{Allgemein}), �ffnet ein Doppelklick irgendwo in der
-zugeh�rigen Zeile den Eintrags-Editor.
+auf die entsprechende Zeile oder markieren den Eintrag
+und dr�cken auf ENTER.
 
 
 \subsubsection{Einen \bibtex{}-String in einem Feld verwenden}
 
-In \jabref{} schreiben Sie den Inhalt aller Felder so, wie Sie es
+In \jabref schreiben Sie den Inhalt aller Felder so, wie Sie es
 in einem Texteditor machen w�rden, mit einer Ausnahme: um einen String
 (eine Art Abk�rzung) zu verwenden, umschlie�en Sie den Namen des Strings
 mit je einem \#, z.\,B.
 
 \begin{lstlisting}
-\#jan\# 1997
+#jan# 1997
 \end{lstlisting}
 was interpretiert wird als String mit dem Namen \texttt{jan} gefolgt
 von \texttt{1997}. Vergleichen Sie dazu auch die Hinweise zum \nameref{StringEditorHelp}.
 
 
-\subsection{Eintrags-Editor}
+\subsection{Eintrags"=Editor}
 
 \label{EntryEditorHelp}
 
 \begin{quote}
-\emph{Ge�ffnet wird der Eintrags-Editor im Hauptfenster durch einen
-Doppelklick auf die linke Spalte eines Eintrags (bzw. irgendwo auf
-die Zeile des Eintrags, wenn \menu{Bearbeiten in der Tabelle zulassen}
-im Dialog \menu{Optionen}} \msep{} \emph{\menu{Einstellungen}}
-\msep{} \emph{\menu{Allgemein} nicht ausgew�hlt ist), oder durch
+\emph{Ge�ffnet wird der Eintrags"=Editor im Hauptfenster durch einen
+Doppelklick auf die linke Spalte eines Eintrags oder durch
 Dr�cken auf ENTER. Der Eintrags-Editor wird geschlossen, indem man
 auf ESC dr�ckt.}
 \end{quote}
@@ -590,15 +648,13 @@ genannt werden und f
 
 Sie k�nnen die Felder, die f�r die einzelnen Eintragstypen als ben�tigt
 und optional angesehen werden, und auch die Allgemeinen Felder anpassen.
-Schlagen Sie unter Abschnitt~\ref{CustomEntriesHelp} nach, wenn
-Sie mehr Informationen dar�ber erhalten m�chten.
-
+N�heres dazu erfahren Sie im Abschnitt \nameref{CustomEntriesHelp}.
 
 \subsubsection{Die Panels des Eintrags-Editors}
 
 Der Eintrags-Editor besteht in der Standardeinstellung aus f�nf Panels:
 \emph{Ben�tigte Felder}, \emph{Optionale Felder}, \emph{General},
-\emph{Abstract} und \emph{\bibtex{}} \emph{Quelltext}, wobei \emph{General}
+\emph{Abstract} und \emph{\bibtex{}"=Quelltext}, wobei \emph{General}
 und \emph{Abstract} vom Benutzer angepasst werden k�nnen (siehe dazu
 Abschnitt~\ref{GeneralFields}). In den ersten drei Panels k�nnen
 Sie mit TAB und SHIFT-TAB zwischen den einzelnen Feldern hin- und
@@ -607,48 +663,49 @@ Tabs klicken. Mit den folgenden Tastaturk
 zwischen den Panels navigieren:
 
 \begin{itemize}
-\item CTRL-TAB oder CTRL-+ wechselt zum Panel rechts vom aktuellen Panel,
-\item CTRL-SHIFT-TAB oder CTRL-$-$ (MINUS) wechselt dementsprechend zum
+\item STRG-TAB oder STRG-+ wechselt zum Panel rechts vom aktuellen Panel,
+\item STRG-SHIFT-TAB oder STRG-{-} (MINUS) wechselt dementsprechend zum
 Panel links vom aktuellen Panel.
 \end{itemize}
 Au�erdem k�nnen Sie zum n�chsten oder vorherigen Eintrag wechseln,
 indem Sie >>STRG-SHIFT-$\downarrow$<< bzw. >>STRG-SHIFT-$\uparrow$<<
 oder die Pfeil-Buttons in der linken Toolbar dr�cken.
 
-Das Panel \emph{\bibtex{} Quelltext} zeigt, wie der Eintrag aussehen
+Das Panel \emph{\bibtex{}"=Quelltext} zeigt, wie der Eintrag aussehen
 wird, wenn die Datei im \texttt{bib}-Format gespeichert wird. Wenn
-Sie wollen, k�nnen Sie den \bibtex{} Quelltext direkt bearbeiten.
+Sie wollen, k�nnen Sie den \bibtex{}"=Quelltext direkt bearbeiten.
 Sobald Sie zu einem anderen Panel wechseln, STRG-S dr�cken oder den
-Eintrags-Editor schlie�en, wird \jabref{} versuchen, den Inhalt des
-Quelltext-Panels zu analysieren. Falls dabei Probleme auftreten, werden
+Eintrags-Editor schlie�en, wird \jabref versuchen, den Inhalt des
+Quelltext"=Panels zu analysieren. Falls dabei Probleme auftreten, werden
 Sie benachrichtigt und erhalten die M�glichkeit, den Eintrag noch
-einmal zu �berarbeiten oder den vorherigen Inhalt wiederherzustellen.
+einmal zu �berarbeiten oder den vorherigen Inhalt wiederherzustellen. (N�here
+Einzelheiten dazu finden Sie im Abschnitt \nameref{subsub:feldkonsistenz}.)
 Wenn in den \menu{Einstellungen} (unter \menu{Allgemein}) die Option
-\menu{Quelltext standardm��ig anzeigen} gew�hlt wurde, wird das Quelltext-Panel
+\menu{Quelltext standardm��ig anzeigen} gew�hlt wurde, wird das Quelltext"=Panel
 beim �ffnen des Eintrags-Editors als erstes angezeigt. Wenn Sie lieber
 den Quelltext bearbeiten als die anderen Panels zu benutzen, sollten
 Sie diese Option w�hlen.
 
-\tip{Wenn Ihre Datei Felder enth�lt, die \jabref{} nicht kennt,
-erscheinen diese im Quelltext-Panel.}
+\tip{Wenn Ihre Datei Felder enth�lt, die \jabref nicht kennt,
+erscheinen diese im Quelltext"=Panel.}
 
 \tip[Und noch ein Tipp: ]{Die \emph{PDF-} und \emph{URL}-Felder unterst�tzen
 Drag \& Drop. Sie k�nnen z.\,B. ein URL aus Ihrem Browser dort einf�gen.}
 
 
 \subsubsection{�berpr�fung der Feldkonsistenz}
-
-Wenn der Inhalt eines Feldes ge�ndert wird, �berpr�ft \jabref{},
+\label{subsub:feldkonsistenz}
+Wenn der Inhalt eines Feldes ge�ndert wird, �berpr�ft \jabref,
 ob der neue Inhalt akzeptiert werden kann. Bei Feldern, die von \bibtex{}
 genutzt werden, wird der Inhalt zum einen auf die richtige Klammerung
 mit geschweiften Klammern, aber auch auf die Benutzung des Zeichens
 \texttt{\#} hin �berpr�ft. Das >>hash<<-Symbol (im Deutschen oft
 >>Doppelkreuz<< oder >>Raute<< genannt) darf \emph{nur} paarweise
 benutzt werden, um damit den Namen eines \bibtex{}-Strings einzuschlie�en.
-Beachten Sie, dass \jabref{} nicht �berpr�ft, ob der angef�hrte String
-tats�chlich vorhanden ist (der \bibtex{}-Stil, den Sie benutzen, kann
-eine beliebige Anzahl von Strings definieren, die \jabref{} nicht
-kennt).
+Beachten Sie, dass \jabref nicht �berpr�ft, ob der angef�hrte String
+tats�chlich vorhanden ist, da der \bibtex{}-Stil, den Sie benutzen, 
+eine beliebige Anzahl von Strings definieren kann, die \jabref nicht
+kennt.
 
 Falls die Inhalte nicht akzeptabel sind, wird das Feld mit roter Farbe
 hinterlegt, was auf einen Fehler hindeutet. In diesem Fall werden
@@ -658,9 +715,10 @@ die 
 \subsection{Integrit�tspr�fung}
 
 \begin{quote}
-\emph{Erreichbar �ber das Men� \menu{Extras}} \msep{} \emph{\menu{�berpr�fung der Integrit�t}.}
+\emph{Erreichbar �ber das Men� \menu{Extras \msep{} Datenbank durchsuchen
+\msep{} �berpr�fung der Integrit�t}.}
 \end{quote}
-Mit dieser Funktion �berpr�ft \jabref{} alle Eintr�ge auf deren G�ltigkeit
+Mit dieser Funktion �berpr�ft \jabref alle Eintr�ge auf deren G�ltigkeit
 und versucht Fehler aufzudecken. Mit dem \menu{�berpr�fen}-Button
 kann der Vorgang gestartet werden. Es wird eine Liste mit Hinweisen
 (Info-Icon) und m�glichen Fehlern (Ausrufezeichen-Icon) sowie dem
@@ -676,7 +734,7 @@ Damit man sich in einem \LaTeX{}-Dokument auf einen Literaturverweis
 beziehen kann, braucht man einen eindeutigen \bibtex{}-Key. Eindeutig
 hei�t, dass er nur einmal vergeben sein darf. Es wird nach Gro�"~
 und Kleinschreibung unterschieden, \texttt{Yared1998} ist also nicht
-identisch mit \texttt{yared1998}. \jabref{} bietet einige M�glichkeiten,
+identisch mit \texttt{yared1998}. \jabref bietet einige M�glichkeiten,
 um auch bei gr��eren Datenbanken den �berblick �ber die \bibtex{}-Keys
 nicht zu verlieren.
 
@@ -690,10 +748,10 @@ oder mit dem Zauberstab-Button im Eintrags-Editor veranlassen k
 Falls Sie sich nicht im Eintrags-Editor befinden, werden mit Hilfe
 von STRG-G oder dem Zauberstab-Button aus der Men�leiste f�r alle
 Eintr�ge der Datei \bibtex{}-Keys erzeugt. Falls dabei Keys �berschrieben
-werden, gibt \jabref{} eine Warnmeldung aus.
+werden, gibt \jabref eine Warnmeldung aus.
 
-Wie die \bibtex{}-Keys aussehen, die \jabref{} automatisch generiert,
-und wie Sie dieses Aussehen ver�ndern k�nnen, erfahren Sie unter Abschnitt~\ref{LabelPatterns} \nameref{LabelPatterns}.
+Wie die \bibtex{}-Keys aussehen, die \jabref automatisch generiert,
+und wie Sie dieses Aussehen ver�ndern k�nnen, erfahren Sie im Abschnitt~\ref{LabelPatterns} \nameref{LabelPatterns}.
 
 
 \subsection{Suchfunktionen}
@@ -702,14 +760,14 @@ und wie Sie dieses Aussehen ver
 \begin{quote}
 \emph{STRG-F �ffnet oder aktiviert den Suchdialog.
 Dr�ckt man mehrmals auf STRG-F, so werden die verschiedenen Suchmodi
-ausgew�hlt. Mit STRG-SHIFT-F �ffnet oder aktiviert man den Suchdialog
+ausgew�hlt. STRG-SHIFT-F �ffnet oder aktiviert den Suchdialog
 und w�hlt gleichzeitig die direkte Suche aus. Bei der direkten Suche
 springt man mit STRG-F oder STRG-SHIFT-F zum n�chsten Treffer.}
 \end{quote}
 
 \subsubsection{Direkte Suche}
 
-Bei der direkten Suche sucht \jabref{} unmittelbar, wenn Sie einen
+Bei der direkten Suche sucht \jabref unmittelbar, wenn Sie einen
 Buchstaben eingeben. Die Statuszeile informiert Sie �ber den Sucherfolg.
 Mit STRG-F oder STRG-SHIFT-F wird zum n�chsten Vorkommen des aktuellen
 Suchbegriffs gesprungen. Falls es keine weiteren Vorkommen gibt, informiert
@@ -721,7 +779,7 @@ Sie ESC oder klicken Sie auf \menu{Zur
 
 \subsubsection{Normale Suche}
 
-Hierbei sucht das Programm nach allen Vorkommen der W�rter ihres Suchausdrucks, sobald Sie ENTER dr�cken. Nur Eintr�ge, die alle W�rter enthalten, gelten als Treffer. Um nach festen Ausdr�cken zu suchen, m�ssen Sie die W�rter in doppelte Anf�hrungszeichen einfassen. Zum Beispiel findet die Suchanfrage \texttt{progress \textquotedbl marine acquaculture\textquotedbl} Eintr�ge, die sowohl das wort ">progress"< als auch den Ausdruck ">marine acquaculture"< aufweisen. Alle Eintr�ge, die keine [...]
+Hierbei sucht das Programm nach allen Vorkommen der W�rter ihres Suchausdrucks, sobald Sie ENTER dr�cken. Nur Eintr�ge, die alle W�rter enthalten, gelten als Treffer. Um nach festen Ausdr�cken zu suchen, m�ssen Sie die W�rter in doppelte Anf�hrungszeichen einfassen. Zum Beispiel findet die Suchanfrage \texttt{progress \textquotedbl marine acquaculture\textquotedbl} Eintr�ge, die sowohl das wort ">progress"< als auch den Ausdruck ">marine acquaculture"< aufweisen. Alle Eintr�ge, die keine [...]
 
 \subsubsection{Suchoptionen}
 
@@ -735,8 +793,10 @@ anschlie
 ohne die bisherigen Ergebnisse zu >>verlieren<<.}
 
 \subsubsection{Feldbezeichner und logische Operatoren}
+\label{SearchHelp_advanced}
 
-\label{SearchHelp_advanced}Um nur einige bestimmte Felder zu durchsuchen
+\tip[Achtung! ]{Die folgenden Hinweise gelten nicht f�r die direkte Suche.}
+Um nur einige bestimmte Felder zu durchsuchen
 und\slash{}oder logische Operatoren im Suchbegriff zu benutzen, wird
 eine spezielle Syntax zur Verf�gung gestellt. Um beispielsweise nach
 Eintr�gen mit dem Autor >>Miller<< zu suchen, geben Sie
@@ -744,12 +804,11 @@ Eintr
 \begin{lstlisting}
 author = miller
 \end{lstlisting}
-in das Suchfeld ein. \emph{(Achtung! Das funktioniert nicht bei der
-direkten Suche!)} Falls der Suchbegriff Leerzeichen enth�lt, schlie�en
+in das Suchfeld ein. Falls der Suchbegriff Leerzeichen enth�lt, schlie�en
 Sie ihn in Anf�hrungszeichen ein. Benutzen Sie \emph{nie} Leerzeichen
 in dem Feldbezeichner. Mehrere Feldbezeichner werden durch >>|<<
 voneinander getrennt. Um beispielsweise nach Eintr�gen �ber Karl den
-Gro�en zu suchen, geben Sie folgendes ein:
+Gro�en zu suchen, geben Sie Folgendes ein:
 
 \begin{lstlisting}
 title|keywords = "Karl der Gro�e"
@@ -792,7 +851,7 @@ Die beiden Hauptunterschiede sind:
 
 \begin{enumerate}
 \item W�hrend eine Datei auf einer Festplatte immer in genau einem Ordner
-abgelegt ist, kann ein Literatureintrag in \jabref{} mehreren Gruppen
+abgelegt ist, kann ein Literatureintrag in \jabref mehreren Gruppen
 angeh�ren.
 \item Gruppen benutzen bestimmte Kriterien, um ihren Inhalt dynamisch zu
 bestimmen. Neue Eintr�ge, die den Kriterien einer Gruppe entsprechen,
@@ -809,7 +868,7 @@ erl
 
 Gruppendefinitionen sind dateispezifisch; sie werden als \texttt{@COMMENT}-Block
 in der \texttt{bib}-Datei gespeichert und von allen Benutzern gemeinsam
-benutzt. (K�nftige Versionen von \jabref{} werden m�glicherweise
+benutzt. (K�nftige Versionen von \jabref werden m�glicherweise
 benutzerabh�ngige Gruppen unterst�tzen.)
 
 
@@ -885,7 +944,7 @@ Eintr
 \item [\ldots]\textbf{sehen, welche Gruppen sich �berschneiden}
 
 
-Mit \jabref{} k�nnen Sie ganz einfach herausfinden, welche Gruppen
+Mit \jabref k�nnen Sie ganz einfach herausfinden, welche Gruppen
 sich mit den aktuell ausgew�hlten Gruppen �berschneiden (d.\,h. welche
 Gruppen zumindest einen Eintrag enthalten, der auch in der aktuell
 ausgew�hlten Gruppe ist). Klicken Sie auf \menu{Einstellungen} und
@@ -897,7 +956,7 @@ anderen Gruppen sollten nun markiert sein.
 
 \subsubsection{Arten von Gruppen}
 
-In \jabrefversion{} gibt es vier verschiedene Arten von Gruppen:
+In \jabref gibt es vier verschiedene Arten von Gruppen:
 
 \begin{enumerate}
 \item Die Gruppe \emph{Alle Eintr�ge}, die~-- wie der Name vermuten l�sst~--
@@ -982,8 +1041,8 @@ sein. Das obige Beispiel w
 die sich auf etwas Elektrisches beziehen. Benutzt man das Feld \emph{author},
 kann man sich Eintr�ge eines bestimmten Autors gruppieren lassen,
 usw. Die Suche ist als reine Textsuche oder mit einem regul�ren Ausdruck
-m�glich. Im ersten Fall erlaubt \jabref{} das manuelle Zuweisen zu
-und Entfernen aus einer Gruppe; dazu f�gt \jabref{} den Suchausdruck
+m�glich. Im ersten Fall erlaubt \jabref das manuelle Zuweisen zu
+und Entfernen aus einer Gruppe; dazu f�gt \jabref den Suchausdruck
 dem entsprechenden Feld zu bzw. entfernt ihn daraus. Das macht nur
 f�r das Feld \emph{keywords} oder f�r selbstdefinierte Felder Sinn,
 aber offensichtlich nicht f�r Felder wie \emph{author} oder \emph{year}.
@@ -1011,7 +1070,7 @@ Standardm
 im Gruppenbaum. Ist eine Gruppe ausgew�hlt, wird nur der Inhalt dieser
 Gruppe angezeigt. Es ist jedoch~-- besonders beim Verwenden dynamischer
 Gruppen~-- oft n�tzlich, eine Untergruppe zu erstellen, die \emph{ihre
-Obergruppe verfeinert}. Wenn diese Untergruppe ausgew�hlt wird, werden alle Eintr�ge dieser
+Obergruppe einbezieht}. Wenn diese Untergruppe ausgew�hlt wird, werden alle Eintr�ge dieser
 Gruppe und ihrer Obergruppe angezeigt. Erstellen Sie z.\,B. eine
 Obergrupe, die Eintr�ge mit dem Stichwort \emph{Verteilung} enth�lt,
 sowie eine einbeziehende Untergruppe mit Eintr�gen, die das Stichwort
@@ -1019,14 +1078,13 @@ sowie eine einbeziehende Untergruppe mit Eintr
 alle Eintr�ge angezeigt, die beiden Bedingungen entsprechen, also
 alle, die mit Gau�'scher Verteilung zu tun haben. Indem Sie nun eine
 weitere Untergruppe f�r \emph{Laplace} anlegen, die dieselbe Obergruppe
-verfeinert, k�nnen Sie die Gruppierung einfach erweitern. Im Gruppenbaum
+einbezieht, k�nnen Sie die Gruppierung einfach erweitern. Im Gruppenbaum
 haben solche Gruppen, die ihre Obergruppen einbeziehen, ein spezielles
 Icon. (Dieses Verhalten kann in den Einstellungen abgestellt werden.)
 
 Das logische Gegenst�ck zu einer solchen einbeziehenden Untergruppe
-ist eine Gruppe, die \emph{ihre Untergruppen ber�cksichtigt}.%
-\footnote{Im Englischen \emph{including (super-)groups}.%
-} Wird sie ausgew�hlt, werden nicht nur die Eintr�ge dieser Gruppe,
+ist eine Gruppe, die \emph{ihre Untergruppen ber�cksichtigt}.
+Wird sie ausgew�hlt, werden nicht nur die Eintr�ge dieser Gruppe,
 sondern auch diejenigen aller Untergruppen angezeigt. Im Gruppenbaum
 hat auch diese Art von Gruppen ein spezielles Icon. (Dieses Verhalten
 kann in den Einstellungen abgestellt werden.)
@@ -1088,7 +1146,7 @@ wenn Ihre Datei geeignete Stichworte f
 dem automatischen Erstellen von Gruppen basierend auf dem Feld \emph{keywords}
 k�nnen Sie also ohne gro�en Aufwand ein Grundger�st von Gruppen anlegen.
 
-Sie k�nnen auch Buchstaben angeben, die ignoriert werden sollen, z.\,B.
+Sie k�nnen auch Zeichen angeben, die ignoriert werden sollen, z.\,B.
 Kommas, die zwischen einzelnen Stichworten stehen. Diese werden als
 Worttrenner behandelt und nicht als Teile des Wortes selbst. Dieser
 Schritt ist wichtig, damit kombinierte Stichworte wie etwa \emph{Gau�'sche
@@ -1103,22 +1161,23 @@ nach dem automatischen Erstellen von Hand l
 Der \menu{Aktualisieren}-Button in der Gruppenansicht aktualisiert
 die Tabelle in Bezug auf die aktuell ausgew�hlten Gruppen. Normalerweise
 erfolgt dies automatisch, aber in seltenen F�llen (z.\,B. nach einem
-R�ckg�ngig- oder Wiederholen-Vorgang, der mit Gruppen zusammenh�ngt)
+R�ckg�ngig- oder Wiederholen"=Vorgang, der mit Gruppen zusammenh�ngt)
 ist ein h�ndisches Aktualisieren n�tig.
 
 
 \paragraph{Einbeziehende Unter- und Obergruppen mischen}
 
-Wenn eine einbeziehende Gruppe die Untergruppe von einer Gruppe ist,
-die ihre Untergruppen ber�cksichtigt~-- also sozusagen die Geschwister
-der einbeziehenden Gruppe~--, dann werden diese Geschwister ignoriert,
+Ist eine einbeziehende Gruppe die Untergruppe von einer Gruppe,
+die ihre Untergruppen ber�cksichtigt~-- hat sie also sozusagen Geschwister~--, 
+dann werden diese Geschwister ignoriert,
 sobald die einbeziehende Gruppe ausgew�hlt wird.
 
 
 \subsection{Markieren von Eintr�gen}
+\label{MarkingHelp}
 
 \begin{quote}
-\label{MarkingHelp}\emph{Mit der Tastenkombination STRG-M k�nnen
+\emph{Mit der Tastenkombination STRG-M k�nnen
 Sie Eintr�ge markieren und diese Markierung mit STRG-SHIFT-M wieder
 aufheben. Diese Aktionen sind auch im Men� \menu{Bearbeiten} zu finden.}
 \end{quote}
@@ -1140,7 +1199,7 @@ oder wenn Sie sich merken wollen, welche Artikel oder B
 einmal genauer ansehen m�ssen.
 
 
-\subsection{String-Editor}
+\subsection{String"=Editor}
 \label{StringEditorHelp}
 
 \begin{quote}
@@ -1161,18 +1220,19 @@ gen
 es ist sichergestellt, dass der Name jedesmal in identischer Schreibweise
 ausgegeben wird.
 
-Der Verweis auf einen String kann an jeder Stelle in einem beliebigen
-Feld erscheinen, wobei der Name des Strings immer von einem Paar \texttt{\#}-Zeichen
-eingeschlossen werden muss. Diese Syntax gilt nur f�r \jabref{} und
+Der Verweis auf einen String kann an jeder Stelle eines Feldes erscheinen, 
+wobei der Name des Strings immer von einem Paar \texttt{\#}-Zeichen
+eingeschlossen werden muss. Diese Syntax gilt nur f�r \jabref und
 weicht ein wenig von der \bibtex{}-Syntax ab, die erzeugt wird, wenn
-Sie Ihre Datei speichern.
+Sie Ihre Datei speichern. Strings k�nnen f�r alle Standard-\bibtex{}-Felder verwendet werden.
+Unter \menu{Optionen \msep{} Einstellungen \msep{} Allgemein} k�nnen Sie im Bereich \menu{Datei} festlegen, ob Strings auch in Nicht-Standard-Feldern benutzt werden d�rfen. In diesem Fall k�nnen Sie Felder bestimmen, die von der Aufl�sung der Strings ausgenommen werden; hierbei wird empfohlen, das Feld \texttt{url} und andere Felder anzugeben, die das Zeichen \texttt{\#} enthalten k�nnen und die von \bibtex\slash\LaTeX{} verarbeitet werden k�nnen.
 
 In derselben Weise kann man auch im Inhalt eines Strings auf einen
 anderen String verweisen, vorausgesetzt, dass der String, auf den
 verwiesen wird, bereits \emph{vorher} definiert ist.
 
 W�hrend die Reihenfolge der Strings in Ihrer \bibtex{}-Datei in einigen
-F�llen wichtig ist, brauchen Sie sich bei der Benutzung von \jabref{}
+F�llen wichtig ist, brauchen Sie sich bei der Benutzung von \jabref
 dar�ber keine Gedanken zu machen. Die Strings werden in alphabetischer
 Reihenfolge im String-Editor aufgelistet und in derselben Reihenfolge
 gespeichert, au�er wenn eine andere Reihenfolge von \bibtex{} verlangt
@@ -1183,7 +1243,7 @@ wird.
 \begin{quote}
 \emph{Diese Funktion kann unter \menu{Optionen \msep{} Abk�rzungen der Zeitschriften verwalten} eingestellt werden.}
 \end{quote}
-\jabref{} kann automatisch zwischen Zeitschriftentiteln in abgek�rzter und ausf�hrlicher Form hin- und herschalten, sofern die Titel in einer Ihrer Zeitschriftenlisten enthalten ist. Sie k�nnen mehrere dieser Listen benutzen, die Sie als externe Textdateien anlegen.
+\jabref kann automatisch zwischen Zeitschriftentiteln in abgek�rzter und ausf�hrlicher Form hin- und herschalten, sofern die Titel in einer Ihrer Zeitschriftenlisten enthalten ist. Sie k�nnen mehrere dieser Listen benutzen, die Sie als externe Textdateien anlegen.
 
 \subsubsection{Benutzungshinweise}
 
@@ -1193,35 +1253,35 @@ Die Abk
     \item \caps{ISO}-Abk�rzung, z.\,B. ">Aquacult. Eng."<
     \item \caps{MEDLINE}-Abk�rzung, z.\,B. ">Aquacult Eng"<
 \end{itemize}
-Falls der Zeitschriftenname sich nicht in Ihren Zeitschriftenlisten findet, wird das Feld nicht ver�ndert.
+Falls der Zeitschriftentitel sich nicht in Ihren Zeitschriftenlisten findet, wird das Feld nicht ver�ndert.
 
-Um die Zeitschriftennamen mehrerer Eintr�ge auf einmal zu konvertieren, k�nnen Sie eine beliebige Anzahl von Eintr�gen ausw�hlen und im Men� \menu{Extras} einen der Eintr�ge \menu{Zeitschriftennamen abk�rzen (ISO)}, \menu{Zeitschriftennamen abk�rzen (MEDLINE)} und \menu{Abk�rzung der Zeitschriften aufheben} w�hlen.
-Diese drei Aktionen sorgen daf�r, dass bei allen ausgew�hlten Eintr�gen die Zeitschriftennamen, die in den Zeitschriftenlisten gefunden werden konnten, abgek�rzt oder komplett ausgeschrieben werden.
+Um die Zeitschriftentitel mehrerer Eintr�ge auf einmal zu konvertieren, k�nnen Sie eine beliebige Anzahl von Eintr�gen ausw�hlen und im Men� \menu{Extras} einen der Eintr�ge \menu{Zeitschriftentitel abk�rzen (ISO)}, \menu{Zeitschriftentitel abk�rzen (MEDLINE)} und \menu{Abk�rzung der Zeitschriften aufheben} w�hlen.
+Diese drei Aktionen sorgen daf�r, dass bei allen ausgew�hlten Eintr�gen die Zeitschriftentitel, die in den Zeitschriftenlisten gefunden werden konnten, abgek�rzt oder komplett ausgeschrieben werden.
 
 \subsubsection{Zeitschriftenlisten verwalten}
 
-Sie k�nnen mehrere Zeitschriftenlisten als externe Textdateien benutzen, die mit \jabref{} verlinkt sind. Die prim�re Liste kann in \jabref{} selbst verwaltet werden.
+Sie k�nnen mehrere Zeitschriftenlisten als externe Textdateien benutzen, die mit \jabref verlinkt sind. Die prim�re Liste kann in \jabref selbst verwaltet werden.
 
 \paragraph{Ihre pers�nliche Zeitschriften-Abk�rzungsliste}
 
-Ihre pers�nliche Liste verwalten Sie im oberen Teil des \menu{Abk�rzung der Zeitschriftennamen}-Dialogs.
+Ihre pers�nliche Liste verwalten Sie im oberen Teil des Dialogs \menu{Abk�rzung der Zeitschriftentitel}.
 W�hlen Sie \menu{Neue Datei} und geben einen Dateinamen ein oder klicken auf den \menu{Durchsuchen}-Button. Wenn Sie bereits eine Datei haben, die Sie als Grundlage nehmen wollen, w�hlen Sie stattdessen \menu{Bestehende Datei} und benutzen den \menu{Durchsuchen}-Button zum Ausw�hlen dieser Datei. Die Tabelle zeigt dann den Inhalt der Liste, die Sie ausgew�hlt haben.
 
-Sie k�nnen mit Hilfe der \menu{+} und \menu{--} Buttons an der rechten Seite Eintr�ge hinzuf�gen oder entfernen. F�r jeden Eintrag m�ssen Sie den vollst�ndigen Zeitschriftennamen und die ISO-Abk�rzung angeben (z.\,B. ">Aquacultural Engineering"< und ">Aquacult. Eng."<). Mit einem Doppelklick auf die Tabellenzeile k�nnen Sie die Eintr�ge bearbeiten.
+Sie k�nnen mit Hilfe der \menu{+} und \menu{--} Buttons an der rechten Seite Eintr�ge hinzuf�gen oder entfernen. F�r jeden Eintrag m�ssen Sie den vollst�ndigen Zeitschriftentitel und die ISO-Abk�rzung angeben (z.\,B. ">Aquacultural Engineering"< und ">Aquacult. Eng."<). Mit einem Doppelklick auf die Tabellenzeile k�nnen Sie die Eintr�ge bearbeiten.
 
-Sobald Sie auf \menu{OK} klicken (oder wenn Sie eine bestehende Datei ausgew�lt haben), enth�lt die Tabelle mindestens eine Zeile. Der Tabelleninhalt wird in die ausgew�hlte Datei geschrieben und die Zeitschriftenliste von \jabref{} wird aktualisiert.
+Sobald Sie auf \menu{OK} klicken (oder wenn Sie eine bestehende Datei ausgew�lt haben), enth�lt die Tabelle mindestens eine Zeile. Der Tabelleninhalt wird in die ausgew�hlte Datei geschrieben und die Zeitschriftenliste von \jabref wird aktualisiert.
 
 \paragraph{Externe Zeitschriftenlisten}
 
-Zus�tzlich zu Ihrer pers�nlichen Liste k�nnen Sie mehrere externe Listen verlinken. Diese Verkn�pfungen werden im unteren Teil des \menu{Abk�rzung der Zeitschriftennamen}-Dialogs verwaltet. Externe Listen sind den pers�nlichen Listen �hnlich~-- der einzige Unterschied ist, dass Sie nicht mit \jabref{} selbst verwaltet werden k�nnen.
+Zus�tzlich zu Ihrer pers�nlichen Liste k�nnen Sie mehrere externe Listen verlinken. Diese Verkn�pfungen werden im unteren Teil des Dialogs \menu{Abk�rzung der Zeitschriftentitel} verwaltet. Externe Listen sind den pers�nlichen Listen �hnlich~-- der einzige Unterschied ist, dass Sie nicht mit \jabref selbst verwaltet werden k�nnen.
 
 Um eine externe Liste hinzuzuf�gen, klicken Sie zun�chst auf den \menu{+} Knopf, falls n�tig (das f�gt eine weitere Zeile hinzu). Dann benutzen Sie entweder den \menu{Durchsuchen}- oder den \menu{Herunterladen}-Button.
     \begin{itemize}
     \item Mit dem \menu{Durchsuchen}-Knopf k�nnen Sie eine auf Ihrem Computer bestehende Datei ausw�hlen.
-    \item Mit dem \menu{Herunterladen}-Knopf k�nnen Sie eine Liste aus dem Internet herunterladen, indem Sie eine \caps{URL} angeben. Die Datei wird auf Ihrem Computer gespeichert und mit \jabref{} verlinkt.
-    Die \caps{URL} ist standardm��ig die Adresse einer Zeitschriftenliste auf der \jabref{}-Homepage. Diese Liste ist unvollst�ndig, wird in Zukunft aber ausgebaut.
+    \item Mit dem \menu{Herunterladen}-Knopf k�nnen Sie eine Liste aus dem Internet herunterladen, indem Sie einen URL angeben. Die Datei wird auf Ihrem Computer gespeichert und mit \jabref verlinkt.
+    Der URL ist standardm��ig die Adresse einer Zeitschriftenliste auf der \jabref-Homepage. Diese Liste ist unvollst�ndig, wird in Zukunft aber ausgebaut.
     \end{itemize}
-Jeder Eintrag in Ihrer pers�nlichen Liste �berschreibt einen Eintrag mit demselben vollst�ndigen Zeitschriftennamen in einer Ihrer externen Listen. In �hnlicher Weise werden die externen Listen in der Reihenfolge, wie sie aufgelistet werden, abgearbeitet.
+Jeder Eintrag in Ihrer pers�nlichen Liste �berschreibt einen Eintrag mit demselben vollst�ndigen Zeitschriftentitel in einer Ihrer externen Listen. In �hnlicher Weise werden die externen Listen in der Reihenfolge, wie sie aufgelistet werden, abgearbeitet.
 
 \subsection{Wortauswahl verwalten}
 
@@ -1245,8 +1305,7 @@ Um ein neues Wort hinzuzuf
 \menu{Verwalten} k�nnen Sie hinzugef�gte W�rter auch wieder l�schen.
 
 
-\subsection{Import und Export}
-
+\subsection{Import}
 
 \subsubsection{Import-Kontrollfenster}
 
@@ -1263,16 +1322,26 @@ Eintr
 ist es oftmals leichter, diese Arbeiten durchzuf�hren, bevor die neuen
 Eintr�ge zwischen die bereits bestehenden sortiert wurden.
 
+\subsubsection[EndNote -> \jabref]{EndNote $\to$~\jabref}\label{subsubsec:endnote-jabref}
 
-\subsubsection[JabRef -> EndNote]{\jabref{} $\to$~EndNote}
+EndNote hat einen Export-Stil \bibtex{}, der allerdings nicht alle
+Eintragstypen und Felder von \bibtex{} und auch nicht die zus�tzlich
+von \jabref genutzten Allgemeinen Felder (\emph{pdf}, \emph{owner},
+\emph{key} usw.) unterst�tzt. Falls Sie diese Felder nutzen wollen,
+verwenden Sie die EndNote Extras (\menu{Extras \msep{} EndNote Filter-Set entpacken}), extrahieren die Zip-Datei,
+die dabei erstellt wird und folgen den Anweisungen in der Datei \texttt{readme.txt}.
+
+\subsection{Export}
+\subsubsection[\jabref -> EndNote]{\jabref $\to$~EndNote}
+\label{EndnoteFilters}
 
 \begin{quote}
-\label{EndnoteFilters}\emph{\jabref{} kann Dateien so exportieren,
+\emph{\jabref kann Dateien so exportieren,
 dass EndNote sie lesen kann. Um diese Funktion zu nutzen, w�hlen Sie
-\menu{Datei}} \msep{} \emph{\menu{Exportieren}} \msep{} \emph{\menu{Endnote}
-und w�hlen dann den Namen der Export-Datei.}
+\menu{Datei \msep{} Exportieren}, dann bei \emph{Dateityp} \menu{Endnote} und
+geben den Namen der Export"=Datei an.}
 \end{quote}
-Der Standard-EndNote-Importfilter kann nicht richtig mit mehreren
+Der Standard"=Importfilter von EndNote kann nicht richtig mit mehreren
 Autoren oder Editoren umgehen. Es gibt zwei M�glichkeiten, um diese
 Schwierigkeit zu umgehen:
 
@@ -1280,25 +1349,22 @@ Schwierigkeit zu umgehen:
 \item Benutzen Sie den eingebauten Filter und bessern Sie die Datei sp�ter
 aus.
 
-
 Um die Datei in EndNote zu �ffnen, erstellen Sie eine neue Datei oder
 �ffnen eine bestehende Datei in EndNote. Dann w�hlen Sie \menu{Datei}
 \msep{} \menu{Importieren}, klicken mit der Maus auf \menu{Datei w�hlen},
-w�hlen die aus \jabref{} exportierte Datei aus und dr�cken auf \menu{Ausw�hlen}.
+w�hlen die aus \jabref exportierte Datei aus und dr�cken auf \menu{Ausw�hlen}.
 Anschlie�end dr�cken Sie auf \menu{Import Optionen} und w�hlen \menu{EndNote Import}.
 Mit einem Klick auf \menu{Importieren} starten Sie den Importvorgang.
 Anschlie�end gehen Sie zum Men�punkt \menu{Bearbeiten} \msep{} \menu{Text �ndern}
-und �ndern \emph{Any Field} in \emph{Author}. Geben Sie >>~and~<<
-in das Suchfeld ein (ohne Anf�hrungszeichen) sowie ein RETURN-Zeichen
-in das Feld �ndern (Option-Return unter Mac OS X, STRG-Return unter
+und �ndern \emph{Any Field} in \emph{Author}. Geben Sie \lstinline{_and_}
+in das Suchfeld ein (die Unterstriche stehen f�r Leerzeichen) sowie ein RETURN-Zeichen
+in das Feld \emph{�ndern} (Option-Return unter Mac OS X, STRG-Return unter
 Windows XP). Dann klicken Sie auf \menu{�ndern}. Wiederholen Sie
 das Ganze f�r das Feld \emph{Secondary Author} (Zweiter Autor).
 
 \item Installieren Sie den \emph{EndNote Import from JabRef Filter}.
 
-
-Folgen Sie den Anweisungen im Abschnitt >>Erweiterte Benutzung<<
-(siehe unten, Seite~\pageref{EndNote_erweitert}). Um die Datei in
+Folgen Sie den Anweisungen im Abschnitt \nameref{EndNote_erweitert}. Um die Datei in
 EndNote zu �ffnen, erstellen Sie eine neue Datei oder �ffnen eine
 bestehende Datei in EndNote. Dann w�hlen Sie \menu{Datei} \msep{}
 \menu{Importieren}, klicken auf \menu{Datei w�hlen}, w�hlen die
@@ -1347,47 +1413,34 @@ durch ein angeh
 mit Klammern enthalten, als Eintrag mit mehreren Autoren gewertet
 und demzufolge unpassend formatiert.
 
-
 \subsubsection{Erweiterte Benutzung: EndNote Extras}
 
 \label{EndNote_erweitert}Einige Felder, die von \bibtex{} genutzt
 werden, geh�ren nicht zu EndNotes vorgegebenen Referenztypen. W�hrend
-der Import in \jabref{} und der Export nach \jabref{} ohne ein �ndern
+der Import in \jabref und der Export nach \jabref ohne ein �ndern
 der Referenztypen funktioniert, werden die Feldnamen in EndNote nicht
 korrekt dargestellt (z.\,B. wird das PDF-Feld \emph{Custom 1} hei�en
 statt \emph{pdf}). Dar�ber hinaus k�nnen diese Felder bei neuen Eintr�gen
 in EndNote nicht genutzt werden, weil sie nicht im Eintragsdialog
-erscheinen. Der vorgegebene EndNote-Importfilter kann dar�berhinaus
+erscheinen. Der vorgegebene Importfilter von EndNote kann dar�berhinaus
 das Feld \emph{author} nicht richtig analysieren. Der \emph{EndNote
 Import from JabRef Filter} kann dies. Au�erdem erkennt dieser Filter
 ein Feld \texttt{endnotereftype}, das die vorgegebene Zuordnung �berschreibt.
-Um den Filter zu installieren, extrahieren Sie die EndNote Extras
-(\menu{Datei} \msep{} \menu{Exportieren} \msep{} \menu{EndNote Filter-Set auspacken})
+Um den Filter zu installieren, nutzen Sie die EndNote Extras
+(\menu{Extras \msep{} EndNote Filter-Set entpacken})
 und entpacken die Zip-Datei, die dabei erstellt wird. Dann folgen
 Sie den Angaben in der Datei \texttt{readme.txt}.
 
+\subsubsection{\jabref-Bibliographien in OpenOffice.org benutzen}
 
-\subsubsection[EndNote -> JabRef]{EndNote $\to$~\jabref{}}
-
-EndNote hat einen Export-Stil \bibtex{}, der allerdings nicht alle
-Eintragstypen und Felder von \bibtex{} und auch nicht die zus�tzlich
-von \jabref{} genutzten Allgemeinen Felder (\emph{pdf}, \emph{owner},
-\emph{key} usw.) unterst�tzt. Falls Sie diese Felder nutzen wollen,
-extrahieren Sie die EndNote Extras (\menu{Datei} \msep{} \menu{Exportieren}
-\msep{} \menu{EndNote Filter-Set auspacken}), entpacken die Zip-Datei,
-die dabei erstellt wird und folgen den Anweisungenx in der Datei \texttt{readme.txt}.
-
-
-\subsubsection[JabRef-Bibliographien in OpenOffice.org benutzen]{\jabref{}-Bibliographien in OpenOffice.org benutzen}
-
-\jabref{} kann Ihre Datei sowohl in das OpenOffice.org 1.1 \texttt{.sxc}"=Tabellenkalkulationsformat als auch in das OpenDocument \texttt{.ods}"=Tabellenkalkulationsformat, das von OpenOffice.org 2.0 benutzt wird, exportieren.
+\jabref kann Ihre Datei sowohl in das OpenOffice.org 1.1 \texttt{.sxc}"=Tabellenkalkulationsformat als auch in das OpenDocument \texttt{.ods}"=Tabellenkalkulationsformat, das von OpenOffice.org 2.0 benutzt wird, exportieren.
 
 In beiden F�llen besteht die exportierte Tabelle aus einem Arbeitsblatt, das die Eintr�ge in Reihen
 und die unterschiedlichen Felder in Spalten enth�lt. Die Reihenfolge und Benennung der Spalten ist kompatibel
 zu den Literaturverzeichnis-Funktionen von OpenOffice.org (OOo 1.1: \texttt{.sxc}, OOo 2.0: \texttt{.ods}).
 
 \paragraph{Die exportierte Datei als Bibliographiedatenbank in OpenOffice 2.0 (oder neuer) benutzen}
-Gehen Sie folgenderma�en vor, um eine Tabelle, die von \jabref{} exportiert wurde, als Bibliographiedatenbank in OpenOffice.org zu benutzen:
+Gehen Sie folgenderma�en vor, um eine Tabelle, die von \jabref exportiert wurde, als Bibliographiedatenbank in OpenOffice.org zu benutzen:
 
 \begin{itemize}
 \item Exportieren Sie Ihre Datenbank in das \texttt{.ods} -Format.
@@ -1407,7 +1460,7 @@ Anschlie
 \item Exportieren Sie Ihre Datei in das \texttt{.sxc}-Format.
 \item Starten Sie OpenOffice.org.
 \item W�hlen Sie \menu{Extras} \msep{} \menu{Datenquellen}.
-\item W�hlen Sie die \emph{Bibliography}-Datei und �ndern ihren Namen z.\,B. in \emph{Bibliographie-alt}. 
+\item W�hlen Sie die \emph{Bibliography}-Datei und �ndern ihren Namen beispielsweise in \emph{Bibliographie-alt}. 
 \item Dr�cken Sie \menu{Anwenden}.
 \item Klicken Sie \menu{Neue Datenquelle}. Ein neuer Eintrag erscheint. �ndern Sie den Namen zu \emph{Bibliography}.
 \item �ndern Sie den \menu{Dateityp} zu \menu{Tabelle}. Klicken Sie den \menu{\ldots}-Button in der Zeile \menu{Datenquellen URL}. W�hlen Sie die \texttt{.sxc}-Datei, die Sie exportiert haben.
@@ -1425,14 +1478,14 @@ oder die Tastenkombination STRG-SHIFT-N w
 \end{quote}
 Dieser Dialog erm�glicht das schnelle Einf�gen von Eintr�gen aus normalem
 Text. W�hlen Sie zun�chst aus, welcher Eintragstyp erstellt werden
-soll. F�gen Sie dann einfach Text aus der Zwischenablage ein (mit
-dem Kontextmen� im Textfeld mit der Wasserzeichenschrift >>Text einf�gen<<
-oder �ber den Button \menu{Einf�gen}) oder w�hlen �ber den Button
-\menu{Datei �ffnen} eine Datei aus, die Sie in den Dialog laden wollen.
+soll. F�gen Sie dann einfach Text aus der Zwischenablage ein (�ber das
+Kontextmen� im Textfeld mit der Wasserzeichenschrift >>Text einf�gen<<
+oder �ber den Button \menu{Einf�gen}). Alternativ k�nnen Sie �ber den Button
+\menu{Datei �ffnen} eine Datei ausw�hlen, um sie in den Dialog zu laden.
 
 Jetzt markieren Sie z.\,B. den Textbereich, der zum Titel des neuen
-Eintrags werden soll, und machen im rechten Teil des Dialogfensters
-im Bereich >>verf�gbare BibTeX Felder<< einen Doppelklick auf \emph{title}.
+Eintrags werden soll, und f�hren im rechten Teil des Dialogfensters
+im Bereich \menu{Verf�gbare BibTeX"=Felder} einen Doppelklick auf \emph{title} aus.
 So gehen Sie f�r alle weiteren Felder des neuen Eintrags vor. Sie
 k�nnen einem Feld nat�rlich auch mehrere Textbereiche zuordnen. Achten
 Sie dazu darauf, dass die Option \menu{anf�gen} aktiviert ist, ansonsten
@@ -1444,7 +1497,7 @@ hervorgehoben. Um zu kontrollieren, welche Textbereiche Sie einem
 bestimmten \bibtex{}-Feld zugewiesen haben, w�hlen Sie das Feld im
 rechten Bereich aus; der zugeordnete Text wird nun rot hervorgehoben.
 
-Sie k�nnen sich das Ergebnis des Importvorgangs jederzeit im Tab \menu{BibTeX Quelltext}
+Sie k�nnen sich das Ergebnis des Importvorgangs jederzeit im Tab \menu{BibTeX"=Quelltext}
 des Importdialogs ansehen. Hier k�nnen keine �nderungen vorgenommen
 werden; das ist erst m�glich, sobald der Text tats�chlich importiert
 und ein neuer Eintrag angelegt wurde. Auf m�gliche Fehler werden Sie
@@ -1452,22 +1505,21 @@ im Tab \menu{Hinweise und Warnungen} aufmerksam gemacht.
 
 Haben Sie alle Textstellen den gew�nschten \bibtex{}-Feldern zugewiesen,
 klicken Sie auf die Schaltfl�che \menu{�bernehmen}. Nun erstellt
-\jabref{} den neuen Eintrag, der allerdings noch keinen \bibtex{}-Key
+\jabref den neuen Eintrag, der allerdings noch keinen \bibtex{}-Key
 hat.
 
-
 \subsection{Links zu externen Dateien}
 
-\label{ExternalFiles}Mit \jabref{} k�nnen Sie Ihre Eintr�ge mit
+\label{ExternalFiles}Mit \jabref k�nnen Sie Ihre Eintr�ge mit
 den entsprechenden PDF- oder PS-Dateien, die sich auf Ihrem Computer
 befinden, verlinken. Ebenso ist es m�glich, Dateien im Internet �ber
-ein URL oder DOI zu verlinken.
+einen URL oder DOI zu verlinken.
 
 
 \subsubsection{Externe Betrachter einrichten}
 
-\jabref{} ben�tigt Informationen dar�ber, welche Programme es f�r
-PDF- und PS-Dateien und Internetseiten benutzen soll. In der Standardeinstellung
+\jabref ben�tigt Informationen dar�ber, welche Programme es f�r
+PDF- und PS"=Dateien und Internetseiten benutzen soll. In der Standardeinstellung
 werden sie auf Werte gesetzt, die wahrscheinlich zu Ihrem Betriebssystem
 passen, so dass eine gute Chance besteht, dass Sie diese Werte nicht
 zu ver�ndern brauchen.
@@ -1481,8 +1533,8 @@ Sie den Unterpunkt \menu{Externe Programme} im Dialog \menu{Optionen}}
 \subsubsection{Externe Dateien oder Links �ffnen}
 
 Es gibt verschiedene M�glichkeiten, wie man externe Dateien oder Internetseiten
-aus \jabref{} �ffnen kann. Im Eintrags-Editor k�nnen Sie einfach
-auf das Textfeld, das ein DOI oder URL enth�lt, doppelklicken. In
+aus \jabref �ffnen kann. Im Eintrags-Editor k�nnen Sie einfach
+auf das Textfeld, das einen DOI oder URL enth�lt, doppelklicken. In
 der Tabellenansicht k�nnen Sie einen Eintrag ausw�hlen und die Men�eintr�ge
 (unter \menu{Extras}), die Tastenkombinationen (in der Standardeinstellung
 F4 f�r PDF/PS und F3 f�r DOI/URL) oder das Kontextmen� (mit der rechten
@@ -1501,7 +1553,7 @@ URL oder DOI (nur URL, wenn beide vorhanden sind).
 
 \subsubsection{Der Standard-Ordner f�r PDF-Dateien}
 
-PDF-Dateien erhalten von \jabref{} eine >>Spezialbehandlung<<,
+PDF-Dateien erhalten von \jabref eine >>Spezialbehandlung<<,
 um das Verlinken mit den entsprechenden Eintr�gen so einfach wie m�glich
 zu gestalten. Um diese >>Spezialbehandlung<< nutzen zu k�nnen, m�ssen
 Sie im Unterpunkt \menu{Externe Programme} des Dialogs \menu{Optionen}
@@ -1513,8 +1565,8 @@ oder mit mehreren Benutzern von verschiedenen Netzwerkarbeitspl
 aus an derselben Datei arbeiten k�nnen.
 
 Wenn Sie Ihren PDF-Dateien dann noch Namen geben, die mit dem \bibtex{}-Key
-des entsprechenden Eintrags �bereinstimmen (plus \texttt{.pdf} im
-Dateinamen), sucht \jabref{} in Ihrem Standard-PDF-Ordner und dessen
+des entsprechenden Eintrags �bereinstimmen (abgesehen von der Dateiendung \texttt{.pdf}), 
+sucht \jabref in Ihrem Standard-PDF-Ordner und dessen
 Unterordnern nach der richtigen PDF-Datei. Sobald die korrekt benannte
 PDF-Datei sich dort befindet, klicken Sie auf die Schaltfl�che \menu{Auto}
 neben dem PDF-Feld im Eintrags-Editor. Wenn die PDF-Datei gefunden
@@ -1527,23 +1579,24 @@ nicht angezeigt wird, solange das PDF-Feld leer bleibt.
 
 \subsubsection{Dateispezifische PDF- und PS-Verzeichnisse}
 
-Sie k�nnen f�r jede Datei eigene PDF- und PS-Verzeichnisse angeben (\menu{Datei \msep{} Eigenschaften der Datei}). Diese Verzeichnisse ersetzen dann die Standardverzeichnisse.
+Sie k�nnen f�r jede Datei eigene PDF- und PS-Verzeichnisse angeben \emph{(}\menu{Datei \msep{} Eigenschaften der Datei}\emph{)}. Diese Verzeichnisse ersetzen dann die Standardverzeichnisse.
 
 \subsubsection{Die Suche mit regul�ren Ausdr�cken f�r automatische Verkn�pfungen nutzen}
 \label{RegularExpressionSearch}
 
-Wenn Sie Dateinamen verwenden, die dem bibtexkey erg�nzt um die Dateiendung entsprechen, findet \jabref{} diese Dateien automatisch.
+Wenn Sie Dateinamen verwenden, die dem bibtexkey erg�nzt um die Dateiendung entsprechen, findet \jabref diese Dateien automatisch.
 
 Ab Version~2.2 ist mit Hilfe von regul�ren Ausdr�cken eine gr��ere Flexibilit�t beim Benennen der Dateien gew�hrleistet. In den meisten F�llen d�rfte das Standardverhalten bereits ausreichend sein.
 
-In den Einstellungen zu externen Programmen (\menu{Optionen \msep{} Einstellungen \msep{} Externe Programme}) findet sich eine Option ">Suche mit regul�rem Ausdruck benutzen"<. Wenn Sie diese Option aktivieren, k�nnen Sie f�r die Suche in PDF-Verzeichnissen einen eigenen regul�ren Ausdruck angeben.
+In den Einstellungen zu externen Programmen \emph{(}\menu{Optionen \msep{} Einstellungen \msep{} Externe Programme}\emph{)} findet sich eine Option ">Suche mit regul�rem Ausdruck benutzen"<. Wenn Sie diese Option aktivieren, k�nnen Sie f�r die Suche in PDF-Verzeichnissen einen eigenen regul�ren Ausdruck angeben.
 
 Die folgende Syntax wird verwendet:
 
 \begin{labeling}{MextensionM}
   \item [\texttt{*}] Suche in allen direkten Unterverzeichnissen, NICHT im aktuellen Verzeichnis und in Unterverzeichnissen zweiter oder tieferer Ebene.
   \item [\texttt{**}] Rekursive Suche in allen Unterverzeichnissen UND im aktuellen Verzeichnis.
-  \item [\texttt{.} und  \texttt{..}] Das aktuelle Verzeichnis und das Elternverzeichnis (eine Ebene h�her).
+  \item [\texttt{.}] Das aktuelle Verzeichnis.
+  \item [\texttt{..}] Das Elternverzeichnis (eine Ebene h�her).
   \item [\texttt{{[}title{]}}] Alle Ausdr�cke in eckigen Klammern werden durch den Inhalt des entsprechenden Felds ersetzt.
   \item [\texttt{{[}extension{]}}] Wird durch die Dateiendung des Feldes, das Sie benutzen, ersetzt.
   \item Anderer Text wird als regul�rer Ausdruck interpretiert. Aber Vorsicht: \emph{backslashes} m�ssen mit einem weiteren \emph{backslash} \emph{escaped} werden (\texttt{\textbackslash\textbackslash}), damit sie nicht mit Separatoren in Pfad-Angaben verwechselt werden.
@@ -1555,15 +1608,15 @@ Der Standard ist \lstinline{**/.*[bibtexkey].*\\.[extension]}. Damit wird in all
 
 XMP ist ein Standard, der von Adobe Systems entwickelt wurde, um Metadaten (Daten, die Informationen �ber andere Daten enthalten) in Dateien zu speichern. Ein bekanntes Beispiel f�r Metadaten sind ID3-Tags, die zur Beschreibung von K�nstlern, Albumtiteln und Liednamen einer MP3-Datei verwendet werden. Mit Hilfe von Metadaten k�nnen MP3-Dateien unabh�ngig von ihrem Dateinamen identifiziert und z.B. von MP3-Playern ausgelesen und angezeigt werden.
 
-Mit der XMP-Unterst�tzung versucht das \jabref{}-Team, die Vorteile von Metadaten in die Welt der Literaturmanager einzuf�hren. Sie k�nnen \menu{XMP schreiben} im \menu{Allgemein}-Tab des Eintragseditors w�hlen und damit alle \bibtex{}-Informationen in die verlinkte PDF-Datei schreiben. Wenn Sie diese PDF-Datei mit anderen austauschen, k�nnen diese die Datei in das \jabref{}-Fenster ziehen und haben damit alle Informationen zur Verf�gung, die Sie eingegeben haben.
+Mit der XMP-Unterst�tzung versucht das \jabref-Team, die Vorteile von Metadaten in die Welt der Literaturmanager einzuf�hren. Sie k�nnen \menu{XMP schreiben} im \menu{Allgemein}-Tab des Eintragseditors w�hlen und damit alle \bibtex{}-Informationen in die verlinkte PDF-Datei schreiben. Wenn Sie diese PDF-Datei mit anderen austauschen, k�nnen diese die Datei in das \jabref-Fenster ziehen und haben damit alle Informationen zur Verf�gung, die Sie eingegeben haben.
 
 \subsubsection{Benutzung}
 
-Um die XMP-Funktionen in \jabref{} zu nutzen, gehen Sie folgenderma�en vor:
+Um die XMP-Funktionen in \jabref zu nutzen, gehen Sie folgenderma�en vor:
 
 \begin{itemize}
-  \item Zum \emph{Importieren einer einzelnen PDF-Datei mit Metadaten} w�hlen Sie \menu{Datei \msep{} Importieren in {[}neue{|}aktuelle{]} Datenbank} und im anschlie�enden Dialog als Dateiformat \menu{PDF mit XMP-Anmerkungen} aus. Sie k�nnen die PDF-Datei stattdessen auch mit der Maus auf das Hauptfenster von \jabref{} ziehen.
-  \item Um \emph{bibliographische Informationen in eine verlinkte PDF-Datei zu schreiben}, klicken Sie auf \menu{XMP schreiben} im \menu{Allgemein}-Tab des Eintragseditors.
+  \item Zum \emph{Importieren einer einzelnen PDF-Datei mit Metadaten} w�hlen Sie \menu{Datei \msep{} Importieren in {[}neue{|}aktuelle{]} Datenbank} und im anschlie�enden Dialog als Dateiformat \menu{PDF mit XMP-Anmerkungen} aus. Sie k�nnen die PDF-Datei stattdessen auch mit der Maus auf das Hauptfenster von \jabref ziehen.
+  \item Um \emph{bibliographische Informationen in eine verlinkte PDF-Datei zu schreiben}, klicken Sie auf \menu{XMP schreiben} im \menu{Allgemein}-Tab des Eintragseditors (neben dem \emph{pdf}"=Feld).
   \item Wenn Sie \emph{alle PDFs einer Datei mit Metadaten versehen} wollen, w�hlen Sie \menu{Extras \msep{} XMP-Metadaten in PDFs schreiben}.
   \item Um zu �berpr�fen, ob das Schreiben der Metadaten funktioniert hat, �ffnen Sie die Datei in Adobe Acrobat und w�hlen \menu{Datei \msep{} Dokumenteigenschaften} und dann unter dem Reiter \menu{Beschreibung} die Schaltfl�che \menu{Zus�tzliche Metadaten}. Wenn Sie links ">Erweitert"< ausw�hlen, sollten Sie im rechten Teil des Dialogs einen Eintrag \texttt{http://jabref.sourceforge.net/bibteXMP} sehen, der die entsprechenden Metadaten enth�lt. Dies geht nur mit dem Vollprogramm Adobe  [...]
   \item Wer kein Adobe Acrobat zur Verf�gung hat, kann stattdessen das Programm ">pdfinfo"<\footnote{Dieses Programm ist Teil von \href{http://www.foolabs.com/xpdf/}{Xpdf} und \href{http://poppler.freedesktop.org/}{Poppler}.} verwenden, um die XMP-Metadaten zu �berpr�fen. Rufen Sie dazu auf der Kommandozeile einfach \lstinline{pdfinfo -meta <PDF-Datei>} auf, dann werden die entsprechenden Metadaten angezeigt.
@@ -1571,7 +1624,7 @@ Um die XMP-Funktionen in \jabref{} zu nutzen, gehen Sie folgenderma
 
 \subsubsection{bibteXMP Dateiformat}
 
-XMP nutzt zum Speichern der Daten eine Teilmenge des \emph{Resource Description Framework} (RDF). F�r \jabref{} wird ein neues Metadatenformat benutzt, das \bibtex{} sehr gut abbildet. Alle Felder und Werte werden in Knoten eines XML-Dokuments verwandelt. Nur Autoren und Herausgeber werden als \texttt{rdf:Seq}-Strukturen gespeichert, so dass die trennenden ">and"< weggelassen werden k�nnen. Alle Strings und crossrefs werden in den Metadaten aufgel�st.
+XMP nutzt zum Speichern der Daten eine Teilmenge des \emph{Resource Description Framework} (RDF). F�r \jabref wird ein neues Metadatenformat benutzt, das \bibtex{} sehr gut abbildet. Alle Felder und Werte werden in Knoten eines XML-Dokuments verwandelt. Nur Autoren und Herausgeber werden als \texttt{rdf:Seq}-Strukturen gespeichert, so dass die trennenden ">and"< weggelassen werden k�nnen. Alle Strings und crossrefs werden in den Metadaten aufgel�st.
  
 Das folgende einfache Minimal-Schema wird benutzt:
 \begin{itemize}
@@ -1631,15 +1684,13 @@ Einige Links zu XMP und PDFs mit Anmerkungen (englisch):
   \item \href{http://partners.adobe.com/public/developer/en/xmp/sdk/xmpspecification.pdf}{Adobe XMP Spezifikation}
 \end{itemize}
 
-\subsection[JabRef und Online-Datenbanken]{\jabref{} und Online-Datenbanken}
+\subsection{\jabref und Online-Datenbanken}
 
 \subsubsection{CiteSeer}
 
 \label{CiteSeerHelp}
-\begin{quote}
-CiteSeer ist eine digitale Bibliothek und Suchmaschine f�r wissenschaftliche Literatur, vornehmlich zu den Bereichen Computer und Informatik.
-\end{quote}
-\jabref{} kann Informationen �ber eine bestimmte
+\tip[]{CiteSeer ist eine digitale Bibliothek und Suchmaschine f�r wissenschaftliche Literatur, vornehmlich zu den Bereichen Computer und Informatik.}
+\jabref kann Informationen �ber eine bestimmte
 Literaturangabe aus der CiteSeer-Datenbank herunterladen. Um diesen
 Vorgang zu starten, f�gen Sie Ihrer Datei einen neuen Eintrag hinzu
 und belegen das Feld \emph{citeseerurl} mit einem Link zur entsprechenden
@@ -1662,17 +1713,6 @@ CiteSeer-Felder herunterladen, indem Sie \menu{BibTeX} \msep{} \menu{Felder von
 ausw�hlen. Achten Sie darauf, dass Sie die Zeile(n) ausgew�hlt haben,
 die Sie aktualisieren wollen.
 
-Mit einem Set von Literaturangaben k�nnen Sie eine Liste von Dokumenten
-generieren, die die Elemente dieses Sets zitieren. Dazu muss jede
-Literaturangabe in einer Datei ein \emph{citeseerurl}-Feld mit dem
-eben beschriebenen Format haben.%
-\footnote{Hinweis des �bersetzers (DW): Offen gesagt habe ich diesen Absatz
-nicht wirklich verstanden, was daran liegen mag, dass ich CiteSeer
-nicht kenne und deshalb auch die Funktionsweise nicht nachvollziehen
-kann. F�r Hinweise, Erkl�rungen oder eine bessere �bersetzung w�re
-ich deshalb dankbar.%
-}
-
 \paragraph{Eine Datei mit zitierenden Literaturangaben erzeugen}
 
 Mit einem Satz von Literaturangaben k�nnen Sie eine Liste der Dokumente
@@ -1683,14 +1723,13 @@ beschriebenen Format entspricht. Sie k
 Sie \menu{Zitierende Literatur von CiteSeer abrufen} ausw�hlen.
 
 \subsubsection{Medline}
+\label{MedlineHelp}
 
-\begin{quote}
-\label{MedlineHelp}\caps{MEDLINE} ist die wichtigste Datenbank der \emph{U.\,S. National Library of Medicine}. Sie enth�lt Literaturangaben von Zeitschriftenartikeln der Lebenswissenschaften, vornehmlich der Biomedizin.
-\jabref{} kann Literaturangaben von der Medline-Datenbank
-herunterladen. Um diese Funktion zu nutzen, w�hlen Sie \menu{Extras}
-\msep{} \menu{Medline abrufen}, so dass der Medline-Dialog im linken
-Seitenfeld erscheint.
-\end{quote}
+\tip[]{MEDLINE ist die wichtigste Datenbank der \emph{U.\,S. National Library of Medicine}. Sie enth�lt Literaturangaben von Zeitschriftenartikeln der Lebenswissenschaften, vornehmlich der Biomedizin.
+\jabref kann Literaturangaben der Medline"=Datenbank
+herunterladen. Um diese Funktion zu nutzen, w�hlen Sie \menu{Extras
+\msep{} Medline abrufen}, so dass der Medline-Dialog im linken
+Seitenfeld erscheint.}
 Es gibt zwei M�glichkeiten, die Auswahl der Eintr�ge vorzunehmen,
 die heruntergeladen werden sollen:
 
@@ -1712,10 +1751,8 @@ Datei zugeordnet.
 \subsubsection{IEEEXplore}
 \label{IEEEXploreHelp}
 
-\begin{quote} 
-\emph{IEEEXplore bietet Zugang zu Literatur in den Bereichen Elektrotechnik, Informatik und Elektronik.}
-\end{quote}
-\jabref{} kann Literaturangaben der IEEEXplore-Datenbank herunterladen.
+\tip[]{IEEEXplore bietet Zugang zu Literatur in den Bereichen Elektrotechnik, Informatik und Elektronik.}
+\jabref kann Literaturangaben der IEEEXplore-Datenbank herunterladen.
 Um diese Funktion zu nutzen, w�hlen Sie \menu{Internet \msep{} IEEEXplore abfragen}
 und geben in dem Dialog, der im linken Bildschirmbereich erscheint, Ihre
 Suchausdr�cke ein. Dr�cken Sie anschlie�end die
@@ -1727,7 +1764,7 @@ angezeigt.
 Sie k�nnen die \emph{abstracts} zusammen mit den Literaturangaben herunterladen,
 indem Sie einen Haken bei \menu{Abstracts ber�cksichtigen} setzen. Das verursacht
 eine deutlich h�here Anzahl von Netzwerk-Anfragen; um die Webseite von IEEEXplore
-nicht �berm��ig zu belasten, l�dt \jabref{} \emph{abstracts} nur bei einer Suche,
+nicht �berm��ig zu belasten, l�dt \jabref \emph{abstracts} nur bei einer Suche,
 deren Ergebnis eine bestimmte Trefferanzahl nicht �bersteigt.
 
 \subsubsection{Benutzung eines Proxy-Servers}
@@ -1740,22 +1777,23 @@ sind dokumentiert unter \url{http://java.sun.com/j2se/1.4.2/docs/guide/net/prope
 java -Dhttp.proxyHost="hostname" -Dhttp.proxyPort="portnumber"
 \end{lstlisting}
 
-\subsection[JabRef mit mehreren Benutzern verwenden]{\jabref{} mit mehreren Benutzern verwenden}
+\subsection{\jabref mit mehreren Benutzern verwenden}
 
-\jabref{} bietet einige Funktionen, die besonders dann von Nutzen
+\jabref bietet einige Funktionen, die besonders dann von Nutzen
 sind, wenn eine Datenbank von mehreren Benutzern~-- z.\,B. �ber
 ein Netzwerk~-- bearbeitet wird. Das sind vor allem die Felder \emph{owner}
 und \emph{timestamp}.
 
 
 \subsubsection{Zeitstempel \emph{(timestamp)}}
+\label{TimeStampHelp}
 
 \begin{quote}
-\label{TimeStampHelp}\emph{Die Benutzung des Zeitstempels kann unter
-\menu{Einstellungen}} \msep{} \emph{\menu{Allgemeines} an- und
+\emph{Die Benutzung des Zeitstempels kann unter
+\menu{Einstellungen}} \msep{} \emph{\menu{Allgemein} an- und
 abgestellt sowie ver�ndert werden.}
 \end{quote}
-\jabref{} kann automatisch das Feld \emph{timestamp} setzen, das
+\jabref kann automatisch das Feld \emph{timestamp} setzen, das
 das Datum enth�lt, an dem der Eintrag zur Datei hinzugef�gt wurde.
 Die Formatierung des Zeitstempels wird von einem Ausdruck mit Bezeichnern
 bestimmt, die die Position verschiedener Bestandteile des Datums angeben.
@@ -1773,17 +1811,15 @@ beziehen sich auf Mittwoch, den 14. September 2005, 17:45 Uhr):
 Diese Bezeichner k�nnen mit Interpunktion und Leerzeichen kombiniert
 werden. Hier einige Beispiele:
 
-\begin{quote}
-\texttt{yyyy.MM.dd} $\to$ 2005.09.14
-
-\texttt{yy-MM-dd} $\to$ 05-09-14
-
-\texttt{yyyy.MM.dd~HH:mm} $\to$ 2005.09.14 17:45
-\end{quote}
+\begin{labeling}{dd.MM.yyyy-HH:m}
+\item [\texttt{yyyy.MM.dd}]$\to$ 2005.09.14
+\item [\texttt{yy-MM-dd}]$\to$ 05-09-14
+\item [\texttt{dd.MM.yyyy~HH:mm}]$\to$ 14.09.2005 17:45
+\end{labeling}
 
 \subsubsection{Besitzer \emph{(owner)}}
 
-\label{OwnerHelp}\jabref{} kann allen neuen Eintr�gen, die zu einer
+\label{OwnerHelp}\jabref kann allen neuen Eintr�gen, die zu einer
 Datei hinzugef�gt oder in sie importiert werden, Ihren Benutzernamen
 beigeben. Diese Funktion k�nnen Sie im Men� \menu{Einstellungen}
 \msep{} \menu{Allgemein} ein- und ausschalten. Dort k�nnen Sie auch
@@ -1794,9 +1830,9 @@ Der Name wird in dem Feld \emph{owner} eingetragen, das in der Standardeinstellu
 im Tab \emph{General fields} des Eintragseditors angezeigt wird.
 
 
-\subsection[JabRef von der Kommandozeile]{\jabref{} von der Kommandozeile}
+\subsection{\jabref von der Kommandozeile}
 
-\label{CommandLine}Obwohl \jabref{} in erster Linie ein Programm
+\label{CommandLine}Obwohl \jabref in erster Linie ein Programm
 mit grafischer Benutzeroberfl�che ist, bietet es einige n�tzliche
 Optionen f�r die Kommandozeile und kann sogar Dateikonvertierungen
 durchf�hren, ohne die grafische Benutzeroberfl�che zu �ffnen.
@@ -1828,31 +1864,30 @@ vorgestellt.
 \begin{itemize}
 \item Hilfe: \texttt{-h}
 
-Diese Option veranlasst \jabref{}, eine Zusammenfassung der Kommandozeilen-Optionen
+Diese Option veranlasst \jabref, eine Zusammenfassung der Kommandozeilen-Optionen
 anzuzeigen und das Programm unmittelbar darauf zu schlie�en.
 
 \item Kein GUI-Modus: \texttt{-n}
 
-Diese Option unterdr�ckt sowohl das \jabref{}-Fenster als auch den
+Diese Option unterdr�ckt sowohl das \jabref-Fenster als auch den
 Er�ffnungsbildschirm, der normalerweise beim Programmstart angezeigt
 wird. Das Programm wird beendet, sobald die Kommandozeilen-Optionen
 abgearbeitet wurden.
-
 Diese Option ist n�tzlich, um Dateikonvertierungen von der Kommandozeile
 oder mit Hilfe eines Scripts durchzuf�hren.
 
 \item Sitzung laden: \texttt{-l}
 
-Diese Option veranlasst \jabref{}, eine gespeicherte Sitzung zu laden,
+Diese Option veranlasst \jabref, eine gespeicherte Sitzung zu laden,
 sofern eine vorhanden ist, bevor sich das Hauptfenster �ffnet.
 
 \item Datei importieren: \texttt{-i Dateiname{[},Importformat{]}}
 
-Bei dieser Option importiert oder l�dt \jabref{} eine bestimmte Datei.
+Bei dieser Option importiert oder l�dt \jabref eine bestimmte Datei.
 Wenn nur ein Dateiname angegeben wird oder ein Komma und ein {*}-Zeichen
-hinter dem Dateinamen stehen, versucht \jabref{}, das Dateiformat
+hinter dem Dateinamen stehen, versucht \jabref, das Dateiformat
 automatisch zu erkennen. Das sollte bei allen \bibtex{}-Dateien ebenso
-funktionieren wie bei Dateien, die in einem der von \jabref{} unterst�tzten
+funktionieren wie bei Dateien, die in einem der von \jabref unterst�tzten
 Importformate vorliegen. Wenn dem Dateinamen ein Komma und ein Importformat
 folgen, wird der angegebene Importfilter benutzt. Mit der Option \texttt{-h}
 k�nnen Sie sich eine Liste der verf�gbaren Importformate anzeigen
@@ -1862,14 +1897,14 @@ Wenn Sie zus
 zuerst ausgef�hrt, bevor die importierte oder geladene Datei an den
 Exportfilter �bergeben wird. Falls die grafische Oberfl�che nicht
 mit der Option \texttt{-n} unterdr�ckt wird, werden alle geladenen
-oder importierten Dateien im Hauptfenster von \jabref{} angezeigt.
+oder importierten Dateien im Hauptfenster von \jabref angezeigt.
 
 Die Option \texttt{-i} kann nur einmal angegeben werden und nimmt
 als Argument maximal eine Datei.
 
 \item Datei exportieren: \texttt{-o Dateiname{[},Exportformat{]}}
 
-Diese Option veranlasst \jabref{}, eine Datei zu speichern oder zu
+Diese Option veranlasst \jabref, eine Datei zu speichern oder zu
 exportieren, die von derselben Kommandozeile geladen oder importiert
 wurde. Wenn eine Datei mit der Option \texttt{-i} importiert wurde,
 wird diese Datei exportiert. Ansonsten wird die Datei exportiert,
@@ -1887,7 +1922,7 @@ Mit der Option \texttt{-h} k
 Exportformate anzeigen lassen.
 
 Falls die Option \texttt{-n} nicht aufgerufen wurde, wird jeder Exportvorgang
-durchgef�hrt, bevor das \jabref{}-Fenster ge�ffnet wird. Dort werden
+durchgef�hrt, bevor das \jabref-Fenster ge�ffnet wird. Dort werden
 dann die importierten Dateien angezeigt.
 
 Die Option \texttt{-o} kann nur einmal angegeben werden und nimmt
@@ -1895,21 +1930,21 @@ als Argument maximal eine Datei.
 
 \item Einstellungen exportieren: \texttt{-x Dateiname}
 
-Mit dieser Option k�nnen Sie \jabref{} veranlassen, alle Benutzer-Einstellungen
-in eine XML-Datei zu speichern. Nach dem Export startet \jabref{}
+Mit dieser Option k�nnen Sie \jabref veranlassen, alle Benutzer-Einstellungen
+in eine XML-Datei zu speichern. Nach dem Export startet \jabref
 normal.
 
 \item Einstellungen importieren: \texttt{-p Dateiname}
 
-Mit dieser Option importiert \jabref{} Benutzer-Einstellungen, die
+Mit dieser Option importiert \jabref Benutzer-Einstellungen, die
 mit der Option \texttt{-x} exportiert wurden. Nach dem Import startet
-\jabref{} normal.
+\jabref normal.
 
 \item Nur benutzte Eintr�ge exportieren: \texttt{-a Dateiname{[}.aux{]},neueBibDatei{[}.bib{]}}
 
 Manchmal ist es n�tzlich, eine \bibtex{}-Datei zu haben, die nur die
 benutzten Eintr�ge enth�lt. Eine Liste dieser benutzten Eintr�ge findet
-sich in einer .aux-Datei (sobald Sie \LaTeX{} aufgerufen haben). \jabref{}
+sich in einer .aux-Datei (sobald Sie \LaTeX{} aufgerufen haben). \jabref
 kann diese Datei analysieren, um eine neue \bibtex{}-Datei zu erstellen,
 die nur die bekannten und benutzten Eintr�ge enth�lt. Das bedeutet,
 dass ein Eintrag, der in der Standard-\bibtex{}-Datei nicht definiert
@@ -1920,15 +1955,15 @@ ist, auch nicht in die neue Datei geschrieben werden kann.
 \subsubsection{Externer Zugriff}
 \label{RemoteHelp}
 \begin{quote}
-\emph{Diese Funktion kann unter \menu{Einstellungen \msep{} Erweitert} eingestellt werden.}
+\emph{Diese Funktion kann unter \menu{Optionen \msep{} Einstellungen \msep{} Erweitert} verwaltet werden.}
 \end{quote}
 
-\tip[]{Beachten Sie, dass das Aktivieren dieser Funktion mit Windows XP SP2 (und m�glicherweise auch mit anderen Konfigurationen) zu einer Meldung f�hren kann, die besagt, dass bestimmte Funktionen des Programms von der Windows-Firewall geblockt wurden. Sie k�nnen die Firewall anweisen, weiterhin zu blocken, denn die Firewall beeintr�chtigt den Externen Zugriff von \jabref{} nicht.}
-Falls das Abh�ren von externen Zugriffen aktiviert ist, versucht \jabref{} beim Programmstart, den entsprechenden Port abzuh�ren. Das bedeutet, dass andere Anwendungen Informationen durch diesen Port an \jabref{} senden k�nnen. \jabref{} akzeptiert dabei nur lokale Verbindungen, um das Risiko eines Eingriffs von au�erhalb auszuschlie�en.
+\tip[]{Beachten Sie, dass das Aktivieren dieser Funktion mit Windows XP SP2 (und m�glicherweise auch mit anderen Konfigurationen) zu einer Meldung f�hren kann, die besagt, dass bestimmte Funktionen des Programms von der Windows-Firewall geblockt wurden. Sie k�nnen die Firewall anweisen, weiterhin zu blocken, denn die Firewall beeintr�chtigt den Externen Zugriff von \jabref nicht.}
+Falls das Abh�ren von externen Zugriffen aktiviert ist, versucht \jabref beim Programmstart, den entsprechenden Port abzuh�ren. Das bedeutet, dass andere Anwendungen Informationen durch diesen Port an \jabref senden k�nnen. \jabref akzeptiert dabei nur lokale Verbindungen, um das Risiko eines Eingriffs von au�erhalb auszuschlie�en.
 
-Mit dem externen Zugriff kann eine zweite Instanz von \jabref{} erkennen, dass eine erste Instanz bereits l�uft. In diesem Fall leitet die zweite Instanz ihre Kommandozeilen-Optionen an die erste Instanz weiter und beendet sich selbst direkt im Anschluss~-- sofern die zweite Instanz nicht ausdr�cklich instruiert wurde, im Stand-Alone-Modus (als selbst�ndige Instanz) zu starten.
+Mit dem externen Zugriff kann eine zweite Instanz von \jabref erkennen, dass eine erste Instanz bereits l�uft. In diesem Fall leitet die zweite Instanz ihre Kommandozeilen"=Optionen an die erste Instanz weiter und beendet sich selbst direkt im Anschluss~-- sofern die zweite Instanz nicht ausdr�cklich instruiert wurde, im Stand-Alone-Modus (als selbst�ndige Instanz) zu starten.
 
-Die erste \jabref{}-Instanz liest die Kommandozeilenoptionen und f�hrt die erforderlichen Aktionen aus, z.\,B. das Lesen oder Importieren einer Datei oder das Anh�ngen einer Datei an die aktive Datenbank. Falls eine Datei mit der Option \texttt{-{-}importToOpen} importiert wird, werden die Eintr�ge an die aktive Datei angeh�ngt. Falls keine Datei ge�ffnet ist, wird eine neue Datei angelegt.
+Die erste \jabref-Instanz liest die Kommandozeilenoptionen und f�hrt die erforderlichen Aktionen aus, z.\,B. das Lesen oder Importieren einer Datei oder das Anh�ngen einer Datei an die aktive Datenbank. Falls eine Datei mit der Option \texttt{-{-}importToOpen} importiert wird, werden die Eintr�ge an die aktive Datei angeh�ngt. Falls keine Datei ge�ffnet ist, wird eine neue Datei angelegt.
 
 \clearpage 
 \section{Anpassung}
@@ -1943,7 +1978,7 @@ Die erste \jabref{}-Instanz liest die Kommandozeilenoptionen und f
 \msep{} \emph{\menu{Eintragstypen anpassen}.}
 \end{quote}
 Wenn Sie einen Eintragstyp anpassen, definieren Sie sowohl sein Erscheinungsbild
-im Eintragseditor als auch die Bedingungen, nach denen \jabref{}
+im Eintragseditor als auch die Bedingungen, nach denen \jabref
 einen Eintrag als vollst�ndig akzeptiert. Sie k�nnen die bestehenden
 Eintragstypen ver�ndern und neue hinzuf�gen.
 
@@ -1999,11 +2034,11 @@ Liste.
 
 Um eines oder mehrere Felder zu l�schen, w�hlen Sie sie in der Liste
 aus und klicken auf \menu{L�schen}. Die Reihenfolge der Felder k�nnen
-Sie �ndern, indem Sie einen Feldnamen ausw�hlen und die Pfeiltasten
+Sie �ndern, indem Sie einen Feldnamen ausw�hlen und die Pfeil"=Buttons
 benutzen, um das Feld nach oben oder nach unten zu verschieben.
 
 Es gibt eine Beschr�nkung beim Anpassen der Eintragstypen; bestimmte
-Typen haben eine und/oder-Bedingung in ihren ben�tigten Feldern. Ein
+Typen haben eine ">und/oder"<"=Bedingung in ihren ben�tigten Feldern. Ein
 \emph{book}-Eintrag ist beispielsweise komplett, wenn entweder das
 Feld \emph{author} oder \emph{editor} oder beide gesetzt sind. Diese
 Art von Bedingung kann in einem angepassten Eintragstyp nicht realisiert
@@ -2033,15 +2068,14 @@ enth
 den Feldern \emph{abstract} und \emph{annote}.
 
 
-\subsection{Automatische Erstellung von \bibtex{}-Keys}
-
+\subsection{Automatische Erstellung von \bibtex{}"=Keys}
+\label{LabelPatterns}
 \begin{quote}
-\label{LabelPatterns}Im Tab \menu{Key-Muster} des Dialogs \menu{Einstellungen}
+\emph{Unter \menu{Optionen \msep{} Einstellungen \msep{} BibTeX"=Key"=Muster} 
 kann man die Felder bestimmen, die zur automatischen Generierung der
-\bibtex{}-Keys herangezogen werden.
+\bibtex{}"=Keys herangezogen werden.}
 \end{quote}
-Standardm��ig verwendet \jabref{} ein vorgegebenes Muster (default
-pattern) zur Generierung von \bibtex{}-Keys, das Keys wie z.\,B.
+\jabref verwendet ein Standardmuster zur Generierung von \bibtex{}"=Keys, das Keys wie z.\,B.
 \texttt{Yared1998} erzeugt. Falls der \bibtex{}-Key in der ge�ffneten
 Datei nicht eindeutig sein sollte, wird einer der Buchstaben a-z angef�gt,
 bis ein eindeutiger Key gefunden ist. Dementsprechend k�nnten die
@@ -2053,8 +2087,8 @@ Yared1998a
 Yared1998b
 (*\ldots*)
 \end{lstlisting}
-\jabref{} verwendet Feldmarken, um das Aussehen der \bibtex{}-Keys
-zu bestimmen. Das Key-Muster kann f�r jeden der vorgegebenen Eintragstypen
+Um das Aussehen der \bibtex{}-Keys zu bestimmen, benutzt \jabref
+Feldmarken. Das Key"=Muster kann f�r jeden der vorgegebenen Eintragstypen
 bestimmt werden. Es kann beliebigen Text enthalten, unabh�ngig von
 und zus�tzlich zu den Feldmarken, die angeben, dass ein bestimmtes
 Feld des Eintrags an dieser Stelle des Keys eingef�gt werden soll.
@@ -2069,7 +2103,7 @@ k
 
 \subsubsection{Spezielle Feldmarken}
 
-\begin{labeling}{veryveryveryshorttitle}
+\begin{labeling}{auth.auth.eaMM}
 \item [\texttt{{[}auth{]}}]Der Nachname des ersten Autors.
 \item [\texttt{{[}authors{]}}]Die Nachnamen aller Autoren.
 \item [\texttt{{[}authorsN{]}}]Die Nachnamen von bis zu N Autoren. Falls
@@ -2084,15 +2118,16 @@ ersten Autors.
 M-ten Autors.
 \item [\texttt{{[}auth.auth.ea{]}}]Die Nachnamen der beiden ersten Autoren
 und \texttt{.ea}, falls es mehr als zwei Autoren sind.
+\item [\texttt{{[}auth.etal{]}}]Der Nachname des ersten Autors und der Nachname des zweiten Autors bei zwei Autoren bzw. \texttt{.etal} bei mehr als zwei Autoren.
 \item [\texttt{{[}authshort{]}}]Der Nachname bei einem Autor; der erste
 Buchstabe der Nachnamen von bis zu drei Autoren, falls mehr als ein
 Autor vorhanden ist. Ein Plus (+) wird angeh�ngt, falls es mehr als
 drei Autoren gibt.
 \end{labeling}
 
-\tip[Anmerkung:]{Falls es keinen Autor gibt (z.\,B. bei einem Buch mit Herausgeber), benutzen die genannten \texttt{{[}auth...{]}}-Feldmarken den oder die Herausgeber, die im editor-Feld angegeben wurden. Also werden die Herausgeber eines Buches ohne Autor f�r die Label-Erstellung wie Autoren behandelt. Falls Sie dieses Verhalten nicht w�nschen und die Feldmarke stattdessen bei einem leeren author-Feld zu nichts expandieren soll, m�ssen Sie stattdessen >>pureauth<< verwenden, z.\,B.: \te [...]
+\tip[Anmerkung: ]{Falls es keinen Autor gibt (etwa bei einem Buch mit Herausgeber), benutzen die genannten \texttt{{[}auth\ldots{]}}"=Feldmarken den oder die Herausgeber, die im editor"=Feld angegeben wurden. Also werden die Herausgeber eines Buches ohne Autor f�r die Label"=Erstellung wie Autoren behandelt. Falls Sie dieses Verhalten nicht w�nschen und die Feldmarke stattdessen bei einem leeren author"=Feld zu nichts expandieren soll, m�ssen Sie stattdessen >>pureauth<< verwenden, z.\,B [...]
 
-\begin{labeling}{veryveryveryshorttitle}
+\begin{labeling}{veryshorttitleMM}
 \item [\texttt{{[}edtr{]}}]Der Nachname des ersten Herausgebers.
 \item [\texttt{{[}editors{]}}]Die Nachnamen aller Herausgeber.
 \item [\texttt{{[}edtrIniN{]}}]Der Anfang des Nachnamens von jedem Herausgeber,
@@ -2125,22 +2160,22 @@ angewendet, in der sie angegeben wurden.
 \begin{labeling}{00.00.0000}
 \item [\texttt{:abbr}]K�rzt den Text, der von einem Feldnamen oder speziellen
 Feldmarken gebildet wird. Nur der erste Buchstabe und weitere Buchstaben,
-die auf ein Leerzeichen folgen, werden ber�cksichtigt. Zum Beispiel
-w�rde \texttt{{[}journal:}~\\
-\texttt{abbr{]}} die Zeitschrift >>Jorunal of Fish Biology<< zu
+die auf ein Leerzeichen folgen, werden ber�cksichtigt. So w�rde beispielsweise
+\texttt{[journal:abbr]} die Zeitschrift >>Journal of Fish Biology<< zu
 >>JoFB<< wandeln.
 \item [\texttt{:lower}]Wandelt den von der Feldmarke eingef�gten Text in
 Kleinbuchstaben. So wird beispielsweise bei \texttt{{[}auth:lower{]}}
 der Nachname des ersten Autors in Kleinbuchstaben ausgegeben.
 \end{labeling}
-Das Standard-Key-Muster, das \bibtex{}-Keys wie \texttt{Yared1998}
+Das Standardmuster, das \bibtex{}-Keys wie \texttt{Yared1998}
 erzeugt, ist \texttt{{[}auth{]}{[}year{]}}. Wenn Sie keine Key-Muster
 f�r einen bestimmten Eintragstyp angeben, wird dieses vorgegebene
 Muster verwendet. Sie k�nnen das vorgegebene Muster nat�rlich ebenfalls
-anpassen~-- seine Einstellung befindet sich �ber der Liste der Eintragstypen
-im Tab \menu{Key-Muster} des Dialogs \menu{Einstellungen}.
+anpassen%~-- seine Einstellung befindet sich �ber der Liste der Eintragstypen
+%im Tab \menu{Key-Muster} des Dialogs \menu{Einstellungen}
+.
 
-Beachten Sie, dass \jabref{} Umlaute und Buchstaben mit Akzenten
+Beachten Sie, dass \jabref Umlaute und Buchstaben mit Akzenten
 sowie das � beim Erstellen von \bibtex{}-Keys ver�ndert, um m�glichen
 Problemen vorzubeugen. Hierzu einige Beispiele:
 
@@ -2152,14 +2187,14 @@ Wa
 
 \subsubsection{Ersetzen eines regul�ren Ausdrucks}
 
-Nachdem das Key-Muster angewendet wurde, um einen \bibtex{}-Key zu erstellen, k�nnen Sie den Key-Generator nach einem bestimmten regul�ren Ausdruck suchen und ihn durch eine Zeichenfolge ersetzen lassen. Der regul�re Ausdruck und die Zeichenfolge, die ihn ersetzen soll, werden in den Textfeldern unter der Liste der Key-Muster eingegeben. Falls das Feld zur Ersetzung des regul�ren Ausdrucks leer ist, werden die mit der Suche �bereinstimmenden regul�ren Ausdr�cke einfach gel�scht.
+Nachdem das Key"=Muster angewendet wurde, um einen \bibtex{}"=Key zu erstellen, k�nnen Sie den Key"=Generator nach einem bestimmten regul�ren Ausdruck suchen und diesen durch eine Zeichenfolge ersetzen lassen. Der regul�re Ausdruck und die Zeichenfolge, die ihn ersetzen soll, werden in den Textfeldern unter der Liste der Key"=Muster eingegeben. Falls das Feld zur Ersetzung des regul�ren Ausdrucks leer ist, werden die mit der Suche �bereinstimmenden regul�ren Ausdr�cke einfach gel�scht.
 
 \subsection{Eintragsvorschau}
 
 \label{PreviewHelp}Die Eintragsvorschau wird mit denselben Mechanismen
 erstellt, die auch bei den Exportfiltern angewendet werden. Bei der
 Vorschau durchl�uft ein Eintrag eins von zwei m�glichen Layouts (die
-sie mit STRG-F9 wechseln k�nnen) und erstellt HTML-Code, der im Vorschaudialog
+sie mit F9 wechseln k�nnen) und erstellt HTML-Code, der im Vorschaudialog
 am unteren Bildschirmrand angezeigt wird.
 
 Aussehen und Inhalt der Vorschau k�nnen mit derselben Syntax ver�ndert
@@ -2168,25 +2203,24 @@ Abschnitt~\ref{CustomExports}).
 
 \subsection{Exportfilter}
 
-\label{CustomExports}Mit \jabref{} k�nnen Sie Ihre eigenen Exportfilter
-definieren und genau so wie die Standard-Exportfilter benutzen. Ein
-Exportfilter wird durch eine oder mehrere \emph{Layout-Dateien} definiert,
+\label{CustomExports}Mit \jabref k�nnen Sie Ihre eigenen Exportfilter
+definieren und genau so wie die Standard"=Exportfilter benutzen. Ein
+Exportfilter wird durch eine oder mehrere \emph{Layout"=Dateien} definiert,
 die mittels eingebauter Formatierprogramme das Format der exportierten
 Dateien festlegen. Ihre Layout-Datei m�ssen Sie in einem separaten
-Texteditor erstellen.
+Text\-editor erstellen.
 
 
-\subsubsection{Hinzuf�gen eines Exportfilters}
+\subsubsection{Hinzuf�gen eines Exportfilters}\label{subsubsec:Hinzufuegen-Exportfilter}
 
-Die einzige Voraussetzung f�r einen Exportfilter ist, da� eine Datei
+Die einzige Voraussetzung f�r einen Exportfilter ist, dass eine Datei
 mit der Endung \texttt{.layout} vorhanden ist. Um einen neuen, eigenen
 Exportfilter hinzuzuf�gen, �ffnen Sie das Dialogfenster \menu{Optionen}
 \msep{} \menu{Verwalte externe Exportfilter} und klicken auf die
 Schaltfl�che \menu{Neu}. Es �ffnet sich ein neues Fenster, in dem
-Sie einen Namen (der im Men� \menu{Datei} \msep{} \menu{Externe Exportfilter}
-angezeigt wird), eine Pfadangabe zur \texttt{.layout}-Datei und die
+Sie einen Namen (der als Auswahl im Dateityp"=Dropdownmen� erscheint, wenn man \menu{Datei \msep{} Exportieren} im JabRef"=Hauptfenster w�hlt), eine Pfadangabe zur \texttt{.layout}-Datei und die
 gew�nschte Dateiendung f�r den Exportfilter angeben k�nnen. Wenn Sie
-den Exportfilter benutzen, wird diese Endung im Datei-Dialog automatisch
+den Exportfilter benutzen, wird diese Endung im Datei"=Dialog automatisch
 vorgeschlagen.
 
 
@@ -2194,15 +2228,15 @@ vorgeschlagen.
 
 Um einen Eindruck zu bekommen, wie Exportfilter auszusehen haben,
 suchen Sie am besten auf unserer Homepage nach dem Paket, das die
-Layout-Dateien der Standard-Exportfilter enth�lt.
+Layout"=Dateien der Standard"=Exportfilter enth�lt.
 
 Nehmen wir einmal an, dass wir einen HTML-Exportfilter erstellen wollen.
 Der Exportfilter muss lediglich aus einer einzigen \texttt{.layout}-Datei
 bestehen, die in diesem Fall \texttt{html.layout} genannt werden k�nnte.
 Sie k�nnen dar�ber hinaus auch zwei Dateien mit den Namen \texttt{html.begin.layout}
 und \texttt{html.end.layout} anlegen. Die erste dieser beiden Dateien
-enth�lt den Kopfteil der Ausgabe, die zweite den Fu�teil. \jabref{}
-sucht jedes Mal, wenn der Exportfilter benutzt wird, nach diesen Dateien
+enth�lt den Kopfteil der Ausgabe, die zweite den Fu�teil. \jabref
+sucht jedesmal wenn der Exportfilter benutzt wird nach diesen Dateien
 und f�gt sie~-- falls sie gefunden werden~-- w�rtlich vor bzw. nach
 den einzelnen Eintr�gen in die Ausgabe ein.
 
@@ -2222,25 +2256,25 @@ aussehen:
 </BODY>
 </HTML>
 \end{lstlisting}
-Die Datei \texttt{html.layout} stellt die \emph{Standard}-Formatvorlage
+Die Datei \texttt{html.layout} stellt die \emph{Standard}"=Formatvorlage
 f�r den Export eines einzelnen Eintrags bereit. Falls Sie unterschiedliche
 Formatvorlagen f�r verschiedene Eintragstypen anwenden wollen, m�ssen
-Sie Eintrags-spezifische \texttt{.layout}-Dateien erstellen. Diese
-m�ssen sich ebenfalls in demselben Verzeichnis wie die Haupt-Layout-Datei
+Sie typspezifische \texttt{.layout}"=Dateien erstellen. Diese
+m�ssen sich ebenfalls in demselben Verzeichnis wie die Haupt"=Layout"=Datei
 befinden und den Namensbestandteil \texttt{.entrytype} enthalten.
 Der Name des Eintragstyps muss komplett in Kleinbuchstaben geschrieben
 werden. In unserem Beispiel wollen wir eine Formatvorlage f�r Eintr�ge
 des Typs \emph{book} haben, die in der Datei \texttt{html.book.layout}
 abgelegt wird. F�r eine Dissertation w�rden wir die Datei \texttt{html.phdthesis.layout}
-anlegen~-- und so weiter. Diese Dateien sind der Standard-Layout-Datei
+anlegen~-- und so weiter. Diese Dateien sind der Standard"=Layout"=Datei
 sehr �hnlich, nur dass sie lediglich f�r Eintr�ge des entsprechenden
-Typs genutzt werden. Achten Sie darauf, dass die Standard-Layout-Datei
+Typs genutzt werden. Achten Sie darauf, dass die Standard"=Layout"=Datei
 so allgemein gehalten wird, dass sie die meisten Eintragstypen abdeckt.
 
 
 \paragraph{Das Format der Layout-Datei}
 
-Layout-Dateien werden mit einem einfachen markup-Format erstellt,
+Layout"=Dateien werden mit einem einfachen mark\-up"=Format erstellt,
 bei dem die Kommandos mit einem >>backslash<< (\texttt{\textbackslash{}})
 eingeleitet werden. Alle Textbestandteile, die nicht als Kommando
 identifiziert werden, gelangen direkt in die Ausgabedatei.
@@ -2255,6 +2289,7 @@ Feld ausgewertet, das dann direkt in die Ausgabe kopiert wird.
 
 
 \paragraph{Feldformatierer}
+\label{par:Feldformatierer}
 
 Oft muss der Feldinhalt vor der Ausgabe verarbeitet werden. Dies wird
 mit Hilfe eines \emph{Feldformatierers} gemacht~-- einer java class,
@@ -2278,48 +2313,67 @@ ruft z.\,B. zun
 formatiert anschlie�end das Ergebnis. Auf diese Weise k�nnen Sie eine
 beliebige Anzahl an Formatierern auflisten.
 
-\jabref{} bietet die folgenden Formatierer, wobei einige von anderen
+\jabref bietet die folgenden Formatierer, wobei einige von anderen
 abh�ngen:
 
-\begin{labeling}{veryveryveryshorttitle}
+\begin{labeling}{MMMM}
 \item [\texttt{HTMLChars}]ersetzt \TeX{}-spezifische Sonderzeichen wie
 \texttt{\{\textbackslash{}\textasciicircum{}a\}} oder \texttt{\{\textbackslash{}\char`\"{}\{o\}\}}
 durch ihre HTML-Entsprechungen.
+\item [\texttt{HTMLParagraphs}]interpretiert zwei aufeinanderfolgende Zeilenumbr�che (z.\,B. \lstinline{\n \n}) als Beginn eines neuen Absatzes und erstellt dementsprechend Absatz-HTML-Tags.
 \item [\texttt{XMLChars}]ersetzt \TeX{}-spezifische Sonderzeichen wie \texttt{\{\textbackslash{}\textasciicircum{}a\}}
 oder \texttt{\{\textbackslash{}\char`\"{}\{o\}\}} durch ihre XML-Entsprechungen.
 \item [\texttt{CreateDocBookAuthors}]formatiert das author-Feld im DocBook-Stil.
+\item [\texttt{CreateDocBookEditors}]\emph{Dokumentation folgt.}
+\item [\texttt{CurrentDate}]gibt das aktuelle Datum aus. Ohne Argument gibt dieser Formatierer das aktuelle Datum im Format ">JJJJ.MM.TT HH:MM:SS Z"< (Datum, Zeit und Zeitzone) aus. Mit einem anderen Format-String als Argument kann das Datum angepasst werden. So ergibt \lstinline{\format[CurrentDate]}\texttt{\{}\lstinline{yyyy.MM.dd}\texttt{\}} nur das Datum, z.\,B. ">2005.11.30"<.
 \item [\texttt{AuthorFirstFirst}]formatiert die Felder \emph{author}/\emph{editor}
 mit den Vornamen zuerst.
 \item [\texttt{AuthorFirstFirstCommas}]formatiert die Felder \emph{author}/\emph{editor}
 mit den Vornamen zuerst und abgetrennt durch Kommas.
+\item [\texttt{AuthorFirstAbbrLastCommas}]\emph{Dokumentation folgt.}
+\item [\texttt{AuthorFirstAbbrLastOxfordCommas}]\emph{Dokumentation folgt.}
+\item [\texttt{AuthorFirstLastOxfordCommas}]\emph{Dokumentation folgt.}
 \item [\texttt{AuthorLastFirst}]formatiert die Felder \emph{author}/\emph{editor}
 mit den Nachnamen zuerst.
 \item [\texttt{AuthorLastFirstAbbreviator}]k�rzt die Vornamen aller Autoren.
 Dieser Formatierer kann nur angewendet werden, wenn \texttt{AuthorLastFirst}
 bereits benutzt wurde.
+\item [\texttt{AuthorLastFirstCommas}]\emph{Dokumentation folgt.}
+\item [\texttt{AuthorLastFirstOxfordCommas}]\emph{Dokumentation folgt.}
+\item [\texttt{AuthorLastFirstAbbrCommas}]\emph{Dokumentation folgt.}
+\item [\texttt{AuthorLastFirstAbbrOxfordCommas}]\emph{Dokumentation folgt.}
 \item [\texttt{AuthorAndsReplacer}]ersetzt >>and<< zwischen den Namen
 durch >>;<<, zwischen den letzten beiden Autoren steht >>\&<<.
 \item [\texttt{AuthorAndsCommaReplacer}]ersetzt >>and<< zwischen den
 Namen durch ein Komma (,) sowie >>\&<< zwischen den beiden letzten.
+\item [\texttt{AuthorOrgSci}]Der erste Autor erscheint als "Nachname, Vorname", alle anderen als "Vorname Nachname". Vornamen werden abgek�rzt.
+\item [\texttt{AuthorAbbreviator}]\emph{Dokumentation folgt.}
+\item [\texttt{AuthorNatBib}]formatiert Autorennamen im Natbib-Stil, also nur mit Nachnamen; zwei Autoren werden durch ein ">and"< voneinander getrennt, bei mehr als zwei Autoren wird der erste angegeben, gefolgt von ">et al."<
+\item [\texttt{NoSpaceBetweenAbbreviations}]Leerzeichen zwischen mehreren abgek�rzten Vornamen werden gel�scht.
 \item [\texttt{FormatPagesForHTML}]ersetzt >>\texttt{-{}-}<< durch >>\texttt{-}<<.
 \item [\texttt{FormatPagesForXML}]ersetzt >>\texttt{-{}-}<< durch einen
 XML en-dash (>>--<<).
 \item [\texttt{RemoveBrackets}]entfernt alle geschweiften Klammern (>>\{<<
 und >>\}<<).
+\item [\texttt{RemoveBracketsAddComma}]\emph{Dokumentation folgt.}
+\item [\texttt{RemoveWhitespace}]\emph{Dokumentation folgt.}
 \item [\texttt{RemoveLatexCommands}]entfernt \LaTeX{} Kommandos wie \texttt{\textbackslash{}em},
 \texttt{\textbackslash{}textbf} etc. Zusammen mit \texttt{HTMLChars}
 oder \texttt{XMLChars} sollte dieser Formatierer zuletzt aufgerufen
 werden.
 \item [\texttt{ToLowerCase}]macht aus allen Buchstaben Kleinbuchstaben.
+\item [\texttt{CompositeFormat}]\emph{Dokumentation folgt.}
+\item [\texttt{GetOpenOfficeType}]\emph{Dokumentation folgt.}
+\item [\texttt{RTFChars}]\emph{Dokumentation folgt.}
+\item [\texttt{ResolvePDF}]\emph{Dokumentation folgt.}
 \end{labeling}
 Falls keiner der verf�gbaren Formatierer das Ergebnis erzielt, das
 Sie erreichen m�chten, k�nnen Sie Ihren eigenen Formatierer hinzuf�gen,
-indem Sie das \texttt{net.sf.jabref.ex\allowbreak port.layout.LayoutFormatter}-Interface
-implementieren. Wenn Sie Ihre Klasse (class) in das Paket \texttt{net.sf.jabref.export.}\allowbreak \texttt{layout.format}
-einf�gen, k�nnen Sie den Formatierer mit seinem Klassennamen aufrufen,
-so wie auch die Standard-Formatierer. Ansonsten m�ssen Sie den Formatierer
+indem Sie das \lstinline{net.sf.jabref.export.layout.LayoutFormatter}-Interface
+implementieren. Wenn Sie in das Paket \lstinline{net.sf.jabref.export.layout.format} Ihre Klasse (class) einf�gen, k�nnen Sie den Formatierer mit seinem Klassennamen aufrufen,
+so wie auch die Standard"=Formatierer. Ansonsten m�ssen Sie den Formatierer
 mit seinem vollen Namen aufrufen (inklusive Paketname). In jedem Fall
-muss der Formatierer in ihrem classpath sein, wenn Sie \jabref{}
+muss der Formatierer in ihrem classpath sein, wenn Sie \jabref
 starten.
 
 
@@ -2345,7 +2399,7 @@ verhindern:
 \end{lstlisting}
 Die Kommandos \texttt{\textbackslash{}begin} und \texttt{\textbackslash{}end}
 sorgen daf�r, dass der Text, den sie einschlie�en, nur dann ausgegeben
-wird, falls das Feld, auf das in den geschweiften Klammern verwiesen
+wird, wenn das Feld, auf das in den geschweiften Klammern verwiesen
 wird, f�r den zu exportierenden Eintrag definiert und damit nicht
 leer ist.
 
@@ -2376,45 +2430,43 @@ New Category: \format[HTMLChars]{\keywords}
 
 \subsection{Importfilter}
 
-\noindent \jabref{} bietet Ihnen die M�glichkeit, ganz �hnlich den Standard-Importern, eigene Importer 
-zu definieren und zu benutzen. Man definiert einen Importer durch eine oder mehrere Java
-\emph{Klassen}, die Dateiinhalte aus einem sogenannten \emph{Input stream} lesen
+\noindent \jabref bietet Ihnen die M�glichkeit, ganz �hnlich den Standard-Importern, eigene Importer 
+zu definieren und zu benutzen. Man definiert einen Importer durch eine oder mehrere Java"=\emph{Klassen},
+die Dateiinhalte aus einem sogenannten \emph{Input stream} lesen
 und daraus \bibtex{}-Eintr�ge erzeugen. Sie k�nnen vorkompilierte Importer einbinden, die Sie vielleicht 
-von SourceForge erhalten haben (siehe Abschnitt >>Ihre Arbeit anderen zur Verf�gung stellen<<, 
-S.\,\pageref{subsec:Ihre-Arbeit}). Sie k�nnen auch
-mit Grundkenntnissen der Java-Programmierung eigene Importer f�r f�r Sie wichtige Referenzquellen 
-erstellen oder neue, verbesserte Versionen existierender Importer einbinden, ohne \jabref{} neu zu
+von SourceForge erhalten haben (siehe Abschnitt ">\nameref{subsec:Ihre-Arbeit}"<). Sie k�nnen auch
+mit Grundkenntnissen der Java"=Programmierung eigene Importer f�r Referenzquellen, die f�r Sie wichtig sind,
+erstellen oder neue, verbesserte Versionen existierender Importer einbinden, ohne \jabref neu zu
 kompilieren.
 
 \paragraph{Vorrangsregeln}
 
 Externe Importfilter haben Vorrang vor Standard-Importern. So k�nnen Sie mit Ihren Importern
-die existierenden in der automatischen Formaterkennung und an der Kommandozeile in \jabref{} �berschreiben.
-Externe Importfilter selbst sind dann nach Namen sortiert.
+die existierenden Importer in der automatischen Formaterkennung und an der Kommandozeile in \jabref �berschreiben. Externe Importfilter selbst sind dann nach Namen sortiert.
 
 \subsubsection{Einen externen Importfilter hinzuf�gen}
 
 Stellen Sie sicher, dass Sie den Importer in kompilierter Form haben (eine oder mehrere
 \texttt{.class} Dateien) und dass die Klassendateien
-in einer Verzeichnisstruktur entsprechend ihrer Package-Struktur liegen. 
+in einer Verzeichnisstruktur entsprechend ihrer Package"=Struktur liegen. 
 Um einen neuen externen Importfilter hinzuzuf�gen, �ffnen Sie den Dialog 
-\menu{Optionen} \msep{} \menu{Verwalte externe Importfilter}, und klicken Sie auf
-\menu{Aus Klassenpfad hinzuf�gen}. Ein Dateiauswahl-Fenster erscheint, 
-mit dem Sie den Klassenpfad des Importers w�hlen, dass hei�t den obersten Ordner,
-in dem die Package-Struktur Ihres Importers beginnt. In einem zweiten Dateiauswahl-Fenster
-w�hlen Sie die \emph{.class}-Datei Ihres Importers, die von \texttt{\textbackslash{}ImportFormat} abgeleitet
+\menu{Optionen \msep{} Verwalte externe Importfilter}, und klicken Sie auf
+\menu{Aus Klassenpfad hinzuf�gen}. Ein Dateiauswahl"=Fenster erscheint, 
+mit dem Sie den Klassenpfad des Importers w�hlen, das hei�t den obersten Ordner,
+in dem die Package"=Struktur Ihres Importers beginnt. In einem zweiten Dateiauswahl"=Fenster
+w�hlen Sie die \emph{.class}"=Datei Ihres Importers, die von \texttt{\textbackslash{}ImportFormat} abgeleitet
 ist. Wenn Sie \menu{Klasse ausw�hlen} klicken, erscheint Ihr neuer Importer
 in der Liste der externen Importfilter. Alle externen Importfilter erscheinen in den
-\jabref{}-Untermen�s \menu{Datei} \msep{} \menu{Importieren} \msep{} \menu{Externe Importfilter} und 
-\menu{Datei} \msep{} \menu{Importieren und Anh�ngen} \msep{} \menu{Externe Importfilter}.
+\jabref"=Untermen�s \menu{Datei \msep{} Importieren \msep{} Externe Importfilter} und 
+\menu{Datei \msep{} Importieren und Anh�ngen \msep{} Externe Importfilter}.
 
 \tip[Bitte beachten Sie: ]{Wenn Sie die Klassen in ein anderes Verzeichnis verschieben,
 m�ssen Sie den Importer entfernen und neu hinzuf�gen. Wenn Sie einen Importfilter
-mit einem bereits vorhandenen Namen registrieren, ersetzt \jabref{} den vorhandenen
+mit einem bereits vorhandenen Namen registrieren, ersetzt \jabref den vorhandenen
 externen Importfilter. Auch wenn es in manchen F�llen m�glich ist, einen schon registrierten
-Importer zu aktualisieren ohne \jabref{} neu zu starten (n�mlich dann,
-wenn der Importer nicht im Klassenpfad von \jabref{} ist), empfehlen wir, grunds�tzlich
-\jabref{} neu zu starten, wenn Sie ein Update eines externen Importers durchgef�hrt haben.
+Importer zu aktualisieren ohne \jabref neu zu starten (n�mlich dann,
+wenn der Importer nicht im Klassenpfad von \jabref ist), empfehlen wir, grunds�tzlich
+\jabref neu zu starten, wenn Sie ein Update eines externen Importers durchgef�hrt haben.
 Sie k�nnen auch Importer aus ZIP- oder JAR-Archiven registrieren, w�hlen Sie einfach
 \emph{\menu{Aus Archiv-Datei hinzuf�gen}}, dann das ZIP- oder JAR-Archiv und dann den Eintrag
 (Klassendatei), der den neuen Importer darstellt.}
@@ -2435,10 +2487,12 @@ Angenommen, wir wollen Dateien der folgenden Form importieren:
 
 \subparagraph{SimpleCsvImporter Erstellen}
 
-Erzeugen Sie in einem Text-Editor eine von \texttt{ImportFormat} abgeleitete Klasse,
-die die Methoden \texttt{getFormatName()}, 
+Erzeugen Sie in einem Text"=Editor eine Klasse, die von \texttt{ImportFormat} abgeleitet
+ist und die folgende Methoden implementiert:\\
+\texttt{getFormatName()}, 
 \texttt{isRecognizedFormat()}
-und \texttt{importEntries()} implementiert. Hier ein Beispiel:
+und \texttt{importEntries()}.\\
+Hier ein Beispiel:
 \begin{lstlisting}
 import java.io.*;
 import java.util.*;
@@ -2480,9 +2534,7 @@ public class SimpleCsvImporter extends ImportFormat {
 
 \subparagraph{SimpleCsvImporter �bersetzen}
 
-Beachten Sie, dass die Beispielklasse im Default"=Package liegt. Angenommen, Sie haben
-sie unter \texttt{/meinpfad/SimpleCsvImporter.java} gespeichert. Nehmen wir weiter an,
-die Datei \texttt{JabRef-2.0.jar} ist im gleichen Verzeichnis wie
+Beachten Sie, dass die Beispielklasse im Default"=Package liegt. Angenommen, sie liegt unter \texttt{/meinpfad\slash{}SimpleCsvImporter.java}, die Datei \texttt{JabRef-2.0.jar} ist im gleichen Verzeichnis wie
 \texttt{SimpleCsvImporter.java} und Java ist in Ihrem Kommandopfad. 
 Kompilieren Sie die Klasse mit JSDK 1.4 zum Beispiel mit folgendem Kommandozeilen"=Aufruf: 
 \begin{lstlisting}
@@ -2492,25 +2544,25 @@ Nun sollte dort auch eine Datei \texttt{/mypath/SimpleCsvImporter.class} liegen.
 
 \subparagraph{SimpleCsvImporter registrieren}
 
-�ffnen Sie in \jabref{} \menu{Optionen} \msep{} \menu{Verwaltung externer Importfilter} und klicken Sie
+�ffnen Sie in \jabref \menu{Optionen} \msep{} \menu{Verwaltung externer Importfilter} und klicken Sie
 auf \menu{Aus Klassenpfad hinzuf�gen}. Navigieren Sie nach \texttt{/meinpfad} und 
 klicken Sie \menu{Klassenpfad ausw�hlen}. W�hlen Sie dann die Datei \texttt{SimpleCsvImporter.class}
 und klicken Sie \menu{Klasse ausw�hlen}. Ihr Importfilter sollte nun in der Liste der
 externen Importfilter unter dem Namen >>Simple CSV Importer<< erscheinen und,
 sobald Sie \menu{Schlie�en} gew�hlt haben, auch in den Untermen�s \menu{Datei} \msep{} \menu{Importieren} \msep{} 
 \menu{Externe Importfilter} und \menu{Datei} \msep{} \menu{Importieren und Anh�ngen} \msep{} \menu{Externe Importfilter} 
-des \jabref{}-Hauptfensters auftauchen.
+des \jabref-Hauptfensters auftauchen.
 
 \subsection{Teilen Sie Ihre Arbeit mit anderen}
 \label{subsec:Ihre-Arbeit}
 Mit externen Layout-Dateien und Importfiltern ist es einfach, Ihre eigenen Export-Formate und Importfilter
 mit anderen Anwendern gemeinsam zu benutzen. Falls Sie einen Exportfilter oder einen Importfilter
-f�r ein Format erstellt haben, das noch nicht von \jabref{} unterst�tzt wird,
+f�r ein Format erstellt haben, das noch nicht von \jabref unterst�tzt wird,
 oder falls Sie einen bestehenden Exportfilter oder Importfilter verbessern, m�chten
-wir Sie ermutigen, Ihre Arbeit auf der \href{http://sourceforge.net/projects/jabref/}{SourceForge.net-Seite} bereitzustellen.
+wir Sie ermutigen, Ihre Arbeit auf der \href{http://sourceforge.net/projects/jabref/}{SourceForge.net"=Seite} bereitzustellen.
 Dasselbe gilt f�r Formatierklassen, die Sie schreiben. Wir w�rden
-uns freuen, eine Sammlung von bereitgestellten Layout-Dateien verteilen
-zu k�nnen oder die Standard-Export-Filter, -Formatierer und -Importfilter
+uns freuen, eine Sammlung von bereitgestellten Layout"=Dateien verteilen
+zu k�nnen oder die Standard"=Exportfilter, -Formatierer und -Importfilter
 zu erweitern.
 
 \clearpage 
@@ -2542,7 +2594,7 @@ Sitzung speichern&
 F11\tabularnewline
 Sitzung laden&
 F12\tabularnewline
-\jabref{} beenden&
+\jabref beenden&
 STRG-Q\tabularnewline
 \end{longtable}
 
@@ -2627,7 +2679,7 @@ F9\tabularnewline
 \textbf{Externe Programme / Internet}&
 \tabularnewline
 \endfirsthead
-Literaturangaben in \LyX{} einf�gen&
+Literaturangaben in \LyX einf�gen&
 STRG-L\tabularnewline
 Literaturangaben in WinEdt einf�gen&
 STRG-SHIFT-W\tabularnewline
@@ -2668,32 +2720,39 @@ F1\tabularnewline
 \section{H�ufige Fragen und Antworten}\label{sec:faq}
 %\secttoc
 
-Die folgenden Fragen und Antworten sind der \href{http://jabref.sourceforge.net/faq.php}{\jabref{}-Homepage} entnommen. Falls Sie dar�ber hinaus Fragen haben, die das Handbuch nicht beantworten konnte, haben Sie folgende M�glichkeiten, zu einer Antwort zu kommen:
+Die folgenden Fragen und Antworten sind der \href{http://jabref.sourceforge.net/faq.php}{\jabref-Homepage} entnommen. Falls Sie dar�ber hinaus Fragen haben, die das Handbuch nicht beantworten konnte, haben Sie folgende M�glichkeiten, zu einer Antwort zu kommen:
 \begin{enumerate}
 	\item Durchsuchen Sie die \href{http://sourceforge.net/forum/?group_id=92314}{Foren} auf der Projektseite bei Sourceforge.
-	\item Stellen Sie Ihre Frage in der \href{http://sourceforge.net/mail/?group_id=92314}{\jabref{}-Mailingliste}.
+	\item Durchsuchen Sie das \href{http://sourceforge.net/mailarchive/forum.php?forum_name=jabref-users}{Archiv} der \jabref-Mailingliste.
+	\item Stellen Sie Ihre Frage in einem der Foren oder auf der \href{http://sourceforge.net/mail/?group_id=92314}{\jabref-Mailingliste}.
 \end{enumerate}
 
-\faq{L�uft \jabref{} unter freiem Java (Classpath, Kaffee GCJ etc.)?}{Am 13.~November~2006 hat Sun sein Java unter die GNU General Public License (Version~2) gestellt, so dass die Antwort ">Ja"< lautet. Ansonsten ist zu sagen, dass eine unserer Abh�ngigkeiten derzeit zu einem Absturz f�hrt, wenn mit einer anderen Java API als der von Sun gearbeitet wird. Das gilt f�r Version 0.92 von Classpath.}
+\faq{L�uft \jabref unter freiem Java (Classpath, Kaffee GCJ etc.)?}{Am 13.~November~2006 hat Sun sein Java unter die GNU General Public License (Version~2) gestellt, so dass die Antwort ">Ja"< lautet. Ansonsten ist zu sagen, dass eine unserer Abh�ngigkeiten derzeit zu einem Absturz f�hrt, wenn mit einer anderen Java API als der von Sun gearbeitet wird. Das gilt f�r Version 0.92 von Classpath.}
 
-\faq{\label{faq-linux}\jabref{} startet nicht unter Linux. Was kann ich tun?}{\jabref{} l�uft unter Linux, wenn Sie eine Java Runtime Environment (JRE) von Sun in der Version~1.4.2 oder einer neueren Version verwenden. Falls \jabref{} dennoch nicht starten sollte, k�nnen Sie folgende Fehlersuche durchf�hren:
+\faq{\label{faq-linux}\jabref startet nicht unter Linux. Was kann ich tun?}{\jabref l�uft unter Linux, wenn Sie eine Java Runtime Environment (JRE) von Sun in der Version~1.4.2 oder einer neueren Version verwenden. Falls \jabref dennoch nicht starten sollte, k�nnen Sie folgende Fehlersuche durchf�hren:
 Starten Sie \texttt{java -{-}version} von der Kommandozeile. Falls dabei kein Produkt von Sun Microsystems verwendet wird (sondern beispielsweise angezeigt wird, dass Sie GCJ VM verwenden), selbst wenn Sie die JRE von Sun installiert haben, m�ssen Sie Ihr Setup anpassen. Da das Vorgehen daf�r sehr von Ihrer Linux-Distribution abh�ngt, k�nnen wir keine Hinweise f�r jede m�gliche Konstellation geben.
 Unter Debian/Ubuntu k�nnen Sie die Einstellungen anpassen, indem Sie \texttt{sudo update-alternatives -{-}config java} aufrufen (dazu brauchen Sie admin-Rechte). In dem Dialog, der daraufhin erscheint, w�hlen Sie die Sun JDK oder JRE. Alternativ k�nnen Sie auch nach der Java-Programmdatei suchen und diese direkt ausf�hren. In Ubuntu findet man Java gew�hnlich unter \texttt{/usr\slash{}lib\slash{}jvm\slash{}java-1.5.0-sun\slash{}jre\slash{}bin\slash{}java}.
 Wenn Sie keine admin-Rechte auf dem Computer haben, k�nnen Sie die Sun JRE in ihrem Home-Verzeichnis installieren. Sie m�ssen dann darauf achten, dass Sie die richtige Programmdatei aufrufen. Wenn Sie die JRE z.\,B. in einen Ordner namens ">java"< in ihrem Home-Verzeichnis installiert haben, geben Sie \texttt{\texttildelow{}/java/jre/bin/java -jar JabRef-2.1.jar} (bzw. die entsprechende Versionsnummer) in der Kommandozeile ein.}
 
-\clearpage\faq{Ich arbeite unter Ubuntu und \jabref{} startet, wenn ich auf das Icon klicke, aber nicht von der Kommandozeile. Wo liegt das Problem?}{Sie haben mehrere Java Virtual Machines installiert und von der Kommandozeile wird die falsche gew�hlt. Schauen Sie unter Frage \ref{faq-linux} nach, wie Sie die Einstellungen �ndern k�nnen.}
+\clearpage\faq{Ich arbeite unter Ubuntu und \jabref startet, wenn ich auf das Icon klicke, aber nicht von der Kommandozeile. Wo liegt das Problem?}{Sie haben mehrere Java Virtual Machines installiert und von der Kommandozeile wird die falsche gew�hlt. Schauen Sie unter Frage \ref{faq-linux} nach, wie Sie die Einstellungen �ndern k�nnen.}
+
+\faq{Wie kann ich verhindern, dass \jabref beim Speichern der .bib"=Datei in bestimmten Feldern (wie \texttt{title}) Zeilenumbr�che einf�gt?}{�fnnen Sie \menu{Optionen \msep{} Einstellungen}. Im Bereich \menu{Allgemein} gibt es die Option \menu{Beim Speichern keinen Zeilenumbruch in den folgenden Feldern einf�gen}. Diese Option enth�lt eine Liste von Feldnamen. In Feldern, die Sie dieser Liste hinzuf�gen (abgetrennt mit einem Semikolon) wird beim Speichern kein Zeilenumbruch hinzugef�gt.}
+
+\faq{Mein Virenscanner sagt mir, dass \jabref ein Virus ist. Ist der Server gef�hrdet?}{Nein, aber der Windows"=Installer benutzt das \href{http://nsis.sourceforge.net/}{Nullsoft Scriptable Install System (NSIS)} in der Version~2.18 (seit \jabref~2.1), das ungl�cklicherweise Installer produziert, die von einigen Virenscannern als Virus eingesch�tzt werden. Wenn Sie mehr dar�ber erfahren wollen, sehen Sie sich die \href{http://forums.winamp.com/showthread.php?postid=1977648}{Diskussion im [...]
+
+Als Workaround und falls Sie Bedenken haben, den Installer zu benutzen, k�nnen Sie immer die plattformunabh�ngige jar"=Datei benutzen (siehe dazu Abschnitt ">\nameref{subsub:jar}"<).}
 
 \clearpage 
 \section{Entwicklung}
 \secttoc
 \bigskip
 
-\noindent \jabref{} ist ein \emph{Open Source} Projekt, das hei�t, dass jede(r)
+\noindent \jabref ist ein \emph{Open Source} Projekt, das hei�t, dass jede(r)
 dazu beitragen kann, das Programm zu verbessern und weiterzuentwickeln.
 Wenn Sie Anregungen, W�nsche oder Fragen haben, ist die erste Anlaufstelle
 die \href{http://sourceforge.net/projects/jabref/}{Projektseite bei \emph{Sourceforge}}.
 Dort gibt es Foren, in denen Sie Ihre Fragen stellen k�nnen, und eine
-Mailingliste rund um \jabref{}. Auch Ihre W�nsche \emph{(Feature
+Mailingliste rund um \jabref. Auch Ihre W�nsche \emph{(Feature
 Requests)} und Fehlermeldungen \emph{(Bug Reports)} k�nnen Sie dort
 loswerden. Um sich direkt als Entwickler einzubringen, wenden Sie
 sich an einen der beiden Maintainer (Morten O. Alver und Nizar N.
@@ -2710,7 +2769,7 @@ der dann f
 
 \subsection{Danksagung}
 
-Neben den Entwicklern, die die Hilfe-Seiten des Programms geschrieben haben, m�chte ich Thomas Fritz, Axel Junge und Tobias Wolf f�r ihre hilfreichen Tipps und Anmerkungen zum Handbuch danken.
+Neben den Entwicklern, die die Hilfe"=Seiten des Programms geschrieben haben, danke ich Robert Bitsche, Daniel F�rderer, Thomas Fritz, Axel Junge, Jan Suhr und Tobias Wolf f�r ihre hilfreichen Tipps und Anmerkungen zum Handbuch.
 
 Seit den Anf�ngen als \emph{BibKeeper} (von Morten O.~Alver) und \emph{JBibtexManager} (von Nizar N.~Batada) haben
 zahlreiche Personen dazu beigetragen, dass \jabrefversion{} zu dem
@@ -2718,25 +2777,61 @@ geworden ist, was es ist. Wer zum Entwicklerteam geh
 
 \subsection{Lizenz}
 
-\jabref{} ist frei verf�gbar unter den Bedingungen der \href{http://www.gnu.org/copyleft/gpl.html}{GNU General Public License}. Es gibt unterschiedliche Softwarepakete, die von \jabref{} genutzt werden. Wenn Sie sich �ber die Lizenzbestimmungen dieser Fremdsoftware informieren wollen, schauen Sie bitte unter \menu{Hilfe \msep{} �ber JabRef} nach.
+\jabref ist frei verf�gbar unter den Bedingungen der \href{http://www.gnu.org/copyleft/gpl.html}{GNU General Public License}. Es gibt unterschiedliche Softwarepakete, die von \jabref genutzt werden. Wenn Sie sich �ber die Lizenzbestimmungen dieser Fremdsoftware informieren wollen, schauen Sie bitte unter \menu{Hilfe \msep{} �ber JabRef} nach.
 
 \appendix
 \newpage
+\nocite{*}
+\hypertarget{bibliography}{}
 \bibliographystyle{jurabib}
 \bibliography{JabRef-UserManual_de}
 
 
-
 \newpage
 \addsec{Versionsgeschichte}
 
 \label{RevisionHistory}
 
-%\begin{revhist}{\versiondate}%Datum}
+%\begin{revhist}{\versiondate}%endg�ltiges Datum}
 %\item �nderung
 %\end{revhist}
 
-\begin{revhist}{\versiondate}%Datum}
+\begin{revhist}{\versiondate}%endg�ltiges Datum}
+\item Kleine �nderungen
+\end{revhist}
+
+\begin{revhist}{8.\,6.\,2007}
+\item Abschnitt ">Import und Export"< in zwei Abschnitte unterteilt
+\item Abschnitt \nameref{sec:faq} erg�nzt
+\item Abschnitte \nameref{EntryEditorHelp} und \nameref{subsec:System-Voraussetzungen} angepasst
+\item Fehler im Abschnitt \nameref{PreviewHelp} korrigiert
+\item Versionsnummer angepasst
+\item Beschreibung der Felder ">doi"< und ">eid"< hinzugef�gt
+\item Fehler im Link zum Mail-Archiv beseitigt
+\item Einleitung leicht erg�nzt
+\item Generelle �berarbeitung des Dokuments
+\end{revhist}
+
+\begin{revhist}{18.\,4.\,2007}
+\item Abschnitte \nameref{LabelPatterns}, \nameref{par:Feldformatierer} und \nameref{StringEditorHelp} aktualisiert
+\item Fehler in Abschnitt \nameref{subsec:Starten-Kommandozeile} entfernt
+\item \jabref-Logo ge�ndert
+\item Ein paar Kleinigkeiten
+\end{revhist}
+
+\begin{revhist}{20.\,3.\,2007}
+\item Abschnitt \nameref{subsubsec:Hinzufuegen-Exportfilter} angepasst
+\item Kleinere �nderungen
+\end{revhist}
+
+\begin{revhist}{1.\,2.\,2007}
+\item Abschnitte \nameref{EndnoteFilters}, \nameref{subsubsec:endnote-jabref}, \nameref{subsec:about} und \nameref{sec:faq} �berarbeitet
+\item Literaturverzeichnis um Eintrag von \cite{btxfaq} erg�nzt
+\item Und noch ein paar kleine �nderungen
+\end{revhist}
+
+\begin{revhist}{19.\,1.\,2007}
+\item Abschnitt ">\nameref{Eintragstypen}"< hinzugef�gt
 \item Grafik auf Titelseite ausgetauscht
 \item Ein paar kleinere �nderungen
 \end{revhist}
@@ -2769,7 +2864,7 @@ geworden ist, was es ist. Wer zum Entwicklerteam geh
 \end{revhist}
 
 \begin{revhist}{30.\,1.\,2006}
-\item Abschnitt >>\jabref{}-Bibliographien in OpenOffice.org benutzen<< aktualisiert
+\item Abschnitt >>\jabref-Bibliographien in OpenOffice.org benutzen<< aktualisiert
 \item Abschnitt zur Erzeugung der \bibtex{}-Keys aktualisiert
 \item Neues Kapitel (>>Externe Importfilter<<), geschrieben von Andreas Rudert
 \item Einige kleinere �nderungen
@@ -2787,4 +2882,4 @@ auf dem unver
 und den Hilfeseiten des Programms
 \end{revhist}
 
-\end{document}
\ No newline at end of file
+\end{document}
diff --git a/src/help/de/LabelPatterns.html b/src/help/de/LabelPatterns.html
index 8ac7418..297a13f 100644
--- a/src/help/de/LabelPatterns.html
+++ b/src/help/de/LabelPatterns.html
@@ -35,6 +35,7 @@ Spezielle Feldmarken:
 <li><b>[<code>authN_M</code>]</b>: Die ersten N Buchstaben des Nachnamens des M. Autors.<BR>
 <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><b>[<code>auth.etal</code>]</b>: Der Nachname des ersten Autors und der Nachname des zweiten Autors bei zwei Autoren bzw. ".etal" bei mehr als zwei Autoren.
 <li><b>[<code>authshort</code>]</b>: Der Nachname bei einem Autor; der erste Buchstabe der Nachnamen von bis zu drei Autoren, falls mehr als ein Autor vorhanden ist. Ein Plus (+) wird angehängt, falls es mehr als drei Autoren gibt.<BR></ul>
 <b>Anmerkung:</b>Falls es keinen Autor gibt (z.B. bei einem Buch mit Herausgeber), benutzen die genannten [auth...]-Feldmarken den oder die Herausgeber, die im editor-Feld angegeben wurden. Also werden die Herausgeber eines Buches ohne Autor für die Label-Erstellung wie Autoren behandelt. Falls Sie dieses Verhalten nicht wünschen und die Feldmarke stattdessen bei einem leeren author-Feld zu nichts expandieren soll, müssen Sie <b>pureauth</b> statt <b>auth</b> verwenden, z. [...]
 <ul>
diff --git a/src/help/de/StringEditorHelp.html b/src/help/de/StringEditorHelp.html
index 6f9d796..38db98a 100644
--- a/src/help/de/StringEditorHelp.html
+++ b/src/help/de/StringEditorHelp.html
@@ -23,13 +23,14 @@ exakten Namen der Zeitschrift einzutragen, genügt die Zeichenfolge <code>#J
 ausgegeben wird.
 
 <P>
-Der Verweis auf einen String kann an jeder Stelle in einem beliebigen Feld erscheinen, wobei
+Der Verweis auf einen String kann an jeder Stelle eines Feldes erscheinen, wobei
 der Name des Strings immer von einem Paar '#'-Zeichen eingeschlossen werden muss. Diese Syntax
 gilt nur für JabRef und weicht ein wenig von der <em>BibTeX</em>-Syntax ab, die erzeugt wird,
-wenn Sie Ihre Datei speichern.
+wenn Sie Ihre Datei speichern. Strings können für alle Standard-BibTeX-Felder verwendet werden.
+Unter <b>Optionen -> Einstellungen -> Allgemein</b> können Sie im Bereich <b>Datei</b> festlegen, ob Strings auch in Nicht-Standard-Feldern benutzt werden dürfen. In diesem Fall können Sie Felder bestimmen, die von der Auflösung der Strings ausgenommen werden; hierbei wird empfohlen, das Feld 'url' und andere Felder anzugeben, die das Zeichen '#' enthalten können und die von BibTeX/LaTeX abgearbeitet werden können.
 
 <P>
-In derselben Weise kann man auch im Inhalt eines Strings auf einen anderen String verweisen, 
+In derselben Weise kann man auch im Inhalt eines Strings auf einen anderen String verweisen,
 vorausgesetzt, dass der String, auf den verwiesen wird, bereits <em>vorher</em> definiert ist.
 
 <p>Während die Reihenfolge der Strings in Ihrer BibTeX-Datei in einigen Fällen wichtig ist,
diff --git a/src/help/fr/About.html b/src/help/fr/About.html
index 7d12cb2..da39854 100644
--- a/src/help/fr/About.html
+++ b/src/help/fr/About.html
@@ -20,6 +20,7 @@ Nizar N. Batada,
 Michel Baylac,
 Guillaume Gardey,
 Cyrille d'Haese,
+S M Mahbub Murshed,
 Raik Nagel,
 Christopher Oezbek,
 Ellen Reitmayr,
@@ -35,13 +36,14 @@ Jörg Zieren
 
 <H2>Contributions de :</H2>
 Michael Beckmann,
-Oliver B�ckmann,
+Oliver B�ckmann,
 Kolja Brix,
 Frédéric Darboux,
 Fabrice Dessaint,
 Nathan Dunn,
 Brian Van Essen,
 Alexis Gallagher,
+David Gleich,
 Sascha Hunold,
 Bernd Kalbfuss,
 Martin Kähmer,
@@ -50,7 +52,9 @@ Krzysztof A. Kościuszkiewicz,
 Christian Kopf,
 Jeffrey Kuhn,
 Alex Montgomery,
+S. M. Mahbub Murshed,
 Ambrogio Oliva,
+Stephan Rave,
 John Relph,
 Hannes Restel,
 Moritz Ringler,
@@ -92,15 +96,15 @@ Pour la présentation de la table et le filtrage, JabRef utilise la biblio
 JabRef utilise aussi la bibliothèque de threading Spin 1.3.1, qui est distribuée selon les termes de la Lesser GNU Public License.
 
 <P>
-Certains composants de l'interface graphique de la biblioth�que Microba sont utilis�s. Elle est distribu�e sous une license de type BSD. Voir <code>http://sourceforge.net/projects/microba/</code> pour plus d'informations.
+Certains composants de l'interface graphique de la biblioth�que Microba sont utilis�s. Elle est distribu�e sous une license de type BSD. Voir <code>http://sourceforge.net/projects/microba/</code> pour plus d'informations.
 
 <P>
-La majorit� des ic�nes proviennent de l'ensemble d'ic�nes Crystal Clear par Everaldo
-(<code>http://www.everaldo.com</code>), qui est distribu�e sous les termes de la
+La majorit� des ic�nes proviennent de l'ensemble d'ic�nes Crystal Clear par Everaldo
+(<code>http://www.everaldo.com</code>), qui est distribu�e sous les termes de la
 Lesser General Public License.
 
 <P>
-JabRef utilise les bibliothèques JempBox et PDFBox pour gérer manipuler les PDF, les deux étant 
+JabRef utilise les bibliothèques JempBox et PDFBox pour gérer manipuler les PDF, les deux étant
 ées sous une licence de style BSD.
 
 </CENTER>
diff --git a/src/help/fr/BibtexHelp.html b/src/help/fr/BibtexHelp.html
index cfa527e..73eaed0 100644
--- a/src/help/fr/BibtexHelp.html
+++ b/src/help/fr/BibtexHelp.html
@@ -242,6 +242,16 @@ des informations. Voici une liste de quelque uns des champs les plus communs&nbs
     <br>
 
   </li>
+
+  <li><strong>doi<br>
+    </strong>Le Digital Object Identifier ("identifiant d'objet num�rique") est l'identifiant permanent donn� � un document num�rique.<br>
+    <br>
+
+  </li>
+  <li><strong>eid<br>
+    </strong>L'Electronic IDentifier ("identifiant �lectronique") est utilis� par les journaux �lectroniques qui ont aussi une version papier. Ce num�ro remplace le nombre de pages et est utilis� pour trouver un article dans un volume imprim�. Il est parfois aussi appel� <em>citation number</em>.<br>
+    <br>
+
   <li><strong><span style="font-weight: normal; font-style: italic;">contents*</span><br>
     </strong>La table des mati�res<br>
     <br>
diff --git a/src/help/fr/CustomExports.html b/src/help/fr/CustomExports.html
index 68ae7a9..24f928f 100644
--- a/src/help/fr/CustomExports.html
+++ b/src/help/fr/CustomExports.html
@@ -12,9 +12,10 @@ JabRef vous permet de définir et d'utiliser vos propres filtres d'exporta
 <h2>Ajout d'un filtre d'exportation personnalisé </h2>
 
 <p>
-La seule obligation pour avoir un filtre d'exportation valide est l'existence d'un fichier avec l'extension <b>.layout</b>. Pour ajouter un nouveau filtre d'exportation, on utilise le menu <b>Options -> Gérer les exportations personnalisées</b>, et on clique sur <b>Ajouter nouvelle</b>. Une nouvelle boite de dialogue apparaît et vous permet de spécifier un nom du nouveau filtre d'exportation (ce nom apparaîtra dans le menu <b>Fichier -> Exportation person [...]
+La seule obligation pour avoir un filtre d'exportation valide est l'existence d'un fichier avec l'extension <b>.layout</b>. Pour ajouter un nouveau filtre d'exportation, on utilise le menu <b>Options -> Gérer les exportations personnalisées</b>, et on clique sur <b>Ajouter nouvelle</b>. Une nouvelle boite de dialogue apparaît et vous permet de spécifier le nom du nouveau filtre d'exportation (ce nom apparaîtra ensuite comme l'un des choix du menu d&eacute [...]
 </p>
 
+
 <h2>Création d'un filtre d'exportation</h2>
 
 <p>
@@ -117,11 +118,14 @@ JabRef fournit les formateurs suivants, certains d'entre eux dépendant d'
 <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><code>AuthorAndsReplacer</code> : remplace "and" par ";" entre les premiers noms et par "&" entre les deux derniers.
 <li><code>AuthorAndsCommaReplacer</code> : remplace "and" entre les noms par une virgule (",") et "&" entre les deux derniers.
-<li><code>AuthorOrgSci</code> : premier auteur selon "nom, pr�nom" et tous les autres selon "pr�nom nom". Les pr�noms sont abr�g�s.
+<li><code>AuthorOrgSci</code> : premier auteur selon "nom, pr�nom" et tous les autres selon "prénom nom". Les pr�noms sont abr�g�s.
+<li><code>AuthorAbbreviator</code> : A documenter.
+<li><code>AuthorNatBib</code> : Formats des noms d'auteurs dans le style NatBin, avec les noms propres séparés par "and" s'il y a deux auteurs, ou le premier nom suivi de "et al." s'il y en a plus de deux.
 <li><code>FormatPagesForHTML</code> : remplace "--" par "-".
   <li><code>FormatPagesForXML</code> : remplace "--" par un tiret XML.
 <li><code>RemoveBrackets</code> : supprime toutes les accolades "{" ou "}".
 <li><code>RemoveLatexCommands</code> : supprime toutes les commandes LaTeX comme <code>\em</code>, <code>\textbf</code>, etc. Lorsqu'il est utilisé avec <code>HTMLChars</code> ou <code>XMLChars</code>, ce formateur doit être appelé en dernier.
+<li><code>RemoveTilde</code> : remplace le caractère tilde (utilisé dans LaTeX comme un espace ins�cable) par un espace normal. Utile en combinaison avec NameFormatter comme discuté dans la prochaine section.
 <li><code>ToLowerCase</code> : bascule tous les caractères en minuscules.
 </ul>
 
diff --git a/src/help/fr/EndNoteFilters.html b/src/help/fr/EndNoteFilters.html
index 5d59364..4747782 100644
--- a/src/help/fr/EndNoteFilters.html
+++ b/src/help/fr/EndNoteFilters.html
@@ -9,13 +9,13 @@
 
 JabRef peut exporter des bases de données dans des fichiers
 lisibles par EndNote. Pour utiliser cette fonction,
-choisissez <b>Outils -> EndNote</b>, et
-spécifiez le nom du fichier d'exportation.
+choisissez <b>Fichier -> Export</b>, choisissez le type de fichier
+<b>Endnote (*.txt)</b> et spécifiez le nom du fichier d'exportation.
 
 <h2>Importer dans EndNote</h2>
 
 Le fichier par défaut d'importation d'EndNote ne traite
-pas proprement les auteurs ou les éditeurs multiples. 
+pas proprement les auteurs ou les éditeurs multiples.
 Il y a deux façons de contourner cela :
 
 <ol>
@@ -25,13 +25,13 @@ Pour ouvrir le fichier dans EndNote, créez une nouvelle base de
 données ou ouvrez une ancienne base de données dans EndNote.
 Ensuite, sélectionnez <b>Fichier -> Importer</b>, cliquer
 sur <b>Choisir le filtre</b>, puis sélectionnez le fichier
-exporté et cliquez sur <b>Choisir</b>. Cliquez sur 
+exporté et cliquez sur <b>Choisir</b>. Cliquez sur
 <b>Options d'importation</b> et sélectionnez
 <b>Importation EndNote</b>.  Cliquez sur <b>Importer</b> pour
 démarrer l'importation. Après l'importation, sélectionnez
 <b>Edition-> Changer le texte</b>. Changez <b>N'importe
 quel champ</b> en <b>Author</b>. Entrez " and " à l'intérieur
-du champ de recherche (sans les guillemets). Entrez un 
+du champ de recherche (sans les guillemets). Entrez un
 retour chariot dans le champ Remplacer
 (option-return pour Mac OS X, ctrl-return pour Windows
 XP). Cliquez sur <b>Remplacer</b>. Répétez avec le champ
@@ -45,7 +45,7 @@ Pour ouvrir le fichier dans EndNote, créez une nouvelle base
 de données ou ouvrez une ancienne base de données dans EndNote.
 Ensuite, sélectionnez <b>Fichier -> Importer</b>, cliquez
 sur <b>Choisir le filtre</b>, puis sélectionnez le fichier
-exporté et cliquez sur <b>Choisir</b>. Cliquez sur 
+exporté et cliquez sur <b>Choisir</b>. Cliquez sur
 <b>Options d'importation</b> et sélectionnez
 <b>Filtre d'importation d'EndNote depuis
 JabRef</b> (s'il n'est pas présent, sélectionnez Autres
@@ -78,7 +78,7 @@ mastersthesis, phdthesis -> Thesis
 
 <h2>Auteurs collectifs</h2>
 
-Par défaut, le filtre d'exportation suppose que le contenu 
+Par défaut, le filtre d'exportation suppose que le contenu
 des champs author ou editor qui sont dans des accolades
 sont des auteurs collectifs et remplace les accolades par
 une virgule. Cependant, cela signifie que les champs qui
@@ -90,12 +90,12 @@ formatés.
 
 <h3>Installation du filtre d'importation d'EndNote depuis JabRef</h3>
 
-Le filtre par défaut d'importation d'EndNote ne traite pas 
+Le filtre par défaut d'importation d'EndNote ne traite pas
 correctement les auteurs. Le filtre d'importation d'EndNote depuis
-JabRef le fait proprement. De plus, ce filtre reconnaîtra 
+JabRef le fait proprement. De plus, ce filtre reconnaîtra
 un champ EndNotereftype qui supplantera la table des correspondances
 par défaut. Pour installer ce filtre, extraire les suppléments
-pour EndNote (<b>Fichier ->  Exporter - > Décompacter la série de
+pour EndNote (<b>Outils - > Décompacter la série de
 filtres EndNote</b>) et décompresser le fichier Zip qui est crée.
 Ensuite, suivez les instructions du fichier readme.txt.<p>
 
@@ -115,13 +115,14 @@ de nouvelles entrées dans EndNote. Pour modifier les
 Types de Références d'EndNote, extrayez les Suppléments
 EndNote et suivez les instructions du fichier readme.txt.<p>
 
-<h3>Exportation vers JabRef</h3> 
+<h3>Exportation vers JabRef</h3>
 
-EndNote est fourni avec un style d'exportation BibTeX. 
+EndNote est fourni avec un style d'exportation BibTeX.
 Cependant, il ne prend pas en compte tous les types et les champs BibTeX
 et ne prend pas non plus en compte les Champs Généraux additionnels supportés
 par JabRef (<i>pdf, owner, key,</i> etc.). Si vous souhaitez
 que ces champs soient pris en compte, extrayez les Suppléments EndNote
+(<b>Outils - > Décompacter la série de filtres EndNote</b>)
 et suivez les instructions du fichier readme.txt.<p>
 
 </HTML>
diff --git a/src/help/fr/LabelPatterns.html b/src/help/fr/LabelPatterns.html
index cef308b..3045023 100644
--- a/src/help/fr/LabelPatterns.html
+++ b/src/help/fr/LabelPatterns.html
@@ -32,6 +32,7 @@ Les marqueurs de champs spéciaux :
 <li><b>[<code>authN</code>]</b> : Les N premières lettres du premier auteur.<BR>
 <li><b>[<code>authN_M</code>]</b> : Les N premières lettres du nom des M premiers auteurs.<BR>
 <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><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><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>
 </ul>
 <b>Note :</b> S'il n'y a pas d'auteur (dans le cas d'un livre édité), alors tous les marqueurs <b><code>[auth...]</code></b> ci-dessus utiliseront l'éditeur(s) (s'il y en a) comme alternative. Ainsi l'éditeur(s) d'un livre sans auteur sera traité comme l'auteur(s) pour la génération des clefs.
@@ -51,7 +52,7 @@ Si vous ne désirez pas ce comportement, c'est à dire si vous voule
 <li><b>[<code>shortyear</code>]</b> : Les 2 derniers chiffres de l'année de publication<BR>
 <li><b>[<code>veryshorttitle</code>]</b> : Le premier mot du titre qui ne soit pas 'the', 'a', 'an'.<BR>
 </ul>
- 
+
  <p>
  Un nom de champs (ou celui de l'un des pseudo-champs vu au dessus) peut, de façon optionnelle, être suivi par un ou plusieurs modificateurs. Les modificateurs sont appliqués dans l'ordre
 où ils sont spécifiés.
@@ -64,17 +65,17 @@ où ils sont spécifiés.
 <P>
 Si vous n'avez pas défini de modèle de clef pour un type d'entrées donné, le <b>Modèle de clef par
 défaut</b> sera utilisé. Vous pouvez changer le modèle par défaut - son paramétrage se
-trouve au-dessus de la liste des types d'entrées dans la section 
+trouve au-dessus de la liste des types d'entrées dans la section
 <b>Paramétrage des clefs</b> de la fenêtre <b>Préférences</b>.
 
 <P>
 La clef utilisée par défaut est [auth][year]; elle produit des clefs du type <code>Yared1998</code>. Si la clef n'est pas unique dans la base de donnée, elle est modifiée par l'ajout d'une des lettres de a à z et ceci jusqu'a ce quelle soit unique. De cette façon, les étiquettes ressemblent à :
 </p>
 
-<blockquote> 
-<code>Yared1998</code><BR> 
+<blockquote>
+<code>Yared1998</code><BR>
 <code>Yared1998a</code><BR>
-<code>Yared1998b</code> 
+<code>Yared1998b</code>
 </blockquote>
 
 <h2>Remplacement d'expressions régulières</h2>
diff --git a/src/help/fr/StringEditorHelp.html b/src/help/fr/StringEditorHelp.html
index a2d9726..be3e715 100644
--- a/src/help/fr/StringEditorHelp.html
+++ b/src/help/fr/StringEditorHelp.html
@@ -8,8 +8,8 @@
 en appuyant sur un des icônes de la barre d'outils.
 Le raccourci clavier est CTRL-T.</em>
 <P>
-Les <em>chaînes</em> sont l'équivalent <em>BibTeX</em> des constantes dans 
-un langage de programmation. Chaque chaîne est définie par un <em>nom</em> 
+Les <em>chaînes</em> sont l'équivalent <em>BibTeX</em> des constantes dans
+un langage de programmation. Chaque chaîne est définie par un <em>nom</em>
 unique et un <em>contenu</em>. Dans votre base de données, ce nom peut être
 utilisé pour représenter ce contenu.
 
@@ -23,17 +23,20 @@ dans le champ <em>journal</em> de chaque entrée, assurant ainsi que le no
 du journal est écrit de la même façon à chaque fois.
 
 <P>
-Une telle chaîne peut apparaître n'importe où, dans n'importe quel
-champ, en incluant le nom de la chaîne entre une paire de caractères '#'.
-Cette syntaxe est spécifique à JabRef et diffère légèrement de la notation
-<em>BibTeX</em> qui est utilisée quand vous sauvez votre base de données.
+Une telle chaîne peut apparaître n'importe où dans un champ en incluant
+le nom de la chaîne entre une paire de caractères '#'. Cette syntaxe est spécifique
+à JabRef et diffère légèrement de la notation <em>BibTeX</em> qui
+est produite quand vous sauvez votre base de données. Les chaînes peuvent par défaut être utilisées pour tous
+les champs BibTeX standard, et dans <b>Options -> Préférences -> Général-> Fichier</b>, vous pouvez choisir
+d'autoriser les chaînes pour des champs non-standards. Dans ce dernier cas, vous pouvez spécifier une
+série de champs où les chaînes ne doivent pas être recherchées ; il est recommandé d'y inclure le champ 'url' ainsi que les autres champs qui pourraient contenir des caractères '#' que BibTeX/LaTeX est susceptible de traiter.
 
 <P>
 Une chaîne peut être incluse dans le contenu d'une autre chaîne (chaîne
 incluante), à la condition que la chaîne incluse soit définie
-<em>avant</em> la chaîne incluante. 
+<em>avant</em> la chaîne incluante.
 
-<p>Alors que l'ordre des chaînes dans votre fichier BibTeX est important dans certains cas, 
+<p>Alors que l'ordre des chaînes dans votre fichier BibTeX est important dans certains cas,
 vous n'avez pas à vous en préoccuper quand vous utilisez JabRef. Dans l'éditeur de chaînes,
 les chaînes seront affichées selon l'ordre alphabétique et stockée dans le même ordre,
 excepté quand BibTeX aura besoin d'un ordre différent.
diff --git a/src/images/JabRef-icon.png b/src/images/JabRef-icon.png
new file mode 100644
index 0000000..6c58641
Binary files /dev/null and b/src/images/JabRef-icon.png differ
diff --git a/src/images/crystal_16/Icons.properties b/src/images/crystal_16/Icons.properties
index f68961f..cd46611 100644
--- a/src/images/crystal_16/Icons.properties
+++ b/src/images/crystal_16/Icons.properties
@@ -7,6 +7,7 @@ open=fileopen.png
 loadSession=fileimport.png
 save=filesave.png
 saveAs=filesaveas.png
+saveAll=save_all.png
 copy=editcopy.png
 paste=editpaste.png
 cut=editcut.png
@@ -33,6 +34,7 @@ makeKey=wizard.png
 psSmall=ps.png
 pdfSmall=pdf-document.png
 openFile=pdf-document.png
+openExternalFile=ps.png
 preferences=advancedsettings.png
 openUrl=agt_internet.png
 www=agt_internet.png
@@ -47,6 +49,9 @@ toggleGroups=queue.png
 editPreamble=preamble.png
 editStrings=strings.png
 emacs=emacs.png
+vim=vim.png
+openoffice=openoffice.png
+picture=colors.png
 lyx=lyx2.png
 winedt=winedt.png
 required=reqIcon.png
@@ -67,3 +72,4 @@ close2=fileclose2.png
 integrityCheck=integrity.png
 groupIncluding=groupIncluding.png
 groupRefining=groupRefining.png
+unknown=help.png
\ No newline at end of file
diff --git a/src/images/crystal_16/colors.png b/src/images/crystal_16/colors.png
new file mode 100755
index 0000000..c0a67bb
Binary files /dev/null and b/src/images/crystal_16/colors.png differ
diff --git a/src/images/crystal_16/openoffice.png b/src/images/crystal_16/openoffice.png
new file mode 100755
index 0000000..d9cd900
Binary files /dev/null and b/src/images/crystal_16/openoffice.png differ
diff --git a/src/images/crystal_16/save_all.png b/src/images/crystal_16/save_all.png
new file mode 100755
index 0000000..772e3f6
Binary files /dev/null and b/src/images/crystal_16/save_all.png differ
diff --git a/src/images/crystal_16/vim.png b/src/images/crystal_16/vim.png
new file mode 100644
index 0000000..0368ee4
Binary files /dev/null and b/src/images/crystal_16/vim.png differ
diff --git a/src/images/splash.png b/src/images/splash.png
index 56addd6..fdba5ad 100644
Binary files a/src/images/splash.png and b/src/images/splash.png differ
diff --git a/src/java/net/sf/jabref/AdvancedTab.java b/src/java/net/sf/jabref/AdvancedTab.java
index 02279a5..5f43a2a 100644
--- a/src/java/net/sf/jabref/AdvancedTab.java
+++ b/src/java/net/sf/jabref/AdvancedTab.java
@@ -90,13 +90,13 @@ public class AdvancedTab extends JPanel implements PrefsTab {
     p.add(remoteHelp.getIconButton());
     builder.append(p);
 
-    if (Globals.ON_MAC) {
-        builder.nextLine();
-        builder.appendSeparator(Globals.lang("Mac file dialog"));
-        builder.nextLine();
-        builder.append(new JPanel());
-        builder.append(useNativeFileDialogOnMac);
-    }
+    //if (Globals.ON_MAC) {
+    builder.nextLine();
+    builder.appendSeparator(Globals.lang("Native file dialog"));
+    builder.nextLine();
+    builder.append(new JPanel());
+    builder.append(useNativeFileDialogOnMac);
+    //}
 
     pan = builder.getPanel();
     pan.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
diff --git a/src/java/net/sf/jabref/AuthorList.java b/src/java/net/sf/jabref/AuthorList.java
index fa5fd05..27d637b 100644
--- a/src/java/net/sf/jabref/AuthorList.java
+++ b/src/java/net/sf/jabref/AuthorList.java
@@ -114,7 +114,7 @@ import java.util.WeakHashMap;
  */
 public class AuthorList {
 
-	private Vector authors; // of Author
+	private Vector<Author> authors; 
 
 	// Variables for storing computed strings, so they only need be created
 	// once:
@@ -148,7 +148,7 @@ public class AuthorList {
 	// Tokens of one author name.
 	// Each token occupies TGL consecutive entries in this vector (as described
 	// below)
-	private Vector tokens;
+	private Vector<Object> tokens;
 
 	private static final int TOKEN_GROUP_LENGTH = 4; // number of entries for
 
@@ -189,24 +189,24 @@ public class AuthorList {
 	private static final int TOKEN_WORD = 3;
 
 	// Constant Hashtable containing names of TeX special characters
-	private static final java.util.Hashtable tex_names = new java.util.Hashtable();
+	private static final java.util.HashSet<String> tex_names = new java.util.HashSet<String>();
 	// and static constructor to initialize it
 	static {
-		tex_names.put("aa", "aa"); // only keys are important in this table
-		tex_names.put("ae", "ae");
-		tex_names.put("l", "l");
-		tex_names.put("o", "o");
-		tex_names.put("oe", "oe");
-		tex_names.put("i", "i");
-		tex_names.put("AA", "AA");
-		tex_names.put("AE", "AE");
-		tex_names.put("L", "L");
-		tex_names.put("O", "O");
-		tex_names.put("OE", "OE");
-		tex_names.put("j", "j");
+		tex_names.add("aa");
+		tex_names.add("ae");
+		tex_names.add("l");
+		tex_names.add("o");
+		tex_names.add("oe");
+		tex_names.add("i");
+		tex_names.add("AA");
+		tex_names.add("AE");
+		tex_names.add("L");
+		tex_names.add("O");
+		tex_names.add("OE");
+		tex_names.add("j");
 	}
 
-	static WeakHashMap authorCache = new WeakHashMap();
+	static WeakHashMap<String, AuthorList> authorCache = new WeakHashMap<String, AuthorList>();
 
 	/**
 	 * Parses the parameter strings and stores preformatted author information.
@@ -219,7 +219,7 @@ public class AuthorList {
 	 *            bibtex field.
 	 */
 	protected AuthorList(String bibtex_authors) {
-		authors = new Vector(5); // 5 seems to be reasonable initial size
+		authors = new Vector<Author>(5); // 5 seems to be reasonable initial size
 		orig = bibtex_authors; // initialization
 		token_start = 0;
 		token_end = 0; // of parser
@@ -333,7 +333,7 @@ public class AuthorList {
 	 */
 	private Author getAuthor() {
 
-		tokens = new Vector(); // initialization
+		tokens = new Vector<Object>(); // initialization
 		von_start = -1;
 		last_start = -1;
 		comma_first = -1;
@@ -542,7 +542,7 @@ public class AuthorList {
 			if (current_backslash >= 0 && !Character.isLetter(c)) {
 				if (!first_letter_is_found) {
 					String tex_cmd_name = orig.substring(current_backslash + 1, token_end);
-					if (tex_names.get(tex_cmd_name) != null) {
+					if (tex_names.contains(tex_cmd_name)) {
 						token_case = Character.isUpperCase(tex_cmd_name.charAt(0));
 						first_letter_is_found = true;
 					}
@@ -724,6 +724,10 @@ public class AuthorList {
 		authorsLastFirst[abbrInt] = res.toString();
 		return authorsLastFirst[abbrInt];
 	}
+	
+	public String toString(){
+		return getAuthorsLastFirstAnds(false);
+	}
 
 	/**
 	 * Returns the list of authors separated by "and"s with first names after
@@ -813,7 +817,21 @@ public class AuthorList {
 		authorsFirstFirst[abbrInt] = res.toString();
 		return authorsFirstFirst[abbrInt];
 	}
-
+	
+	/**
+	 * Compare this object with the given one. 
+	 * 
+	 * Will return true iff the other object is an Author and all fields are identical on a string comparison.
+	 */
+	public boolean equals(Object o) {
+		if (!(o instanceof AuthorList)) {
+			return false;
+		}
+		AuthorList a = (AuthorList) o;
+		
+		return this.authors.equals(a.authors);
+	}
+	
 	/**
 	 * Returns the list of authors separated by "and"s with first names before
 	 * last name; first names are not abbreviated.
@@ -885,6 +903,7 @@ public class AuthorList {
 	 * all other methods are provided for completeness.
 	 */
 	public static class Author {
+		
 		private final String first_part;
 
 		private final String first_abbr;
@@ -896,6 +915,23 @@ public class AuthorList {
 		private final String jr_part;
 
 		/**
+		 * Compare this object with the given one. 
+		 * 
+		 * Will return true iff the other object is an Author and all fields are identical on a string comparison.
+		 */
+		public boolean equals(Object o) {
+			if (!(o instanceof Author)) {
+				return false;
+			}
+			Author a = (Author) o;
+			return Util.equals(first_part, a.first_part)
+					&& Util.equals(first_abbr, a.first_abbr)
+					&& Util.equals(von_part, a.von_part)
+					&& Util.equals(last_part, a.last_part)
+					&& Util.equals(jr_part, a.jr_part);
+		}
+		
+		/**
 		 * Creates the Author object. If any part of the name is absent, <CODE>null</CODE>
 		 * must be passes; otherwise other methods may return erroneous results.
 		 * 
diff --git a/src/java/net/sf/jabref/BasePanel.java b/src/java/net/sf/jabref/BasePanel.java
index 76bfc09..99575d7 100644
--- a/src/java/net/sf/jabref/BasePanel.java
+++ b/src/java/net/sf/jabref/BasePanel.java
@@ -42,29 +42,18 @@ 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.io.StringWriter;
 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.Map;
 import java.util.Set;
 import java.util.Vector;
 
-import javax.swing.AbstractAction;
-import javax.swing.BorderFactory;
-import javax.swing.JFileChooser;
-import javax.swing.JList;
-import javax.swing.JOptionPane;
-import javax.swing.JPanel;
-import javax.swing.JSplitPane;
-import javax.swing.JTextArea;
-import javax.swing.ListSelectionModel;
-import javax.swing.SwingUtilities;
 import javax.swing.filechooser.FileFilter;
 import javax.swing.tree.TreePath;
 import javax.swing.undo.CannotRedoException;
@@ -74,14 +63,10 @@ import net.sf.jabref.collab.ChangeScanner;
 import net.sf.jabref.collab.FileUpdateListener;
 import net.sf.jabref.collab.FileUpdatePanel;
 import net.sf.jabref.export.*;
-import net.sf.jabref.external.AutoSetExternalFileForEntries;
-import net.sf.jabref.external.WriteXMPAction;
+import net.sf.jabref.external.*;
 import net.sf.jabref.groups.GroupSelector;
 import net.sf.jabref.groups.GroupTreeNode;
-import net.sf.jabref.gui.GlazedEntrySorter;
-import net.sf.jabref.gui.MainTable;
-import net.sf.jabref.gui.MainTableFormat;
-import net.sf.jabref.gui.MainTableSelectionListener;
+import net.sf.jabref.gui.*;
 import net.sf.jabref.imports.AppendDatabaseAction;
 import net.sf.jabref.imports.BibtexParser;
 import net.sf.jabref.journals.AbbreviateAction;
@@ -105,6 +90,8 @@ import com.jgoodies.forms.builder.DefaultFormBuilder;
 import com.jgoodies.forms.layout.FormLayout;
 import com.jgoodies.uif_lite.component.UIFSplitPane;
 
+import javax.swing.*;
+
 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;
@@ -136,7 +123,7 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
     GridBagLayout gbl = new GridBagLayout();
     GridBagConstraints con = new GridBagConstraints();
 
-    //Hashtable autoCompleters = new Hashtable();
+    HashMap autoCompleters = new HashMap();
     // Hashtable that holds as keys the names of the fields where
     // autocomplete is active, and references to the autocompleter objects.
 
@@ -199,7 +186,7 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
 
     private boolean suppressOutput = false;
 
-    private HashMap actions = new HashMap();
+    private HashMap<String, Object> actions = new HashMap<String, Object>();
     private SidePaneManager sidePaneManager;
 
     /**
@@ -235,9 +222,6 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
       }
       setupActions();
       setupMainPanel();
-      /*if (Globals.prefs.getBoolean("autoComplete")) {
-            db.setCompleters(autoCompleters);
-            }*/
 
       metaData.setFile(file);
 
@@ -289,7 +273,7 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
     }
 
     private void setupActions() {
-
+        
         actions.put("undo", undoAction);
         actions.put("redo", redoAction);
 
@@ -331,22 +315,49 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
         actions.put("test", new BaseAction () {
                 public void action() throws Throwable {
 
-                    ExportFormats.initAllExports();
-                    JFileChooser fc = ExportFormats.createExportFileChooser("/home/alver/Documents");
-                    fc.showSaveDialog(frame);
-                    File file = fc.getSelectedFile();
-                    if (file == null)
-                        return;
-                    FileFilter ff = fc.getFileFilter();
-                    if (ff instanceof ExportFileFilter) {
-                        ExportFormat format = ((ExportFileFilter)ff).getExportFormat();
-                        format.performExport(database, file.getPath(), "UTF8", null);
-                        // Make sure we remember which filter was used, to set the default
-                        // for next time:
-                        Globals.prefs.put("lastUsedExport", format.getConsoleName());
-
+                    ArrayList<BibtexEntry> entries = new ArrayList<BibtexEntry>();
+                    BibtexEntry[] sel = getSelectedEntries();
+                    for (int i = 0; i < sel.length; i++) {
+                        BibtexEntry bibtexEntry = sel[i];
+                        entries.add(bibtexEntry);
                     }
+                    final List<FileListEntry> links =
+                            AccessLinksForEntries.getExternalLinksForEntries(entries);
+                    for (Iterator<FileListEntry> iterator = links.iterator(); iterator.hasNext();) {
+                        FileListEntry entry = iterator.next();
+                        System.out.println("Link: "+entry.getLink());
+                    };
+
+                    final JProgressBar prog = new JProgressBar();
+                    prog.setIndeterminate(true);
+                    final JDialog diag = new JDialog(frame, false);
+                    diag.getContentPane().add(prog, BorderLayout.CENTER);
+                    diag.pack();
+                    diag.setLocationRelativeTo(frame);
+                    diag.setVisible(true);
+                    Thread t = new Thread(new Runnable() {
+                        public void run() {
+                            AccessLinksForEntries.copyExternalLinksToDirectory(links,
+                                new File("/home/alver/tmp"), metaData, prog, false,
+                                    new ActionListener() {
+                                        public void actionPerformed(ActionEvent actionEvent) {
+                                            diag.dispose();
+                                        }
+                                    });
+                        }
+                    });
+                    t.start();
+                    
+                    //CheckBoxFileChooser cb = new CheckBoxFileChooser(new File(""), "Selected only");
+                    //cb.showSaveDialog(frame);
+
+                    //ExternalFileTypeEditor efte = new ExternalFileTypeEditor(frame);
+                    //efte.setVisible(true);
 
+                    /*NamedCompound ce = Util.upgradePdfPsToFile(database,
+                            new String[] {"pdf", "ps"});
+                    undoManager.addEdit(ce);
+                    markBaseChanged();*/
                 }
             });
 
@@ -419,28 +430,9 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
                 try {
                     // If the option is set, autogenerate keys for all entries that are
                     // lacking keys, before saving:
-                    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());
-                            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)));
-                                any = true;
-                            }
-                        }
-                        // Store undo information, if any:
-                        if (any) {
-                            ce.end();
-                            undoManager.addEdit(ce);
-                        }
-                    }
-                    // Done with autosetting keys. Now save the database:
-
+                    autoGenerateKeysBeforeSaving();
+                    
+                    // Now save the database:
                     success = saveDatabase(getFile(), false, encoding);
 
                     //Util.pr("Testing resolve string... BasePanel line 237");
@@ -470,38 +462,65 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
             }
         });
 
-        actions.put("saveAs", new BaseAction () {
-                public void action() throws Throwable {
-
-                  String chosenFile = Globals.getNewFile(frame, new File(Globals.prefs.get("workingDirectory")), ".bib",
-                                                         JFileChooser.SAVE_DIALOG, false);
-
-                  if (chosenFile != null) {
-                    metaData.setFile(new File(chosenFile));
-                    if (!metaData.getFile().exists() ||
-                        (JOptionPane.showConfirmDialog
-                         (frame, "'"+metaData.getFile().getName()+"' "+Globals.lang("exists. Overwrite file?"),
-                          Globals.lang("Save database"), JOptionPane.OK_CANCEL_OPTION)
-                         == JOptionPane.OK_OPTION)) {
-
-                      runCommand("save");
-
-                      // Register so we get notifications about outside changes to the file.
-                      try {
-                        fileMonitorHandle = Globals.fileUpdateMonitor.addUpdateListener(BasePanel.this,getFile());
-                      } catch (IOException ex) {
-                        ex.printStackTrace();
-                      }
-
-                      Globals.prefs.put("workingDirectory", metaData.getFile().getParent());
-                      frame.getFileHistory().newFile(metaData.getFile().getPath());
-                    }
-                    else {
-                      metaData.setFile(null);
-                    }
-                   }
+        actions.put("saveAs", new BaseAction() {
+            public void action() throws Throwable {
+                
+                /*JPanel options = new JPanel();
+                DefaultFormBuilder builder = new DefaultFormBuilder(options, new FormLayout("left:pref", "pref, pref, pref"));
+                //options.setLayout(new GridLayout(2,1));
+                ButtonGroup bg = new ButtonGroup();
+                JRadioButton sAll = new JRadioButton("<html>All entries</html>");
+                JRadioButton sSel = new JRadioButton("<html>Selected<br>entries</html>");
+                sAll.setSelected(true);
+                bg.add(sAll);
+                bg.add(sSel);
+                builder.append(Globals.lang("Include")+":");
+                builder.append(sAll);
+                builder.append(sSel);
+                builder.appendGlueRow();
+                options.setBorder(BorderFactory.createEmptyBorder(2,2,2,2));*/
+                String chosenFile = Globals.getNewFile(frame, new File(Globals.prefs.get("workingDirectory")), ".bib",
+                            JFileChooser.SAVE_DIALOG, false, null);//options);
+                if (chosenFile == null)
+                    return; // cancelled
+                File f = new File(chosenFile);
+                // Check if the file already exists:
+                if (f.exists() && (JOptionPane.showConfirmDialog
+                                (frame, "'"+f.getName()+"' "+Globals.lang("exists. Overwrite file?"),
+                                Globals.lang("Save database"), JOptionPane.OK_CANCEL_OPTION)
+                                != JOptionPane.OK_OPTION)) {
+                    return; // cancelled
                 }
-            });
+                // Save:
+                //if (sAll.isSelected()) {
+                    //
+                    // Normal save
+                    //
+                    if (chosenFile != null) {
+                        metaData.setFile(f);
+                        Globals.prefs.put("workingDirectory", f.getParent());
+                        runCommand("save");
+                        // Register so we get notifications about outside changes to the file.
+                        try {
+                            fileMonitorHandle = Globals.fileUpdateMonitor.addUpdateListener(BasePanel.this,getFile());
+                        } catch (IOException ex) {
+                            ex.printStackTrace();
+                        }
+                        frame.getFileHistory().newFile(metaData.getFile().getPath());
+                    }
+                /*}
+                else {
+                    //
+                    // Save selected entries
+                    //
+                    File expFile = new File(chosenFile);
+                    saveDatabase(expFile, true, encoding);
+                    frame.getFileHistory().newFile(expFile.getPath());
+                    frame.output(Globals.lang("Saved selected to")+" '"
+                                 +expFile.getPath()+"'.");
+                } */
+            }
+        });
 
         actions.put("saveSelectedAs", new BaseAction () {
                 public void action() throws Throwable {
@@ -525,7 +544,7 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
                     }
                 }
             });
-
+    
         // The action for copying selected entries.
         actions.put("copy", new BaseAction() {
                 public void action() {
@@ -1016,74 +1035,102 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
 
           actions.put("mergeDatabase", new AppendDatabaseAction(frame, this));
 
-          
-        
-          
-          
-         actions.put("openFile", new BaseAction() {
-           public void action() {
-             (new Thread() {
-               public void run() {
-                 BibtexEntry[] bes = mainTable.getSelectedEntries();
-                 String field = "ps";
-                 if ( (bes != null) && (bes.length == 1)) {
-                   Object link = bes[0].getField("ps");
-                   if (bes[0].getField("pdf") != null) {
-                     link = bes[0].getField("pdf");
-                     field = "pdf";
-                   }
-                   String filepath = null;
-                   if (link != null) {
-                     filepath = link.toString();
-                   }
-                   else {
-
-                     // see if we can fall back to a filename based on the bibtex key
-                     String basefile;
-                     Object key = bes[0].getField(BibtexFields.KEY_FIELD);
-                     if (key != null) {
-                       basefile = key.toString();
-                        final String[] types = new String[] {"pdf", "ps"};
-                        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.endsWith(sep)) {
-                                dir = dir.substring(0, dir.length()-sep.length());
+
+        actions.put("openFile", new BaseAction() {
+            public void action() {
+                (new Thread() {
+                    public void run() {
+                        BibtexEntry[] bes = mainTable.getSelectedEntries();
+                        String field = "ps";
+                        if ((bes != null) && (bes.length == 1)) {
+                            Object link = bes[0].getField("ps");
+                            if (bes[0].getField("pdf") != null) {
+                                link = bes[0].getField("pdf");
+                                field = "pdf";
+                            }
+                            String filepath = null;
+                            if (link != null) {
+                                filepath = link.toString();
+                            } else {
+
+                                // see if we can fall back to a filename based on the bibtex key
+                                String basefile;
+                                Object key = bes[0].getField(BibtexFields.KEY_FIELD);
+                                if (key != null) {
+                                    basefile = key.toString();
+                                    final String[] types = new String[]{"pdf", "ps"};
+                                    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());
+                                            }
+                                        } else
+                                            dir = "";
+                                        String found = Util.findPdf(basefile, types[i], dir, new OpenFileFilter("." + types[i]));
+                                        if (found != null) {
+                                            filepath = dir + sep + found;
+                                            break;
+                                        }
+                                    }
+                                }
+                            }
+
+
+                            if (filepath != null) {
+                                //output(Globals.lang("Calling external viewer..."));
+                                try {
+                                    Util.openExternalViewer(metaData(), filepath, field);
+                                    output(Globals.lang("External viewer called") + ".");
+                                }
+                                catch (IOException ex) {
+                                    output(Globals.lang("Error") + ": " + ex.getMessage());
+                                }
+                            } else
+                                output(Globals.lang(
+                                        "No pdf or ps defined, and no file matching Bibtex key found") +
+                                        ".");
+                        } else
+                            output(Globals.lang("No entries or multiple entries selected."));
+                    }
+                }).start();
+            }
+        });
+
+        actions.put("openExternalFile", new BaseAction() {
+            public void action() {
+                (new Thread() {
+                    public void run() {
+                        BibtexEntry[] bes = mainTable.getSelectedEntries();
+                        String field = GUIGlobals.FILE_FIELD;
+                        if ((bes != null) && (bes.length == 1)) {
+                            Object link = bes[0].getField(field);
+                            if (link == null) {
+                                runCommand("openFile"); // Fall back on PDF/PS fields???
+                                return;
                             }
-                            String found = Util.findPdf(basefile, types[i], dir, new OpenFileFilter("."+types[i]));
-                            if (found != null) {
-                                filepath = dir+sep+found;
-                                break;
+                            FileListTableModel tableModel = new FileListTableModel();
+                            tableModel.setContent((String)link);
+                            if (tableModel.getRowCount() == 0) {
+                                runCommand("openFile"); // Fall back on PDF/PS fields???
+                                return;
                             }
-                        }
-                     }
-                   }
-
-
-                   if (filepath != null) {
-                     //output(Globals.lang("Calling external viewer..."));
-                     try {
-                       Util.openExternalViewer(metaData(), filepath, field);
-                       output(Globals.lang("External viewer called") + ".");
-                     }
-                     catch (IOException ex) {
-                       output(Globals.lang("Error") + ": " + ex.getMessage());
-                     }
-                   }
-                   else
-                     output(Globals.lang(
-                         "No pdf or ps defined, and no file matching Bibtex key found") +
-                            ".");
-                 }
-                 else
-                   output(Globals.lang("No entries or multiple entries selected."));
-               }
-             }).start();
-           }
-         });
+                            FileListEntry flEntry = tableModel.getEntry(0);
+                            ExternalFileMenuItem item = new ExternalFileMenuItem
+                                (frame(), bes[0], "",
+                                flEntry.getLink(), flEntry.getType().getIcon(),
+                                metaData(), flEntry.getType());
+                            item.actionPerformed(null);
+                        } else
+                            output(Globals.lang("No entries or multiple entries selected."));
+                    }
+                }).start();
+            }
+        });
 
 
-              actions.put("openUrl", new BaseAction() {
+        actions.put("openUrl", new BaseAction() {
                       public void action() {
                           BibtexEntry[] bes = mainTable.getSelectedEntries();
                           String field = "doi";
@@ -1144,12 +1191,12 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
                 }
               });
 
-              actions.put("strictDupliCheck", new BaseAction() {
+              /*actions.put("strictDupliCheck", new BaseAction() {
                 public void action() {
                   StrictDuplicateSearch ds = new StrictDuplicateSearch(BasePanel.this);
                   ds.start();
                 }
-              });
+              });*/
 
               actions.put("plainTextImport", new BaseAction() {
                 public void action()
@@ -1337,6 +1384,8 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
         actions.put("unabbreviate", new UnabbreviateAction(this));
         actions.put("autoSetPdf", new AutoSetExternalFileForEntries(this, "pdf"));
         actions.put("autoSetPs", new AutoSetExternalFileForEntries(this, "ps"));
+        actions.put("autoSetFile", new SynchronizeFileField(this));
+        actions.put("upgradeLinks", new UpgradeExternalLinks(this));
 
     }
 
@@ -1723,26 +1772,38 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
         setLayout(new BorderLayout());
         removeAll();
         add(splitPane, BorderLayout.CENTER);
-        //add(contentPane, BorderLayout.CENTER);
-
-        //add(sidePaneManager.getPanel(), BorderLayout.WEST);
-        //add(splitPane, BorderLayout.CENTER);
-
-    //setLayout(gbl);
-    //con.fill = GridBagConstraints.BOTH;
-    //con.weighty = 1;
-    //con.weightx = 0;
-    //gbl.setConstraints(sidePaneManager.getPanel(), con);
-    //con.weightx = 1;
-    //gbl.setConstraints(splitPane, con);
-        //mainPanel.setDividerLocation(GUIGlobals.SPLIT_PANE_DIVIDER_LOCATION);
-        //setDividerSize(GUIGlobals.SPLIT_PANE_DIVIDER_SIZE);
-        //setResizeWeight(0);
+
+        // Set up AutoCompleters for this panel:
+        if (Globals.prefs.getBoolean("autoComplete")) {
+            instantiateAutoCompleters();
+        }
+
         splitPane.revalidate();
         revalidate();
         repaint();
     }
 
+    public HashMap getAutoCompleters() {
+        return autoCompleters;
+    }
+    
+    public AutoCompleter getAutoCompleter(String fieldName) {
+        return (AutoCompleter)autoCompleters.get(fieldName);
+    }
+
+    private void instantiateAutoCompleters() {
+        autoCompleters.clear();
+        String[] completeFields = Globals.prefs.getStringArray("autoCompleteFields");
+        for (int i = 0; i < completeFields.length; i++) {
+            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());
+            Util.updateCompletersForEntry(autoCompleters, entry);
+        }
+    }
+
 
     /**
      * This method is called after a database has been parsed. The
@@ -2274,7 +2335,34 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
         } else return true;
 
     }
-
+    
+    /**
+     * If the relevant option is set, autogenerate keys for all entries that are
+     * lacking keys.
+     */
+    public void autoGenerateKeysBeforeSaving() {
+        if (Globals.prefs.getBoolean("generateKeysBeforeSaving")) {
+            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());
+                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)));
+                    any = true;
+                }
+            }
+            // Store undo information, if any:
+            if (any) {
+                ce.end();
+                undoManager.addEdit(ce);
+            }
+        }
+    }
+    
     /**
      * Activates or deactivates the entry preview, depending on the argument.
      * When deactivating, makes sure that any visible preview is hidden.
diff --git a/src/java/net/sf/jabref/BibtexDatabase.java b/src/java/net/sf/jabref/BibtexDatabase.java
index 61a621b..0503361 100644
--- a/src/java/net/sf/jabref/BibtexDatabase.java
+++ b/src/java/net/sf/jabref/BibtexDatabase.java
@@ -36,32 +36,47 @@ Modified for use in JabRef
 
 package net.sf.jabref;
 
-import java.beans.*;
-import java.util.*;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyVetoException;
+import java.beans.VetoableChangeListener;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.Vector;
 
 import javax.swing.JOptionPane;
 
-import net.sf.jabref.groups.GroupSelector;
-
-public class BibtexDatabase
-{
-    Map _entries = new Hashtable();
-    String _preamble = null;
-    HashMap _strings = new HashMap();
-    Vector _strings_ = new Vector();
-    Hashtable _autoCompleters = null;
-    Set changeListeners = new HashSet();
-    private BibtexDatabase ths = this;
-
-    private HashMap allKeys  = new HashMap();	// use a map instead of a set since i need to know how many of each key is inthere
-
-    /* Entries are stored in a HashMap with the ID as key.
-     * What happens if someone changes a BibtexEntry's ID
-     * after it has been added to this BibtexDatabase?
-     * The key of that entry would be the old ID, not the new one.
-     * Use a PropertyChangeListener to identify an ID change
-     * and update the Map.
-     */
+public class BibtexDatabase {
+    
+	Map<String, BibtexEntry> _entries = new Hashtable<String, BibtexEntry>();
+
+	String _preamble = null;
+
+	HashMap<String, BibtexString> _strings = new HashMap<String, BibtexString>();
+
+	Vector _strings_ = new Vector();
+
+	Set<DatabaseChangeListener> changeListeners = new HashSet<DatabaseChangeListener>();
+
+	/**
+	 * use a map instead of a set since i need to know how many of each key is
+	 * inthere
+	 */
+	private HashMap<String, Integer> allKeys = new HashMap<String, Integer>();
+
+    /*
+	 * Entries are stored in a HashMap with the ID as key. What happens if
+	 * someone changes a BibtexEntry's ID after it has been added to this
+	 * BibtexDatabase? The key of that entry would be the old ID, not the new
+	 * one. Use a PropertyChangeListener to identify an ID change and update the
+	 * Map.
+	 */
     private final VetoableChangeListener listener =
         new VetoableChangeListener()
         {
@@ -69,11 +84,11 @@ public class BibtexDatabase
                 throws PropertyVetoException
             {
                 if (pce.getPropertyName() == null)
-                    fireDatabaseChanged (new DatabaseChangeEvent(ths, DatabaseChangeEvent.CHANGING_ENTRY, (BibtexEntry)pce.getSource()));
+                    fireDatabaseChanged (new DatabaseChangeEvent(BibtexDatabase.this, DatabaseChangeEvent.CHANGING_ENTRY, (BibtexEntry)pce.getSource()));
                 else if ("id".equals(pce.getPropertyName()))
                 {
                     // locate the entry under its old key
-                    Object oldEntry =
+                    BibtexEntry oldEntry =
                         _entries.remove((String) pce.getOldValue());
 
                     if (oldEntry != pce.getSource())
@@ -82,13 +97,13 @@ public class BibtexDatabase
                         // The entry under the old key isn't
                         // the one that sent this event.
                         // Restore the old state.
-                        _entries.put(pce.getOldValue(), oldEntry);
+                        _entries.put((String)pce.getOldValue(), oldEntry);
                         throw new PropertyVetoException("Wrong old ID", pce);
                     }
 
                     if (_entries.get(pce.getNewValue()) != null)
                     {
-                        _entries.put(pce.getOldValue(), oldEntry);
+                        _entries.put((String)pce.getOldValue(), oldEntry);
                         throw new PropertyVetoException
                             ("New ID already in use, please choose another",
                             pce);
@@ -98,7 +113,7 @@ public class BibtexDatabase
                     _entries.put((String) pce.getNewValue(),
                         (BibtexEntry) pce.getSource());
                 } else {
-                    fireDatabaseChanged (new DatabaseChangeEvent(ths, DatabaseChangeEvent.CHANGED_ENTRY, (BibtexEntry)pce.getSource()));
+                    fireDatabaseChanged (new DatabaseChangeEvent(BibtexDatabase.this, DatabaseChangeEvent.CHANGED_ENTRY, (BibtexEntry)pce.getSource()));
                     //Util.pr(pce.getSource().toString()+"\n"+pce.getPropertyName()
                     //    +"\n"+pce.getNewValue());
                 }
@@ -146,7 +161,7 @@ public class BibtexDatabase
         return (BibtexEntry) _entries.get(id);
     }
 
-    public synchronized Collection getEntries() {
+    public synchronized Collection<BibtexEntry> getEntries() {
             return _entries.values();
     }
 
@@ -187,15 +202,15 @@ public class BibtexDatabase
     }
 
     public synchronized BibtexEntry[] getEntriesByKey(String key) {
-        Vector entries = new Vector();
-        BibtexEntry entry;
-        for (Iterator it = _entries.entrySet().iterator(); it.hasNext(); ) {
-            entry = (BibtexEntry)((Map.Entry)it.next()).getValue();
+        
+    	ArrayList<BibtexEntry> entries = new ArrayList<BibtexEntry>();
+        
+        for (BibtexEntry entry : _entries.values()){
             if (key.equals(entry.getCiteKey()))
                 entries.add(entry);
         }
-        BibtexEntry[] entryArray = new BibtexEntry[entries.size()];
-        return (BibtexEntry[]) entries.toArray(entryArray);
+        
+        return entries.toArray(new BibtexEntry[entries.size()]);
     }
 
     /**
@@ -214,16 +229,6 @@ public class BibtexDatabase
 
         entry.addPropertyChangeListener(listener);
 
-        // Possibly add a FieldChangeListener, which is there to add
-        // new words to the autocompleter's dictionary. In case the
-        // entry is non-empty (pasted), update completers.
-        /*if (_autoCompleters != null) {
-            entry.addPropertyChangeListener(new FieldChangeListener
-                                            (_autoCompleters, entry));
-            Util.updateCompletersForEntry(_autoCompleters,
-                                          entry);
-        }
-        */
         _entries.put(id, entry);
 
         fireDatabaseChanged(new DatabaseChangeEvent(this, DatabaseChangeEvent.ADDED_ENTRY, entry));
@@ -334,20 +339,79 @@ public class BibtexDatabase
     }
 
     /**
-     * Resolves any references to strings contained in this database,
+     * Resolves any references to strings contained in this field content,
      * if possible.
      */
     public String resolveForStrings(String content) {
-        return resolveContent(content, new HashSet());
+    	if (content == null){
+    		throw new IllegalArgumentException("Content for resolveForStrings must not be null.");
+    	}
+        return resolveContent(content, new HashSet<String>());
     }
-
+    
+    /**
+	 * Take the given collection of BibtexEntry and resolve any string
+	 * references.
+	 * 
+	 * @param entries
+	 *            A collection of BibtexEntries in which all strings of the form
+	 *            #xxx# will be resolved against the hash map of string
+	 *            references stored in the databasee.
+	 *            
+	 * @param inPlace If inPlace is true then the given BibtexEntries will be modified, if false then copies of the BibtexEntries are made before resolving the strings.
+	 * 
+	 * @return a list of bibtexentries, with all strings resolved. It is dependent on the value of inPlace whether copies are made or the given BibtexEntries are modified. 
+	 */
+    public List<BibtexEntry> resolveForStrings(Collection<BibtexEntry> entries, boolean inPlace){
+    	
+    	if (entries == null)
+    		throw new NullPointerException();
+    	
+    	List<BibtexEntry> results = new ArrayList<BibtexEntry>(entries.size());
+    	
+    	for (BibtexEntry entry : entries){
+    		results.add(this.resolveForStrings(entry, inPlace));
+    	}
+    	return results;
+    }
+    
     /**
+	 * Take the given BibtexEntry and resolve any string references.
+	 * 
+	 * @param entriy
+	 *            A BibtexEntry in which all strings of the form #xxx# will be
+	 *            resolved against the hash map of string references stored in
+	 *            the databasee.
+	 * 
+	 * @param inPlace
+	 *            If inPlace is true then the given BibtexEntry will be
+	 *            modified, if false then a copy is made using close made before
+	 *            resolving the strings.
+	 * 
+	 * @return a BibtexEntry with all string references resolved. It is
+	 *         dependent on the value of inPlace whether a copy is made or the
+	 *         given BibtexEntries is modified.
+	 */
+    public BibtexEntry resolveForStrings(BibtexEntry entry, boolean inPlace) {
+		
+    	if (!inPlace){
+    		entry = (BibtexEntry)entry.clone();
+    	}
+    	
+    	for (Object field : entry.getAllFields()){
+    		entry.setField(field.toString(), this.resolveForStrings(entry.getField(field.toString()).toString()));
+    	}
+    	
+    	return entry;
+	}
+
+	/**
     * If the label represents a string contained in this database, returns
     * that string's content. Resolves references to other strings, taking
     * care not to follow a circular reference pattern.
-    * If the string is undefined, returns the label itself.
+    * If the string is undefined, returns null.
     */
-    private String resolveString(String label, HashSet usedIds) {
+    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());
 
@@ -385,10 +449,10 @@ public class BibtexDatabase
             return (String)o;
         }
 
-        return label;
+        return null;
     }
 
-    private String resolveContent(String res, HashSet usedIds) {
+    private String resolveContent(String res, HashSet<String> usedIds) {
         //if (res.matches(".*#[-\\^\\:\\w]+#.*")) {
     if (res.matches(".*#[^#]+#.*")) {
             StringBuffer newRes = new StringBuffer();
@@ -405,10 +469,9 @@ public class BibtexDatabase
                     // now resolve that one.
                     String refLabel = res.substring(next+1, stringEnd);
                     String resolved = resolveString(refLabel, usedIds);
-                    if (refLabel.equals(resolved)) {
-                        // We got just the label in return, so this may not have
-                        // been intended as a string label, or it may be a label for
-                        // an undefined string. Therefore we prefer to display the #
+                    
+                    if (resolved == null) {
+                        // Could not resolve string. Display the #
                         // characters rather than removing them:
                         newRes.append(res.substring(next, stringEnd+1));
                     } else
@@ -498,6 +561,7 @@ public class BibtexDatabase
                         allKeys.put( key, new Integer(1));
                 return exists;
     }
+    
     //========================================================
     // reduce the number of keys by 1. if this number goes to zero then remove from the set
     // note: there is a good reason why we should not use a hashset but use hashmap instead
@@ -529,16 +593,42 @@ public class BibtexDatabase
         changeListeners.remove(l);
     }
 
-    /*
-    public void setCompleters(Hashtable autoCompleters) {
-        _autoCompleters = autoCompleters;
-
-        for (Iterator i=getKeySet().iterator(); i.hasNext();) {
-            BibtexEntry be = getEntryById((String)(i.next()));
-            be.addPropertyChangeListener(new FieldChangeListener
-                                         (autoCompleters, be));
-
-            Util.updateCompletersForEntry(autoCompleters, be);
-        }
-        }*/
+	/**
+	 * Returns the text stored in the given field of the given bibtex entry
+	 * which belongs to the given database.
+	 * 
+	 * If a database is given, this function will try to resolve any string
+	 * references in the field-value.
+	 * 
+	 * @param field
+	 *            The field to return the value of.
+	 * @param bibtex maybenull
+	 *            The bibtex entry which contains the field.
+	 * @param database maybenull
+	 *            The database of the bibtex entry.
+	 * @return The resolved field value or null if not found.
+	 */
+	public static String getResolvedField(String field, BibtexEntry bibtex,
+			BibtexDatabase database) {
+	
+		if (field.equals("bibtextype"))
+			return bibtex.getType().getName();
+	
+		return getText((String)bibtex.getField(field), database);
+	}
+
+	/**
+	 * Returns a text with references resolved according to an optionally given
+	 * database.
+	
+	 * @param toResolve maybenull The text to resolve.
+	 * @param database maybenull The database to use for resolving the text.
+	 * @return The resolved text or the original text if either the text or the database are null
+	 */
+	public static String getText(String toResolve, BibtexDatabase database) {
+		if (toResolve != null && database != null)
+			return database.resolveForStrings(toResolve);
+		
+		return toResolve;
+	}
 }
diff --git a/src/java/net/sf/jabref/BibtexEntry.java b/src/java/net/sf/jabref/BibtexEntry.java
index 3833e17..c0f89b0 100644
--- a/src/java/net/sf/jabref/BibtexEntry.java
+++ b/src/java/net/sf/jabref/BibtexEntry.java
@@ -228,10 +228,6 @@ public class BibtexEntry
                                                "' is reserved");
         }
 
-        // This mechanism is probably not really necessary.
-        //Object normalValue = FieldTypes.normalize(name, value);
-
-
         Object oldValue = _fields.get(name);
 
         try {
@@ -396,7 +392,6 @@ public class BibtexEntry
         return clone;
     }
 
-
     public String toString() {
         return getType().getName()+":"+getField(BibtexFields.KEY_FIELD);
     }
diff --git a/src/java/net/sf/jabref/BibtexFields.java b/src/java/net/sf/jabref/BibtexFields.java
index c226ab6..acfac4d 100644
--- a/src/java/net/sf/jabref/BibtexFields.java
+++ b/src/java/net/sf/jabref/BibtexFields.java
@@ -161,6 +161,12 @@ public class BibtexFields
     add( new BibtexSingleField( "keywords", false, GUIGlobals.SMALL_W  ) ) ;
     //FIELD_EXTRAS.put("keywords", "selector");
 
+
+    dummy = new BibtexSingleField(GUIGlobals.FILE_FIELD, false);
+    dummy.setEditorType(GUIGlobals.FILE_LIST_EDITOR);
+    add(dummy);
+
+
     add( new BibtexSingleField( "search", false, 75 ) ) ;
 
 
@@ -283,6 +289,16 @@ public class BibtexFields
     return null ;
   }
 
+
+  public static int getEditorType(String name) {
+    BibtexSingleField sField = getField( name ) ;
+    if (sField != null)
+    {
+      return sField.getEditorType();
+    }
+    return GUIGlobals.STANDARD_EDITOR;      
+  }
+
   public static double getFieldWeight( String name )
   {
     BibtexSingleField sField = getField( name ) ;
@@ -408,6 +424,8 @@ public class BibtexFields
     private int length = GUIGlobals.DEFAULT_FIELD_LENGTH ;
     private double weight = GUIGlobals.DEFAULT_FIELD_WEIGHT ;
 
+    private int editorType = GUIGlobals.STANDARD_EDITOR;
+
     // a alternative displayname, e.g. used for
     // "citeseercitationcount"="Popularity"
     private String alternativeDisplayName = null ;
@@ -600,6 +618,14 @@ public class BibtexFields
     {
       return extras ;
     }
+
+    public void setEditorType(int type) {
+        editorType = type;
+    }
+
+    public int getEditorType() {
+        return editorType;
+    }
     // -----------------------------------------------------------------------
 
     public void setWeight( double value )
diff --git a/src/java/net/sf/jabref/ContentSelectorDialog2.java b/src/java/net/sf/jabref/ContentSelectorDialog2.java
index 38d2c8f..06c1005 100644
--- a/src/java/net/sf/jabref/ContentSelectorDialog2.java
+++ b/src/java/net/sf/jabref/ContentSelectorDialog2.java
@@ -1,5 +1,8 @@
 package net.sf.jabref;
 
+import com.jgoodies.forms.builder.ButtonStackBuilder;
+import com.jgoodies.forms.builder.ButtonBarBuilder;
+
 import java.awt.*;
 import javax.swing.*;
 import javax.swing.border.*;
@@ -386,7 +389,7 @@ public class ContentSelectorDialog2 extends JDialog {
 	con.gridheight = 1;
 	con.fill = GridBagConstraints.NONE;
 	con.anchor = GridBagConstraints.WEST;
-	gbl.setConstraints(newField, con);
+    gbl.setConstraints(newField, con);
 	fieldPan.add(newField);
 	gbl.setConstraints(newWord, con);
 	wordPan.add(newWord);
@@ -405,13 +408,16 @@ public class ContentSelectorDialog2 extends JDialog {
 	wordEditPan.add(wordEditField);
 
 	// Add buttons:
-	buttonPan.add(help);
-	buttonPan.add(Box.createHorizontalStrut(10));
-	buttonPan.add(ok);
-	buttonPan.add(apply);
-	buttonPan.add(cancel);
-
-	// Add panels to dialog:
+        ButtonBarBuilder bsb = new ButtonBarBuilder(buttonPan);
+        bsb.addGlue();
+        bsb.addGridded(ok);
+	    bsb.addGridded(apply);
+        bsb.addGridded(cancel);
+        bsb.addRelatedGap();
+        bsb.addGridded(help);
+        bsb.addGlue();
+
+    // Add panels to dialog:
 	con.fill = GridBagConstraints.BOTH;
 	getContentPane().setLayout(gbl);
 	con.weightx = 1;
diff --git a/src/java/net/sf/jabref/DuplicateResolverDialog.java b/src/java/net/sf/jabref/DuplicateResolverDialog.java
index eba1961..e0cce17 100644
--- a/src/java/net/sf/jabref/DuplicateResolverDialog.java
+++ b/src/java/net/sf/jabref/DuplicateResolverDialog.java
@@ -26,13 +26,15 @@ public class DuplicateResolverDialog extends JDialog {
         KEEP_BOTH = 0,
         KEEP_UPPER = 1,
         KEEP_LOWER = 2,
+        AUTOREMOVE_EXACT = 3,
         BREAK      = 5,  // close
         IMPORT_AND_DELETE_OLD = 1,
         IMPORT_AND_KEEP_OLD = 0,
         DO_NOT_IMPORT = 2,
         DUPLICATE_SEARCH = 1,
         IMPORT_CHECK = 2,
-    INSPECTION = 3;
+        INSPECTION = 3,
+        DUPLICATE_SEARCH_WITH_EXACT = 4;
 
     final Dimension DIM = new Dimension(650, 600);
 
@@ -42,7 +44,8 @@ public class DuplicateResolverDialog extends JDialog {
     GridBagLayout gbl = new GridBagLayout();
     GridBagConstraints con = new GridBagConstraints();
     JButton first, second, both,
-        cancel = new JButton(Globals.lang("Cancel"));
+        cancel = new JButton(Globals.lang("Cancel")),
+        removeExact = null;
     JPanel options = new JPanel(),
         main = new JPanel(),
         source = new JPanel();
@@ -74,6 +77,12 @@ public class DuplicateResolverDialog extends JDialog {
               second = new JButton(Globals.lang("Remove entry from import"));
               both = new JButton(Globals.lang("Keep both"));
               break;
+          case DUPLICATE_SEARCH_WITH_EXACT:
+              first = new JButton(Globals.lang("Keep upper"));
+              second = new JButton(Globals.lang("Keep lower"));
+              both = new JButton(Globals.lang("Keep both"));
+              removeExact = new JButton(Globals.lang("Automatically remove exact duplicates"));
+              break;
           default:
               first = new JButton(Globals.lang("Import and remove old entry"));
                   second = new JButton(Globals.lang("Do not import entry"));
@@ -129,6 +138,8 @@ public class DuplicateResolverDialog extends JDialog {
     source.add(sp);
     tabbed.add(Globals.lang("Short form"), main);
     tabbed.add(Globals.lang("Complete record"), source);
+    if (removeExact != null)
+        options.add(removeExact);
     options.add(first);
     options.add(second);
     options.add(both);
@@ -161,6 +172,15 @@ public class DuplicateResolverDialog extends JDialog {
       }
     });
 
+    if (removeExact != null)
+        removeExact.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                status = AUTOREMOVE_EXACT;
+                block = false;
+                dispose();
+            }
+        });
+
     cancel.addActionListener(new ActionListener() {
       public void actionPerformed(ActionEvent e) {
         status = BREAK;
diff --git a/src/java/net/sf/jabref/DuplicateSearch.java b/src/java/net/sf/jabref/DuplicateSearch.java
index 4e6d918..d120179 100644
--- a/src/java/net/sf/jabref/DuplicateSearch.java
+++ b/src/java/net/sf/jabref/DuplicateSearch.java
@@ -33,23 +33,31 @@ 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 net.sf.jabref.undo.NamedCompound;
 import net.sf.jabref.undo.UndoableRemoveEntry;
-import java.util.Vector;
+import spin.Spin;
 
 public class DuplicateSearch extends Thread {
 
   BasePanel panel;
   BibtexEntry[] bes;
   final Vector duplicates = new Vector();
-
+  boolean autoRemoveExactDuplicates = false;
+  
   public DuplicateSearch(BasePanel bp) {
     panel = bp;
   }
 
 public void run() {
-  NamedCompound ce = null;
+  final NamedCompound ce = new NamedCompound(Globals.lang("duplicate removal"));
   int duplicateCounter = 0;
+  
+  autoRemoveExactDuplicates = false;
   panel.output(Globals.lang("Searching for duplicates..."));
   Object[] keys = panel.database.getKeySet().toArray();
   if ((keys == null) || (keys.length < 2))
@@ -79,8 +87,10 @@ public void run() {
   }
 */
 
+   final ArrayList toRemove = new ArrayList();
   while (!st.finished() || (current < duplicates.size()))
   {
+
     if (current >= duplicates.size() )
     {
       // wait until the search thread puts something into duplicates vector
@@ -95,57 +105,74 @@ public void run() {
       }
     } else  // duplicates found
     {
-      BibtexEntry[] be = ( BibtexEntry[] ) duplicates.get( current ) ;
-      current++ ;
-      if ( ( panel.database.getEntryById( be[0].getId() ) != null ) &&
-           ( panel.database.getEntryById( be[1].getId() ) != null ) )
-      {
 
-        drd = new DuplicateResolverDialog( panel.frame, be[0], be[1],
-                                           DuplicateResolverDialog.DUPLICATE_SEARCH) ;
-        drd.setVisible(true); // drd.show(); -> deprecated since 1.5
 
-        duplicateCounter++ ;
-        int answer = drd.getSelected() ;
-        if ( answer == DuplicateResolverDialog.KEEP_UPPER )
-        {
-          if ( ce == null ) ce = new NamedCompound(Globals.lang("duplicate removal")) ;
-          panel.database.removeEntry( be[1].getId() ) ;
-          panel.markBaseChanged() ;
-          ce.addEdit( new UndoableRemoveEntry( panel.database, be[1], panel ) ) ;
-        }
-        else if ( answer == DuplicateResolverDialog.KEEP_LOWER )
-        {
-          if ( ce == null ) ce = new NamedCompound(Globals.lang("duplicate removal")) ;
-          panel.database.removeEntry( be[0].getId() ) ;
-          panel.markBaseChanged() ;
-          ce.addEdit( new UndoableRemoveEntry( panel.database, be[0], panel ) ) ;
-        }
-        else if ( answer == DuplicateResolverDialog.BREAK )
-        {
-          st.setFinished() ; // thread killing
-          current = Integer.MAX_VALUE ;
-          duplicateCounter-- ; // correct counter
+        BibtexEntry[] be = (BibtexEntry[]) 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 (autoRemoveExactDuplicates) {
+                    toRemove.add(be[1]);
+                    duplicateCounter++;
+                    continue;
+                } else {
+                    askAboutExact = true;
+                }
+            }
+
+            DuplicateCallBack cb = new DuplicateCallBack(panel.frame, be[0], be[1],
+                    askAboutExact ? DuplicateResolverDialog.DUPLICATE_SEARCH_WITH_EXACT :
+                            DuplicateResolverDialog.DUPLICATE_SEARCH);
+            ((CallBack)(Spin.over(cb))).update();
+
+            duplicateCounter++;
+            int answer = cb.getSelected();
+            if ((answer == DuplicateResolverDialog.KEEP_UPPER)
+                    || (answer == DuplicateResolverDialog.AUTOREMOVE_EXACT)) {
+                toRemove.add(be[1]);
+                if (answer == DuplicateResolverDialog.AUTOREMOVE_EXACT)
+                    autoRemoveExactDuplicates = true; // Remember choice
+            } else if (answer == DuplicateResolverDialog.KEEP_LOWER) {
+                toRemove.add(be[0]);
+            } else if (answer == DuplicateResolverDialog.BREAK) {
+                st.setFinished(); // thread killing
+                current = Integer.MAX_VALUE;
+                duplicateCounter--; // correct counter
+            }
         }
-        drd.dispose();
-      }
     }
   }
 
   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();
+                    panel.database.removeEntry(entry.getId());
+                    ce.addEdit(new UndoableRemoveEntry(panel.database, entry, panel));
+                }
+                panel.markBaseChanged();
+            }
+            panel.output(Globals.lang("Duplicate pairs found") + ": " + duplicates.size()
+                       +" " +Globals.lang("pairs processed") +": " +dupliC );
+
+            if (ce != null)
+            {
+                ce.end();
+                panel.undoManager.addEdit(ce);
+            }
+
+        }
+
+    });
 
-  panel.output(Globals.lang("Duplicate pairs found") + ": " + duplicates.size()
-               +" " +Globals.lang("pairs processed") +": " +duplicateCounter );
 
-  if (ce != null)
-  {
-    ce.end();
-    //Util.pr("ox");
-    panel.undoManager.addEdit(ce);
-    //markBaseChanged();
-    //refreshTable();
-  }
 }
 
 
@@ -191,4 +218,31 @@ class SearcherThread extends Thread {
   }
 }
 
+    class DuplicateCallBack implements CallBack {
+        private int reply = -1;
+        DuplicateResolverDialog diag;
+        private JabRefFrame frame;
+        private BibtexEntry one;
+        private BibtexEntry two;
+        private int dialogType;
+
+        public DuplicateCallBack(JabRefFrame frame, BibtexEntry one, BibtexEntry two,
+                                 int dialogType) {
+
+            this.frame = frame;
+            this.one = one;
+            this.two = two;
+            this.dialogType = dialogType;
+        }
+        public int getSelected() {
+            return reply;
+        }
+        public void update() {
+            diag = new DuplicateResolverDialog(frame, one, two, dialogType);
+            diag.setVisible(true);
+            diag.dispose();
+            reply = diag.getSelected();
+        }
+    }
+
 }
diff --git a/src/java/net/sf/jabref/EntryEditor.java b/src/java/net/sf/jabref/EntryEditor.java
index 6f95038..a5f4d0e 100644
--- a/src/java/net/sf/jabref/EntryEditor.java
+++ b/src/java/net/sf/jabref/EntryEditor.java
@@ -46,6 +46,7 @@ import net.sf.jabref.undo.*;
 import net.sf.jabref.external.ExternalFilePanel;
 import net.sf.jabref.journals.JournalAbbreviations;
 import net.sf.jabref.gui.date.*;
+import net.sf.jabref.gui.AutoCompleter;
 import com.jgoodies.forms.builder.DefaultFormBuilder;
 import com.jgoodies.forms.layout.FormLayout;
 
@@ -57,1339 +58,1348 @@ import com.jgoodies.forms.layout.FormLayout;
  */
 public class EntryEditor extends JPanel implements VetoableChangeListener {
 
-	// A reference to the entry this object works on.
-	private BibtexEntry entry;
+    // A reference to the entry this object works on.
+    private BibtexEntry entry;
 
-	BibtexEntryType type;
+    BibtexEntryType type;
 
-	// The action concerned with closing the window.
-	CloseAction closeAction;
+    // The action concerned with closing the window.
+    CloseAction closeAction;
 
-	// The action that deletes the current entry, and closes the editor.
-	DeleteAction deleteAction = new DeleteAction();
+    // The action that deletes the current entry, and closes the editor.
+    DeleteAction deleteAction = new DeleteAction();
 
-	// The action concerned with copying the BibTeX key to the clipboard.
-	CopyKeyAction copyKeyAction;
+    // The action concerned with copying the BibTeX key to the clipboard.
+    CopyKeyAction copyKeyAction;
 
-	// The action concerned with copying the BibTeX key to the clipboard.
-	AbstractAction nextEntryAction = new NextEntryAction();
+    // The action concerned with copying the BibTeX key to the clipboard.
+    AbstractAction nextEntryAction = new NextEntryAction();
 
-	// Actions for switching to next/previous entry.
-	AbstractAction prevEntryAction = new PrevEntryAction();
+    // Actions for switching to next/previous entry.
+    AbstractAction prevEntryAction = new PrevEntryAction();
 
-	// The action concerned with storing a field value.
-	public StoreFieldAction storeFieldAction;
+    // The action concerned with storing a field value.
+    public StoreFieldAction storeFieldAction;
 
-	// The actions concerned with switching the panels.
-	SwitchLeftAction switchLeftAction = new SwitchLeftAction();
+    // The actions concerned with switching the panels.
+    SwitchLeftAction switchLeftAction = new SwitchLeftAction();
 
-	SwitchRightAction switchRightAction = new SwitchRightAction();
+    SwitchRightAction switchRightAction = new SwitchRightAction();
 
-	// The action which generates a bibtexkey for this entry.
-	GenerateKeyAction generateKeyAction;
+    // The action which generates a bibtexkey for this entry.
+    public GenerateKeyAction generateKeyAction;
 
-	SaveDatabaseAction saveDatabaseAction = new SaveDatabaseAction();
+    SaveDatabaseAction saveDatabaseAction = new SaveDatabaseAction();
 
-	JPanel mainPanel = new JPanel();
+    JPanel mainPanel = new JPanel();
 
-	JPanel srcPanel = new JPanel();
+    JPanel srcPanel = new JPanel();
 
-	EntryEditorTab genPan, optPan, reqPan, absPan;
+    EntryEditorTab genPan, optPan, reqPan, absPan;
 
-	JTextField bibtexKey;
+    JTextField bibtexKey;
 
-	FieldTextField tf;
+    FieldTextField tf;
 
-	JTextArea source;
+    JTextArea source;
 
-	JToolBar tlb;
+    JToolBar tlb;
 
-	JTabbedPane tabbed = new JTabbedPane(); // JTabbedPane.RIGHT);
+    JTabbedPane tabbed = new JTabbedPane(); // JTabbedPane.RIGHT);
 
-	JLabel lab;
+    JLabel lab;
 
-	TypeLabel typeLabel;
+    TypeLabel typeLabel;
 
-	JabRefFrame frame;
+    JabRefFrame frame;
 
-	BasePanel panel;
+    BasePanel panel;
 
-	EntryEditor ths = this;
+    EntryEditor ths = this;
 
-	HashSet contentSelectors = new HashSet();
+    HashSet contentSelectors = new HashSet();
 
-	Logger logger = Logger.getLogger(EntryEditor.class.getName());
+    Logger logger = Logger.getLogger(EntryEditor.class.getName());
 
-	boolean updateSource = true; // This can be set to false to stop the
-									// source
+    boolean updateSource = true; // This can be set to false to stop the
+                                    // source
 
-	List tabs = new ArrayList();
+    List tabs = new ArrayList();
 
-	// text area from gettin updated. This is used in cases where the source
-	// couldn't be parsed, and the user is given the option to edit it.
-	boolean lastSourceAccepted = true; // This indicates whether the last
+    // text area from gettin updated. This is used in cases where the source
+    // couldn't be parsed, and the user is given the option to edit it.
+    boolean lastSourceAccepted = true; // This indicates whether the last
 
-	// attempt
-	// at parsing the source was successful. It is used to determine whether the
-	// dialog should close; it should stay open if the user received an error
-	// message about the source, whatever he or she chose to do about it.
-	String lastSourceStringAccepted = null; // This is used to prevent double
+    // attempt
+    // at parsing the source was successful. It is used to determine whether the
+    // dialog should close; it should stay open if the user received an error
+    // message about the source, whatever he or she chose to do about it.
+    String lastSourceStringAccepted = null; // This is used to prevent double
 
-	// fields.
-	// These values can be used to calculate the preferred height for the form.
-	// reqW starts at 1 because it needs room for the bibtex key field.
-	private int sourceIndex = -1; // The index the source panel has in tabbed.
+    // fields.
+    // These values can be used to calculate the preferred height for the form.
+    // reqW starts at 1 because it needs room for the bibtex key field.
+    private int sourceIndex = -1; // The index the source panel has in tabbed.
 
-	JabRefPreferences prefs;
+    JabRefPreferences prefs;
 
-	HelpAction helpAction;
+    HelpAction helpAction;
 
-	UndoAction undoAction = new UndoAction();
+    UndoAction undoAction = new UndoAction();
 
-	RedoAction redoAction = new RedoAction();
+    RedoAction redoAction = new RedoAction();
 
-	TabListener tabListener = new TabListener();
+    TabListener tabListener = new TabListener();
 
-	public EntryEditor(JabRefFrame frame_, BasePanel panel_, BibtexEntry entry_) {
+    public EntryEditor(JabRefFrame frame_, BasePanel panel_, BibtexEntry entry_) {
 
-		frame = frame_;
-		panel = panel_;
-		entry = entry_;
-		prefs = Globals.prefs;
-		type = entry.getType();
+        frame = frame_;
+        panel = panel_;
+        entry = entry_;
+        prefs = Globals.prefs;
+        type = entry.getType();
 
-		entry.addPropertyChangeListener(this);
+        entry.addPropertyChangeListener(this);
 
-		helpAction = new HelpAction(frame.helpDiag, GUIGlobals.entryEditorHelp, "Help");
-		closeAction = new CloseAction();
-		copyKeyAction = new CopyKeyAction();
-		generateKeyAction = new GenerateKeyAction(frame);
-		storeFieldAction = new StoreFieldAction();
+        helpAction = new HelpAction(frame.helpDiag, GUIGlobals.entryEditorHelp, "Help");
+        closeAction = new CloseAction();
+        copyKeyAction = new CopyKeyAction();
+        generateKeyAction = new GenerateKeyAction(frame);
+        storeFieldAction = new StoreFieldAction();
 
-		BorderLayout bl = new BorderLayout();
-		setLayout(bl);
-		setupToolBar();
-		setupFieldPanels();
-		setupSourcePanel();
-		add(tabbed, BorderLayout.CENTER);
-		tabbed.addChangeListener(tabListener);
-		if (prefs.getBoolean("showSource") && prefs.getBoolean("defaultShowSource"))
-			tabbed.setSelectedIndex(sourceIndex);
+        BorderLayout bl = new BorderLayout();
+        setLayout(bl);
+        setupToolBar();
+        setupFieldPanels();
+        setupSourcePanel();
+        add(tabbed, BorderLayout.CENTER);
+        tabbed.addChangeListener(tabListener);
+        if (prefs.getBoolean("showSource") && prefs.getBoolean("defaultShowSource"))
+            tabbed.setSelectedIndex(sourceIndex);
 
-		updateAllFields();
-	}
+        updateAllFields();
+    }
+
+    private void setupFieldPanels() {
+        tabbed.removeAll();
+        tabs.clear();
+        String[] fields = entry.getRequiredFields();
+
+        List fieldList = null;
+        if (fields != null)
+            fieldList = java.util.Arrays.asList(fields);
+        reqPan = new EntryEditorTab(frame, panel, fieldList, this, true, Globals.lang("Required fields"));
+        tabbed.addTab(Globals.lang("Required fields"), GUIGlobals.getImage("required"), reqPan
+            .getPane(), Globals.lang("Show required fields"));
+        tabs.add(reqPan);
+
+        if ((entry.getOptionalFields() != null) && (entry.getOptionalFields().length >= 1)) {
+            optPan = new EntryEditorTab(frame, panel, java.util.Arrays.asList(entry.getOptionalFields()), this,
+                false, Globals.lang("Optional fields"));
+            tabbed.addTab(Globals.lang("Optional fields"), GUIGlobals.getImage("optional"), optPan
+                .getPane(), Globals.lang("Show optional fields"));
+            tabs.add(optPan);
+        }
+
+        EntryEditorTabList tabList = Globals.prefs.getEntryEditorTabList();
+        for (int i = 0; i < tabList.getTabCount(); i++) {
+            EntryEditorTab newTab = new EntryEditorTab(frame, panel, tabList.getTabFields(i), this, false,
+                tabList.getTabName(i));
+            tabbed.addTab(tabList.getTabName(i), GUIGlobals.getImage("general"), newTab.getPane());
+            tabs.add(newTab);
+        }
+
+        srcPanel.setName(Globals.lang("BibTeX source"));
+        if (Globals.prefs.getBoolean("showSource")) {
+            tabbed.addTab(Globals.lang("BibTeX source"), GUIGlobals.getImage("source"), srcPanel,
+                Globals.lang("Show/edit BibTeX source"));
+            tabs.add(srcPanel);
+        }
+        sourceIndex = tabs.size() - 1; // Set the sourceIndex variable.
+        srcPanel.setFocusCycleRoot(true);
+    }
+
+    public BibtexEntryType getType() {
+        return type;
+    }
+
+    public BibtexEntry getEntry() {
+        return entry;
+    }
+    
+    public BibtexDatabase getDatabase(){
+    	return panel.getDatabase();
+    }
 
-	private void setupFieldPanels() {
-		tabbed.removeAll();
-		tabs.clear();
-		String[] fields = entry.getRequiredFields();
+    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);
+
+        im.put(prefs.getKey("Close entry editor"), "close");
+        am.put("close", closeAction);
+        im.put(prefs.getKey("Entry editor, store field"), "store");
+        am.put("store", storeFieldAction);
+        im.put(prefs.getKey("Autogenerate BibTeX keys"), "generateKey");
+        am.put("generateKey", generateKeyAction);
+        /*
+         * im.put(prefs.getKey("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");
+        am.put("next", nextEntryAction);
+        im.put(prefs.getKey("Undo"), "undo");
+        am.put("undo", undoAction);
+        im.put(prefs.getKey("Redo"), "redo");
+        am.put("redo", redoAction);
+        im.put(prefs.getKey("Help"), "help");
+        am.put("help", helpAction);
+
+        tlb.setFloatable(false);
+        tlb.add(closeAction);
+
+        setLabel();
+        tlb.add(typeLabel);
+
+        // tlb.addSeparator();
+        // tlb.add(copyKeyAction);
+        tlb.addSeparator();
+        tlb.add(generateKeyAction);
+        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();
+
+        for (int i = 0; i < comps.length; i++)
+            ((JComponent) comps[i]).setOpaque(false);
+
+        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.
+     */
+    public void rebuildPanels() {
+        // Remove change listener, because the rebuilding causes meaningless
+        // events and trouble:
+        tabbed.removeChangeListener(tabListener);
+        
+        setupFieldPanels();
+        // Add the change listener again:
+        tabbed.addChangeListener(tabListener);
+        revalidate();
+        repaint();
+    }
+
+    /**
+     * getExtra checks the field name against BibtexFields.getFieldExtras(name).
+     * If the name has an entry, the proper component to be shown is created and
+     * returned. Otherwise, null is returned. In addition, e.g. listeners can be
+     * added to the field editor, even if no component is returned.
+     * 
+     * @param string
+     *            Field name
+     * @return Component to show, or null if none.
+     */
+    public JComponent getExtra(String string, FieldEditor editor) {
+        final FieldEditor ed = editor;
+
+        // fieldName and parameter string identically ????
+        final String fieldName = editor.getFieldName();
+
+        String s = BibtexFields.getFieldExtras(string);
+
+        // timestamp or a other field with datepicker command
+        if ((fieldName.equals(Globals.prefs.get("timeStampField")))
+            || ((s != null) && s.equals("datepicker"))) {
+            // double click AND datefield => insert the current date (today)
+            ((JTextArea) ed).addMouseListener(new MouseAdapter() {
+                public void mouseClicked(MouseEvent e) {
+                    if (e.getClickCount() == 2) // double click
+                    {
+                        String date = Util.easyDateFormat();
+                        ed.setText(date);
+                    }
+                }
+            });
+
+            // insert a datepicker, if the extras field contains this command
+            if ((s != null) && s.equals("datepicker")) {
+                DatePickerButton datePicker = new DatePickerButton(ed);
+                return datePicker.getDatePicker();
+            }
+        }
+
+        if ((s != null) && s.equals("external")) {
+
+            // Add external viewer listener for "pdf" and "url" fields.
+            ((JComponent) editor).addMouseListener(new ExternalViewerListener());
+
+            return null;
+        } else if ((s != null) && s.equals("journalNames")) {
+            // Add controls for switching between abbreviated and full journal
+            // names.
+            // If this field also has a FieldContentSelector, we need to combine
+            // these.
+            JPanel controls = new JPanel();
+            controls.setLayout(new BorderLayout());
+            if (panel.metaData.getData(Globals.SELECTOR_META_PREFIX + editor.getFieldName()) != null) {
+                FieldContentSelector ws = new FieldContentSelector(frame, panel, frame, editor,
+                    panel.metaData, storeFieldAction, false, ", ");
+                contentSelectors.add(ws);
+                controls.add(ws, BorderLayout.NORTH);
+            }
+            controls.add(JournalAbbreviations.getNameSwitcher(this, editor, panel.undoManager),
+                BorderLayout.SOUTH);
+            return controls;
+        } else if (panel.metaData.getData(Globals.SELECTOR_META_PREFIX + editor.getFieldName()) != null) {
+            FieldContentSelector ws = new FieldContentSelector(frame, panel, frame, editor,
+                panel.metaData, storeFieldAction, false,
+                (editor.getFieldName().equals("author") ? " and " : ", "));
+            contentSelectors.add(ws);
+
+            return ws;
+        } else if ((s != null) && s.equals("browse")) {
+            JButton but = new JButton(Globals.lang("Browse"));
+            ((JComponent) editor).addMouseListener(new ExternalViewerListener());
+
+            // but.setBackground(GUIGlobals.lightGray);
+            but.addActionListener(new ActionListener() {
+                public void actionPerformed(ActionEvent e) {
+                    String dir = ed.getText();
+
+                    if (dir.equals(""))
+                        dir = prefs.get(fieldName + Globals.FILETYPE_PREFS_EXT, "");
+
+                    String chosenFile = Globals.getNewFile(frame, new File(dir), "." + fieldName,
+                        JFileChooser.OPEN_DIALOG, false);
+
+                    if (chosenFile != null) {
+                        File newFile = new File(chosenFile); // chooser.getSelectedFile();
+                        ed.setText(newFile.getPath());
+                        prefs.put(fieldName + Globals.FILETYPE_PREFS_EXT, newFile.getPath());
+                        updateField(ed);
+                    }
+                }
+            });
+
+            return but;
+            // } else if ((s != null) && s.equals("browsePdf")) {
+        } else if ((s != null) && (s.equals("browseDoc") || s.equals("browseDocZip"))) {
+
+            final String ext = "." + fieldName.toLowerCase();
+            final OpenFileFilter off;
+            if (s.equals("browseDocZip"))
+                off = new OpenFileFilter(new String[] { ext, ext + ".gz", ext + ".bz2" });
+            else
+                off = new OpenFileFilter(new String[] { ext });
+
+            ExternalFilePanel pan = new ExternalFilePanel(frame, panel.metaData(), this, fieldName,
+                off, ed);
+            return pan;
+        }
+        /*
+         * else if ((s != null) && s.equals("browsePs")) { ExternalFilePanel pan =
+         * new ExternalFilePanel(frame, this, "ps", off, ed); return pan; }
+         */
+        else if ((s != null) && s.equals("url")) {
+            ((JComponent) editor).setDropTarget(new DropTarget((Component) editor,
+                DnDConstants.ACTION_NONE, new SimpleUrlDragDrop(editor, storeFieldAction)));
+
+            return null;
+        }
+
+        else
+            return null;
+    }
 
-		List fieldList = null;
-		if (fields != null)
-			fieldList = java.util.Arrays.asList(fields);
-		reqPan = new EntryEditorTab(fieldList, this, true, Globals.lang("Required fields"));
-		tabbed.addTab(Globals.lang("Required fields"), GUIGlobals.getImage("required"), reqPan
-			.getPane(), Globals.lang("Show required fields"));
-		tabs.add(reqPan);
+    private void setupSourcePanel() {
+        source = new JTextArea() {
+            private boolean antialias = Globals.prefs.getBoolean("antialias");
 
-		if ((entry.getOptionalFields() != null) && (entry.getOptionalFields().length >= 1)) {
-			optPan = new EntryEditorTab(java.util.Arrays.asList(entry.getOptionalFields()), this,
-				false, Globals.lang("Optional fields"));
-			tabbed.addTab(Globals.lang("Optional fields"), GUIGlobals.getImage("optional"), optPan
-				.getPane(), Globals.lang("Show optional fields"));
-			tabs.add(optPan);
-		}
-
-		EntryEditorTabList tabList = Globals.prefs.getEntryEditorTabList();
-		for (int i = 0; i < tabList.getTabCount(); i++) {
-			EntryEditorTab newTab = new EntryEditorTab(tabList.getTabFields(i), this, false,
-				tabList.getTabName(i));
-			tabbed.addTab(tabList.getTabName(i), GUIGlobals.getImage("general"), newTab.getPane());
-			tabs.add(newTab);
-		}
-
-		srcPanel.setName(Globals.lang("BibTeX source"));
-		if (Globals.prefs.getBoolean("showSource")) {
-			tabbed.addTab(Globals.lang("BibTeX source"), GUIGlobals.getImage("source"), srcPanel,
-				Globals.lang("Show/edit BibTeX source"));
-			tabs.add(srcPanel);
-		}
-		sourceIndex = tabs.size() - 1; // Set the sourceIndex variable.
-		srcPanel.setFocusCycleRoot(true);
-	}
-
-	public BibtexEntryType getType() {
-		return type;
-	}
-
-	public BibtexEntry getEntry() {
-		return entry;
-	}
-
-	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);
-
-		im.put(prefs.getKey("Close entry editor"), "close");
-		am.put("close", closeAction);
-		im.put(prefs.getKey("Entry editor, store field"), "store");
-		am.put("store", storeFieldAction);
-		im.put(prefs.getKey("Autogenerate BibTeX keys"), "generateKey");
-		am.put("generateKey", generateKeyAction);
-		/*
-		 * im.put(prefs.getKey("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");
-		am.put("next", nextEntryAction);
-		im.put(prefs.getKey("Undo"), "undo");
-		am.put("undo", undoAction);
-		im.put(prefs.getKey("Redo"), "redo");
-		am.put("redo", redoAction);
-		im.put(prefs.getKey("Help"), "help");
-		am.put("help", helpAction);
-
-		tlb.setFloatable(false);
-		tlb.add(closeAction);
-
-		setLabel();
-		tlb.add(typeLabel);
-
-		// tlb.addSeparator();
-		// tlb.add(copyKeyAction);
-		tlb.addSeparator();
-		tlb.add(generateKeyAction);
-		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();
-
-		for (int i = 0; i < comps.length; i++)
-			((JComponent) comps[i]).setOpaque(false);
-
-		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.
-	 */
-	public void rebuildPanels() {
-		// Remove change listener, because the rebuilding causes meaningless
-		// events and trouble:
-		tabbed.removeChangeListener(tabListener);
-		
-		setupFieldPanels();
-		// Add the change listener again:
-		tabbed.addChangeListener(tabListener);
-		revalidate();
-		repaint();
-	}
-
-	/**
-	 * getExtra checks the field name against BibtexFields.getFieldExtras(name).
-	 * If the name has an entry, the proper component to be shown is created and
-	 * returned. Otherwise, null is returned. In addition, e.g. listeners can be
-	 * added to the field editor, even if no component is returned.
-	 * 
-	 * @param string
-	 *            Field name
-	 * @return Component to show, or null if none.
-	 */
-	public JComponent getExtra(String string, FieldEditor editor) {
-		final FieldEditor ed = editor;
-
-		// fieldName and parameter string identically ????
-		final String fieldName = editor.getFieldName();
-
-		String s = BibtexFields.getFieldExtras(string);
-
-		// timestamp or a other field with datepicker command
-		if ((fieldName.equals(Globals.prefs.get("timeStampField")))
-			|| ((s != null) && s.equals("datepicker"))) {
-			// double click AND datefield => insert the current date (today)
-			((JTextArea) ed).addMouseListener(new MouseAdapter() {
-				public void mouseClicked(MouseEvent e) {
-					if (e.getClickCount() == 2) // double click
-					{
-						String date = Util.easyDateFormat();
-						ed.setText(date);
-					}
-				}
-			});
-
-			// insert a datepicker, if the extras field contains this command
-			if ((s != null) && s.equals("datepicker")) {
-				DatePickerButton datePicker = new DatePickerButton(ed);
-				return datePicker.getDatePicker();
-			}
-		}
-
-		if ((s != null) && s.equals("external")) {
-
-			// Add external viewer listener for "pdf" and "url" fields.
-			((JComponent) editor).addMouseListener(new ExternalViewerListener());
-
-			return null;
-		} else if ((s != null) && s.equals("journalNames")) {
-			// Add controls for switching between abbreviated and full journal
-			// names.
-			// If this field also has a FieldContentSelector, we need to combine
-			// these.
-			JPanel controls = new JPanel();
-			controls.setLayout(new BorderLayout());
-			if (panel.metaData.getData(Globals.SELECTOR_META_PREFIX + editor.getFieldName()) != null) {
-				FieldContentSelector ws = new FieldContentSelector(frame, panel, frame, editor,
-					panel.metaData, storeFieldAction, false, ", ");
-				contentSelectors.add(ws);
-				controls.add(ws, BorderLayout.NORTH);
-			}
-			controls.add(JournalAbbreviations.getNameSwitcher(this, editor, panel.undoManager),
-				BorderLayout.SOUTH);
-			return controls;
-		} else if (panel.metaData.getData(Globals.SELECTOR_META_PREFIX + editor.getFieldName()) != null) {
-			FieldContentSelector ws = new FieldContentSelector(frame, panel, frame, editor,
-				panel.metaData, storeFieldAction, false,
-				(editor.getFieldName().equals("author") ? " and " : ", "));
-			contentSelectors.add(ws);
-
-			return ws;
-		} else if ((s != null) && s.equals("browse")) {
-			JButton but = new JButton(Globals.lang("Browse"));
-			((JComponent) editor).addMouseListener(new ExternalViewerListener());
-
-			// but.setBackground(GUIGlobals.lightGray);
-			but.addActionListener(new ActionListener() {
-				public void actionPerformed(ActionEvent e) {
-					String dir = ed.getText();
-
-					if (dir.equals(""))
-						dir = prefs.get(fieldName + Globals.FILETYPE_PREFS_EXT, "");
-
-					String chosenFile = Globals.getNewFile(frame, new File(dir), "." + fieldName,
-						JFileChooser.OPEN_DIALOG, false);
-
-					if (chosenFile != null) {
-						File newFile = new File(chosenFile); // chooser.getSelectedFile();
-						ed.setText(newFile.getPath());
-						prefs.put(fieldName + Globals.FILETYPE_PREFS_EXT, newFile.getPath());
-						updateField(ed);
-					}
-				}
-			});
-
-			return but;
-			// } else if ((s != null) && s.equals("browsePdf")) {
-		} else if ((s != null) && (s.equals("browseDoc") || s.equals("browseDocZip"))) {
-
-			final String ext = "." + fieldName.toLowerCase();
-			final OpenFileFilter off;
-			if (s.equals("browseDocZip"))
-				off = new OpenFileFilter(new String[] { ext, ext + ".gz", ext + ".bz2" });
-			else
-				off = new OpenFileFilter(new String[] { ext });
-
-			ExternalFilePanel pan = new ExternalFilePanel(frame, panel.metaData(), this, fieldName,
-				off, ed);
-			return pan;
-		}
-		/*
-		 * else if ((s != null) && s.equals("browsePs")) { ExternalFilePanel pan =
-		 * new ExternalFilePanel(frame, this, "ps", off, ed); return pan; }
-		 */
-		else if ((s != null) && s.equals("url")) {
-			((JComponent) editor).setDropTarget(new DropTarget((Component) editor,
-				DnDConstants.ACTION_NONE, new SimpleUrlDragDrop(editor, storeFieldAction)));
-
-			return null;
-		}
-
-		else
-			return null;
-	}
-
-	private void setupSourcePanel() {
-		source = new JTextArea() {
-			private boolean antialias = Globals.prefs.getBoolean("antialias");
-
-			public void paint(Graphics g) {
-				Graphics2D g2 = (Graphics2D) g;
-				if (antialias)
-					g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
-						RenderingHints.VALUE_ANTIALIAS_ON);
-				super.paint(g2);
-			}
-		};
+            public void paint(Graphics g) {
+                Graphics2D g2 = (Graphics2D) g;
+                if (antialias)
+                    g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
+                        RenderingHints.VALUE_ANTIALIAS_ON);
+                super.paint(g2);
+            }
+        };
 
         //DefaultFormBuilder builder = new DefaultFormBuilder
         //        (srcPanel, new FormLayout( "fill:pref:grow", "fill:pref:grow"));
         source.setEditable(true); // prefs.getBoolean("enableSourceEditing"));
-		source.setLineWrap(true);
-		source.setTabSize(GUIGlobals.INDENT);
-		source.addFocusListener(new FieldEditorFocusListener());
-		// Add the global focus listener, so a menu item can see if this field
-		// was focused when
-		// an action was called.
-		source.addFocusListener(Globals.focusListener);
-		source.setFont(new Font("Monospaced", Font.PLAIN, Globals.prefs.getInt("fontSize")));
-		setupJTextComponent(source);
-		updateSource();
-
-		JScrollPane sp = new JScrollPane(source, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
-			JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
-		//builder.append(sp);
+        source.setLineWrap(true);
+        source.setTabSize(GUIGlobals.INDENT);
+        source.addFocusListener(new FieldEditorFocusListener());
+        // Add the global focus listener, so a menu item can see if this field
+        // was focused when
+        // an action was called.
+        source.addFocusListener(Globals.focusListener);
+        source.setFont(new Font("Monospaced", Font.PLAIN, Globals.prefs.getInt("fontSize")));
+        setupJTextComponent(source);
+        updateSource();
+
+        JScrollPane sp = new JScrollPane(source, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
+            JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
+        //builder.append(sp);
         
         srcPanel.setLayout(new BorderLayout());
         srcPanel.add(sp, BorderLayout.CENTER);
 
     }
 
-	public void updateSource() {
-		if (updateSource) {
-			StringWriter sw = new StringWriter(200);
+    public void updateSource() {
+        if (updateSource) {
+            StringWriter sw = new StringWriter(200);
 
-			try {
-				entry.write(sw, new net.sf.jabref.export.LatexFieldFormatter(), false);
+            try {
+                entry.write(sw, new net.sf.jabref.export.LatexFieldFormatter(), false);
 
-				String srcString = sw.getBuffer().toString();
-				source.setText(srcString);
-				lastSourceStringAccepted = srcString;
-			} catch (IOException ex) {
-				source.setText(ex.getMessage() + "\n\n" + 
+                String srcString = sw.getBuffer().toString();
+                source.setText(srcString);
+                lastSourceStringAccepted = srcString;
+            } catch (IOException ex) {
+                source.setText(ex.getMessage() + "\n\n" + 
                                         Globals.lang("Correct the entry, and "
-					+ "reopen editor to display/edit source."));
-				source.setEditable(false);
-			}
+                    + "reopen editor to display/edit source."));
+                source.setEditable(false);
+            }
+
+
+        }
+    }
+
+    /**
+     * NOTE: This method is only used for the source panel, not for the
+     * other tabs. Look at EntryEditorTab for the setup of text components
+     * in the other tabs.
+     */
+    public void setupJTextComponent(JTextComponent ta) {
+
+
+        // Set up key bindings and focus listener for the FieldEditor.
+        InputMap im = ta.getInputMap(JComponent.WHEN_FOCUSED);
+        ActionMap am = ta.getActionMap();
+
+        // im.put(KeyStroke.getKeyStroke(GUIGlobals.closeKey), "close");
+        // am.put("close", closeAction);
+        im.put(prefs.getKey("Entry editor, store field"), "store");
+        am.put("store", storeFieldAction);
+
+        im.put(prefs.getKey("Entry editor, next panel"), "right");
+        im.put(prefs.getKey("Entry editor, next panel 2"), "right");
+        am.put("right", switchRightAction);
+
+        im.put(prefs.getKey("Entry editor, previous panel"), "left");
+        im.put(prefs.getKey("Entry editor, previous panel 2"), "left");
+        am.put("left", switchLeftAction);
+
+        im.put(prefs.getKey("Help"), "help");
+        am.put("help", helpAction);
+        im.put(prefs.getKey("Save database"), "save");
+        am.put("save", saveDatabaseAction);
+
+        im.put(Globals.prefs.getKey("Next tab"), "nexttab");
+        am.put("nexttab", frame.nextTab);
+        im.put(Globals.prefs.getKey("Previous tab"), "prevtab");
+        am.put("prevtab", frame.prevTab);
+        try {
+            HashSet keys = new HashSet(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
+                .getFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS));
+            keys.clear();
+            keys.add(KeyStroke.getKeyStroke("shift pressed TAB"));
+            ta.setFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS, keys);
+        } catch (Throwable t) {
+            System.err.println(t);
+        }
+
+        ta.addFocusListener(new FieldListener());
+    }
+
+    public void requestFocus() {
+        activateVisible();
+    }
+
+    private void activateVisible() {
+        Object activeTab = tabs.get(tabbed.getSelectedIndex());
+
+        if (activeTab instanceof EntryEditorTab)
+            ((EntryEditorTab) activeTab).activate();
+        else
+            new FocusRequester(source);
+        // ((JComponent)activeTab).requestFocus();
+    }
+
+    /**
+     * Reports the enabled status of the editor, as set by setEnabled()
+     */
+    public boolean isEnabled() {
+        return source.isEnabled();
+    }
+
+    /**
+     * Sets the enabled status of all text fields of the entry editor.
+     */
+    public void setEnabled(boolean enabled) {
+        for (Iterator i = tabs.iterator(); i.hasNext();) {
+            Object o = i.next();
+            if (o instanceof EntryEditorTab) {
+                ((EntryEditorTab) o).setEnabled(enabled);
+            }
+        }
+        source.setEnabled(enabled);
+
+    }
+
+    /**
+     * Centers the given row, and highlights it.
+     * 
+     * @param row
+     *            an <code>int</code> value
+     */
+    private void scrollTo(int row) {
+        panel.mainTable.setRowSelectionInterval(row, row);
+        panel.mainTable.ensureVisible(row);
+    }
+
+    /**
+     * Makes sure the current edit is stored.
+     */
+    public void storeCurrentEdit() {
+        Component comp = Globals.focusListener.getFocused();
+        if ((comp instanceof FieldEditor) && this.isAncestorOf(comp)) {
+            storeFieldAction.actionPerformed(new ActionEvent(comp, 0, ""));
+        }
+    }
+
+    /**
+     * Returns the index of the active (visible) panel.
+     * 
+     * @return an <code>int</code> value
+     */
+    public int getVisiblePanel() {
+        return tabbed.getSelectedIndex();
+    }
+
+    /** Returns the name of the currently selected component. */
+    public String getVisiblePanelName() {
+        return tabbed.getSelectedComponent().getName();
+    }
+
+    /**
+     * Sets the panel with the given index visible.
+     * 
+     * @param i
+     *            an <code>int</code> value
+     */
+    public void setVisiblePanel(int i) {
+        tabbed.setSelectedIndex(Math.min(i, tabbed.getTabCount() - 1));
+    }
+
+    public void setVisiblePanel(String name) {
+        for (int i = 0; i < tabbed.getTabCount(); ++i) {
+            if (name.equals(tabbed.getComponent(i).getName())) {
+                tabbed.setSelectedIndex(i);
+                return;
+            }
+        }
+        if (tabbed.getTabCount() > 0)
+            tabbed.setSelectedIndex(0);
+    }
+
+    /**
+     * Updates this editor to show the given entry, regardless of type
+     * correspondence.
+     * 
+     * @param be
+     *            a <code>BibtexEntry</code> value
+     */
+    public synchronized void switchTo(BibtexEntry be) {
+        if (entry == be)
+            return;
+
+        // Util.pr("EntryEditor.switchTo(BibtexEntry): "+entry.getCiteKey());
+        // Util.pr("::EntryEditor.switchTo(BibtexEntry): "+this.type.getName());
+        storeCurrentEdit();
+
+        // Remove this instance as property listener for the entry:
+        entry.removePropertyChangeListener(this);
+
+        // Register as property listener for the new entry:
+        be.addPropertyChangeListener(this);
+
+        entry = be;
+
+        updateAllFields();
+        validateAllFields();
+        updateSource();
+        panel.showing = be;
+
+    }
+
+    /**
+     * Returns false if the contents of the source panel has not been validated,
+     * true othervise.
+     */
+    public boolean lastSourceAccepted() {
+        if (tabbed.getSelectedComponent() == srcPanel)
+            storeSource(false);
+
+        return lastSourceAccepted;
+    }
+
+    /*
+     * public boolean storeSourceIfNeeded() { if (tabbed.getSelectedIndex() ==
+     * sourceIndex) return storeSource(); else return true; }
+     */
+    public boolean storeSource(boolean showError) {
+        // Store edited bibtex code.
+        BibtexParser bp = new BibtexParser(new java.io.StringReader(source.getText()));
+
+        try {
+            BibtexDatabase db = bp.parse().getDatabase();
+
+            if (db.getEntryCount() > 1)
+                throw new Exception("More than one entry found.");
+
+            if (db.getEntryCount() < 1)
+                throw new Exception("No entries found.");
+
+            NamedCompound compound = new NamedCompound(Globals.lang("source edit"));
+            BibtexEntry nu = db.getEntryById((String) db.getKeySet().iterator().next());
+            String id = entry.getId();
+            String
+            // oldKey = entry.getCiteKey(),
+            newKey = nu.getCiteKey();
+            boolean anyChanged = false;
+            boolean duplicateWarning = false;
+            boolean emptyWarning = newKey == null || newKey.equals("");
+
+            if (panel.database.setCiteKeyForEntry(id, newKey)) {
+                duplicateWarning = true;
+
+                // First, remove fields that the user have removed.
+            }
+
+            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());
+                        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());
+
+                    // Test if the field is legally set.
+                    (new LatexFieldFormatter()).format(toSet, fields[i].toString());
+
+                    compound.addEdit(new UndoableFieldChange(entry, fields[i].toString(), entry
+                        .getField(fields[i].toString()), toSet));
+                    entry.setField(fields[i].toString(), toSet);
+                    anyChanged = true;
+                }
+            }
+
+            compound.end();
+
+            if (!anyChanged)
+                return true;
+
+            panel.undoManager.addEdit(compound);
+
+            /*
+             * if (((oldKey == null) && (newKey != null)) || ((oldKey != null) &&
+             * (newKey == null)) || ((oldKey != null) && (newKey != null) &&
+             * !oldKey.equals(newKey))) { }
+             */
+            if (duplicateWarning) {
+                warnDuplicateBibtexkey();
+            } else if (emptyWarning && showError) {
+                warnEmptyBibtexkey();
+            } else {
+                panel.output(Globals.lang("Stored entry") + ".");
+            }
+
+            lastSourceStringAccepted = source.getText();
+            updateAllFields();
+            lastSourceAccepted = true;
+            updateSource = true;
+
+            // TODO: does updating work properly after source stored?
+            // panel.tableModel.remap();
+            // panel.entryTable.repaint();
+            // panel.refreshTable();
+            panel.markBaseChanged();
+
+            return true;
+        } catch (Throwable ex) {
+            // ex.printStackTrace();
+            // The source couldn't be parsed, so the user is given an
+            // error message, and the choice to keep or revert the contents
+            // of the source text field.
+            updateSource = false;
+            lastSourceAccepted = false;
+            tabbed.setSelectedComponent(srcPanel);
+
+            if (showError) {
+                Object[] options = { Globals.lang("Edit"),
+                    Globals.lang("Revert to original source") };
+
+                int answer = JOptionPane.showOptionDialog(frame, Globals.lang("Error: ") + ex.getMessage(),
+                    Globals.lang("Problem with parsing entry"), JOptionPane.YES_NO_OPTION,
+                    JOptionPane.ERROR_MESSAGE, null, options, options[0]);
+
+                if (answer != 0) {
+                    updateSource = true;
+                    updateSource();
+                }
+            }
+
+            return false;
+        }
+    }
+
+    public void setField(String fieldName, String newFieldData) {
+
+        for (Iterator i = tabs.iterator(); i.hasNext();) {
+            Object o = i.next();
+            if (o instanceof EntryEditorTab) {
+                ((EntryEditorTab) o).updateField(fieldName, newFieldData);
+            }
+        }
+
+    }
+
+    /**
+     * Sets all the text areas according to the shown entry.
+     */
+    public void updateAllFields() {
+        for (Iterator i = tabs.iterator(); i.hasNext();) {
+            Object o = i.next();
+            if (o instanceof EntryEditorTab) {
+                ((EntryEditorTab) o).setEntry(entry);
+            }
+        }
+    }
+
+    /**
+     * Removes the "invalid field" color from all text areas.
+     */
+    public void validateAllFields() {
+        for (Iterator i = tabs.iterator(); i.hasNext();) {
+            Object o = i.next();
+            if (o instanceof EntryEditorTab) {
+                ((EntryEditorTab) o).validateAllFields();
+            }
+        }
+    }
+
+    public void updateAllContentSelectors() {
+        if (contentSelectors.size() > 0) {
+            for (Iterator i = contentSelectors.iterator(); i.hasNext();)
+                ((FieldContentSelector) i.next()).rebuildComboBox();
+        }
+    }
+
+    /*
+     * Update the JTextArea when a field has changed.
+     * 
+     * (non-Javadoc)
+     * 
+     * @see java.beans.VetoableChangeListener#vetoableChange(java.beans.PropertyChangeEvent)
+     */
+    public void vetoableChange(PropertyChangeEvent e) {
+        String newValue = ((e.getNewValue() != null) ? e.getNewValue().toString() : "");
+        setField(e.getPropertyName(), newValue);
+    }
+
+    public void updateField(final Object source) {
+        storeFieldAction.actionPerformed(new ActionEvent(source, 0, ""));
+    }
+
+    private class TypeLabel extends JPanel {
+        private String label;
+
+        public TypeLabel(String type) {
+            label = type;
+            addMouseListener(new MouseAdapter() {
+                public void mouseClicked(MouseEvent e) {
+                    boolean ctrlClick = prefs.getBoolean("ctrlClick");
+
+                    if ((e.getButton() == MouseEvent.BUTTON3)
+                        || (ctrlClick && (e.getButton() == MouseEvent.BUTTON1) && e.isControlDown())) {
+                        JPopupMenu typeMenu = new JPopupMenu();
+
+                        // typeMenu.addSeparator();
+                        for (Iterator i = BibtexEntryType.ALL_TYPES.keySet().iterator(); i
+                            .hasNext();)
+                            typeMenu.add(new ChangeTypeAction(BibtexEntryType.getType((String) i
+                                .next()), panel));
+
+                        typeMenu.show(ths, e.getX(), e.getY());
+                    }
+                }
+            });
+        }
+
+        public void paint(Graphics g) {
+            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.rotate(-Math.PI / 2, 0, 0);
+            g2.drawString(label, -width - 7, 28);
+        }
+    }
+
+    class FieldListener extends FocusAdapter {
+        /*
+         * Focus listener that fires the storeFieldAction when a FieldTextArea
+         * loses focus.
+         */
+        public void focusGained(FocusEvent e) {
+        }
+
+        public void focusLost(FocusEvent e) {
+            // Util.pr("Lost focus "+e.getSource().toString().substring(0,30));
+            if (!e.isTemporary())
+                updateField(e.getSource());
+        }
+    }
+
+    class TabListener implements ChangeListener {
+        public void stateChanged(ChangeEvent e) {
+
+            SwingUtilities.invokeLater(new Runnable() {
+                public void run() {
+                    activateVisible();
+                }
+            });
+
+            // After the initial event train has finished, we tell the editor
+            // tab to update all
+            // its fields. This makes sure they are updated even if the tab we
+            // just left contained one
+            // or more of the same fields as this one:
+            SwingUtilities.invokeLater(new Runnable() {
+                public void run() {
+                    Object activeTab = tabs.get(tabbed.getSelectedIndex());
+                    if (activeTab instanceof EntryEditorTab)
+                        ((EntryEditorTab) activeTab).updateAll();
+                }
+            });
+
+        }
+    }
+
+    class DeleteAction extends AbstractAction {
+        public DeleteAction() {
+            super(Globals.lang("Delete"), GUIGlobals.getImage("delete"));
+            putValue(SHORT_DESCRIPTION, Globals.lang("Delete entry"));
+        }
+
+        public void actionPerformed(ActionEvent e) {
+            // Show confirmation dialog if not disabled:
+            boolean goOn = panel.showDeleteConfirmationDialog(1);
+
+            if (!goOn)
+                return;
+
+            panel.entryEditorClosing(EntryEditor.this);
+            panel.database.removeEntry(entry.getId());
+            panel.markBaseChanged();
+            panel.undoManager.addEdit(new UndoableRemoveEntry(panel.database, entry, panel));
+            panel.output(Globals.lang("Deleted") + " " + Globals.lang("entry"));
+        }
+    }
+
+    class CloseAction extends AbstractAction {
+        public CloseAction() {
+            super(Globals.lang("Close window"), GUIGlobals.getImage("close"));
+            putValue(SHORT_DESCRIPTION, Globals.lang("Close window"));
+        }
+
+        public void actionPerformed(ActionEvent e) {
+            if (tabbed.getSelectedComponent() == srcPanel) {
+                updateField(source);
+                if (lastSourceAccepted)
+                    panel.entryEditorClosing(EntryEditor.this);
+            } else
+                panel.entryEditorClosing(EntryEditor.this);
+        }
+    }
+
+    class CopyKeyAction extends AbstractAction {
+        public CopyKeyAction() {
+            super("Copy BibTeX key to clipboard");
+            putValue(SHORT_DESCRIPTION, "Copy BibTeX key to clipboard (Ctrl-K)");
+            // putValue(MNEMONIC_KEY, GUIGlobals.copyKeyCode);
+        }
+
+        public void actionPerformed(ActionEvent e) {
+            String s = (String) (entry.getField(BibtexFields.KEY_FIELD));
+            StringSelection ss = new StringSelection(s);
+
+            if (s != null)
+                Toolkit.getDefaultToolkit().getSystemClipboard().setContents(ss, ss);
+        }
+    }
+
+    public class StoreFieldAction extends AbstractAction {
+        public StoreFieldAction() {
+            super("Store field value");
+            putValue(SHORT_DESCRIPTION, "Store field value");
+        }
+
+        public void actionPerformed(ActionEvent e) {
+
+            if (e.getSource() instanceof FieldTextField) {
+                // Storage from bibtex key field.
+                FieldTextField fe = (FieldTextField) e.getSource();
+                String oldValue = entry.getCiteKey();
+                String newValue = fe.getText();
+
+                if (newValue.equals(""))
+                    newValue = null;
+
+                if (((oldValue == null) && (newValue == null))
+                    || ((oldValue != null) && (newValue != null) && oldValue.equals(newValue)))
+                    return; // No change.
+
+                // Make sure the key is legal:
+                String cleaned = Util.checkLegalKey(newValue);
+                if ((cleaned != null) && !cleaned.equals(newValue)) {
+                    JOptionPane.showMessageDialog(frame, Globals.lang("Invalid BibTeX key"),
+                        Globals.lang("Error setting field"), JOptionPane.ERROR_MESSAGE);
+                    fe.setBackground(GUIGlobals.invalidFieldBackground);
+                    return;
+                } else {
+                    fe.setBackground(/*
+                                         * fe.getTextComponent().hasFocus() ?
+                                         * GUIGlobals.activeEditor :
+                                         */
+                    GUIGlobals.validFieldBackground);
+                }
+
+                boolean isDuplicate = panel.database.setCiteKeyForEntry(entry.getId(), newValue);
+
+                if (newValue != null) {
+                    if (isDuplicate)
+                        warnDuplicateBibtexkey();
+                    else
+                        panel.output(Globals.lang("BibTeX key is unique."));
+                } else { // key is null/empty
+                    warnEmptyBibtexkey();
+                }
+
+                // Add an UndoableKeyChange to the baseframe's undoManager.
+                panel.undoManager.addEdit(new UndoableKeyChange(panel.database, entry.getId(),
+                    oldValue, newValue));
+
+                if ((newValue != null) && (newValue.length() > 0))
+                    // fe.setLabelColor(GUIGlobals.validFieldColor);
+                    fe.setBackground(GUIGlobals.validFieldBackground);
+                else
+                    // fe.setLabelColor(GUIGlobals.nullFieldColor);
+                    fe.setBackground(GUIGlobals.validFieldBackground);
+
+                updateSource();
+                panel.markBaseChanged();
+            }
+            else if (e.getSource() instanceof FieldEditor) {
+                String toSet = null;
+                FieldEditor fe = (FieldEditor) e.getSource();
+                boolean set;
+                // Trim the whitespace off this value
+                String currentText = fe.getText();
+                String trim = currentText.trim();
+                if (trim.length() > 0) {
+                    toSet = trim;
+                }
+
+                // We check if the field has changed, since we don't want to
+                // mark the base as changed unless we have a real change.
+                if (toSet == null) {
+                    if (entry.getField(fe.getFieldName()) == null)
+                        set = false;
+                    else
+                        set = true;
+                } else {
+                    if ((entry.getField(fe.getFieldName()) != null)
+                        && toSet.equals(entry.getField(fe.getFieldName()).toString()))
+                        set = false;
+                    else
+                        set = true;
+                }
+
+                if (set) {
+                    try {
+                        // The following statement attempts to write the
+                        // new contents into a StringWriter, and this will
+                        // cause an IOException if the field is not
+                        // properly formatted. If that happens, the field
+                        // is not stored and the textarea turns red.
+                        if (toSet != null)
+                            (new LatexFieldFormatter()).format(toSet, fe.getFieldName());
+
+                        Object oldValue = entry.getField(fe.getFieldName());
+
+                        if (toSet != null)
+                            entry.setField(fe.getFieldName(), toSet);
+                        else
+                            entry.clearField(fe.getFieldName());
+
+                        if ((toSet != null) && (toSet.length() > 0))
+                            // fe.setLabelColor(GUIGlobals.validFieldColor);
+                            fe.setBackground(GUIGlobals.validFieldBackground);
+                        else
+                            // fe.setLabelColor(GUIGlobals.nullFieldColor);
+                            fe.setBackground(GUIGlobals.validFieldBackground);
+
+                        // See if we need to update an AutoCompleter instance:
+                        AutoCompleter aComp = panel.getAutoCompleter(fe.getFieldName());
+                        if (aComp != null)
+                            aComp.addAll(toSet);
+
+                        // Add an UndoableFieldChange to the baseframe's
+                        // undoManager.
+                        panel.undoManager.addEdit(new UndoableFieldChange(entry, fe.getFieldName(),
+                            oldValue, toSet));
+                        updateSource();
+                        panel.markBaseChanged();
+
+                        // TODO: is this a safe solution to keep selection on
+                        // entry?
+                        SwingUtilities.invokeLater(new Runnable() {
+                            public void run() {
+                                panel.highlightEntry(entry);
+                            }
+                        });
+
+                    } catch (IllegalArgumentException ex) {
+                        JOptionPane.showMessageDialog(frame, Globals.lang("Error: ") + ex.getMessage(), Globals
+                            .lang("Error setting field"), JOptionPane.ERROR_MESSAGE);
+                        fe.setBackground(GUIGlobals.invalidFieldBackground);
+                    }
+                } else {
+                    // set == false
+                    // We set the field and label color.
+                    fe.setBackground(GUIGlobals.validFieldBackground);
+                }
+            } else if ((source.isEditable())
+                && (!source.getText().equals(lastSourceStringAccepted))) {
+                boolean accepted = storeSource(true);
+
+                if (accepted) {
+                }
+            }
+        }
+    }
+
+    class SwitchLeftAction extends AbstractAction {
+        public SwitchLeftAction() {
+            super("Switch to the panel to the left");
+        }
+
+        public void actionPerformed(ActionEvent e) {
+            // System.out.println("switch left");
+            int i = tabbed.getSelectedIndex();
+            tabbed.setSelectedIndex(((i > 0) ? (i - 1) : (tabbed.getTabCount() - 1)));
+
+            activateVisible();
+        }
+    }
+
+    class SwitchRightAction extends AbstractAction {
+        public SwitchRightAction() {
+            super("Switch to the panel to the right");
+        }
+
+        public void actionPerformed(ActionEvent e) {
+            // System.out.println("switch right");
+            int i = tabbed.getSelectedIndex();
+            tabbed.setSelectedIndex((i < (tabbed.getTabCount() - 1)) ? (i + 1) : 0);
+            activateVisible();
+
+        }
+    }
+
+    class NextEntryAction extends AbstractAction {
+        public NextEntryAction() {
+            super(Globals.lang("Next entry"), GUIGlobals.getImage("down"));
+
+            putValue(SHORT_DESCRIPTION, Globals.lang("Next entry"));
+        }
+
+        public void actionPerformed(ActionEvent e) {
+
+            int thisRow = panel.mainTable.findEntry(entry);
+            int newRow = -1;
+
+            if ((thisRow + 1) < panel.database.getEntryCount())
+                newRow = thisRow + 1;
+            else if (thisRow > 0)
+                newRow = 0;
+            else
+                return; // newRow is still -1, so we can assume the database has
+                        // only one entry.
+
+            scrollTo(newRow);
+            panel.mainTable.setRowSelectionInterval(newRow, newRow);
+
+        }
+    }
+
+    class PrevEntryAction extends AbstractAction {
+        public PrevEntryAction() {
+            super(Globals.lang("Previous entry"), GUIGlobals.getImage("up"));
+
+            putValue(SHORT_DESCRIPTION, Globals.lang("Previous entry"));
+        }
+
+        public void actionPerformed(ActionEvent e) {
+            int thisRow = panel.mainTable.findEntry(entry);
+            int newRow = -1;
+
+            if ((thisRow - 1) >= 0)
+                newRow = thisRow - 1;
+            else if (thisRow != (panel.database.getEntryCount() - 1))
+                newRow = panel.database.getEntryCount() - 1;
+            else
+                return; // newRow is still -1, so we can assume the database has
+                        // only one entry.
+            // id = panel.tableModel.getIdForRow(newRow);
+            // switchTo(id);
 
+            scrollTo(newRow);
+            panel.mainTable.setRowSelectionInterval(newRow, newRow);
 
         }
-	}
-
-	/**
-	 * NOTE: This method is only used for the source panel, not for the
-	 * other tabs. Look at EntryEditorTab for the setup of text components
-	 * in the other tabs.
-	 */
-	public void setupJTextComponent(JTextComponent ta) {
-
-
-		// Set up key bindings and focus listener for the FieldEditor.
-		InputMap im = ta.getInputMap(JComponent.WHEN_FOCUSED);
-		ActionMap am = ta.getActionMap();
-
-		// im.put(KeyStroke.getKeyStroke(GUIGlobals.closeKey), "close");
-		// am.put("close", closeAction);
-		im.put(prefs.getKey("Entry editor, store field"), "store");
-		am.put("store", storeFieldAction);
-
-		im.put(prefs.getKey("Entry editor, next panel"), "right");
-		im.put(prefs.getKey("Entry editor, next panel 2"), "right");
-		am.put("right", switchRightAction);
-
-		im.put(prefs.getKey("Entry editor, previous panel"), "left");
-		im.put(prefs.getKey("Entry editor, previous panel 2"), "left");
-		am.put("left", switchLeftAction);
-
-		im.put(prefs.getKey("Help"), "help");
-		am.put("help", helpAction);
-		im.put(prefs.getKey("Save database"), "save");
-		am.put("save", saveDatabaseAction);
-
-		im.put(Globals.prefs.getKey("Next tab"), "nexttab");
-		am.put("nexttab", frame.nextTab);
-		im.put(Globals.prefs.getKey("Previous tab"), "prevtab");
-		am.put("prevtab", frame.prevTab);
-		try {
-			HashSet keys = new HashSet(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
-				.getFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS));
-			keys.clear();
-			keys.add(KeyStroke.getKeyStroke("shift pressed TAB"));
-			ta.setFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS, keys);
-		} catch (Throwable t) {
-			System.err.println(t);
-		}
-
-		ta.addFocusListener(new FieldListener());
-	}
-
-	public void requestFocus() {
-		activateVisible();
-	}
-
-	private void activateVisible() {
-		Object activeTab = tabs.get(tabbed.getSelectedIndex());
-
-		if (activeTab instanceof EntryEditorTab)
-			((EntryEditorTab) activeTab).activate();
-		else
-			new FocusRequester(source);
-		// ((JComponent)activeTab).requestFocus();
-	}
-
-	/**
-	 * Reports the enabled status of the editor, as set by setEnabled()
-	 */
-	public boolean isEnabled() {
-		return source.isEnabled();
-	}
-
-	/**
-	 * Sets the enabled status of all text fields of the entry editor.
-	 */
-	public void setEnabled(boolean enabled) {
-		for (Iterator i = tabs.iterator(); i.hasNext();) {
-			Object o = i.next();
-			if (o instanceof EntryEditorTab) {
-				((EntryEditorTab) o).setEnabled(enabled);
-			}
-		}
-		source.setEnabled(enabled);
-
-	}
-
-	/**
-	 * Centers the given row, and highlights it.
-	 * 
-	 * @param row
-	 *            an <code>int</code> value
-	 */
-	private void scrollTo(int row) {
-		panel.mainTable.setRowSelectionInterval(row, row);
-		panel.mainTable.ensureVisible(row);
-	}
-
-	/**
-	 * Makes sure the current edit is stored.
-	 */
-	public void storeCurrentEdit() {
-		Component comp = Globals.focusListener.getFocused();
-		if ((comp instanceof FieldEditor) && this.isAncestorOf(comp)) {
-			storeFieldAction.actionPerformed(new ActionEvent(comp, 0, ""));
-		}
-	}
-
-	/**
-	 * Returns the index of the active (visible) panel.
-	 * 
-	 * @return an <code>int</code> value
-	 */
-	public int getVisiblePanel() {
-		return tabbed.getSelectedIndex();
-	}
-
-	/** Returns the name of the currently selected component. */
-	public String getVisiblePanelName() {
-		return tabbed.getSelectedComponent().getName();
-	}
-
-	/**
-	 * Sets the panel with the given index visible.
-	 * 
-	 * @param i
-	 *            an <code>int</code> value
-	 */
-	public void setVisiblePanel(int i) {
-		tabbed.setSelectedIndex(Math.min(i, tabbed.getTabCount() - 1));
-	}
-
-	public void setVisiblePanel(String name) {
-		for (int i = 0; i < tabbed.getTabCount(); ++i) {
-			if (name.equals(tabbed.getComponent(i).getName())) {
-				tabbed.setSelectedIndex(i);
-				return;
-			}
-		}
-		if (tabbed.getTabCount() > 0)
-			tabbed.setSelectedIndex(0);
-	}
-
-	/**
-	 * Updates this editor to show the given entry, regardless of type
-	 * correspondence.
-	 * 
-	 * @param be
-	 *            a <code>BibtexEntry</code> value
-	 */
-	public synchronized void switchTo(BibtexEntry be) {
-		if (entry == be)
-			return;
-
-		// Util.pr("EntryEditor.switchTo(BibtexEntry): "+entry.getCiteKey());
-		// Util.pr("::EntryEditor.switchTo(BibtexEntry): "+this.type.getName());
-		storeCurrentEdit();
-
-		// Remove this instance as property listener for the entry:
-		entry.removePropertyChangeListener(this);
-
-		// Register as property listener for the new entry:
-		be.addPropertyChangeListener(this);
-
-		entry = be;
-
-		updateAllFields();
-		validateAllFields();
-		updateSource();
-		panel.showing = be;
-
-	}
-
-	/**
-	 * Returns false if the contents of the source panel has not been validated,
-	 * true othervise.
-	 */
-	public boolean lastSourceAccepted() {
-		if (tabbed.getSelectedComponent() == srcPanel)
-			storeSource(false);
-
-		return lastSourceAccepted;
-	}
-
-	/*
-	 * public boolean storeSourceIfNeeded() { if (tabbed.getSelectedIndex() ==
-	 * sourceIndex) return storeSource(); else return true; }
-	 */
-	public boolean storeSource(boolean showError) {
-		// Store edited bibtex code.
-		BibtexParser bp = new BibtexParser(new java.io.StringReader(source.getText()));
-
-		try {
-			BibtexDatabase db = bp.parse().getDatabase();
-
-			if (db.getEntryCount() > 1)
-				throw new Exception("More than one entry found.");
-
-			if (db.getEntryCount() < 1)
-				throw new Exception("No entries found.");
-
-			NamedCompound compound = new NamedCompound(Globals.lang("source edit"));
-			BibtexEntry nu = db.getEntryById((String) db.getKeySet().iterator().next());
-			String id = entry.getId();
-			String
-			// oldKey = entry.getCiteKey(),
-			newKey = nu.getCiteKey();
-			boolean anyChanged = false;
-			boolean duplicateWarning = false;
-			boolean emptyWarning = newKey == null || newKey.equals("");
-
-			if (panel.database.setCiteKeyForEntry(id, newKey)) {
-				duplicateWarning = true;
-
-				// First, remove fields that the user have removed.
-			}
-
-			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());
-						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());
-
-					// Test if the field is legally set.
-					(new LatexFieldFormatter()).format(toSet, fields[i].toString());
-
-					compound.addEdit(new UndoableFieldChange(entry, fields[i].toString(), entry
-						.getField(fields[i].toString()), toSet));
-					entry.setField(fields[i].toString(), toSet);
-					anyChanged = true;
-				}
-			}
-
-			compound.end();
-
-			if (!anyChanged)
-				return true;
-
-			panel.undoManager.addEdit(compound);
-
-			/*
-			 * if (((oldKey == null) && (newKey != null)) || ((oldKey != null) &&
-			 * (newKey == null)) || ((oldKey != null) && (newKey != null) &&
-			 * !oldKey.equals(newKey))) { }
-			 */
-			if (duplicateWarning) {
-				warnDuplicateBibtexkey();
-			} else if (emptyWarning && showError) {
-				warnEmptyBibtexkey();
-			} else {
-				panel.output(Globals.lang("Stored entry") + ".");
-			}
-
-			lastSourceStringAccepted = source.getText();
-			updateAllFields();
-			lastSourceAccepted = true;
-			updateSource = true;
-
-			// TODO: does updating work properly after source stored?
-			// panel.tableModel.remap();
-			// panel.entryTable.repaint();
-			// panel.refreshTable();
-			panel.markBaseChanged();
-
-			return true;
-		} catch (Throwable ex) {
-			// ex.printStackTrace();
-			// The source couldn't be parsed, so the user is given an
-			// error message, and the choice to keep or revert the contents
-			// of the source text field.
-			updateSource = false;
-			lastSourceAccepted = false;
-			tabbed.setSelectedComponent(srcPanel);
-
-			if (showError) {
-				Object[] options = { Globals.lang("Edit"),
-					Globals.lang("Revert to original source") };
-
-				int answer = JOptionPane.showOptionDialog(frame, "Error: " + ex.getMessage(),
-					Globals.lang("Problem with parsing entry"), JOptionPane.YES_NO_OPTION,
-					JOptionPane.ERROR_MESSAGE, null, options, options[0]);
-
-				if (answer != 0) {
-					updateSource = true;
-					updateSource();
-				}
-			}
-
-			return false;
-		}
-	}
-
-	public void setField(String fieldName, String newFieldData) {
-
-		for (Iterator i = tabs.iterator(); i.hasNext();) {
-			Object o = i.next();
-			if (o instanceof EntryEditorTab) {
-				((EntryEditorTab) o).updateField(fieldName, newFieldData);
-			}
-		}
-
-	}
-
-	/**
-	 * Sets all the text areas according to the shown entry.
-	 */
-	public void updateAllFields() {
-		for (Iterator i = tabs.iterator(); i.hasNext();) {
-			Object o = i.next();
-			if (o instanceof EntryEditorTab) {
-				((EntryEditorTab) o).setEntry(entry);
-			}
-		}
-	}
-
-	/**
-	 * Removes the "invalid field" color from all text areas.
-	 */
-	public void validateAllFields() {
-		for (Iterator i = tabs.iterator(); i.hasNext();) {
-			Object o = i.next();
-			if (o instanceof EntryEditorTab) {
-				((EntryEditorTab) o).validateAllFields();
-			}
-		}
-	}
-
-	public void updateAllContentSelectors() {
-		if (contentSelectors.size() > 0) {
-			for (Iterator i = contentSelectors.iterator(); i.hasNext();)
-				((FieldContentSelector) i.next()).rebuildComboBox();
-		}
-	}
-
-	/*
-	 * Update the JTextArea when a field has changed.
-	 * 
-	 * (non-Javadoc)
-	 * 
-	 * @see java.beans.VetoableChangeListener#vetoableChange(java.beans.PropertyChangeEvent)
-	 */
-	public void vetoableChange(PropertyChangeEvent e) {
-		String newValue = ((e.getNewValue() != null) ? e.getNewValue().toString() : "");
-		setField(e.getPropertyName(), newValue);
-	}
-
-	public void updateField(final Object source) {
-		storeFieldAction.actionPerformed(new ActionEvent(source, 0, ""));
-	}
-
-	private class TypeLabel extends JPanel {
-		private String label;
-
-		public TypeLabel(String type) {
-			label = type;
-			addMouseListener(new MouseAdapter() {
-				public void mouseClicked(MouseEvent e) {
-					boolean ctrlClick = prefs.getBoolean("ctrlClick");
-
-					if ((e.getButton() == MouseEvent.BUTTON3)
-						|| (ctrlClick && (e.getButton() == MouseEvent.BUTTON1) && e.isControlDown())) {
-						JPopupMenu typeMenu = new JPopupMenu();
-
-						// typeMenu.addSeparator();
-						for (Iterator i = BibtexEntryType.ALL_TYPES.keySet().iterator(); i
-							.hasNext();)
-							typeMenu.add(new ChangeTypeAction(BibtexEntryType.getType((String) i
-								.next()), panel));
-
-						typeMenu.show(ths, e.getX(), e.getY());
-					}
-				}
-			});
-		}
-
-		public void paint(Graphics g) {
-			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.rotate(-Math.PI / 2, 0, 0);
-			g2.drawString(label, -width - 7, 28);
-		}
-	}
-
-	class FieldListener extends FocusAdapter {
-		/*
-		 * Focus listener that fires the storeFieldAction when a FieldTextArea
-		 * loses focus.
-		 */
-		public void focusGained(FocusEvent e) {
-		}
-
-		public void focusLost(FocusEvent e) {
-			// Util.pr("Lost focus "+e.getSource().toString().substring(0,30));
-			if (!e.isTemporary())
-				updateField(e.getSource());
-		}
-	}
-
-	class TabListener implements ChangeListener {
-		public void stateChanged(ChangeEvent e) {
-
-			SwingUtilities.invokeLater(new Runnable() {
-				public void run() {
-					activateVisible();
-				}
-			});
-
-			// After the initial event train has finished, we tell the editor
-			// tab to update all
-			// its fields. This makes sure they are updated even if the tab we
-			// just left contained one
-			// or more of the same fields as this one:
-			SwingUtilities.invokeLater(new Runnable() {
-				public void run() {
-					Object activeTab = tabs.get(tabbed.getSelectedIndex());
-					if (activeTab instanceof EntryEditorTab)
-						((EntryEditorTab) activeTab).updateAll();
-				}
-			});
-
-		}
-	}
-
-	class DeleteAction extends AbstractAction {
-		public DeleteAction() {
-			super(Globals.lang("Delete"), GUIGlobals.getImage("delete"));
-			putValue(SHORT_DESCRIPTION, Globals.lang("Delete entry"));
-		}
-
-		public void actionPerformed(ActionEvent e) {
-			// Show confirmation dialog if not disabled:
-			boolean goOn = panel.showDeleteConfirmationDialog(1);
-
-			if (!goOn)
-				return;
-
-			panel.entryEditorClosing(EntryEditor.this);
-			panel.database.removeEntry(entry.getId());
-			panel.markBaseChanged();
-			panel.undoManager.addEdit(new UndoableRemoveEntry(panel.database, entry, panel));
-			panel.output(Globals.lang("Deleted") + " " + Globals.lang("entry"));
-		}
-	}
-
-	class CloseAction extends AbstractAction {
-		public CloseAction() {
-			super(Globals.lang("Close window"), GUIGlobals.getImage("close"));
-			putValue(SHORT_DESCRIPTION, Globals.lang("Close window"));
-		}
-
-		public void actionPerformed(ActionEvent e) {
-			if (tabbed.getSelectedComponent() == srcPanel) {
-				updateField(source);
-				if (lastSourceAccepted)
-					panel.entryEditorClosing(EntryEditor.this);
-			} else
-				panel.entryEditorClosing(EntryEditor.this);
-		}
-	}
-
-	class CopyKeyAction extends AbstractAction {
-		public CopyKeyAction() {
-			super("Copy BibTeX key to clipboard");
-			putValue(SHORT_DESCRIPTION, "Copy BibTeX key to clipboard (Ctrl-K)");
-			// putValue(MNEMONIC_KEY, GUIGlobals.copyKeyCode);
-		}
-
-		public void actionPerformed(ActionEvent e) {
-			String s = (String) (entry.getField(BibtexFields.KEY_FIELD));
-			StringSelection ss = new StringSelection(s);
-
-			if (s != null)
-				Toolkit.getDefaultToolkit().getSystemClipboard().setContents(ss, ss);
-		}
-	}
-
-	public class StoreFieldAction extends AbstractAction {
-		public StoreFieldAction() {
-			super("Store field value");
-			putValue(SHORT_DESCRIPTION, "Store field value");
-		}
-
-		public void actionPerformed(ActionEvent e) {
-
-			if (e.getSource() instanceof FieldTextArea) {
-				String toSet = null;
-				FieldEditor fe = (FieldEditor) e.getSource();
-				boolean set;
-				// Trim the whitespace off this value
-				String currentText = fe.getText();
-				String trim = currentText.trim();
-				
-				if (trim.length() > 0) {
-					toSet = trim;
-				}
-
-				// We check if the field has changed, since we don't want to
-				// mark the base as changed unless we have a real change.
-				if (toSet == null) {
-					if (entry.getField(fe.getFieldName()) == null)
-						set = false;
-					else
-						set = true;
-				} else {
-					if ((entry.getField(fe.getFieldName()) != null)
-						&& toSet.equals(entry.getField(fe.getFieldName()).toString()))
-						set = false;
-					else
-						set = true;
-				}
-
-				if (set) {
-					try {
-						// The following statement attempts to write the
-						// new contents into a StringWriter, and this will
-						// cause an IOException if the field is not
-						// properly formatted. If that happens, the field
-						// is not stored and the textarea turns red.
-						if (toSet != null)
-							(new LatexFieldFormatter()).format(toSet, fe.getFieldName());
-
-						Object oldValue = entry.getField(fe.getFieldName());
-
-						if (toSet != null)
-							entry.setField(fe.getFieldName(), toSet);
-						else
-							entry.clearField(fe.getFieldName());
-
-						if ((toSet != null) && (toSet.length() > 0))
-							// fe.setLabelColor(GUIGlobals.validFieldColor);
-							fe.setBackground(GUIGlobals.validFieldBackground);
-						else
-							// fe.setLabelColor(GUIGlobals.nullFieldColor);
-							fe.setBackground(GUIGlobals.validFieldBackground);
-
-						// Add an UndoableFieldChange to the baseframe's
-						// undoManager.
-						panel.undoManager.addEdit(new UndoableFieldChange(entry, fe.getFieldName(),
-							oldValue, toSet));
-						updateSource();
-						panel.markBaseChanged();
-
-						// TODO: is this a safe solution to keep selection on
-						// entry?
-						SwingUtilities.invokeLater(new Runnable() {
-							public void run() {
-								panel.highlightEntry(entry);
-							}
-						});
-
-					} catch (IllegalArgumentException ex) {
-						JOptionPane.showMessageDialog(frame, "Error: " + ex.getMessage(), Globals
-							.lang("Error setting field"), JOptionPane.ERROR_MESSAGE);
-						fe.setBackground(GUIGlobals.invalidFieldBackground);
-					}
-				} else {
-					// set == false
-					// We set the field and label color.
-					fe.setBackground(GUIGlobals.validFieldBackground);
-				}
-			} else if (e.getSource() instanceof FieldTextField) {
-				// Storage from bibtex key field.
-				FieldTextField fe = (FieldTextField) e.getSource();
-				String oldValue = entry.getCiteKey();
-				String newValue = fe.getText();
-
-				if (newValue.equals(""))
-					newValue = null;
-
-				if (((oldValue == null) && (newValue == null))
-					|| ((oldValue != null) && (newValue != null) && oldValue.equals(newValue)))
-					return; // No change.
-
-				// Make sure the key is legal:
-				String cleaned = Util.checkLegalKey(newValue);
-				if ((cleaned != null) && !cleaned.equals(newValue)) {
-					JOptionPane.showMessageDialog(frame, Globals.lang("Invalid BibTeX key"),
-						Globals.lang("Error setting field"), JOptionPane.ERROR_MESSAGE);
-					fe.setBackground(GUIGlobals.invalidFieldBackground);
-					return;
-				} else {
-					fe.setBackground(/*
-										 * fe.getTextComponent().hasFocus() ?
-										 * GUIGlobals.activeEditor :
-										 */
-					GUIGlobals.validFieldBackground);
-				}
-
-				boolean isDuplicate = panel.database.setCiteKeyForEntry(entry.getId(), newValue);
-
-				if (newValue != null) {
-					if (isDuplicate)
-						warnDuplicateBibtexkey();
-					else
-						panel.output(Globals.lang("BibTeX key is unique."));
-				} else { // key is null/empty
-					warnEmptyBibtexkey();
-				}
-
-				// Add an UndoableKeyChange to the baseframe's undoManager.
-				panel.undoManager.addEdit(new UndoableKeyChange(panel.database, entry.getId(),
-					oldValue, newValue));
-
-				if ((newValue != null) && (newValue.length() > 0))
-					// fe.setLabelColor(GUIGlobals.validFieldColor);
-					fe.setBackground(GUIGlobals.validFieldBackground);
-				else
-					// fe.setLabelColor(GUIGlobals.nullFieldColor);
-					fe.setBackground(GUIGlobals.validFieldBackground);
-
-				updateSource();
-				panel.markBaseChanged();
-			} else if ((source.isEditable())
-				&& (!source.getText().equals(lastSourceStringAccepted))) {
-				boolean accepted = storeSource(true);
-
-				if (accepted) {
-				}
-			}
-		}
-	}
-
-	class SwitchLeftAction extends AbstractAction {
-		public SwitchLeftAction() {
-			super("Switch to the panel to the left");
-		}
-
-		public void actionPerformed(ActionEvent e) {
-			// System.out.println("switch left");
-			int i = tabbed.getSelectedIndex();
-			tabbed.setSelectedIndex(((i > 0) ? (i - 1) : (tabbed.getTabCount() - 1)));
-
-			activateVisible();
-		}
-	}
-
-	class SwitchRightAction extends AbstractAction {
-		public SwitchRightAction() {
-			super("Switch to the panel to the right");
-		}
-
-		public void actionPerformed(ActionEvent e) {
-			// System.out.println("switch right");
-			int i = tabbed.getSelectedIndex();
-			tabbed.setSelectedIndex((i < (tabbed.getTabCount() - 1)) ? (i + 1) : 0);
-			activateVisible();
-
-		}
-	}
-
-	class NextEntryAction extends AbstractAction {
-		public NextEntryAction() {
-			super(Globals.lang("Next entry"), GUIGlobals.getImage("down"));
-
-			putValue(SHORT_DESCRIPTION, Globals.lang("Next entry"));
-		}
-
-		public void actionPerformed(ActionEvent e) {
-
-			int thisRow = panel.mainTable.findEntry(entry);
-			int newRow = -1;
-
-			if ((thisRow + 1) < panel.database.getEntryCount())
-				newRow = thisRow + 1;
-			else if (thisRow > 0)
-				newRow = 0;
-			else
-				return; // newRow is still -1, so we can assume the database has
-						// only one entry.
-
-			scrollTo(newRow);
-			panel.mainTable.setRowSelectionInterval(newRow, newRow);
-
-		}
-	}
-
-	class PrevEntryAction extends AbstractAction {
-		public PrevEntryAction() {
-			super(Globals.lang("Previous entry"), GUIGlobals.getImage("up"));
-
-			putValue(SHORT_DESCRIPTION, Globals.lang("Previous entry"));
-		}
-
-		public void actionPerformed(ActionEvent e) {
-			int thisRow = panel.mainTable.findEntry(entry);
-			int newRow = -1;
-
-			if ((thisRow - 1) >= 0)
-				newRow = thisRow - 1;
-			else if (thisRow != (panel.database.getEntryCount() - 1))
-				newRow = panel.database.getEntryCount() - 1;
-			else
-				return; // newRow is still -1, so we can assume the database has
-						// only one entry.
-			// id = panel.tableModel.getIdForRow(newRow);
-			// switchTo(id);
-
-			scrollTo(newRow);
-			panel.mainTable.setRowSelectionInterval(newRow, newRow);
-
-		}
-	}
-
-	class GenerateKeyAction extends AbstractAction {
-		JabRefFrame parent;
-
-		BibtexEntry selectedEntry;
-
-		public GenerateKeyAction(JabRefFrame parentFrame) {
-			super(Globals.lang("Generate BibTeX key"), GUIGlobals.getImage("makeKey"));
-			parent = parentFrame;
-
-			// selectedEntry = newEntry ;
-			putValue(SHORT_DESCRIPTION, Globals.lang("Generate BibTeX key"));
-
-			// putValue(MNEMONIC_KEY, GUIGlobals.showGenKeyCode);
-		}
-
-		public void actionPerformed(ActionEvent e) {
-			// 1. get Bitexentry for selected index (already have)
-			// 2. run the LabelMaker by it
-			try {
-				// this updates the table automatically, on close, but not
-				// within the tab
-				Object oldValue = entry.getField(BibtexFields.KEY_FIELD);
-
-				// entry = frame.labelMaker.applyRule(entry, panel.database) ;
-				LabelPatternUtil.makeLabel(prefs.getKeyPattern(), panel.database, entry);
-
-				// Store undo information:
-				panel.undoManager.addEdit(new UndoableKeyChange(panel.database, entry.getId(),
-					(String) oldValue, (String) entry.getField(BibtexFields.KEY_FIELD)));
-
-				// here we update the field
-				String bibtexKeyData = (String) entry.getField(BibtexFields.KEY_FIELD);
-
-				// set the field named for "bibtexkey"
-				setField(BibtexFields.KEY_FIELD, bibtexKeyData);
-				updateSource();
-				panel.markBaseChanged();
-			} catch (Throwable t) {
-				System.err.println("error setting key: " + t);
-			}
-		}
-	}
-
-	class UndoAction extends AbstractAction {
-		public UndoAction() {
-			super("Undo", GUIGlobals.getImage("undo"));
-			putValue(SHORT_DESCRIPTION, "Undo");
-		}
-
-		public void actionPerformed(ActionEvent e) {
-			try {
-				panel.runCommand("undo");
-			} catch (Throwable ex) {
-			}
-		}
-	}
-
-	class RedoAction extends AbstractAction {
-		public RedoAction() {
-			super("Undo", GUIGlobals.getImage("redo"));
-			putValue(SHORT_DESCRIPTION, "Redo");
-		}
-
-		public void actionPerformed(ActionEvent e) {
-			try {
-				panel.runCommand("redo");
-			} catch (Throwable ex) {
-			}
-		}
-	}
-
-	class SaveDatabaseAction extends AbstractAction {
-		public SaveDatabaseAction() {
-			super("Save database");
-		}
-
-		public void actionPerformed(ActionEvent e) {
-			Object activeTab = tabs.get(tabbed.getSelectedIndex());
-			if (activeTab instanceof EntryEditorTab) {
-				// Normal panel.
-				EntryEditorTab fp = (EntryEditorTab) activeTab;
-				updateField(fp.getActive());
-			} else
-				// Source panel.
-				updateField(activeTab);
-
-			try {
-				panel.runCommand("save");
-			} catch (Throwable ex) {
-			}
-		}
-	}
-
-	class ExternalViewerListener extends MouseAdapter {
-		public void mouseClicked(MouseEvent evt) {
-			if (evt.getClickCount() == 2) {
-				FieldTextArea tf = (FieldTextArea) evt.getSource();
-
-				if (tf.getText().equals(""))
-					return;
-
-				tf.selectAll();
-
-				String link = tf.getText(); // get selected ? String
-
-				// getSelectedText()
-				try {
-					Util.openExternalViewer(panel.metaData(), link, tf.getFieldName());
-				} catch (IOException ex) {
-					System.err.println("Error opening file.");
-				}
-			}
-		}
-	}
-
-	class ChangeTypeAction extends AbstractAction {
-		BibtexEntryType type;
-
-		BasePanel panel;
-
-		public ChangeTypeAction(BibtexEntryType type, BasePanel bp) {
-			super(type.getName());
-			this.type = type;
-			panel = bp;
-		}
-
-		public void actionPerformed(ActionEvent evt) {
-			panel.changeType(entry, type);
-		}
-	}
-
-	/**
-	 * 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."));
-
-		if (prefs.getBoolean("dialogWarningForDuplicateKey")) {
-			// JZTODO lyrics
-			CheckBoxMessage jcb = new CheckBoxMessage(Globals.lang("Warning") + ": "
-				+ Globals.lang("Duplicate BibTeX key. Grouping may not work for this entry."),
-				Globals.lang("Disable this warning dialog"), false);
-			JOptionPane.showMessageDialog(frame, jcb, Globals.lang("Warning"),
-				JOptionPane.WARNING_MESSAGE);
-
-			if (jcb.isSelected())
-				prefs.putBoolean("dialogWarningForDuplicateKey", false);
-		}
-	}
-
-	private void warnEmptyBibtexkey() {
-		// JZTODO lyrics
-		panel.output(Globals.lang("Warning") + ": " + Globals.lang("Empty BibTeX key."));
-
-		if (prefs.getBoolean("dialogWarningForEmptyKey")) {
-			// JZTODO lyrics
-			CheckBoxMessage jcb = new CheckBoxMessage(Globals.lang("Warning") + ": "
-				+ Globals.lang("Empty BibTeX key. Grouping may not work for this entry."), Globals
-				.lang("Disable this warning dialog"), false);
-			JOptionPane.showMessageDialog(frame, jcb, Globals.lang("Warning"),
-				JOptionPane.WARNING_MESSAGE);
-
-			if (jcb.isSelected())
-				prefs.putBoolean("dialogWarningForEmptyKey", false);
-		}
-	}
+    }
+
+    class GenerateKeyAction extends AbstractAction {
+        JabRefFrame parent;
+
+        BibtexEntry selectedEntry;
+
+        public GenerateKeyAction(JabRefFrame parentFrame) {
+            super(Globals.lang("Generate BibTeX key"), GUIGlobals.getImage("makeKey"));
+            parent = parentFrame;
+
+            // selectedEntry = newEntry ;
+            putValue(SHORT_DESCRIPTION, Globals.lang("Generate BibTeX key"));
+
+            // putValue(MNEMONIC_KEY, GUIGlobals.showGenKeyCode);
+        }
+
+        public void actionPerformed(ActionEvent e) {
+            // 1. get Bitexentry for selected index (already have)
+            // 2. run the LabelMaker by it
+            try {
+                // this updates the table automatically, on close, but not
+                // within the tab
+                Object oldValue = entry.getField(BibtexFields.KEY_FIELD);
+
+                // entry = frame.labelMaker.applyRule(entry, panel.database) ;
+                LabelPatternUtil.makeLabel(prefs.getKeyPattern(), panel.database, entry);
+
+                // Store undo information:
+                panel.undoManager.addEdit(new UndoableKeyChange(panel.database, entry.getId(),
+                    (String) oldValue, (String) entry.getField(BibtexFields.KEY_FIELD)));
+
+                // here we update the field
+                String bibtexKeyData = (String) entry.getField(BibtexFields.KEY_FIELD);
+
+                // set the field named for "bibtexkey"
+                setField(BibtexFields.KEY_FIELD, bibtexKeyData);
+                updateSource();
+                panel.markBaseChanged();
+            } catch (Throwable t) {
+                System.err.println("error setting key: " + t);
+            }
+        }
+    }
+
+    class UndoAction extends AbstractAction {
+        public UndoAction() {
+            super("Undo", GUIGlobals.getImage("undo"));
+            putValue(SHORT_DESCRIPTION, "Undo");
+        }
+
+        public void actionPerformed(ActionEvent e) {
+            try {
+                panel.runCommand("undo");
+            } catch (Throwable ex) {
+            }
+        }
+    }
+
+    class RedoAction extends AbstractAction {
+        public RedoAction() {
+            super("Undo", GUIGlobals.getImage("redo"));
+            putValue(SHORT_DESCRIPTION, "Redo");
+        }
+
+        public void actionPerformed(ActionEvent e) {
+            try {
+                panel.runCommand("redo");
+            } catch (Throwable ex) {
+            }
+        }
+    }
+
+    class SaveDatabaseAction extends AbstractAction {
+        public SaveDatabaseAction() {
+            super("Save database");
+        }
+
+        public void actionPerformed(ActionEvent e) {
+            Object activeTab = tabs.get(tabbed.getSelectedIndex());
+            if (activeTab instanceof EntryEditorTab) {
+                // Normal panel.
+                EntryEditorTab fp = (EntryEditorTab) activeTab;
+                updateField(fp.getActive());
+            } else
+                // Source panel.
+                updateField(activeTab);
+
+            try {
+                panel.runCommand("save");
+            } catch (Throwable ex) {
+            }
+        }
+    }
+
+    class ExternalViewerListener extends MouseAdapter {
+        public void mouseClicked(MouseEvent evt) {
+            if (evt.getClickCount() == 2) {
+                FieldTextArea tf = (FieldTextArea) evt.getSource();
+
+                if (tf.getText().equals(""))
+                    return;
+
+                tf.selectAll();
+
+                String link = tf.getText(); // get selected ? String
+
+                // getSelectedText()
+                try {
+                    Util.openExternalViewer(panel.metaData(), link, tf.getFieldName());
+                } catch (IOException ex) {
+                    System.err.println("Error opening file.");
+                }
+            }
+        }
+    }
+
+    class ChangeTypeAction extends AbstractAction {
+        BibtexEntryType type;
+
+        BasePanel panel;
+
+        public ChangeTypeAction(BibtexEntryType type, BasePanel bp) {
+            super(type.getName());
+            this.type = type;
+            panel = bp;
+        }
+
+        public void actionPerformed(ActionEvent evt) {
+            panel.changeType(entry, type);
+        }
+    }
+
+    /**
+     * 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."));
+
+        if (prefs.getBoolean("dialogWarningForDuplicateKey")) {
+            // JZTODO lyrics
+            CheckBoxMessage jcb = new CheckBoxMessage(Globals.lang("Warning") + ": "
+                + Globals.lang("Duplicate BibTeX key. Grouping may not work for this entry."),
+                Globals.lang("Disable this warning dialog"), false);
+            JOptionPane.showMessageDialog(frame, jcb, Globals.lang("Warning"),
+                JOptionPane.WARNING_MESSAGE);
+
+            if (jcb.isSelected())
+                prefs.putBoolean("dialogWarningForDuplicateKey", false);
+        }
+    }
+
+    private void warnEmptyBibtexkey() {
+        // JZTODO lyrics
+        panel.output(Globals.lang("Warning") + ": " + Globals.lang("Empty BibTeX key."));
+
+        if (prefs.getBoolean("dialogWarningForEmptyKey")) {
+            // JZTODO lyrics
+            CheckBoxMessage jcb = new CheckBoxMessage(Globals.lang("Warning") + ": "
+                + Globals.lang("Empty BibTeX key. Grouping may not work for this entry."), Globals
+                .lang("Disable this warning dialog"), false);
+            JOptionPane.showMessageDialog(frame, jcb, Globals.lang("Warning"),
+                JOptionPane.WARNING_MESSAGE);
+
+            if (jcb.isSelected())
+                prefs.putBoolean("dialogWarningForEmptyKey", false);
+        }
+    }
 
 }
diff --git a/src/java/net/sf/jabref/EntryEditorPrefsTab.java b/src/java/net/sf/jabref/EntryEditorPrefsTab.java
new file mode 100644
index 0000000..5eb7da0
--- /dev/null
+++ b/src/java/net/sf/jabref/EntryEditorPrefsTab.java
@@ -0,0 +1,128 @@
+package net.sf.jabref;
+
+import com.jgoodies.forms.layout.FormLayout;
+import com.jgoodies.forms.layout.CellConstraints;
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+
+import javax.swing.*;
+import javax.swing.event.ChangeListener;
+import javax.swing.event.ChangeEvent;
+import java.awt.*;
+import java.util.Iterator;
+import java.text.SimpleDateFormat;
+
+public class EntryEditorPrefsTab extends JPanel implements PrefsTab {
+
+    private JCheckBox autoOpenForm, showSource,
+        defSource, editSource, disableOnMultiple, autoComplete;
+    private JTextField autoCompFields;
+    JabRefPreferences _prefs;
+    JabRefFrame _frame;
+
+    public EntryEditorPrefsTab(JabRefFrame frame, JabRefPreferences prefs) {
+        _prefs = prefs;
+        _frame = frame;
+        setLayout(new BorderLayout());
+
+
+        autoOpenForm = new JCheckBox(Globals.lang("Open editor when a new entry is created"));
+        defSource = new JCheckBox(Globals.lang("Show BibTeX source by default"));
+        showSource = new JCheckBox(Globals.lang("Show BibTeX source panel"));
+        editSource = new JCheckBox(Globals.lang("Enable source editing"));
+        disableOnMultiple = new JCheckBox(Globals.lang("Disable entry editor when multiple entries are selected"));
+        autoComplete = new JCheckBox(Globals.lang("Enable word/name autocompletion"));
+        autoCompFields = new JTextField(40);
+        JPanel general = new JPanel();
+        Insets marg = new Insets(0,12,3,0);
+        editSource.setMargin(marg);
+        defSource.setMargin(marg);
+        // We need a listener on showSource to enable and disable the source panel-related choices:
+        showSource.addChangeListener(new ChangeListener() {
+            public void stateChanged(ChangeEvent event) {
+                defSource.setEnabled(showSource.isSelected());
+                editSource.setEnabled(showSource.isSelected());
+            }
+        }
+        );
+        // We need a listener on autoComplete to enable and disable the
+        // autoCompFields text field:
+        autoComplete.addChangeListener(new ChangeListener() {
+            public void stateChanged(ChangeEvent event) {
+                autoCompFields.setEnabled(autoComplete.isSelected());
+            }
+        }
+        );
+
+        FormLayout layout = new FormLayout
+                ("8dlu, left:pref, 8dlu, fill:150dlu, 4dlu, fill:pref", // 4dlu, left:pref, 4dlu",
+                        "pref, 6dlu, pref, 6dlu, pref, 6dlu, pref, 6dlu, pref, 6dlu, "
+                                    +"pref, 6dlu, pref, 6dlu, pref, 6dlu, pref");
+        DefaultFormBuilder builder = new DefaultFormBuilder(layout);
+        CellConstraints cc = new CellConstraints();
+        builder.addSeparator(Globals.lang("Editor options"), cc.xyw(1,1, 5));
+        builder.add(autoOpenForm, cc.xy(2, 3));
+        builder.add(disableOnMultiple, cc.xy(2, 5));
+        builder.add(showSource, cc.xy(2, 7));
+        builder.add(defSource, cc.xy(2, 9));
+        builder.add(autoComplete, cc.xy(2, 11));
+        JLabel label = new JLabel(Globals.lang("Use autocompletion for the following fields")+":");
+        DefaultFormBuilder builder3 = new DefaultFormBuilder
+                (new FormLayout("left:pref, 4dlu, fill:150dlu",""));
+        builder3.append(label);
+        builder3.append(autoCompFields);
+        builder.add(builder3.getPanel(), cc.xyw(2, 13, 3));
+
+        JPanel pan = builder.getPanel();
+        pan.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
+        add(pan, BorderLayout.CENTER);
+
+    }
+
+    public void setValues() {
+        autoOpenForm.setSelected(_prefs.getBoolean("autoOpenForm"));
+        defSource.setSelected(_prefs.getBoolean("defaultShowSource"));
+        showSource.setSelected(_prefs.getBoolean("showSource"));
+        editSource.setSelected(_prefs.getBoolean("enableSourceEditing"));
+        disableOnMultiple.setSelected(_prefs.getBoolean("disableOnMultipleSelection"));
+        autoComplete.setSelected(_prefs.getBoolean("autoComplete"));
+        autoCompFields.setText(_prefs.get("autoCompleteFields"));
+        // Two choices only make sense when the source panel is visible:
+        defSource.setEnabled(showSource.isSelected());
+        editSource.setEnabled(showSource.isSelected());
+        // Autocomplete fields is only enabled when autocompletion is:
+        autoCompFields.setEnabled(autoComplete.isSelected());
+        
+    }
+
+    public void storeSettings() {
+        _prefs.putBoolean("autoOpenForm", autoOpenForm.isSelected());
+        _prefs.putBoolean("defaultShowSource", defSource.isSelected());
+        _prefs.putBoolean("enableSourceEditing", editSource.isSelected());
+        _prefs.putBoolean("disableOnMultipleSelection", disableOnMultiple.isSelected());
+        // We want to know if the following settings have been modified:
+        boolean oldAutoComplete = _prefs.getBoolean("autoComplete");
+        boolean oldShowSource = _prefs.getBoolean("showSource");
+        String oldAutoCompFields = _prefs.get("autoCompleteFields");
+        _prefs.putBoolean("autoComplete", autoComplete.isSelected());
+        _prefs.put("autoCompleteFields", autoCompFields.getText());
+        _prefs.putBoolean("showSource", showSource.isSelected());
+        // We need to remove all entry editors from cache if the source panel setting
+        // or the autocompletion settings have been changed:
+        if ((oldShowSource != showSource.isSelected()) || (oldAutoComplete != autoComplete.isSelected())
+                || (!oldAutoCompFields.equals(autoCompFields.getText()))) {
+            for (int j=0; j<_frame.getTabbedPane().getTabCount(); j++) {
+	            BasePanel bp = (BasePanel)_frame.getTabbedPane().getComponentAt(j);
+	            bp.entryEditors.clear();
+            }
+        }
+
+    }
+
+    public boolean readyToClose() {
+        return true;
+    }
+
+	public String getTabName() {
+		return Globals.lang("Entry editor");
+	}
+}
diff --git a/src/java/net/sf/jabref/EntryEditorTab.java b/src/java/net/sf/jabref/EntryEditorTab.java
index a401507..ca331e5 100644
--- a/src/java/net/sf/jabref/EntryEditorTab.java
+++ b/src/java/net/sf/jabref/EntryEditorTab.java
@@ -28,9 +28,6 @@ import java.awt.AWTKeyStroke;
 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.KeyboardFocusManager;
 import java.awt.event.FocusEvent;
 import java.awt.event.FocusListener;
@@ -50,12 +47,15 @@ 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.FileListEditor;
 
 /**
  * A single tab displayed in the EntryEditor holding several FieldEditors.
  * 
- * @author $Author: coezbek $
- * @version $Revision: 1.19 $ ($Date: 2006/11/12 01:41:55 $)
+ * @author $Author: mortenalver $
+ * @version $Revision: 1.23 $ ($Date: 2007/06/13 20:47:58 $)
  * 
  */
 public class EntryEditorTab {
@@ -72,7 +72,8 @@ public class EntryEditorTab {
 
 	private Component firstComponent;
 
-	public EntryEditorTab(List fields, EntryEditor parent, boolean addKeyField, String name) {
+	public EntryEditorTab(JabRefFrame frame, BasePanel panel, List fields, EntryEditor parent,
+                          boolean addKeyField, String name) {
 		if (fields != null)
 			this.fields = (String[]) fields.toArray(new String[0]);
 		else
@@ -80,7 +81,7 @@ public class EntryEditorTab {
 
 		this.parent = parent;
 
-		newSetupPanel(addKeyField, name);
+		setupPanel(frame, panel, addKeyField, name);
 
 		/*
 		 * The following line makes sure focus cycles inside tab instead of
@@ -90,7 +91,7 @@ public class EntryEditorTab {
 	}
 
 
-    void newSetupPanel(boolean addKeyField, String title) {
+    void setupPanel(JabRefFrame frame, BasePanel bPanel, boolean addKeyField, String title) {
     	
     	InputMap im = panel.getInputMap(JComponent.WHEN_FOCUSED);
 		ActionMap am = panel.getActionMap();
@@ -136,9 +137,22 @@ public class EntryEditorTab {
 
         for (int i = 0; i < fields.length; i++) {
             // Create the text area:
-            final FieldTextArea ta = new FieldTextArea(fields[i], null);
+            int editorType = BibtexFields.getEditorType(fields[i]);
+
+            final FieldEditor ta;
+            if (editorType == GUIGlobals.FILE_LIST_EDITOR)
+                ta = new FileListEditor(frame, bPanel.metaData(), fields[i], null, parent);
+            else
+                ta = new FieldTextArea(fields[i], null);
+
             JComponent ex = parent.getExtra(fields[i], ta);
-            setupJTextComponent(ta);
+            setupJTextComponent(ta.getTextComponent());
+
+            // Add autocompleter listener, if required for this field:
+            AutoCompleter autoComp = bPanel.getAutoCompleter(fields[i]);
+            if (autoComp != null) {
+                ta.getTextComponent().addKeyListener(new AutoCompleteListener(autoComp));
+            }
 
             // Store the editor for later reference:
             editors.put(fields[i], ta);
@@ -179,97 +193,6 @@ public class EntryEditorTab {
 		}
     }
 
-    void setupPanel(boolean addKeyField, String title) {
-		GridBagLayout gbl = new GridBagLayout();
-		GridBagConstraints con = new GridBagConstraints();
-		panel.setLayout(gbl);
-		double totalWeight = 0;
-
-		for (int i = 0; i < fields.length; i++) {
-			// Create the text area:
-			final FieldTextArea ta = new FieldTextArea(fields[i], null);
-			JComponent ex = parent.getExtra(fields[i], ta);
-			
-			if (firstComponent == null){
-				firstComponent = ex;
-			}
-			
-			setupJTextComponent(ta);
-
-			// Store the editor for later reference:
-			editors.put(fields[i], ta);
-			if (i == 0)
-				activeField = ta;
-
-			// The label for this field:
-			con.insets = new Insets(5, 5, 0, 0);
-			con.anchor = GridBagConstraints.WEST;
-			con.fill = GridBagConstraints.BOTH;
-			con.gridwidth = 1;
-			con.weightx = 0;
-			con.weighty = 0;
-			con.anchor = GridBagConstraints.NORTH;
-			con.fill = GridBagConstraints.BOTH;
-			gbl.setConstraints(ta.getLabel(), con);
-			panel.add(ta.getLabel());
-
-			// The field itself:
-			con.fill = GridBagConstraints.BOTH;
-			con.weightx = 1;
-			con.weighty = BibtexFields.getFieldWeight(fields[i]);
-			totalWeight += con.weighty;
-			// The gridwidth depends on whether we will add an extra component
-			// to the right:
-			if (ex != null)
-				con.gridwidth = 1;
-			else
-				con.gridwidth = GridBagConstraints.REMAINDER;
-			gbl.setConstraints(ta.getPane(), con);
-			panel.add(ta.getPane());
-
-			// Possibly an extra component:
-			if (ex != null) {
-				con.gridwidth = GridBagConstraints.REMAINDER;
-				con.anchor = GridBagConstraints.NORTH;
-				con.fill = GridBagConstraints.HORIZONTAL;
-				con.weightx = 0;
-				gbl.setConstraints(ex, con);
-				panel.add(ex);
-			}
-			panel.setName(title);
-		}
-
-		// Add the edit field for Bibtex-key.
-		if (addKeyField) {
-			con.insets.top += 25;
-			con.insets.bottom = 10;
-			con.gridwidth = 1;
-			con.weighty = 0;
-			con.weightx = 0;
-			con.fill = GridBagConstraints.HORIZONTAL;
-			con.anchor = GridBagConstraints.SOUTHWEST;
-
-			final FieldTextField tf = new FieldTextField(BibtexFields.KEY_FIELD, (String) parent
-				.getEntry().getField(BibtexFields.KEY_FIELD), true);
-			setupJTextComponent(tf);
-
-			editors.put("bibtexkey", tf);
-			/*
-			 * If the key field is the only field, we should have only one
-			 * editor, and this one should be set as active initially:
-			 */
-			if (editors.size() == 1)
-				activeField = tf;
-
-			gbl.setConstraints(tf.getLabel(), con);
-			panel.add(tf.getLabel());
-			con.gridwidth = GridBagConstraints.REMAINDER;
-			con.weightx = 1;
-
-			gbl.setConstraints(tf, con);
-			panel.add(tf);
-		}
-	}
 
 	BibtexEntry entry;
 
@@ -390,7 +313,7 @@ public class EntryEditorTab {
 	 * 
 	 * @param component
 	 */
-	public void setupJTextComponent(final JTextComponent component) {
+	public void setupJTextComponent(final JComponent component) {
 
 		component.addFocusListener(fieldListener);
 
@@ -433,7 +356,8 @@ public class EntryEditorTab {
 		} catch (Throwable t) {
 			System.err.println(t);
 		}
-	}
+
+    }
 
 	/*
 	 * Focus listener that fires the storeFieldAction when a FieldTextArea loses
@@ -492,7 +416,7 @@ public class EntryEditorTab {
 		}
 
 		public void focusLost(FocusEvent e) {
-			synchronized (this) {
+            synchronized (this) {
 				if (c != null) {
 					c.getDocument().removeDocumentListener(d);
 					c = null;
diff --git a/src/java/net/sf/jabref/ExternalProgramsTab.java b/src/java/net/sf/jabref/ExternalProgramsTab.java
deleted file mode 100644
index 7d8b4d9..0000000
--- a/src/java/net/sf/jabref/ExternalProgramsTab.java
+++ /dev/null
@@ -1,143 +0,0 @@
-package net.sf.jabref;
-
-import javax.swing.*;
-import javax.swing.table.*;
-import java.awt.*;
-import java.awt.event.*;
-import java.io.File;
-
-/**
- * 
- * 
- *  @version $Revision: 1.6 $ ($Date: 2007/01/22 23:00:47 $)
- *  @deprecated Use ExternalTab instead.
- */
-class ExternalProgramsTab extends JPanel implements PrefsTab {
-
-    JabRefPreferences _prefs;
-    private GridBagLayout gbl = new GridBagLayout();
-    private GridBagConstraints con = new GridBagConstraints();
-    JTextField
-	pdf, ps, html, lyx;
-
-    public ExternalProgramsTab (JabRefPreferences prefs) {
-	_prefs = prefs;
-
-	pdf = new JTextField(_prefs.get("pdfviewer"), 30);
-	ps = new JTextField(_prefs.get("psviewer"), 30);
-	html = new JTextField(_prefs.get("htmlviewer"), 30);
-	lyx = new JTextField(_prefs.get("lyxpipe"), 30);
-
-	/*setBorder(BorderFactory.createTitledBorder
-		  (BorderFactory.createEtchedBorder(),
-		  Globals.lang("Paths to external programs")));*/
-	JLabel lab;
-	setLayout(gbl);
-	con.weightx = 0;
-	con.insets = new Insets(10, 10, 10, 10);
-	con.fill = GridBagConstraints.HORIZONTAL;
-	lab = new JLabel(Globals.lang("Path to PDF viewer")+":");
-	gbl.setConstraints(lab, con);
-        add(lab);
-	con.weightx = 1;
-	gbl.setConstraints(pdf, con);
-	add(pdf);
-	con.weightx = 0;
-        con.gridwidth = GridBagConstraints.REMAINDER;
-        JButton browse = new JButton(Globals.lang("Browse"));
-        browse.addActionListener(new BrowseAction(pdf));
-        gbl.setConstraints(browse, con);
-        add(browse);
-        con.gridwidth = 1;
-	con.fill = GridBagConstraints.HORIZONTAL;
-	lab = new JLabel(Globals.lang("Path to PS viewer")+":");
-	gbl.setConstraints(lab, con);
-	add(lab);
-	con.weightx = 1;
-	gbl.setConstraints(ps, con);
-	add(ps);
-	con.weightx = 0;
-        con.gridwidth = GridBagConstraints.REMAINDER;
-        browse = new JButton(Globals.lang("Browse"));
-        browse.addActionListener(new BrowseAction(ps));
-        gbl.setConstraints(browse, con);
-        add(browse);
-	con.gridwidth = 1;
-	lab = new JLabel(Globals.lang("Path to HTML viewer")+":");
-	gbl.setConstraints(lab, con);
-	add(lab);
-	con.weightx = 1;
-	gbl.setConstraints(html, con);
-	add(html);
-        con.gridwidth = GridBagConstraints.REMAINDER;
-	con.weightx = 0;
-        browse = new JButton(Globals.lang("Browse"));
-        browse.addActionListener(new BrowseAction(html));
-        gbl.setConstraints(browse, con);
-        add(browse);
-	con.gridwidth = 1;
-	con.fill = GridBagConstraints.HORIZONTAL;
-	lab = new JLabel(Globals.lang("Path to LyX pipe")+":");
-	gbl.setConstraints(lab, con);
-	add(lab);
-        con.weightx = 1;
-	gbl.setConstraints(lyx, con);
-	add(lyx);
-        con.weightx = 0;
-        browse = new JButton(Globals.lang("Browse"));
-        browse.addActionListener(new BrowseAction(lyx));
-        gbl.setConstraints(browse, con);
-        add(browse);
-
-    }
-
-  /**
-   * Action used to produce a "Browse" button for one of the text fields.
-   */
-  class BrowseAction extends AbstractAction {
-      JTextField comp;
-      public BrowseAction(JTextField tc) {
-        super(Globals.lang("Browse"));
-        comp = tc;
-      }
-      public void actionPerformed(ActionEvent e) {
-        JabRefFileChooser chooser = new JabRefFileChooser(new File(comp.getText()));
-        //chooser.addChoosableFileFilter(new OpenFileFilter()); //nb nov2
-        int returnVal = chooser.showOpenDialog(null);
-        if (returnVal == JFileChooser.APPROVE_OPTION) {
-          File newFile = chooser.getSelectedFile();
-          comp.setText(newFile.getPath());
-        }
-      }
-    }
-
-    public void setValues() {
-
-    }
-
-    /**
-     * Store changes to table preferences. This method is called when
-     * the user clicks Ok.
-     *
-     */
-    public void storeSettings() {
-
-	// We should maybe do some checking on the validity of the contents?
-
-	_prefs.put("pdfviewer", pdf.getText());
-	_prefs.put("psviewer", ps.getText());
-	_prefs.put("htmlviewer", html.getText());
-	_prefs.put("lyxpipe", lyx.getText());
-    }
-
-    public boolean readyToClose() {
-	return true;
-    }
-
-	public String getTabName() {
-		return Globals.lang("External programs");
-	}
-}
-
-
-
diff --git a/src/java/net/sf/jabref/ExternalTab.java b/src/java/net/sf/jabref/ExternalTab.java
index b8e58ca..68d7d32 100644
--- a/src/java/net/sf/jabref/ExternalTab.java
+++ b/src/java/net/sf/jabref/ExternalTab.java
@@ -3,6 +3,8 @@ 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.BorderFactory;
 import javax.swing.JButton;
@@ -13,6 +15,7 @@ import javax.swing.JTextField;
 
 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 {
 
@@ -20,27 +23,35 @@ public class ExternalTab extends JPanel implements PrefsTab {
 
 	JabRefFrame _frame;
 
-	JTextField pdfDir, regExpTextField, psDir, pdf, ps, html, lyx, winEdt, citeCommand;
+	JTextField pdfDir, regExpTextField, fileDir, psDir, pdf, ps, html, lyx, winEdt, led,
+        citeCommand, vim, vimServer;
 
-	ItemListener regExpListener;
+    JButton editFileTypes;
+    ItemListener regExpListener;
 
 	JCheckBox useRegExpComboBox;
 
-	public ExternalTab(JabRefFrame frame, JabRefPreferences prefs, HelpDialog helpDialog) {
+	public ExternalTab(JabRefFrame frame, PrefsDialog3 prefsDiag, JabRefPreferences prefs, 
+                       HelpDialog helpDialog) {
 		_prefs = prefs;
 		_frame = frame;
 		setLayout(new BorderLayout());
 
 		psDir = new JTextField(30);
 		pdfDir = new JTextField(30);
-		pdf = new JTextField(30);
+        fileDir = new JTextField(30);
+        pdf = new JTextField(30);
 		ps = new JTextField(30);
 		html = new JTextField(30);
 		lyx = new JTextField(30);
 		winEdt = new JTextField(30);
-		citeCommand = new JTextField(30);
+		vim = new JTextField(30);
+		vimServer = new JTextField(30);
+        citeCommand = new JTextField(30);
+        led = new JTextField(30);
+        editFileTypes = new JButton(Globals.lang("Manage external file types"));
 
-		regExpTextField = new JTextField(30);
+        regExpTextField = new JTextField(30);
 
 		useRegExpComboBox = new JCheckBox(Globals.lang("Use Regular Expression Search"));
 		regExpListener = new ItemListener() {
@@ -59,7 +70,9 @@ public class ExternalTab extends JPanel implements PrefsTab {
 		};
 		useRegExpComboBox.addItemListener(regExpListener);
 
-		BrowseAction browse;
+        editFileTypes.addActionListener(ExternalFileTypeEditor.getAction(prefsDiag));
+
+        BrowseAction browse;
 
 		FormLayout layout = new FormLayout(
 			"1dlu, 8dlu, left:pref, 4dlu, fill:200dlu, 4dlu, fill:pref",// 4dlu,
@@ -69,17 +82,26 @@ public class ExternalTab extends JPanel implements PrefsTab {
 
 		DefaultFormBuilder builder = new DefaultFormBuilder(layout);
 
-		builder.appendSeparator(Globals.lang("PDF and PS links"));
+		builder.appendSeparator(Globals.lang("External file links"));
 		JPanel pan = new JPanel();
 		builder.append(pan);
-		JLabel lab = new JLabel(Globals.lang("Main PDF directory") + ":");
+		JLabel lab = new JLabel(Globals.lang("Main %0 directory", GUIGlobals.FILE_FIELD) + ":");
+		builder.append(lab);
+		builder.append(fileDir);
+		browse = new BrowseAction(_frame, fileDir, true);
+		builder.append(new JButton(browse));
+		builder.nextLine();
+
+        pan = new JPanel();
+		builder.append(pan);
+		lab = new JLabel(Globals.lang("Main PDF directory") + ":");
 		builder.append(lab);
 		builder.append(pdfDir);
 		browse = new BrowseAction(_frame, pdfDir, true);
 		builder.append(new JButton(browse));
 		builder.nextLine();
 
-		pan = new JPanel();
+        pan = new JPanel();
 		builder.append(pan);
 		lab = new JLabel(Globals.lang("Main PS directory") + ":");
 		builder.append(lab);
@@ -98,7 +120,7 @@ public class ExternalTab extends JPanel implements PrefsTab {
 
 		builder.appendSeparator(Globals.lang("External programs"));
 
-		builder.nextLine();
+		/*builder.nextLine();
 		lab = new JLabel(Globals.lang("Path to PDF viewer") + ":");
 		builder.append(pan);
 		builder.append(lab);
@@ -116,6 +138,7 @@ public class ExternalTab extends JPanel implements PrefsTab {
 		if (Globals.ON_WIN)
 			browse.setEnabled(false);
 		builder.append(new JButton(browse));
+		*/
 		builder.nextLine();
 		lab = new JLabel(Globals.lang("Path to HTML viewer") + ":");
 		builder.append(pan);
@@ -140,20 +163,48 @@ public class ExternalTab extends JPanel implements PrefsTab {
 		browse = new BrowseAction(_frame, winEdt, false);
 		builder.append(new JButton(browse));
 		builder.nextLine();
+        lab = new JLabel(Globals.lang("Path to LatexEditor (LEd.exe)") + ":");
+        builder.append(pan);
+        builder.append(lab);
+        builder.append(led);
+        browse = new BrowseAction(_frame, led, false);
+        builder.append(new JButton(browse));
+        builder.nextLine();
+        builder.append(pan);
+        lab = new JLabel(Globals.lang("Path to Vim") + ":");
+		builder.append(lab);
+		builder.append(vim);
+		browse = new BrowseAction(_frame, vim, false);
+		builder.append(new JButton(browse));
+		builder.nextLine();
+		lab = new JLabel(Globals.lang("Vim Server Name") + ":");
 		builder.append(pan);
+		builder.append(lab);
+		builder.append(vimServer);
+		browse = new BrowseAction(_frame, vimServer, false);
+		builder.append(new JButton(browse));
+		builder.nextLine();
+        builder.append(pan);
+
 		builder.append(Globals.lang("Cite command (for Emacs/WinEdt)") + ":");
 		builder.append(citeCommand);
 		// builder.appendSeparator();
 
-		pan = builder.getPanel();
+        builder.nextLine();
+        builder.append(pan);
+        builder.append(editFileTypes);
+        
+        pan = builder.getPanel();
 		pan.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
 		add(pan, BorderLayout.CENTER);
-	}
+
+    }
 
 	public void setValues() {
 		pdfDir.setText(_prefs.get("pdfDirectory"));
 		psDir.setText(_prefs.get("psDirectory"));
-		if (!Globals.ON_WIN) {
+        fileDir.setText(_prefs.get(GUIGlobals.FILE_FIELD+"Directory"));
+        if (!Globals.ON_WIN) {
 			pdf.setText(_prefs.get("pdfviewer"));
 			ps.setText(_prefs.get("psviewer"));
 			html.setText(_prefs.get("htmlviewer"));
@@ -168,7 +219,10 @@ public class ExternalTab extends JPanel implements PrefsTab {
 
 		lyx.setText(_prefs.get("lyxpipe"));
 		winEdt.setText(_prefs.get("winEdtPath"));
-		citeCommand.setText(_prefs.get("citeCommand"));
+        vim.setText(_prefs.get("vim"));
+		vimServer.setText(_prefs.get("vimServer"));
+        led.setText(_prefs.get("latexEditorPath"));
+        citeCommand.setText(_prefs.get("citeCommand"));
 
 		regExpTextField.setText(_prefs.get(JabRefPreferences.REG_EXP_SEARCH_EXPRESSION_KEY));
 		useRegExpComboBox.setSelected(_prefs.getBoolean(JabRefPreferences.USE_REG_EXP_SEARCH_KEY));
@@ -185,12 +239,16 @@ public class ExternalTab extends JPanel implements PrefsTab {
 		// We should maybe do some checking on the validity of the contents?
 		_prefs.put("pdfDirectory", pdfDir.getText());
 		_prefs.put("psDirectory", psDir.getText());
-		_prefs.put("pdfviewer", pdf.getText());
+        _prefs.put(GUIGlobals.FILE_FIELD+"Directory", fileDir.getText());
+        _prefs.put("pdfviewer", pdf.getText());
 		_prefs.put("psviewer", ps.getText());
 		_prefs.put("htmlviewer", html.getText());
 		_prefs.put("lyxpipe", lyx.getText());
 		_prefs.put("winEdtPath", winEdt.getText());
-		_prefs.put("citeCommand", citeCommand.getText());
+        _prefs.put("vim", vim.getText());
+        _prefs.put("vimServer", vimServer.getText());
+        _prefs.put("latexEditorPath", led.getText());
+        _prefs.put("citeCommand", citeCommand.getText());
 	}
 
 	public boolean readyToClose() {
diff --git a/src/java/net/sf/jabref/FieldEditor.java b/src/java/net/sf/jabref/FieldEditor.java
index 3fef613..789db75 100644
--- a/src/java/net/sf/jabref/FieldEditor.java
+++ b/src/java/net/sf/jabref/FieldEditor.java
@@ -37,8 +37,8 @@ import javax.swing.JLabel;
 /**
  * FieldEditors is a common interface between the FieldTextField and FieldTextArea.
  * 
- * @author $Author: coezbek $
- * @version $Revision: 1.6 $ ($Date: 2006/09/11 18:47:34 $)
+ * @author $Author: mortenalver $
+ * @version $Revision: 1.7 $ ($Date: 2007/02/16 22:03:15 $)
  *
  */
 public interface FieldEditor {
@@ -80,7 +80,8 @@ public interface FieldEditor {
 
 	public void setEnabled(boolean enabled);
 
-	/**
+    public void updateFont();
+    /**
 	 * paste text into component, it should also take some selected text into
 	 * account
 	 */
diff --git a/src/java/net/sf/jabref/FieldTextArea.java b/src/java/net/sf/jabref/FieldTextArea.java
index d733e7a..a965c52 100644
--- a/src/java/net/sf/jabref/FieldTextArea.java
+++ b/src/java/net/sf/jabref/FieldTextArea.java
@@ -43,7 +43,7 @@ import javax.swing.JTextArea;
  * multi-line input.
  * 
  * @author $Author: mortenalver $
- * @version $Revision: 1.21 $ ($Date: 2006/09/29 17:31:43 $)
+ * @version $Revision: 1.22 $ ($Date: 2007/02/16 22:03:15 $)
  * 
  */
 public class FieldTextArea extends JTextArea implements FieldEditor {
@@ -65,6 +65,8 @@ public class FieldTextArea extends JTextArea implements FieldEditor {
 	public FieldTextArea(String fieldName_, String content) {
 		super(content);
 
+        updateFont();
+                
 		// Add the global focus listener, so a menu item can see if this field
 		// was focused when an action was called.
 		addFocusListener(Globals.focusListener);
@@ -120,7 +122,12 @@ public class FieldTextArea extends JTextArea implements FieldEditor {
 		return this;
 	}
 
-	public void paste(String textToInsert) {
+
+    public void updateFont() {
+        setFont(GUIGlobals.CURRENTFONT);
+    }
+
+    public void paste(String textToInsert) {
 		int sel = getSelectionEnd() - getSelectionStart();
 		if (sel > 0) // selected text available
 			replaceSelection(textToInsert);
diff --git a/src/java/net/sf/jabref/FieldTextField.java b/src/java/net/sf/jabref/FieldTextField.java
index 82182d3..9b2a3f9 100644
--- a/src/java/net/sf/jabref/FieldTextField.java
+++ b/src/java/net/sf/jabref/FieldTextField.java
@@ -26,10 +26,14 @@
  */
 package net.sf.jabref;
 
-import javax.swing.*;
-import java.awt.*;
-import java.awt.event.FocusListener;
-import java.awt.event.FocusEvent;
+import java.awt.Color;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.RenderingHints;
+
+import javax.swing.JComponent;
+import javax.swing.JLabel;
+import javax.swing.JTextField;
 
 public class FieldTextField extends JTextField implements FieldEditor {
 
@@ -42,7 +46,9 @@ public class FieldTextField extends JTextField implements FieldEditor {
 	public FieldTextField(String fieldName_, String content, boolean changeColorOnFocus) {
 		super(content);
 
-		// Add the global focus listener, so a menu item can see if this field
+        updateFont();
+
+        // Add the global focus listener, so a menu item can see if this field
 		// was focused when
 		// an action was called.
 		addFocusListener(Globals.focusListener);
@@ -87,16 +93,21 @@ public class FieldTextField extends JTextField implements FieldEditor {
 
 	public JComponent getTextComponent() {
 		return this;
-	}
 
-	public void paint(Graphics g) {
+    }
+
+    public void updateFont() {
+        setFont(GUIGlobals.CURRENTFONT);
+    }
+
+    public void paint(Graphics g) {
 		Graphics2D g2 = (Graphics2D) g;
 		if (antialias)
 			g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
 		super.paint(g2);
 	}
 
-	public void paste(String textToInsert) {
+    public void paste(String textToInsert) {
 		int sel = getSelectionEnd() - getSelectionStart();
 		if (sel < 1) {
 			int cPos = getCaretPosition();
diff --git a/src/java/net/sf/jabref/FieldTextMenu.java b/src/java/net/sf/jabref/FieldTextMenu.java
index f1a83d3..60f6f79 100644
--- a/src/java/net/sf/jabref/FieldTextMenu.java
+++ b/src/java/net/sf/jabref/FieldTextMenu.java
@@ -58,8 +58,9 @@ public class FieldTextMenu implements MouseListener
     inputMenu.add( pasteAct ) ;
     inputMenu.add( copyAct ) ;
     inputMenu.addSeparator();
-    //inputMenu.add(new ReplaceAction());
-    inputMenu.add(new CaseChangeMenu((JTextComponent) myFieldName.getTextComponent()));
+    inputMenu.add(new ReplaceAction());
+    if (myFieldName.getTextComponent() instanceof JTextComponent)
+        inputMenu.add(new CaseChangeMenu((JTextComponent) myFieldName.getTextComponent()));
   }
 
   public void mouseClicked(MouseEvent e)
diff --git a/src/java/net/sf/jabref/GUIGlobals.java b/src/java/net/sf/jabref/GUIGlobals.java
index d6f81be..536d689 100644
--- a/src/java/net/sf/jabref/GUIGlobals.java
+++ b/src/java/net/sf/jabref/GUIGlobals.java
@@ -184,7 +184,14 @@ public class GUIGlobals {
 	DEFAULT_FIELD_WEIGHT = 1,
 	MAX_FIELD_WEIGHT = 2;
 
-	public static final double
+    // constants for editor types:
+    public static final int
+        STANDARD_EDITOR=1,
+        FILE_LIST_EDITOR=2;
+
+    public static final String FILE_FIELD = "file";
+
+    public static final double
 	SMALL_W = 0.30,
 	MEDIUM_W = 0.5,
 	LARGE_W = 1.5 ;
@@ -278,7 +285,7 @@ public class GUIGlobals {
 	 * @return The URL to the actual image to use.
 	 */
 	public static URL getIconUrl(String name) {
-		if (iconMap.containsKey(name)) {
+        if (iconMap.containsKey(name)) {
 			String path = (String)iconMap.get(name);
 			URL url = GUIGlobals.class.getResource(path);
 			if (url == null)
@@ -382,8 +389,12 @@ public class GUIGlobals {
 		lab = new JLabel(getImage("psSmall"));
 		lab.setToolTipText(Globals.lang("Open")+" PS");
 		tableIcons.put("ps", lab);
+        lab = new JLabel(getImage("psSmall"));
+        lab.setToolTipText(Globals.lang("Open file"));
+        tableIcons.put(GUIGlobals.FILE_FIELD, lab);
+
 
-		//jabRefFont = new Font("arial", Font.ITALIC/*+Font.BOLD*/, 20);
+        //jabRefFont = new Font("arial", Font.ITALIC/*+Font.BOLD*/, 20);
 	}
 
 }
diff --git a/src/java/net/sf/jabref/GeneralTab.java b/src/java/net/sf/jabref/GeneralTab.java
index a88f35e..a7596ff 100644
--- a/src/java/net/sf/jabref/GeneralTab.java
+++ b/src/java/net/sf/jabref/GeneralTab.java
@@ -12,15 +12,16 @@ import com.jgoodies.forms.builder.*;
 
 public class GeneralTab extends JPanel implements PrefsTab {
 
-    private JCheckBox autoOpenForm, backup, openLast, showSource,
-    defSource, editSource, defSort, ctrlClick, disableOnMultiple,
+    private JCheckBox backup, openLast,
+    defSort, ctrlClick,
     useOwner, keyDuplicateWarningDialog, keyEmptyWarningDialog, autoDoubleBraces,
     confirmDelete, allowEditing, /*preserveFormatting, */useImportInspector,
     useImportInspectorForSingle, inspectionWarnDupli, useTimeStamp;
     private JRadioButton
-        saveOriginalOrder, saveAuthorOrder, saveTableOrder;
+        saveOriginalOrder, saveAuthorOrder, saveTableOrder,
+        resolveStringsStandard, resolveStringsAll;
     private JTextField defOwnerField, timeStampFormat, timeStampField,
-            bracesAroundCapitalsFields, nonWrappableFields;
+            bracesAroundCapitalsFields, nonWrappableFields, doNotResolveStringsFor;
     JabRefPreferences _prefs;
     JabRefFrame _frame;
     private JComboBox language = new JComboBox(GUIGlobals.LANGUAGES.keySet().toArray()),
@@ -32,16 +33,11 @@ public class GeneralTab extends JPanel implements PrefsTab {
         _frame = frame;
         setLayout(new BorderLayout());
 
-        autoOpenForm = new JCheckBox(Globals.lang("Open editor when a new entry is created"));
         openLast = new JCheckBox(Globals.lang("Open last edited databases at startup"));
         allowEditing = new JCheckBox(Globals.lang("Allow editing in table cells"));
         backup = new JCheckBox(Globals.lang("Backup old file when saving"));
-        defSource = new JCheckBox(Globals.lang("Show BibTeX source by default"));
-        showSource = new JCheckBox(Globals.lang("Show BibTeX source panel"));
-        editSource = new JCheckBox(Globals.lang("Enable source editing"));
         defSort = new JCheckBox(Globals.lang("Sort Automatically"));
         ctrlClick = new JCheckBox(Globals.lang("Open right-click menu with Ctrl+left button"));
-        disableOnMultiple = new JCheckBox(Globals.lang("Disable entry editor when multiple entries are selected"));
         useOwner = new JCheckBox(Globals.lang("Mark new entries with owner name") + ":");
         useTimeStamp = new JCheckBox(Globals.lang("Mark new entries with addition date") + ". "
             +Globals.lang("Date format")+ ":");
@@ -55,6 +51,12 @@ public class GeneralTab extends JPanel implements PrefsTab {
         bg.add(saveAuthorOrder);
         bg.add(saveOriginalOrder);
         bg.add(saveTableOrder);
+        resolveStringsAll = new JRadioButton(Globals.lang("Resolve strings for all fields except")+":");
+        resolveStringsStandard = new JRadioButton(Globals.lang("Resolve strings for standard BibTeX fields only"));
+        bg = new ButtonGroup();
+        bg.add(resolveStringsAll);
+        bg.add(resolveStringsStandard);
+        doNotResolveStringsFor = new JTextField(30);
         autoDoubleBraces = new JCheckBox(
                 //+ Globals.lang("Store fields with double braces, and remove extra braces when loading.<BR>"
                 //+ "Double braces signal that BibTeX should preserve character case.") + "</HTML>");
@@ -73,19 +75,9 @@ public class GeneralTab extends JPanel implements PrefsTab {
 
         Insets marg = new Insets(0,12,3,0);
         useImportInspectorForSingle.setMargin(marg);
-        editSource.setMargin(marg);
-        defSource.setMargin(marg);
         inspectionWarnDupli.setMargin(marg);
         bracesAroundCapitalsFields = new JTextField(25);
         nonWrappableFields = new JTextField(25);
-        // We need a listener on showSource to enable and disable the source panel-related choices:
-        showSource.addChangeListener(new ChangeListener() {
-            public void stateChanged(ChangeEvent event) {
-                defSource.setEnabled(showSource.isSelected());
-                editSource.setEnabled(showSource.isSelected());
-            }
-        }
-        );
         // We need a listener on useImportInspector to enable and disable the
         // import inspector related choices;
         useImportInspector.addChangeListener(new ChangeListener() {
@@ -120,20 +112,23 @@ public class GeneralTab extends JPanel implements PrefsTab {
         builder3.append(label);
         builder3.append(nonWrappableFields);
         builder.add(builder3.getPanel(), cc.xyw(2, 9, 3));
+        builder.add(resolveStringsStandard, cc.xyw(2, 11, 5));
+        DefaultFormBuilder builder4 = new DefaultFormBuilder
+                (new FormLayout("left:pref, 4dlu, fill:pref",""));
+        builder4.append(resolveStringsAll);
+        builder4.append(doNotResolveStringsFor);
+        builder.add(builder4.getPanel(), cc.xyw(2, 13, 1));
+        //builder.add(resolveStringsAll, cc.xy(2, 13));
+        //builder.add(doNotResolveStringsFor, cc.xyw(4, 13, 3));
 
-        builder.addSeparator(Globals.lang("Entry editor"), cc.xyw(1, 11, 5));
-        builder.add(autoOpenForm, cc.xy(2, 13));
-        builder.add(disableOnMultiple, cc.xy(2, 15));
-        builder.add(showSource, cc.xy(2, 17));
-        builder.add(defSource, cc.xy(2, 19));
-        builder.addSeparator(Globals.lang("Miscellaneous"), cc.xyw(1, 21, 5));
-        builder.add(useImportInspector, cc.xy(2, 23));
-        builder.add(useImportInspectorForSingle, cc.xy(2, 25));
-        builder.add(inspectionWarnDupli, cc.xy(2, 27));
-        builder.add(ctrlClick, cc.xy(2, 29));
-        builder.add(confirmDelete, cc.xy(2, 31));
-        builder.add(keyDuplicateWarningDialog, cc.xy(2, 33));
-        builder.add(keyEmptyWarningDialog, cc.xy(2, 35));
+        builder.addSeparator(Globals.lang("Miscellaneous"), cc.xyw(1, 15, 5));
+        builder.add(useImportInspector, cc.xy(2, 17));
+        builder.add(useImportInspectorForSingle, cc.xy(2, 19));
+        builder.add(inspectionWarnDupli, cc.xy(2, 21));
+        builder.add(ctrlClick, cc.xy(2, 23));
+        builder.add(confirmDelete, cc.xy(2, 25));
+        builder.add(keyDuplicateWarningDialog, cc.xy(2, 27));
+        builder.add(keyEmptyWarningDialog, cc.xy(2, 29));
         // Create a new panel with its own FormLayout for the last items:
         FormLayout layout2 = new FormLayout
                 ("left:pref, 8dlu, fill:60dlu, 4dlu, left:pref, 4dlu, fill:60dlu, 4dlu, fill:pref", "");
@@ -163,7 +158,7 @@ public class GeneralTab extends JPanel implements PrefsTab {
         builder2.append(lab);
         builder2.append(encodings);
 
-        builder.add(builder2.getPanel(), cc.xyw(2, 37, 3));
+        builder.add(builder2.getPanel(), cc.xyw(2, 31, 3));
 
 
         JPanel pan = builder.getPanel();
@@ -173,16 +168,11 @@ public class GeneralTab extends JPanel implements PrefsTab {
     }
 
     public void setValues() {
-        autoOpenForm.setSelected(_prefs.getBoolean("autoOpenForm"));
         openLast.setSelected(_prefs.getBoolean("openLastEdited"));
         allowEditing.setSelected(_prefs.getBoolean("allowTableEditing"));
         backup.setSelected(_prefs.getBoolean("backup"));
-        defSource.setSelected(_prefs.getBoolean("defaultShowSource"));
-        showSource.setSelected(_prefs.getBoolean("showSource"));
-        editSource.setSelected(_prefs.getBoolean("enableSourceEditing"));
         defSort.setSelected(_prefs.getBoolean("defaultAutoSort"));
         ctrlClick.setSelected(_prefs.getBoolean("ctrlClick"));
-        disableOnMultiple.setSelected(_prefs.getBoolean("disableOnMultipleSelection"));
         useOwner.setSelected(_prefs.getBoolean("useOwner"));
         useTimeStamp.setSelected(_prefs.getBoolean("useTimeStamp"));
         keyDuplicateWarningDialog.setSelected(_prefs.getBoolean("dialogWarningForDuplicateKey"));
@@ -196,15 +186,15 @@ public class GeneralTab extends JPanel implements PrefsTab {
             saveTableOrder.setSelected(true);
         //preserveFormatting.setSelected(_prefs.getBoolean("preserveFieldFormatting"));
         autoDoubleBraces.setSelected(_prefs.getBoolean("autoDoubleBraces"));
+        resolveStringsAll.setSelected(_prefs.getBoolean("resolveStringsAllFields"));
+        resolveStringsStandard.setSelected(!resolveStringsAll.isSelected());
+        doNotResolveStringsFor.setText(_prefs.get("doNotResolveStringsFor"));
         defOwnerField.setText(_prefs.get("defaultOwner"));
         timeStampFormat.setText(_prefs.get("timeStampFormat"));
         timeStampField.setText(_prefs.get("timeStampField"));
         useImportInspector.setSelected(_prefs.getBoolean("useImportInspectionDialog"));
         useImportInspectorForSingle.setSelected(_prefs.getBoolean("useImportInspectionDialogForSingle"));
         inspectionWarnDupli.setSelected(_prefs.getBoolean("warnAboutDuplicatesInInspection"));
-        // Two choices only make sense when the source panel is visible:
-        defSource.setEnabled(showSource.isSelected());
-        editSource.setEnabled(showSource.isSelected());
         useImportInspectorForSingle.setEnabled(useImportInspector.isSelected());
         inspectionWarnDupli.setEnabled(useImportInspector.isSelected());
         bracesAroundCapitalsFields.setText(_prefs.get("putBracesAroundCapitals"));
@@ -231,12 +221,8 @@ public class GeneralTab extends JPanel implements PrefsTab {
     }
 
     public void storeSettings() {
-        _prefs.putBoolean("autoOpenForm", autoOpenForm.isSelected());
         _prefs.putBoolean("backup", backup.isSelected());
         _prefs.putBoolean("openLastEdited", openLast.isSelected());
-        _prefs.putBoolean("defaultShowSource", defSource.isSelected());
-        _prefs.putBoolean("enableSourceEditing", editSource.isSelected());
-        _prefs.putBoolean("disableOnMultipleSelection", disableOnMultiple.isSelected());
         _prefs.putBoolean("useOwner", useOwner.isSelected());
         _prefs.putBoolean("useTimeStamp", useTimeStamp.isSelected());
         _prefs.putBoolean("dialogWarningForDuplicateKey", keyDuplicateWarningDialog.isSelected());
@@ -248,6 +234,9 @@ public class GeneralTab extends JPanel implements PrefsTab {
         _prefs.putBoolean("ctrlClick", ctrlClick.isSelected());
         //_prefs.putBoolean("preserveFieldFormatting", preserveFormatting.isSelected());
         _prefs.putBoolean("autoDoubleBraces", autoDoubleBraces.isSelected());
+        _prefs.putBoolean("resolveStringsAllFields", resolveStringsAll.isSelected());
+        _prefs.put("doNotResolveStringsFor", doNotResolveStringsFor.getText().trim());
+        doNotResolveStringsFor.setText(_prefs.get("doNotResolveStringsFor"));
         _prefs.putBoolean("useImportInspectionDialog", useImportInspector.isSelected());
         _prefs.putBoolean("useImportInspectionDialogForSingle", useImportInspectorForSingle.isSelected());
         _prefs.putBoolean("warnAboutDuplicatesInInspection", inspectionWarnDupli.isSelected());
@@ -271,18 +260,6 @@ public class GeneralTab extends JPanel implements PrefsTab {
         if (updateSpecialFields)
                 _prefs.updateSpecialFieldHandling();
 
-        // We want to know if the following setting has been modified:
-        boolean oldShowSource = _prefs.getBoolean("showSource");
-        _prefs.putBoolean("showSource", showSource.isSelected());
-        if (oldShowSource != showSource.isSelected()) {
-            // The source panel has been enabled or disabled, so we need to
-            // remove all entry editors from cache:
-            for (int j=0; j<_frame.getTabbedPane().getTabCount(); j++) {
-	            BasePanel bp = (BasePanel)_frame.getTabbedPane().getComponentAt(j);
-	            bp.entryEditors.clear();
-            }
-        }
-
 
         if (!GUIGlobals.LANGUAGES.get(language.getSelectedItem()).equals(_prefs.get("language"))) {
             _prefs.put("language", GUIGlobals.LANGUAGES.get(language.getSelectedItem()).toString());
diff --git a/src/java/net/sf/jabref/Globals.java b/src/java/net/sf/jabref/Globals.java
index d8486b0..beca834 100644
--- a/src/java/net/sf/jabref/Globals.java
+++ b/src/java/net/sf/jabref/Globals.java
@@ -108,7 +108,7 @@ public class Globals {
 		"aug", "sep", "oct", "nov", "dec" };
 
 	// Map that maps from month string labels to
-	public static Map MONTH_STRINGS = new HashMap();
+	public static Map<String, String> MONTH_STRINGS = new HashMap<String, String>();
 	static {
 		MONTH_STRINGS.put("jan", "January");
 		MONTH_STRINGS.put("feb", "February");
@@ -125,13 +125,13 @@ public class Globals {
 
 		// Build list of encodings, by filtering out all that are not supported
 		// on this system:
-		List encodings = new ArrayList();
+		List<String> encodings = new ArrayList<String>();
 		for (int i = 0; i < ALL_ENCODINGS.length; i++) {
 			if (Charset.isSupported(ALL_ENCODINGS[i])) {
 				encodings.add(ALL_ENCODINGS[i]);
 			}
 		}
-		ENCODINGS = (String[]) encodings.toArray(new String[0]);
+		ENCODINGS = encodings.toArray(new String[0]);
 
 	}
 
@@ -208,15 +208,14 @@ public class Globals {
 	public static String lang(String key, String[] params) {
 		String translation = null;
 		try {
-			if (Globals.messages != null) {
+			if (Globals.messages != null) 
 				translation = Globals.messages.getString(key.replaceAll(" ", "_"));
-			}
 		} catch (MissingResourceException ex) {
-			translation = key;
-
-			// Thread.dumpStack(); // For debugging
 			//logger("Warning: could not get translation for \"" + key + "\"");
 		}
+		if (translation == null)
+			translation = key;
+
 		if ((translation != null) && (translation.length() != 0)) {
 			translation = translation.replaceAll("_", " ");
 			StringBuffer sb = new StringBuffer();
@@ -282,9 +281,8 @@ public class Globals {
 		} catch (MissingResourceException ex) {
 			translation = key;
 
-			// System.err.println("Warning: could not get menu item translation
-			// for \""
-			// + key + "\"");
+			//System.err.println("Warning: could not get menu item translation for \""
+			//+ key + "\"");
 
 		}
 		if ((translation != null) && (translation.length() != 0)) {
@@ -389,7 +387,7 @@ public class Globals {
 			off = new OpenFileFilter(extension);
 
 		Object files = getNewFileImpl(owner, directory, extension, null, off,
-			JFileChooser.OPEN_DIALOG, updateWorkingdirectory, false, true);
+			JFileChooser.OPEN_DIALOG, updateWorkingdirectory, false, true, null);
 
 		if (files instanceof String[]) {
 			return (String[]) files;
@@ -405,29 +403,37 @@ public class Globals {
 	public static String getNewFile(JFrame owner, File directory, String extension, int dialogType,
 		boolean updateWorkingDirectory) {
 		return getNewFile(owner, directory, extension, null, dialogType, updateWorkingDirectory,
-			false);
+			false, null);
+	}
+
+        public static String getNewFile(JFrame owner, File directory, String extension, int dialogType,
+		boolean updateWorkingDirectory, JComponent accessory) {
+		return getNewFile(owner, directory, extension, null, dialogType, updateWorkingDirectory,
+			false, accessory);
 	}
 
+        
 	public static String getNewFile(JFrame owner, File directory, String extension,
 		String description, int dialogType, boolean updateWorkingDirectory) {
 		return getNewFile(owner, directory, extension, description, dialogType,
-			updateWorkingDirectory, false);
+			updateWorkingDirectory, false, null);
 	}
 
 	public static String getNewDir(JFrame owner, File directory, String extension, int dialogType,
 		boolean updateWorkingDirectory) {
 		return getNewFile(owner, directory, extension, null, dialogType, updateWorkingDirectory,
-			true);
+			true, null);
 	}
 
 	public static String getNewDir(JFrame owner, File directory, String extension,
 		String description, int dialogType, boolean updateWorkingDirectory) {
 		return getNewFile(owner, directory, extension, description, dialogType,
-			updateWorkingDirectory, true);
+			updateWorkingDirectory, true, null);
 	}
 
 	private static String getNewFile(JFrame owner, File directory, String extension,
-		String description, int dialogType, boolean updateWorkingDirectory, boolean dirOnly) {
+		String description, int dialogType, boolean updateWorkingDirectory, boolean dirOnly,
+                JComponent accessory) {
 
 		OpenFileFilter off = null;
 
@@ -437,14 +443,14 @@ public class Globals {
 			off = new OpenFileFilter(extension);
 
 		return (String) getNewFileImpl(owner, directory, extension, description, off, dialogType,
-			updateWorkingDirectory, dirOnly, false);
+			updateWorkingDirectory, dirOnly, false, accessory);
 	}
 
 	private static Object getNewFileImpl(JFrame owner, File directory, String extension,
 		String description, OpenFileFilter off, int dialogType, boolean updateWorkingDirectory,
-		boolean dirOnly, boolean multipleSelection) {
+		boolean dirOnly, boolean multipleSelection, JComponent accessory) {
 
-		if (ON_MAC && prefs.getBoolean("useNativeFileDialogOnMac")) {
+		if (/*ON_MAC && */prefs.getBoolean("useNativeFileDialogOnMac")) {
 
 			return getNewFileForMac(owner, directory, extension, dialogType,
 				updateWorkingDirectory, dirOnly, off);
@@ -453,6 +459,8 @@ public class Globals {
 		JFileChooser fc = null;
 		try {
 			fc = new 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
@@ -544,9 +552,10 @@ public class Globals {
 
 	public static String SPECIAL_COMMAND_CHARS = "\"`^~'c";
 
-	public static HashMap HTML_CHARS = new HashMap(), HTMLCHARS = new HashMap(),
-		XML_CHARS = new HashMap(), ASCII2XML_CHARS = new HashMap(), UNICODE_CHARS = new HashMap(),
-		RTFCHARS = new HashMap(), URL_CHARS = new HashMap();
+	public static HashMap<String, String> HTML_CHARS = new HashMap<String, String>(), HTMLCHARS = new HashMap<String, String>(),
+		XML_CHARS = new HashMap<String, String>(), ASCII2XML_CHARS = new HashMap<String, String>(), UNICODE_CHARS = new HashMap<String, String>(),
+		RTFCHARS = new HashMap<String, String>(), URL_CHARS = new HashMap<String,String>();
+
 	static {
 
 		// System.out.println(journalAbbrev.getAbbreviatedName("Journal of Fish
@@ -718,7 +727,7 @@ public class Globals {
 		HTMLCHARS.put("vC", "Č"); // "Ccaron"
 		HTMLCHARS.put("vc", "č"); // "ccaron"
 		HTMLCHARS.put("vD", "Ď"); // "Dcaron"
-		// Symbol #271 (d�) has no special Latex command
+		// Symbol #271 (d�) has no special Latex command
 		HTMLCHARS.put("DJ", "Đ"); // "Dstrok"
 		HTMLCHARS.put("dj", "đ"); // "dstrok"
 		HTMLCHARS.put("=E", "Ē"); // "Emacr"
@@ -764,8 +773,8 @@ public class Globals {
 		HTMLCHARS.put("'l", "ĺ"); // "lacute"
 		HTMLCHARS.put("cL", "Ļ"); // "Lcedil"
 		HTMLCHARS.put("cl", "ļ"); // "lcedil"
-		// Symbol #317 (L�) has no special Latex command
-		// Symbol #318 (l�) has no special Latex command
+		// Symbol #317 (L�) has no special Latex command
+		// Symbol #318 (l�) has no special Latex command
 		HTMLCHARS.put("Lmidot", "Ŀ"); // "Lmidot"
 		HTMLCHARS.put("lmidot", "ŀ"); // "lmidot"
 		HTMLCHARS.put("L", "Ł"); // "Lstrok"
@@ -776,7 +785,7 @@ public class Globals {
 		HTMLCHARS.put("cn", "ņ"); // "ncedil"
 		HTMLCHARS.put("vN", "Ň"); // "Ncaron"
 		HTMLCHARS.put("vn", "ň"); // "ncaron"
-		// Symbol #329 (�n) has no special Latex command
+		// Symbol #329 (�n) has no special Latex command
 		HTMLCHARS.put("NG", "Ŋ"); // "ENG"
 		HTMLCHARS.put("ng", "ŋ"); // "eng"
 		HTMLCHARS.put("=O", "Ō"); // "Omacr"
@@ -804,7 +813,7 @@ public class Globals {
 		HTMLCHARS.put("cT", "Ţ"); // "Tcedil"
 		HTMLCHARS.put("ct", "ţ"); // "tcedil"
 		HTMLCHARS.put("vT", "Ť"); // "Tcaron"
-		// Symbol #357 (t�) has no special Latex command
+		// Symbol #357 (t�) has no special Latex command
 		HTMLCHARS.put("Tstrok", "Ŧ"); // "Tstrok"
 		HTMLCHARS.put("tstrok", "ŧ"); // "tstrok"
 		HTMLCHARS.put("~U", "Ũ"); // "Utilde"
@@ -1195,7 +1204,7 @@ public class Globals {
 		RTFCHARS.put("vC", "\\u268C"); // "Ccaron"
 		RTFCHARS.put("vc", "\\u269c"); // "ccaron"
 		RTFCHARS.put("vD", "\\u270D"); // "Dcaron"
-		// Symbol #271 (d�) has no special Latex command
+		// Symbol #271 (d�) has no special Latex command
 		RTFCHARS.put("DJ", "\\u272D"); // "Dstrok"
 		RTFCHARS.put("dj", "\\u273d"); // "dstrok"
 		RTFCHARS.put("=E", "\\u274E"); // "Emacr"
@@ -1241,8 +1250,8 @@ public class Globals {
 		RTFCHARS.put("'l", "\\u314l"); // "lacute"
 		RTFCHARS.put("cL", "\\u315L"); // "Lcedil"
 		RTFCHARS.put("cl", "\\u316l"); // "lcedil"
-		// Symbol #317 (L�) has no special Latex command
-		// Symbol #318 (l�) has no special Latex command
+		// Symbol #317 (L�) has no special Latex command
+		// Symbol #318 (l�) has no special Latex command
 		RTFCHARS.put("Lmidot", "\\u319L"); // "Lmidot"
 		RTFCHARS.put("lmidot", "\\u320l"); // "lmidot"
 		RTFCHARS.put("L", "\\u321L"); // "Lstrok"
@@ -1253,7 +1262,7 @@ public class Globals {
 		RTFCHARS.put("cn", "\\u326n"); // "ncedil"
 		RTFCHARS.put("vN", "\\u327N"); // "Ncaron"
 		RTFCHARS.put("vn", "\\u328n"); // "ncaron"
-		// Symbol #329 (�n) has no special Latex command
+		// Symbol #329 (�n) has no special Latex command
 		RTFCHARS.put("NG", "\\u330G"); // "ENG"
 		RTFCHARS.put("ng", "\\u331g"); // "eng"
 		RTFCHARS.put("=O", "\\u332O"); // "Omacr"
@@ -1281,7 +1290,7 @@ public class Globals {
 		RTFCHARS.put("cT", "\\u354T"); // "Tcedil"
 		RTFCHARS.put("ct", "\\u355t"); // "tcedil"
 		RTFCHARS.put("vT", "\\u356T"); // "Tcaron"
-		// Symbol #357 (t�) has no special Latex command
+		// Symbol #357 (t�) has no special Latex command
 		RTFCHARS.put("Tstrok", "\\u358T"); // "Tstrok"
 		RTFCHARS.put("tstrok", "\\u359t"); // "tstrok"
 		RTFCHARS.put("~U", "\\u360U"); // "Utilde"
diff --git a/src/java/net/sf/jabref/JabRef.java b/src/java/net/sf/jabref/JabRef.java
index bb87284..04157c0 100644
--- a/src/java/net/sf/jabref/JabRef.java
+++ b/src/java/net/sf/jabref/JabRef.java
@@ -65,7 +65,7 @@ public class JabRef {
     boolean graphicFailure = false;
 
     StringOption importFile, exportFile, exportPrefs, importPrefs, auxImExport, importToOpenBase;
-    BooleanOption helpO, disableGui, blank, loadSess, showVersion;
+    BooleanOption helpO, disableGui, blank, loadSess, showVersion, disableSplash;
     /*
     * class StringArrayOption extends ArrayOption { public public void
     * modify(String value) { } public void modify(String[] value) { } public
@@ -148,6 +148,7 @@ public class JabRef {
         exportFile = new StringOption("");
         helpO = new BooleanOption();
         disableGui = new BooleanOption();
+        disableSplash = new BooleanOption();
         blank = new BooleanOption();
         loadSess = new BooleanOption();
         showVersion = new BooleanOption();
@@ -164,6 +165,8 @@ public class JabRef {
                 Globals.lang("Display version"), showVersion);
         options.register("nogui", 'n',
             Globals.lang("No GUI. Only process command line options."), disableGui);
+        options.register("nosplash", 's',
+                Globals.lang("Do not show splash window at startup"), disableSplash);
         options.register("import", 'i',
             Globals.lang("Import file") + ": " + Globals.lang("filename")
             + "[,import format]", importFile);
@@ -219,7 +222,7 @@ public class JabRef {
         // 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()) {
+        if (initialStartup && !disableGui.isInvoked() && !disableSplash.isInvoked()) {
             try {
 
                 splashScreen = SplashScreen.splash();
@@ -506,9 +509,13 @@ public class JabRef {
             // Jabref version.
             Util.performCompatibilityUpdate();
 
+
             // Set up custom or default icon theme:
             GUIGlobals.setUpIconTheme();
 
+            // TODO: remove temporary registering of external file types?
+            Globals.prefs.updateExternalFileTypes();
+
            // This property is set to make the Mac OSX Java VM move the menu bar to
             // the top
             // of the screen, where Mac users expect it to be.
@@ -688,8 +695,9 @@ lastEdLoop:
             if (loaded.size() > 0) {
                 for (Iterator i=loaded.iterator(); i.hasNext();) {
                     ParserResult pr = (ParserResult)i.next();
-		    jrf.addTab(pr.getDatabase(), pr.getFile(), pr.getMetaData(), pr.getEncoding(), first);
-		    first = false;
+		            BasePanel panel = jrf.addTab(pr.getDatabase(), pr.getFile(),
+                            pr.getMetaData(), pr.getEncoding(), first);
+                    first = false;
                 }
             }
 
@@ -702,6 +710,10 @@ lastEdLoop:
                 splashScreen = null;
             }
 
+            JOptionPane.showMessageDialog(null, Globals.lang("Please note that this "
+                +"is an early beta version. Do not use it without backing up your files!"),
+                    Globals.lang("Beta version"), JOptionPane.WARNING_MESSAGE);
+
             //Util.pr(": Showing frame");
             jrf.setVisible(true);
 
@@ -724,6 +736,17 @@ lastEdLoop:
                 }
             }
 
+            // After adding the databases, go through each and see if
+            // any post open actions need to be done. For instance, checking
+            // if we found new entry types that can be imported, or checking
+            // if the database contents should be modified due to new features
+            // in this version of JabRef:
+            for (int i = 0; i < loaded.size(); i++) {
+                ParserResult pr = (ParserResult) loaded.elementAt(i);
+                BasePanel panel = jrf.baseAt(i);
+                OpenDatabaseAction.performPostOpenActions(panel, pr, true);
+            }
+
             //Util.pr(": Finished adding panels");
 
             if (loaded.size() > 0) {
diff --git a/src/java/net/sf/jabref/JabRefFileChooser.java b/src/java/net/sf/jabref/JabRefFileChooser.java
index 04966d3..5fc74ab 100644
--- a/src/java/net/sf/jabref/JabRefFileChooser.java
+++ b/src/java/net/sf/jabref/JabRefFileChooser.java
@@ -25,6 +25,7 @@ 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.*;
@@ -38,15 +39,40 @@ 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){
         super(file);
     }
 
+    /*public int showOpenDialog(Component parent) throws HeadlessException {
+        if (lastSize != null) {
+            setSize(lastSize);
+            System.out.println("Setting size: "+lastSize);
+        }
+        int answer = super.showOpenDialog(parent);
+        lastSize = getSize();
+        return answer;
+    }*/
+
+    /*public int showSaveDialog(Component parent) throws HeadlessException {
+        if (lastSize != null) {
+            setSize(lastSize);
+            System.out.println("Setting size: "+lastSize);
+        }
+        int answer = super.showSaveDialog(parent);
+        lastSize = getSize();
+        return answer;
+    }*/
+
     //========================================================
     //
     //========================================================
diff --git a/src/java/net/sf/jabref/JabRefFrame.java b/src/java/net/sf/jabref/JabRefFrame.java
index 932ea7f..ba14af7 100644
--- a/src/java/net/sf/jabref/JabRefFrame.java
+++ b/src/java/net/sf/jabref/JabRefFrame.java
@@ -27,9 +27,9 @@
 
 package net.sf.jabref;
 
+import net.sf.jabref.export.SaveAllAction;
 import net.sf.jabref.gui.*;
 import net.sf.jabref.label.*;
-import net.sf.jabref.export.FileActions;
 import net.sf.jabref.export.ExpandEndnoteFilters;
 import net.sf.jabref.imports.*;
 import net.sf.jabref.wizard.auximport.gui.*;
@@ -67,7 +67,7 @@ import com.jgoodies.looks.HeaderStyle;
 public class JabRefFrame extends JFrame {
 
    // CO: Code Smells...
-	JabRefFrame ths = this;
+    JabRefFrame ths = this;
     UIFSplitPane contentPane = new UIFSplitPane();
 
     JabRefPreferences prefs = Globals.prefs; //new JabRefPreferences();
@@ -95,30 +95,30 @@ public class JabRefFrame extends JFrame {
 
     JMenuBar mb = new JMenuBar();
 
-	GridBagLayout gbl = new GridBagLayout();
+    GridBagLayout gbl = new GridBagLayout();
 
-	GridBagConstraints con = new GridBagConstraints();
+    GridBagConstraints con = new GridBagConstraints();
 
-	JLabel statusLine = new JLabel("", SwingConstants.LEFT), statusLabel = new JLabel(Globals
-		.lang("Status")
-		+ ":", SwingConstants.LEFT);
+    JLabel statusLine = new JLabel("", SwingConstants.LEFT), statusLabel = new JLabel(Globals
+        .lang("Status")
+        + ":", SwingConstants.LEFT);
     JProgressBar progressBar = new JProgressBar();
 
-	// SearchManager searchManager = new SearchManager(ths, prefs);
+    // SearchManager searchManager = new SearchManager(ths, prefs);
 
-	private FileHistory fileHistory = new FileHistory(prefs, this);
+    private FileHistory fileHistory = new FileHistory(prefs, this);
 
-	LabelMaker labelMaker;
+    LabelMaker labelMaker;
 
-	// The help window.
-	public HelpDialog helpDiag = new HelpDialog(this);
+    // The help window.
+    public HelpDialog helpDiag = new HelpDialog(this);
 
-	// Here we instantiate menu/toolbar actions. Actions regarding
-	// the currently open database are defined as a GeneralAction
-	// with a unique command string. This causes the appropriate
-	// BasePanel's runCommand() method to be called with that command.
-	// Note: GeneralAction's constructor automatically gets translations
-	// for the name and message strings.
+    // Here we instantiate menu/toolbar actions. Actions regarding
+    // the currently open database are defined as a GeneralAction
+    // with a unique command string. This causes the appropriate
+    // BasePanel's runCommand() method to be called with that command.
+    // Note: GeneralAction's constructor automatically gets translations
+    // for the name and message strings.
 
   // References to the toggle buttons in the toolbar:
   public JToggleButton groupToggle, searchToggle, previewToggle, highlightAny,
@@ -134,26 +134,27 @@ public class JabRefFrame extends JFrame {
       newSubDatabaseAction = new NewSubDatabaseAction(),
       integrityCheckAction = new IntegrityCheckAction(),
       help = new HelpAction("JabRef help", helpDiag,
-                            GUIGlobals.baseFrameHelp, "JabRef help",
+                            GUIGlobals.baseFrameHelp, Globals.lang("JabRef help"),
                             prefs.getKey("Help")),
       contents = new HelpAction("Help contents", helpDiag,
-                                GUIGlobals.helpContents, "Help contents",
+                                GUIGlobals.helpContents, Globals.lang("Help contents"),
                                 GUIGlobals.getIconUrl("helpContents")),
       about = new HelpAction("About JabRef", helpDiag,
-                             GUIGlobals.aboutPage, "About JabRef",
+                             GUIGlobals.aboutPage, Globals.lang("About JabRef"),
                              GUIGlobals.getIconUrl("about")),
       editEntry = new GeneralAction("edit", "Edit entry",
-                               "Edit entry",
+                               Globals.lang("Edit entry"),
                                prefs.getKey("Edit entry")),
       save = new GeneralAction("save", "Save database",
-                               "Save database",
+                               Globals.lang("Save database"),
                                prefs.getKey("Save database")),
       saveAs = new GeneralAction("saveAs", "Save database as ...",
-                                 "Save database as ...",
+                                 Globals.lang("Save database as ..."),
                                  prefs.getKey("Save database as ...")),
+      saveAll = new SaveAllAction(ths),
       saveSelectedAs = new GeneralAction("saveSelectedAs",
                                          "Save selected as ...",
-                                         "Save selected as ...",
+                                         Globals.lang("Save selected as ..."),
                                          GUIGlobals.getIconUrl("saveAs")),
       exportAll = ExportFormats.getExportAction(this, false),
       exportSelected = ExportFormats.getExportAction(this, true),
@@ -162,37 +163,37 @@ public class JabRefFrame extends JFrame {
       nextTab = new ChangeTabAction(true),
       prevTab = new ChangeTabAction(false),
       sortTabs = new SortTabsAction(this),
-      undo = new GeneralAction("undo", "Undo", "Undo",
+      undo = new GeneralAction("undo", "Undo", Globals.lang("Undo"),
                                prefs.getKey("Undo")),
-      redo = new GeneralAction("redo", "Redo", "Redo",
+      redo = new GeneralAction("redo", "Redo", Globals.lang("Redo"),
                                prefs.getKey("Redo")),
-      /*cut = new GeneralAction("cut", "Cut", "Cut",
+      /*cut = new GeneralAction("cut", "Cut", Globals.lang("Cut"),
          GUIGlobals.cutIconFile,
          prefs.getKey("Cut")),*/
-      delete = new GeneralAction("delete", "Delete", "Delete",
+      delete = new GeneralAction("delete", "Delete", Globals.lang("Delete"),
                                  prefs.getKey("Delete")),
-      /*copy = new GeneralAction("copy", "Copy", "Copy",
+      /*copy = new GeneralAction("copy", "Copy", Globals.lang("Copy"),
                                GUIGlobals.copyIconFile,
                                prefs.getKey("Copy")),*/
       copy = new EditAction("copy", GUIGlobals.getIconUrl("copy")),
       paste = new EditAction("paste", GUIGlobals.getIconUrl("paste")),
       cut = new EditAction("cut", GUIGlobals.getIconUrl("cut")),
       mark = new GeneralAction("markEntries", "Mark entries",
-                               "Mark entries",
+                               Globals.lang("Mark entries"),
                                prefs.getKey("Mark entries")),
        unmark = new GeneralAction("unmarkEntries", "Unmark entries",
-                                  "Unmark entries",
+                                  Globals.lang("Unmark entries"),
                                   prefs.getKey("Unmark entries")),
        unmarkAll = new GeneralAction("unmarkAll", "Unmark all"),
       manageSelectors = new GeneralAction("manageSelectors", "Manage content selectors"),
       saveSessionAction = new SaveSessionAction(),
       loadSessionAction = new LoadSessionAction(),
       incrementalSearch = new GeneralAction("incSearch", "Incremental search",
-                                            "Start incremental search",
+                                            Globals.lang("Start incremental search"),
                                             prefs.getKey("Incremental search")),
-      normalSearch = new GeneralAction("search", "Search", "Search",
+      normalSearch = new GeneralAction("search", "Search", Globals.lang("Search"),
                                        prefs.getKey("Search")),
-      toggleSearch = new GeneralAction("toggleSearch", "Search", "Toggle search panel"),
+      toggleSearch = new GeneralAction("toggleSearch", "Search", Globals.lang("Toggle search panel")),
 
       fetchCiteSeer = new FetchCiteSeerAction(),
       importCiteSeer = new ImportCiteSeerAction(),
@@ -206,7 +207,7 @@ public class JabRefFrame extends JFrame {
                                       prefs.getKey("Copy \\cite{BibTeX key}")),
       mergeDatabaseAction = new GeneralAction("mergeDatabase",
                                               "Append database",
-                                              "Append contents from a BibTeX database into the currently viewed database",
+                                              Globals.lang("Append contents from a BibTeX database into the currently viewed database"),
                                               GUIGlobals.getIconUrl("open")),
       //prefs.getKey("Open")),
       /*remove = new GeneralAction("remove", "Remove", "Remove selected entries",
@@ -217,49 +218,49 @@ public class JabRefFrame extends JFrame {
                                      prefs.getKey("Replace string")),
 
       editPreamble = new GeneralAction("editPreamble", "Edit preamble",
-                                       "Edit preamble",
+                                       Globals.lang("Edit preamble"),
                                        prefs.getKey("Edit preamble")),
       editStrings = new GeneralAction("editStrings", "Edit strings",
-                                      "Edit strings",
+                                      Globals.lang("Edit strings"),
                                       prefs.getKey("Edit strings")),
       toggleGroups = new GeneralAction("toggleGroups",
                                        "Toggle groups interface",
-                                       "Toggle groups interface",
+                                       Globals.lang("Toggle groups interface"),
                                        prefs.getKey("Toggle groups interface")),
       togglePreview = new GeneralAction("togglePreview",
                                         "Toggle entry preview",
-                                        "Toggle entry preview",
+                                        Globals.lang("Toggle entry preview"),
                                         prefs.getKey("Toggle entry preview")),
       toggleHighlightAny = new GeneralAction("toggleHighlightGroupsMatchingAny",
                                         "Highlight groups matching any selected entry",
-                                        "Highlight groups matching any selected entry",
+                                        Globals.lang("Highlight groups matching any selected entry"),
                                         GUIGlobals.getIconUrl("groupsHighlightAny")),
       toggleHighlightAll = new GeneralAction("toggleHighlightGroupsMatchingAll",
                                         "Highlight groups matching all selected entries",
-                                        "Highlight groups matching all selected entries",
+                                        Globals.lang("Highlight groups matching all selected entries"),
                                         GUIGlobals.getIconUrl("groupsHighlightAll")),
       switchPreview = new GeneralAction("switchPreview",
                                         "Switch preview layout",
                                         prefs.getKey("Switch preview layout")),
        makeKeyAction = new GeneralAction("makeKey", "Autogenerate BibTeX keys",
-                                        "Autogenerate BibTeX keys",
+                                        Globals.lang("Autogenerate BibTeX keys"),
                                         prefs.getKey("Autogenerate BibTeX keys")),
 
-      lyxPushAction = new PushToApplicationAction(ths, new PushToLyx()),
 
-      winEdtPushAction = new PushToApplicationAction(ths, new PushToWinEdt()),
-      latexEditorPushAction = new PushToApplicationAction(ths, new PushToLatexEditor()),
-      
-      writeXmpAction = new GeneralAction("writeXMP", "Write XMP-metadata to PDFs", "Will write XMP-metadata to the PDFs linked from selected entries.", prefs.getKey("Write XMP")),
-      
-      openFile = new GeneralAction("openFile", "Open PDF or PS",
-                                   "Open PDF or PS",
+      writeXmpAction = new GeneralAction("writeXMP", "Write XMP-metadata to PDFs",
+                                        Globals.lang("Will write XMP-metadata to the PDFs linked from selected entries."),
+                                        prefs.getKey("Write XMP")),
+      openFile = new GeneralAction("openExternalFile", "Open file",
+                                   Globals.lang("Open file"),
+                                   prefs.getKey("Open file")),
+      openPdf = new GeneralAction("openFile", "Open PDF or PS",
+                                   Globals.lang("Open PDF or PS"),
                                    prefs.getKey("Open PDF or PS")),
       openUrl = new GeneralAction("openUrl", "Open URL or DOI",
-                                  "Open URL or DOI",
+                                  Globals.lang("Open URL or DOI"),
                                   prefs.getKey("Open URL or DOI")),
       dupliCheck = new GeneralAction("dupliCheck", "Find duplicates"),
-      strictDupliCheck = new GeneralAction("strictDupliCheck", "Find and remove exact duplicates"),
+      //strictDupliCheck = new GeneralAction("strictDupliCheck", "Find and remove exact duplicates"),
       plainTextImport = new GeneralAction("plainTextImport",
                                           "New entry from plain text",
                                           prefs.getKey("New from plain text")),
@@ -267,26 +268,27 @@ public class JabRefFrame extends JFrame {
 
       customExpAction = new CustomizeExportsAction(),
       customImpAction = new CustomizeImportsAction(),
-      exportCSV = new ExportCSV(),
+      customFileTypesAction = ExternalFileTypeEditor.getAction(this),
       exportToClipboard = new GeneralAction("exportToClipboard", "Export selected entries to clipboard"),
       expandEndnoteZip = new ExpandEndnoteFilters(this),
         autoSetPdf = new GeneralAction("autoSetPdf", Globals.lang("Synchronize %0 links", "PDF"), Globals.prefs.getKey("Synchronize PDF")),
         autoSetPs = new GeneralAction("autoSetPs", Globals.lang("Synchronize %0 links", "PS"), Globals.prefs.getKey("Synchronize PS")),
+        autoSetFile = new GeneralAction("autoSetFile", Globals.lang("Synchronize file links"), Globals.prefs.getKey("Synchronize files")),
 
     abbreviateMedline = new GeneralAction("abbreviateMedline", "Abbreviate journal names (MEDLINE)",
-                "Abbreviate journal names of the selected entries (MEDLINE abbreviation)"),
+                Globals.lang("Abbreviate journal names of the selected entries (MEDLINE abbreviation)")),
   abbreviateIso = new GeneralAction("abbreviateIso", "Abbreviate journal names (ISO)",
-                          "Abbreviate journal names of the selected entries (ISO abbreviation)",
+                          Globals.lang("Abbreviate journal names of the selected entries (ISO abbreviation)"),
                           Globals.prefs.getKey("Abbreviate")),
 
 
     unabbreviate = new GeneralAction("unabbreviate", "Unabbreviate journal names",
-                    "Unabbreviate journal names of the selected entries",
+                    Globals.lang("Unabbreviate journal names of the selected entries"),
             Globals.prefs.getKey("Unabbreviate")),
     manageJournals = new ManageJournalsAction(this),
     databaseProperties = new DatabasePropertiesAction(),
-    emacsPushAction = new PushToApplicationAction(ths, new PushToEmacs()),
-
+    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");
 
@@ -346,88 +348,88 @@ public class JabRefFrame extends JFrame {
 
   private void init() {
 
-		macOSXRegistration();
-		MyGlassPane glassPane = new MyGlassPane();
-		setGlassPane(glassPane);
-		// glassPane.setVisible(true);
-
-		setTitle(GUIGlobals.frameTitle);
-		setIconImage(GUIGlobals.getImage("jabrefIcon").getImage());
-		setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
-		addWindowListener(new WindowAdapter() {
-			public void windowClosing(WindowEvent e) {
-				(new CloseAction()).actionPerformed(null);
-			}
-		});
-
-		initLabelMaker();
-
-		initSidePane();
-		
-		initLayout();
-		
-		initActions();
-		
-		if (Globals.prefs.getBoolean("rememberWindowLocation")) {
-			setSize(new Dimension(prefs.getInt("sizeX"), prefs.getInt("sizeY")));
-			setLocation(new Point(prefs.getInt("posX"), prefs.getInt("posY")));
-		}
-		tabbedPane.setBorder(null);
-		tabbedPane.setForeground(GUIGlobals.inActiveTabbed);
-
-		/*
-		 * The following state listener makes sure focus is registered with the
-		 * correct database when the user switches tabs. Without this,
-		 * cut/paste/copy operations would some times occur in the wrong tab.
-		 */
-		tabbedPane.addChangeListener(new ChangeListener() {
-			public void stateChanged(ChangeEvent e) {
-				markActiveBasePanel();
-
-				BasePanel bp = basePanel();
-				if (bp != null) {
-					groupToggle.setSelected(sidePaneManager.isComponentVisible("groups"));
-					searchToggle.setSelected(sidePaneManager.isComponentVisible("search"));
-					previewToggle.setSelected(Globals.prefs.getBoolean("previewEnabled"));
-					highlightAny
-						.setSelected(Globals.prefs.getBoolean("highlightGroupsMatchingAny"));
-					highlightAll
-						.setSelected(Globals.prefs.getBoolean("highlightGroupsMatchingAll"));
-					Globals.focusListener.setFocused(bp.mainTable);
-
-					new FocusRequester(bp.mainTable);
-				}
-			}
-		});
-	}
-
-
-
-	private void initSidePane() {
-		sidePaneManager = new SidePaneManager(this);
-
-		Globals.sidePaneManager = this.sidePaneManager;
-		Globals.helpDiag = this.helpDiag;
-
-		ieeexplorerFetcher = new IEEEXploreFetcher();
-		arxivFetcher = new OAI2Fetcher();
-		medlineFetcher = new MedlineFetcher(sidePaneManager);
-		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);
-
-		// Show the search panel if it was visible at last shutdown:
-		if (Globals.prefs.getBoolean("searchPanelVisible"))
-			sidePaneManager.show("search");
-	}
+        macOSXRegistration();
+        MyGlassPane glassPane = new MyGlassPane();
+        setGlassPane(glassPane);
+        // glassPane.setVisible(true);
+
+        setTitle(GUIGlobals.frameTitle);
+        setIconImage(GUIGlobals.getImage("jabrefIcon").getImage());
+        setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
+        addWindowListener(new WindowAdapter() {
+            public void windowClosing(WindowEvent e) {
+                (new CloseAction()).actionPerformed(null);
+            }
+        });
+
+        initLabelMaker();
+
+        initSidePane();
+        
+        initLayout();
+        
+        initActions();
+        
+        if (Globals.prefs.getBoolean("rememberWindowLocation")) {
+            setSize(new Dimension(prefs.getInt("sizeX"), prefs.getInt("sizeY")));
+            setLocation(new Point(prefs.getInt("posX"), prefs.getInt("posY")));
+        }
+        tabbedPane.setBorder(null);
+        tabbedPane.setForeground(GUIGlobals.inActiveTabbed);
+
+        /*
+         * The following state listener makes sure focus is registered with the
+         * correct database when the user switches tabs. Without this,
+         * cut/paste/copy operations would some times occur in the wrong tab.
+         */
+        tabbedPane.addChangeListener(new ChangeListener() {
+            public void stateChanged(ChangeEvent e) {
+                markActiveBasePanel();
+
+                BasePanel bp = basePanel();
+                if (bp != null) {
+                    groupToggle.setSelected(sidePaneManager.isComponentVisible("groups"));
+                    searchToggle.setSelected(sidePaneManager.isComponentVisible("search"));
+                    previewToggle.setSelected(Globals.prefs.getBoolean("previewEnabled"));
+                    highlightAny
+                        .setSelected(Globals.prefs.getBoolean("highlightGroupsMatchingAny"));
+                    highlightAll
+                        .setSelected(Globals.prefs.getBoolean("highlightGroupsMatchingAll"));
+                    Globals.focusListener.setFocused(bp.mainTable);
+
+                    new FocusRequester(bp.mainTable);
+                }
+            }
+        });
+    }
+
+
+
+    private void initSidePane() {
+        sidePaneManager = new SidePaneManager(this);
+
+        Globals.sidePaneManager = this.sidePaneManager;
+        Globals.helpDiag = this.helpDiag;
+
+        ieeexplorerFetcher = new IEEEXploreFetcher();
+        arxivFetcher = new OAI2Fetcher();
+        medlineFetcher = new MedlineFetcher(sidePaneManager);
+        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);
+
+        // Show the search panel if it was visible at last shutdown:
+        if (Globals.prefs.getBoolean("searchPanelVisible"))
+            sidePaneManager.show("search");
+    }
 
 
 AboutAction aboutAction = new AboutAction();
@@ -753,7 +755,7 @@ public JabRefPreferences prefs() {
    * Returns the indexed BasePanel.
    * @param i Index of base
    */
-  BasePanel baseAt(int i) {
+  public BasePanel baseAt(int i) {
     return (BasePanel) tabbedPane.getComponentAt(i);
   }
 
@@ -1012,6 +1014,7 @@ public JabRefPreferences prefs() {
       file.add(mergeDatabaseAction);
       file.add(save);
       file.add(saveAs);
+      file.add(saveAll);
       file.add(saveSelectedAs);
       file.addSeparator();
       //file.add(importMenu);
@@ -1033,16 +1036,6 @@ public JabRefPreferences prefs() {
 
       file.addSeparator();
       file.add(close);
-      //==============================
-      // NB: I added this because my frame borders are so tiny that I cannot click
-      // on the "x" close button. Anyways, I think it is good to have an "exit" button
-      // I was too lazy to make a new ExitAction
-      //JMenuItem exit_mItem = new JMenuItem(Globals.lang("Exit"));
-      //exit_mItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q, KeyEvent.CTRL_MASK)); //Ctrl-Q to exit
-      // above keybinding should be from user define
-      //exit_mItem.addActionListener(new CloseAction() );
-      //file.add( exit_mItem);
-      //=====================================
       file.add(quit);
       mb.add(file);
       //edit.add(test);
@@ -1099,11 +1092,13 @@ public JabRefPreferences prefs() {
       // [kiar] I think we should group these festures
       tools.add(checkAndFix);
       checkAndFix.add(dupliCheck);
-      checkAndFix.add(strictDupliCheck);
+      //checkAndFix.add(strictDupliCheck);
+      checkAndFix.add(autoSetFile);
       checkAndFix.add(autoSetPdf);
       checkAndFix.add(autoSetPs);
       checkAndFix.add(integrityCheckAction);
-
+      checkAndFix.addSeparator();
+      checkAndFix.add(upgradeExternalLinks);
 
       tools.addSeparator();
       tools.add(manageSelectors);
@@ -1118,6 +1113,7 @@ public JabRefPreferences prefs() {
       //tools.add(fetchAuthorMedline);
       tools.addSeparator();
       tools.add(openFile);
+      tools.add(openPdf);
       tools.add(openUrl);
       tools.addSeparator();
       tools.add(newSubDatabaseAction);
@@ -1150,6 +1146,7 @@ public JabRefPreferences prefs() {
       options.add(genFieldsCustomization);
       options.add(customExpAction);
       options.add(customImpAction);
+      options.add(customFileTypesAction);
       options.add(manageJournals);
 
       /*options.add(new AbstractAction("Font") {
@@ -1213,7 +1210,8 @@ public JabRefPreferences prefs() {
     tlb.addAction(newDatabaseAction);
     tlb.addAction(open);
     tlb.addAction(save);
-
+    tlb.addAction(saveAll);
+    
     tlb.addSeparator();
     tlb.addAction(cut);
     tlb.addAction(copy);
@@ -1274,8 +1272,9 @@ public JabRefPreferences prefs() {
       //tlb.addAction(winEdtPushAction);
       tlb.add(pushExternalButton.getComponent());
 
-    tlb.addAction(openFile);
-    tlb.addAction(openUrl);
+      tlb.addAction(openFile);
+    //tlb.addAction(openPdf);
+    //tlb.addAction(openUrl);
 
 
     //tlb.addSeparator();
@@ -1365,62 +1364,62 @@ public JabRefPreferences prefs() {
   protected List openDatabaseOnlyActions = new LinkedList();
   protected List severalDatabasesOnlyActions = new LinkedList();
   
-	protected void initActions() {
-		openDatabaseOnlyActions = new LinkedList();
-		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, emacsPushAction, lyxPushAction, winEdtPushAction, normalSearch,
-			incrementalSearch, replaceAll, importMenu, exportMenu, fetchMedline, fetchCiteSeer,
-			openFile, openUrl, togglePreview, dupliCheck, strictDupliCheck, highlightAll,
-			highlightAny, citeSeerPanelAction, newEntryAction, plainTextImport,
-			closeDatabaseAction, switchPreview, integrityCheckAction, autoSetPdf, autoSetPs,
-			toggleHighlightAny, toggleHighlightAll, databaseProperties, abbreviateIso,
-			abbreviateMedline, unabbreviate, ieex.getAction(), arxiv.getAction(), exportAll, exportSelected,
-            importCurrent}));
-
-		openDatabaseOnlyActions.addAll(Arrays.asList(newSpecificEntryAction));
-
-		severalDatabasesOnlyActions = new LinkedList();
-		severalDatabasesOnlyActions.addAll(Arrays
-			.asList(new Object[] { nextTab, prevTab, sortTabs }));
-
-		tabbedPane.addChangeListener(new ChangeListener() {
-			public void stateChanged(ChangeEvent event) {
-				updateEnabledState();
-			}
-		});
-		
-		
-
-	}
-
-	public static void setEnabled(List l, boolean enabled) {
-		Iterator i = l.iterator();
-		while (i.hasNext()) {
-			Object o = i.next();
-			if (o instanceof Action)
-				((Action)o).setEnabled(enabled);
-			if (o instanceof Component)
-				((Component)o).setEnabled(enabled);
-		}
-	}
-
-	protected int previousTabCount = -1;
-	
-	/**
+    protected void initActions() {
+        openDatabaseOnlyActions = new LinkedList();
+        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,
+            closeDatabaseAction, switchPreview, integrityCheckAction, autoSetPdf, autoSetPs,
+            toggleHighlightAny, toggleHighlightAll, databaseProperties, abbreviateIso,
+            abbreviateMedline, unabbreviate, ieex.getAction(), arxiv.getAction(), exportAll, exportSelected,
+            importCurrent, saveAll}));
+
+        openDatabaseOnlyActions.addAll(Arrays.asList(newSpecificEntryAction));
+
+        severalDatabasesOnlyActions = new LinkedList();
+        severalDatabasesOnlyActions.addAll(Arrays
+            .asList(new Object[] { nextTab, prevTab, sortTabs }));
+
+        tabbedPane.addChangeListener(new ChangeListener() {
+            public void stateChanged(ChangeEvent event) {
+                updateEnabledState();
+            }
+        });
+        
+        
+
+    }
+
+    public static void setEnabled(List l, boolean enabled) {
+        Iterator i = l.iterator();
+        while (i.hasNext()) {
+            Object o = i.next();
+            if (o instanceof Action)
+                ((Action)o).setEnabled(enabled);
+            if (o instanceof Component)
+                ((Component)o).setEnabled(enabled);
+        }
+    }
+
+    protected int previousTabCount = -1;
+    
+    /**
      * Enable or Disable all actions based on the number of open tabs.
      * 
      * The action that are affected are set in initActions.
      */
     protected void updateEnabledState() {
-		int tabCount = tabbedPane.getTabCount();
-		if (tabCount != previousTabCount){
-			previousTabCount = tabCount;
-			setEnabled(openDatabaseOnlyActions, tabCount > 0);
-			setEnabled(severalDatabasesOnlyActions, tabCount > 1);
-		}
+        int tabCount = tabbedPane.getTabCount();
+        if (tabCount != previousTabCount){
+            previousTabCount = tabCount;
+            setEnabled(openDatabaseOnlyActions, tabCount > 0);
+            setEnabled(severalDatabasesOnlyActions, tabCount > 1);
+        }
     }
 
   /**
@@ -1510,56 +1509,56 @@ public JabRefPreferences prefs() {
   }
 
   // The action for closing the current database and leaving the window open.
-	CloseDatabaseAction closeDatabaseAction = new CloseDatabaseAction();
-
-	class CloseDatabaseAction extends MnemonicAwareAction {
-		public CloseDatabaseAction() {
-			super(GUIGlobals.getImage("close"));
-			putValue(NAME, "Close database");
-			putValue(SHORT_DESCRIPTION, Globals.lang("Close the current database"));
-			putValue(ACCELERATOR_KEY, prefs.getKey("Close database"));
-		}
-
-		public void actionPerformed(ActionEvent e) {
-			// Ask here if the user really wants to close, if the base
-			// has not been saved since last save.
-			boolean close = true;
-			if (basePanel() == null) { // when it is initially empty
-				return; // nbatada nov 7
-			}
-
-			if (basePanel().baseChanged) {
-				int answer = JOptionPane.showConfirmDialog(ths, Globals
-					.lang("Database has changed. Do you want to save " + "before closing?"),
-					Globals.lang("Save before closing"), JOptionPane.YES_NO_CANCEL_OPTION);
-				if ((answer == JOptionPane.CANCEL_OPTION) || (answer == JOptionPane.CLOSED_OPTION)) {
-					close = false; // The user has cancelled.
-				}
-				if (answer == JOptionPane.YES_OPTION) {
-					// The user wants to save.
-					try {
-						basePanel().runCommand("save");
-					} catch (Throwable ex) {
-						// Something prevented the file
-						// from being saved. Break!!!
-						close = false;
-					}
-
-				}
-			}
-
-			if (close) {
-				basePanel().cleanUp();
-				tabbedPane.remove(basePanel());
-				if (tabbedPane.getTabCount() > 0) {
-					markActiveBasePanel();
-				}
-				updateEnabledState(); // Man, this is what I call a bug that this is not called.
-				output(Globals.lang("Closed database") + ".");
-				System.gc(); // Test
-			}
-		}
-	}
+    CloseDatabaseAction closeDatabaseAction = new CloseDatabaseAction();
+
+    class CloseDatabaseAction extends MnemonicAwareAction {
+        public CloseDatabaseAction() {
+            super(GUIGlobals.getImage("close"));
+            putValue(NAME, "Close database");
+            putValue(SHORT_DESCRIPTION, Globals.lang("Close the current database"));
+            putValue(ACCELERATOR_KEY, prefs.getKey("Close database"));
+        }
+
+        public void actionPerformed(ActionEvent e) {
+            // Ask here if the user really wants to close, if the base
+            // has not been saved since last save.
+            boolean close = true;
+            if (basePanel() == null) { // when it is initially empty
+                return; // nbatada nov 7
+            }
+
+            if (basePanel().baseChanged) {
+                int answer = JOptionPane.showConfirmDialog(ths, Globals
+                    .lang("Database has changed. Do you want to save " + "before closing?"),
+                    Globals.lang("Save before closing"), JOptionPane.YES_NO_CANCEL_OPTION);
+                if ((answer == JOptionPane.CANCEL_OPTION) || (answer == JOptionPane.CLOSED_OPTION)) {
+                    close = false; // The user has cancelled.
+                }
+                if (answer == JOptionPane.YES_OPTION) {
+                    // The user wants to save.
+                    try {
+                        basePanel().runCommand("save");
+                    } catch (Throwable ex) {
+                        // Something prevented the file
+                        // from being saved. Break!!!
+                        close = false;
+                    }
+
+                }
+            }
+
+            if (close) {
+                basePanel().cleanUp();
+                tabbedPane.remove(basePanel());
+                if (tabbedPane.getTabCount() > 0) {
+                    markActiveBasePanel();
+                }
+                updateEnabledState(); // Man, this is what I call a bug that this is not called.
+                output(Globals.lang("Closed database") + ".");
+                System.gc(); // Test
+            }
+        }
+    }
 
 
   // The action concerned with opening a new database.
@@ -1796,40 +1795,40 @@ 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());
-				}
-			}
-		}
-	}
+        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());
-				}
-			}
-		}
-	}
+        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();
@@ -2084,10 +2083,11 @@ class FetchCiteSeerAction
 
     /**
      * This method reverts the cursor to normal, and stops blocking input to the JFrame's contents.
+     * There are no adverse effects of calling this method redundantly.
      */
     public void unblock() {
         getGlassPane().setVisible(false);
-        //	getGlassPane().setCursor(Cursor.WAIT_CURSOR);
+        //  getGlassPane().setCursor(Cursor.WAIT_CURSOR);
     }
 
 
@@ -2098,13 +2098,13 @@ class FetchCiteSeerAction
       * SwingUtilities.invokeLater() to do the actual operation on the EDT.
       */
     public void setProgressBarVisible(final boolean visible) {
-	if (SwingUtilities.isEventDispatchThread())
-	    progressBar.setVisible(visible);
-	else SwingUtilities.invokeLater(new Runnable() {
-		public void run() {
-		    progressBar.setVisible(visible);
-		}
-	    });
+    if (SwingUtilities.isEventDispatchThread())
+        progressBar.setVisible(visible);
+    else SwingUtilities.invokeLater(new Runnable() {
+        public void run() {
+            progressBar.setVisible(visible);
+        }
+        });
     }
 
 
@@ -2115,13 +2115,13 @@ class FetchCiteSeerAction
       * SwingUtilities.invokeLater() to do the actual operation on the EDT.
      */
     public void setProgressBarValue(final int value) {
-	if (SwingUtilities.isEventDispatchThread())
-	    progressBar.setValue(value);
-	else SwingUtilities.invokeLater(new Runnable() {
-		public void run() {
-		    progressBar.setValue(value);
-		}
-	    });
+    if (SwingUtilities.isEventDispatchThread())
+        progressBar.setValue(value);
+    else SwingUtilities.invokeLater(new Runnable() {
+        public void run() {
+            progressBar.setValue(value);
+        }
+        });
 
     }
 
@@ -2134,13 +2134,13 @@ class FetchCiteSeerAction
       * SwingUtilities.invokeLater() to do the actual operation on the EDT.
      */
     public void setProgressBarMaximum(final int value) {
-	if (SwingUtilities.isEventDispatchThread())
-	    progressBar.setMaximum(value);
-	else SwingUtilities.invokeLater(new Runnable() {
-		public void run() {
-		    progressBar.setMaximum(value);
-		}
-	    });
+    if (SwingUtilities.isEventDispatchThread())
+        progressBar.setMaximum(value);
+    else SwingUtilities.invokeLater(new Runnable() {
+        public void run() {
+            progressBar.setMaximum(value);
+        }
+        });
 
 
     }
@@ -2324,25 +2324,7 @@ class SaveSessionAction
     }
   }
 
-    class ExportCSV extends MnemonicAwareAction {
-        public ExportCSV() {
-            putValue(NAME, "Tab-separated file");
-        }
-        public void actionPerformed(ActionEvent e) {
-            String chosenFile = Globals.getNewFile(ths, new File(prefs.get("workingDirectory")), ".csv",
-                                                   JFileChooser.SAVE_DIALOG, true);
-            if (chosenFile == null)
-                return;
-            try {
-                FileActions.exportToCSV(basePanel().database(), new File(chosenFile),
-                                        prefs);
-            } catch (Exception ex) {
-                ex.printStackTrace();
-            }
-
-        }
-    }
-
+ 
     class CustomizeEntryTypeAction extends MnemonicAwareAction {
         public CustomizeEntryTypeAction() {
             putValue(NAME, "Customize entry types");
diff --git a/src/java/net/sf/jabref/JabRefPreferences.java b/src/java/net/sf/jabref/JabRefPreferences.java
index df377db..c6a9e5c 100644
--- a/src/java/net/sf/jabref/JabRefPreferences.java
+++ b/src/java/net/sf/jabref/JabRefPreferences.java
@@ -37,9 +37,11 @@ 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;
 
 public class JabRefPreferences {
 
@@ -64,14 +66,14 @@ public class JabRefPreferences {
     // Object containing custom export formats:
     public CustomExportList customExports;
 
-    /** Set with all custom {@link ImportFormat}s */
+    /** Set with all custom {@link net.sf.jabref.imports.ImportFormat}s */
     public CustomImportList customImports;
 
     // Object containing info about customized entry editor tabs.
     private EntryEditorTabList tabList = null;
 
     // Map containing all registered external file types:
-    private Map externalFileTypes = new HashMap();
+    private TreeSet externalFileTypes = new TreeSet();
 
     // The only instance of this class:
     private static JabRefPreferences singleton = null;
@@ -97,7 +99,9 @@ public class JabRefPreferences {
 			defaults.put("psviewer", "cmd.exe /c start /b");
 			defaults.put("htmlviewer", "cmd.exe /c start /b");
 			defaults.put("lookAndFeel", "com.jgoodies.plaf.windows.ExtWindowsLookAndFeel");
-		} else {
+            defaults.put("winEdtPath", "C:\\Program Files\\WinEdt Team\\WinEdt\\WinEdt.exe");
+            defaults.put("latexEditorPath", "C:\\Program Files\\LEd\\LEd.exe");
+        } else {
 			defaults.put("pdfviewer", "acroread");
 			defaults.put("psviewer", "gv");
 			defaults.put("htmlviewer", "mozilla");
@@ -105,6 +109,8 @@ public class JabRefPreferences {
 		}
         defaults.put("useDefaultLookAndFeel", Boolean.TRUE);
         defaults.put("lyxpipe", System.getProperty("user.home")+File.separator+".lyx/lyxpipe");
+        defaults.put("vim", "vim");
+        defaults.put("vimServer", "vim");
         defaults.put("posX", new Integer(0));
         defaults.put("posY", new Integer(0));
         defaults.put("sizeX", new Integer(840));
@@ -134,7 +140,8 @@ public class JabRefPreferences {
         defaults.put("numberColWidth",new Integer(GUIGlobals.NUMBER_COL_LENGTH));
         defaults.put("workingDirectory", System.getProperty("user.home"));
         defaults.put("exportWorkingDirectory", System.getProperty("user.home"));
-        defaults.put("importWorkingDirectory", System.getProperty("user.home"));        
+        defaults.put("importWorkingDirectory", System.getProperty("user.home"));
+        defaults.put("fileWorkingDirectory", System.getProperty("user.home"));
         defaults.put("autoOpenForm", Boolean.TRUE);
         defaults.put("entryTypeFormHeightFactor", new Integer(1));
         defaults.put("entryTypeFormWidth", new Integer(1));
@@ -162,7 +169,7 @@ public class JabRefPreferences {
         defaults.put("searchPanePosX", new Integer(0));
         defaults.put("searchPanePosY", new Integer(0));
         defaults.put("autoComplete", Boolean.TRUE);
-        defaults.put("autoCompFields", new byte[] {0, 1, 28});
+        defaults.put("autoCompleteFields", "author;editor;title;journal;publisher;keywords");
         defaults.put("groupSelectorVisible", Boolean.TRUE);
         defaults.put("groupFloatSelections", Boolean.TRUE);
         defaults.put("groupIntersectSelections", Boolean.TRUE);
@@ -180,13 +187,11 @@ public class JabRefPreferences {
         defaults.put("highlightGroupsMatchingAll", Boolean.FALSE);
         defaults.put("searchPanelVisible", Boolean.FALSE);
         defaults.put("defaultEncoding", System.getProperty("file.encoding"));
-        defaults.put("winEdtPath", "C:\\Program Files\\WinEdt Team\\WinEdt\\WinEdt.exe");
-        defaults.put("latexEditorPath", "C:\\TEMP\\Led.exe");
         defaults.put("groupsVisibleRows", new Integer(8));
         defaults.put("defaultOwner", System.getProperty("user.name"));
         defaults.put("preserveFieldFormatting", Boolean.FALSE);
     // The general fields stuff is made obsolete by the CUSTOM_TAB_... entries.
-        defaults.put("generalFields", "crossref;keywords;doi;url;urldate;citeseerurl;"+
+        defaults.put("generalFields", "crossref;keywords;file;doi;url;urldate;citeseerurl;"+
                      "pdf;comment;owner");
 
         defaults.put("useCustomIconTheme", Boolean.FALSE);
@@ -194,8 +199,8 @@ public class JabRefPreferences {
 
     // Entry editor tab 0:
     defaults.put(CUSTOM_TAB_NAME+"_def0", Globals.lang("General"));
-        defaults.put(CUSTOM_TAB_FIELDS+"_def0", "crossref;keywords;doi;url;citeseerurl;"+
-                     "pdf;comment;owner;timestamp");
+        defaults.put(CUSTOM_TAB_FIELDS+"_def0", "crossref;keywords;file;doi;url;citeseerurl;"+
+                     "comment;owner;timestamp");
 
     // Entry editor tab 1:
         defaults.put(CUSTOM_TAB_FIELDS+"_def1", "abstract");
@@ -230,8 +235,9 @@ public class JabRefPreferences {
         defaults.put("antialias", Boolean.FALSE);
         defaults.put("ctrlClick", Boolean.FALSE);
         defaults.put("disableOnMultipleSelection", Boolean.FALSE);
-        defaults.put("pdfColumn", Boolean.TRUE);
+        defaults.put("pdfColumn", Boolean.FALSE);
         defaults.put("urlColumn", Boolean.TRUE);
+        defaults.put("fileColumn", Boolean.TRUE);
         defaults.put("citeseerColumn", Boolean.FALSE);
         defaults.put("useOwner", Boolean.TRUE);
         defaults.put("allowTableEditing", Boolean.FALSE);
@@ -280,6 +286,8 @@ public class JabRefPreferences {
                      +"\\begin{review}<BR><BR><b>Review: </b> \\format[HTMLChars]{\\review} \\end{review}"
                      +"</dd>__NEWLINE__<p></p></font>");
         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);
@@ -300,10 +308,20 @@ public class JabRefPreferences {
         defaults.put("citeCommand", "cite");
         defaults.put("floatMarkedEntries", Boolean.TRUE);
 
-        defaults.put("useNativeFileDialogOnMac", Boolean.TRUE);
+        defaults.put("useNativeFileDialogOnMac", Boolean.FALSE);
 
         defaults.put("lastUsedExport", null);
         defaults.put("sidePaneWidth", new Integer(-1));
+
+        defaults.put("importInspectionDialogWidth", new Integer(650));
+        defaults.put("importInspectionDialogHeight", new Integer(650));
+
+        defaults.put("showFileLinksUpgradeWarning", Boolean.TRUE);
+
+        //defaults.put("lastAutodetectedImport", "");
+
+        //defaults.put("autoRemoveExactDuplicates", Boolean.FALSE);
+        //defaults.put("confirmAutoRemoveExactDuplicates", Boolean.TRUE);
         
         //defaults.put("tempDir", System.getProperty("java.io.tmpdir"));
         //Util.pr(System.getProperty("java.io.tempdir"));
@@ -319,9 +337,6 @@ public class JabRefPreferences {
         updateSpecialFieldHandling();
         WRAPPED_USERNAME = "["+get("defaultOwner")+"]";
 
-        // TODO: remove temporary registering of external file types?
-        updateExternalFileTypes();
-        
         String defaultExpression = "**/.*[bibtexkey].*\\\\.[extension]";
         defaults.put(DEFAULT_REG_EXP_SEARCH_EXPRESSION_KEY, defaultExpression);
         defaults.put(REG_EXP_SEARCH_EXPRESSION_KEY, defaultExpression);
@@ -492,7 +507,7 @@ public class JabRefPreferences {
 
     /**
      * Looks up a color definition in preferences, and returns an array containing the RGB values.
-     * @param key The key for this setting.
+     * @param value The key for this setting.
      * @return The RGB values corresponding to this color setting.
      */
     public int[] getRgb(String value) {
@@ -676,6 +691,7 @@ public class JabRefPreferences {
         defKeyBinds.put("Open database", "ctrl O");
         defKeyBinds.put("Save database", "ctrl S");
         defKeyBinds.put("Save database as ...", "ctrl shift S");
+        defKeyBinds.put("Save all", "ctrl alt S");
         defKeyBinds.put("Close database", "ctrl W");
         defKeyBinds.put("New entry", "ctrl N");
         defKeyBinds.put("Cut", "ctrl X");
@@ -724,7 +740,8 @@ public class JabRefPreferences {
         defKeyBinds.put("Previous tab", "ctrl PAGE_UP");
         defKeyBinds.put("Replace string", "ctrl R");
         defKeyBinds.put("Delete", "DELETE");
-        defKeyBinds.put("Open PDF or PS", "F4");
+        defKeyBinds.put("Open file", "F4");
+        defKeyBinds.put("Open PDF or PS", "shift F5");
         defKeyBinds.put("Open URL or DOI", "F3");
         defKeyBinds.put("Toggle entry preview", "ctrl F9");
         defKeyBinds.put("Switch preview layout", "F9");
@@ -821,13 +838,70 @@ public class JabRefPreferences {
     }
 
     /**
-     *
+     * Set up the list of external file types, either from default values, or from values
+     * recorded in Preferences.
      */
     public void updateExternalFileTypes() {
-        externalFileTypes.put("pdf", new ExternalFileType("PDF", "pdf", get("pdfviewer"), null));
-        externalFileTypes.put("ps", new ExternalFileType("PostScript", "ps", get("psviewer"), null));
-        externalFileTypes.put("doc", new ExternalFileType("Word file", "doc", "oowriter", null));
-        externalFileTypes.put("odt", new ExternalFileType("OpenDocument text", "odt", "oowriter", null));
+        if (prefs.get("externalFileTypes", null) == null) {
+            externalFileTypes.clear();
+            List<ExternalFileType> list = getDefaultExternalFileTypes();
+            externalFileTypes.addAll(list);
+        }
+        else {
+            String[][] vals = Util.decodeStringDoubleArray(prefs.get("externalFileTypes", ""));
+            for (int i = 0; i < vals.length; i++) {
+                ExternalFileType type = new ExternalFileType(vals[i]);
+                externalFileTypes.add(type);
+            }
+        }
+    }
+
+
+    public List<ExternalFileType> getDefaultExternalFileTypes() {
+        List<ExternalFileType> list = new ArrayList<ExternalFileType>();
+        list.add(new ExternalFileType("PDF", "pdf", get("pdfviewer"), "pdfSmall"));
+        list.add(new ExternalFileType("PostScript", "ps", get("psviewer"), "psSmall"));
+        list.add(new ExternalFileType("Word file", "doc", "oowriter", "openoffice"));
+        list.add(new ExternalFileType("OpenDocument text", "odt", "oowriter", "openoffice"));
+        list.add(new ExternalFileType("PowerPoint file", "ppt", "ooimpress", "openoffice"));
+        list.add(new ExternalFileType("OpenDocument presentation", "odp", "ooimpress", "openoffice"));
+        list.add(new ExternalFileType("PNG image", "png", "gimp", "picture"));
+        list.add(new ExternalFileType("GIF image", "gif", "gimp", "picture"));
+        list.add(new ExternalFileType("Text file", "txt", "emacs", "emacs"));
+        ExternalFileType tp = new ExternalFileType("URL", "html", "firefox", "www");
+        tp.setRemote(true);
+        list.add(tp);
+
+        // Under Windows we initialize all file types with an empty viewer app, to
+        // rely on the default app instead:
+        if (Globals.ON_WIN) {
+            for (Iterator<ExternalFileType> iterator = list.iterator(); iterator.hasNext();) {
+                ExternalFileType type = iterator.next();
+                type.setOpenWith("");
+            }
+        }
+
+        return list;
+    }
+
+    public ExternalFileType[] getExternalFileTypeSelection() {
+        return (ExternalFileType[])externalFileTypes.toArray
+                (new ExternalFileType[externalFileTypes.size()]);
+    }
+
+    /**
+     * Look up the external file type registered with this name, if any.
+     * @param name The file type name.
+     * @return The ExternalFileType registered, or null if none.
+     */
+    public ExternalFileType getExternalFileTypeByName(String name) {
+        for (Iterator iterator = externalFileTypes.iterator(); iterator.hasNext();) {
+            ExternalFileType type = (ExternalFileType) iterator.next();
+            if (type.getName().equals(name))
+                return type;
+        }
+        // Return an instance that signifies an unknown file type:
+        return new UnknownExternalFileType(name);
     }
 
     /**
@@ -835,12 +909,40 @@ public class JabRefPreferences {
      * @param extension The file extension.
      * @return The ExternalFileType registered, or null if none.
      */
-    public ExternalFileType getExternalFileType(String extension) {
-        return (ExternalFileType)externalFileTypes.get(extension);
+    public ExternalFileType getExternalFileTypeByExt(String extension) {
+        for (Iterator iterator = externalFileTypes.iterator(); iterator.hasNext();) {
+            ExternalFileType type = (ExternalFileType) iterator.next();
+            if (type.getExtension().equals(extension))
+                return type;
+        }
+        return null;
     }
 
 
     /**
+     * Reset the List of external file types after user customization.
+     * @param types The new List of external file types. This is the complete list, not
+     *  just new entries.
+     */
+    public void setExternalFileTypes(List<ExternalFileType> types) {
+        externalFileTypes.clear();
+        for (Iterator<ExternalFileType> iterator = types.iterator(); iterator.hasNext();) {
+            externalFileTypes.add(iterator.next());
+        }
+        String[][] array = new String[externalFileTypes.size()][];
+        int i=0;
+        for (Iterator iterator = externalFileTypes.iterator(); iterator.hasNext();) {
+            ExternalFileType type = (ExternalFileType) iterator.next();
+            array[i] = type.getStringArrayRepresentation();
+            i++;
+        }
+        //System.out.println("Encoded: '"+Util.encodeStringArray(array)+"'");
+        put("externalFileTypes", Util.encodeStringArray(array));
+    }
+
+    
+
+    /**
      * Removes all information about custom entry types with tags of
      * @param number or higher.
      */
diff --git a/src/java/net/sf/jabref/PrefsDialog2.java b/src/java/net/sf/jabref/PrefsDialog2.java
index c05f080..d829a24 100644
--- a/src/java/net/sf/jabref/PrefsDialog2.java
+++ b/src/java/net/sf/jabref/PrefsDialog2.java
@@ -30,7 +30,6 @@ package net.sf.jabref;
 import java.awt.*;
 import java.awt.event.*;
 import javax.swing.*;
-import javax.swing.table.*;
 
 
 /**
diff --git a/src/java/net/sf/jabref/PrefsDialog3.java b/src/java/net/sf/jabref/PrefsDialog3.java
index dc81b83..75bd61d 100644
--- a/src/java/net/sf/jabref/PrefsDialog3.java
+++ b/src/java/net/sf/jabref/PrefsDialog3.java
@@ -81,16 +81,17 @@ public class PrefsDialog3 extends JDialog {
 		// ----------------------------------------------------------------
 		ArrayList tabs = new ArrayList();
 		tabs.add(new GeneralTab(frame, prefs));
-		tabs.add(new GroupsPrefsTab(prefs));
+        tabs.add(new EntryEditorPrefsTab(frame, prefs));
+        tabs.add(new GroupsPrefsTab(prefs));
 		tabs.add(new AppearancePrefsTab(prefs));
-		tabs.add(new ExternalTab(frame, prefs, parent.helpDiag));
+		tabs.add(new ExternalTab(frame, this, prefs, parent.helpDiag));
 		tabs.add(new TablePrefsTab(prefs, parent));
 		tabs.add(new TableColumnsTab(prefs, parent));
 		tabs.add(new TabLabelPattern(prefs, parent.helpDiag));
 		tabs.add(new PreviewPrefsTab(prefs));
 		tabs.add(new NameFormatterTab(parent.helpDiag));
 		tabs.add(new XmpPrefsTab());
-                tabs.add(new AdvancedTab(prefs, parent.helpDiag));
+        tabs.add(new AdvancedTab(prefs, parent.helpDiag));
 		
 		Iterator it = tabs.iterator();
 		String[] names = new String[tabs.size()];
diff --git a/src/java/net/sf/jabref/PreviewPanel.java b/src/java/net/sf/jabref/PreviewPanel.java
index ae6283b..f23b855 100644
--- a/src/java/net/sf/jabref/PreviewPanel.java
+++ b/src/java/net/sf/jabref/PreviewPanel.java
@@ -24,8 +24,8 @@ import net.sf.jabref.export.layout.LayoutHelper;
 /**
  * Displays an BibtexEntry using the given layout format.
  * 
- * @author $Author: coezbek $
- * @version $Revision: 1.15 $ ($Date: 2006/09/03 19:09:59 $)
+ * @author $Author: mortenalver $
+ * @version $Revision: 1.16 $ ($Date: 2007/01/25 17:46:57 $)
  *
  */
 public class PreviewPanel extends JEditorPane implements VetoableChangeListener {
diff --git a/src/java/net/sf/jabref/RightClickMenu.java b/src/java/net/sf/jabref/RightClickMenu.java
index fe8c9ec..beca9d8 100644
--- a/src/java/net/sf/jabref/RightClickMenu.java
+++ b/src/java/net/sf/jabref/RightClickMenu.java
@@ -145,6 +145,14 @@ public class RightClickMenu extends JPopupMenu
            addSeparator();
         }
 
+        add(new AbstractAction(Globals.lang("Open file"), GUIGlobals.getImage("openExternalFile")) {
+            public void actionPerformed(ActionEvent e) {
+                try {
+                    panel.runCommand("openExternalFile");
+                } catch (Throwable ex) {}
+            }
+        });
+
         add(new AbstractAction(Globals.lang("Open PDF or PS"), GUIGlobals.getImage("openFile")) {
                 public void actionPerformed(ActionEvent e) {
                     try {
diff --git a/src/java/net/sf/jabref/SidePaneManager.java b/src/java/net/sf/jabref/SidePaneManager.java
index 2d13d72..ea41547 100644
--- a/src/java/net/sf/jabref/SidePaneManager.java
+++ b/src/java/net/sf/jabref/SidePaneManager.java
@@ -40,7 +40,7 @@ import javax.swing.event.ChangeListener;
  * Manages visibility of SideShowComponents in a given newly constructed
  * sidePane.
  * 
- * @version $Revision: 1.22 $ ($Date: 2007/01/25 17:46:57 $)
+ * @version $Revision: 1.23 $ ($Date: 2007/01/25 18:35:44 $)
  * 
  */
 public class SidePaneManager {
diff --git a/src/java/net/sf/jabref/TablePrefsTab.java b/src/java/net/sf/jabref/TablePrefsTab.java
index 1d1a2a8..e36bfd9 100644
--- a/src/java/net/sf/jabref/TablePrefsTab.java
+++ b/src/java/net/sf/jabref/TablePrefsTab.java
@@ -27,8 +27,8 @@ class TablePrefsTab extends JPanel implements PrefsTab {
 
 	JabRefPreferences _prefs;
 
-	private JCheckBox autoResizeMode, priDesc, secDesc, terDesc, floatMarked, pdfColumn, urlColumn,
-		citeseerColumn;
+    private JCheckBox autoResizeMode, priDesc, secDesc, terDesc, floatMarked, pdfColumn, urlColumn,
+		fileColumn, citeseerColumn;
 
 	private JRadioButton namesAsIs, namesFf, namesFl, namesNatbib, abbrNames, noAbbrNames,
 		lastNamesOnly;
@@ -74,7 +74,8 @@ class TablePrefsTab extends JPanel implements PrefsTab {
 		noAbbrNames = new JRadioButton(Globals.lang("Do not abbreviate names"));
 		abbrNames = new JRadioButton(Globals.lang("Abbreviate names"));
 		lastNamesOnly = new JRadioButton(Globals.lang("Show last names only"));
-		pdfColumn = new JCheckBox(Globals.lang("Show PDF/PS column"));
+        fileColumn = new JCheckBox(Globals.lang("Show file column"));
+        pdfColumn = new JCheckBox(Globals.lang("Show PDF/PS column"));
 		urlColumn = new JCheckBox(Globals.lang("Show URL/DOI column"));
 		citeseerColumn = new JCheckBox(Globals.lang("Show CiteSeer column"));
 
@@ -91,24 +92,24 @@ class TablePrefsTab extends JPanel implements PrefsTab {
 		priSort.addActionListener(new ActionListener() {
 			public void actionPerformed(ActionEvent e) {
 				if (priSort.getSelectedIndex() > 0) {
-					priField.setText(BibtexFields.getFieldName(priSort.getSelectedIndex() - 1));
-					priSort.setSelectedIndex(0);
+                    priField.setText(priSort.getSelectedItem().toString());
+                    priSort.setSelectedIndex(0);
 				}
 			}
 		});
 		secSort.addActionListener(new ActionListener() {
 			public void actionPerformed(ActionEvent e) {
 				if (secSort.getSelectedIndex() > 0) {
-					secField.setText(BibtexFields.getFieldName(secSort.getSelectedIndex() - 1));
-					secSort.setSelectedIndex(0);
+                    secField.setText(secSort.getSelectedItem().toString());
+                    secSort.setSelectedIndex(0);
 				}
 			}
 		});
 		terSort.addActionListener(new ActionListener() {
 			public void actionPerformed(ActionEvent e) {
 				if (terSort.getSelectedIndex() > 0) {
-					terField.setText(BibtexFields.getFieldName(terSort.getSelectedIndex() - 1));
-					terSort.setSelectedIndex(0);
+					terField.setText(terSort.getSelectedItem().toString());
+                    terSort.setSelectedIndex(0);
 				}
 			}
 		});
@@ -134,10 +135,13 @@ class TablePrefsTab extends JPanel implements PrefsTab {
 		builder.appendSeparator(Globals.lang("Special table columns"));
 		builder.nextLine();
 		builder.append(pan);
-		builder.append(pdfColumn);
+		builder.append(fileColumn);
 		builder.nextLine();
-		builder.append(pan);
-		builder.append(urlColumn);
+        builder.append(pan);
+        builder.append(pdfColumn);
+        builder.nextLine();
+        builder.append(pan);
+        builder.append(urlColumn);
 		builder.nextLine();
 		builder.append(pan);
 		builder.append(citeseerColumn);
@@ -214,9 +218,11 @@ class TablePrefsTab extends JPanel implements PrefsTab {
 	public void setValues() {
 		autoResizeMode
 			.setSelected((_prefs.getInt("autoResizeMode") == JTable.AUTO_RESIZE_ALL_COLUMNS));
-		pdfColumn.setSelected(_prefs.getBoolean("pdfColumn"));
+		fileColumn.setSelected(_prefs.getBoolean("fileColumn"));
+        pdfColumn.setSelected(_prefs.getBoolean("pdfColumn"));
 		urlColumn.setSelected(_prefs.getBoolean("urlColumn"));
-		citeseerColumn.setSelected(_prefs.getBoolean("citeseerColumn"));
+        fileColumn.setSelected(_prefs.getBoolean("fileColumn"));
+        citeseerColumn.setSelected(_prefs.getBoolean("citeseerColumn"));
 
 		priField.setText(_prefs.get("priSort"));
 		secField.setText(_prefs.get("secSort"));
@@ -263,7 +269,8 @@ class TablePrefsTab extends JPanel implements PrefsTab {
 		_prefs.putBoolean("namesLastOnly", lastNamesOnly.isSelected());
 		_prefs.putBoolean("abbrAuthorNames", abbrNames.isSelected());
 
-		_prefs.putBoolean("pdfColumn", pdfColumn.isSelected());
+        _prefs.putBoolean("fileColumn", fileColumn.isSelected());
+        _prefs.putBoolean("pdfColumn", pdfColumn.isSelected());
 		_prefs.putBoolean("urlColumn", urlColumn.isSelected());
 		_prefs.putBoolean("citeseerColumn", citeseerColumn.isSelected());
 		_prefs.putInt("autoResizeMode",
diff --git a/src/java/net/sf/jabref/Util.java b/src/java/net/sf/jabref/Util.java
index 6ef39aa..944aff0 100644
--- a/src/java/net/sf/jabref/Util.java
+++ b/src/java/net/sf/jabref/Util.java
@@ -44,16 +44,7 @@ import java.awt.Font;
 import java.awt.Point;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
-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.io.*;
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.net.URLDecoder;
@@ -61,20 +52,7 @@ import java.nio.charset.Charset;
 import java.nio.charset.CharsetEncoder;
 import java.text.NumberFormat;
 import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Calendar;
-import java.util.Collection;
-import java.util.Date;
-import java.util.GregorianCalendar;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.SortedSet;
-import java.util.StringTokenizer;
-import java.util.TreeSet;
-import java.util.Vector;
+import java.util.*;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
@@ -91,11 +69,14 @@ import javax.swing.undo.UndoableEdit;
 import net.sf.jabref.export.layout.LayoutEntry;
 import net.sf.jabref.export.layout.LayoutFormatter;
 import net.sf.jabref.external.ExternalFileType;
+import net.sf.jabref.external.UnknownExternalFileType;
+import net.sf.jabref.external.ExternalFileTypeEntryEditor;
 import net.sf.jabref.groups.AbstractGroup;
 import net.sf.jabref.groups.KeywordGroup;
 import net.sf.jabref.imports.CiteSeerFetcher;
 import net.sf.jabref.undo.NamedCompound;
 import net.sf.jabref.undo.UndoableFieldChange;
+import net.sf.jabref.gui.*;
 
 import com.jgoodies.forms.builder.DefaultFormBuilder;
 import com.jgoodies.forms.layout.FormLayout;
@@ -642,10 +623,26 @@ public class Util {
 		} else {
 			cmd = "cmd.exe /c start " + link;
 		}
-		Process child = Runtime.getRuntime().exec(cmd);
+
+        Runtime.getRuntime().exec(cmd);
 	}
 
-	/**
+    /**
+     * Opens a file on a Windows system, using the given application.
+     *
+     * @param link The file name.
+     * @param application Link to the app that opens the file.
+     * @throws IOException
+     */
+    public static void openFileWithApplicationOnWindows(String link, String application)
+        throws IOException {
+
+        link = link.replaceAll("&", "\"&\"").replaceAll(" ", "\" \"");
+
+		Runtime.getRuntime().exec(application + " " + link);
+    }
+
+    /**
 	 * Open an external file, attempting to use the correct viewer for it.
 	 * 
 	 * @param metaData
@@ -653,14 +650,16 @@ public class Util {
 	 * @param link
 	 *            The file name.
 	 */
-	public static void openExternalFileAnyFormat(MetaData metaData, String link) throws IOException {
+	public static void openExternalFileAnyFormat(MetaData metaData, String link,
+                                                 ExternalFileType fileType) throws IOException {
 
-		// For other platforms we'll try to find the file type:
+
+        // For other platforms we'll try to find the file type:
 		File file = new File(link);
 
 		// We try to check the extension for the file:
 		String name = file.getName();
-		int pos = name.indexOf('.');
+		int pos = name.lastIndexOf('.');
 		String extension = ((pos >= 0) && (pos < name.length() - 1)) ? name.substring(pos + 1)
 			.trim().toLowerCase() : null;
 
@@ -670,16 +669,24 @@ public class Util {
 		 * extension. Could not find viewer for file.")); }
 		 */
 
-		// Now we know the extension, check if it is one we know about:
-		ExternalFileType fileType = Globals.prefs.getExternalFileType(extension);
-
 		// Find the default directory for this field type, if any:
 		String dir = metaData.getFileDirectory(extension);
-		if (dir != null) {
-			File tmp = expandFilename(link, new String[] { dir, "." });
-			if (tmp != null)
-				file = tmp;
-		}
+        // Include the standard "file" directory:
+        String fileDir = metaData.getFileDirectory(GUIGlobals.FILE_FIELD);
+
+        // Include the directory of the bib file:
+        String[] dirs;
+        if (metaData.getFile() != null) {
+            String databaseDir = metaData.getFile().getParent();
+            dirs = new String[] { dir, fileDir, databaseDir };
+        }
+        else
+            dirs = new String[] { dir, fileDir };
+
+        File tmp = expandFilename(link, dirs);
+        if (tmp != null)
+            file = tmp;
+
 
 		// Check if we have arrived at an existing file:
 		if (file.exists() && (fileType != null)) {
@@ -689,7 +696,11 @@ public class Util {
 					String[] cmd = { "/usr/bin/open", "-a", fileType.getOpenWith(), file.getPath() };
 					Runtime.getRuntime().exec(cmd);
 				} else if (Globals.ON_WIN) {
-					openFileOnWindows(file.getPath(), true);
+                    if ((fileType.getOpenWith() != null) && (fileType.getOpenWith().length() > 0)) {
+                        // Application is specified. Use it:
+                        openFileWithApplicationOnWindows(file.getPath(), fileType.getOpenWith());
+                    } else
+                        openFileOnWindows(file.getPath(), true);
 				} else {
 					String[] cmdArray = new String[] { fileType.getOpenWith(), file.getPath() };
 					Runtime.getRuntime().exec(cmdArray);
@@ -728,7 +739,84 @@ public class Util {
 		}
 	}
 
-	/**
+public static void openExternalFileUnknown(JabRefFrame frame, BibtexEntry entry, MetaData metaData,
+                                           String link, UnknownExternalFileType fileType) throws IOException {
+
+    String cancelMessage = Globals.lang("Unable to open file.");
+    String[] options = new String[] {Globals.lang("Define '%0'", fileType.getName()),
+            Globals.lang("Change file type"), Globals.lang("Cancel")};
+    String defOption = options[0];
+    int answer = JOptionPane.showOptionDialog(frame, Globals.lang("This external link is of the type '%0', which is undefined. What do you want to do?",
+            fileType.getName()),
+            Globals.lang("Undefined file type"), JOptionPane.YES_NO_CANCEL_OPTION,
+            JOptionPane.QUESTION_MESSAGE, null, options, defOption);
+    if (answer == JOptionPane.CANCEL_OPTION) {
+        frame.output(cancelMessage);
+        return;
+    }
+    else if (answer == JOptionPane.YES_OPTION) {
+        // User wants to define the new file type. Show the dialog:
+        ExternalFileType newType = new ExternalFileType(fileType.getName(), "", "", "new");
+        ExternalFileTypeEntryEditor editor = new ExternalFileTypeEntryEditor(frame, newType);
+        editor.setVisible(true);
+        if (editor.okPressed()) {
+            // Get the old list of types, add this one, and update the list in prefs:
+            List<ExternalFileType> fileTypes = new ArrayList<ExternalFileType>();
+            ExternalFileType[] oldTypes = Globals.prefs.getExternalFileTypeSelection();
+            for (int i = 0; i < oldTypes.length; i++) {
+                fileTypes.add(oldTypes[i]);
+            }
+            fileTypes.add(newType);
+            Collections.sort(fileTypes);
+            Globals.prefs.setExternalFileTypes(fileTypes);
+            // Finally, open the file:
+            openExternalFileAnyFormat(metaData, link, newType);
+        } else {
+            // Cancelled:
+            frame.output(cancelMessage);
+            return;
+        }
+    }
+    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);
+        tModel.setContent(oldValue);
+        FileListEntry flEntry = null;
+        // Then find which one we are looking at:
+        for (int i=0; i<tModel.getRowCount(); i++) {
+            FileListEntry iEntry = tModel.getEntry(i);
+            if (iEntry.getLink().equals(link)) {
+                flEntry = iEntry;
+                break;
+            }
+        }
+        if (flEntry == null) {
+            // This shouldn't happen, so I'm not sure what to put in here:
+            throw new RuntimeException("Could not find the file list entry "+link+" in "+entry.toString());
+        }
+
+        FileListEntryEditor editor = new FileListEntryEditor(frame, flEntry, false, metaData);
+        editor.setVisible(true);
+        if (editor.okPressed()) {
+            // Store the changes and add an undo edit:
+            String newValue = tModel.getStringRepresentation();
+            UndoableFieldChange ce = new UndoableFieldChange(entry, GUIGlobals.FILE_FIELD,
+                    oldValue, newValue);
+            entry.setField(GUIGlobals.FILE_FIELD, newValue);
+            frame.basePanel().undoManager.addEdit(ce);
+            frame.basePanel().markBaseChanged();
+            // Finally, open the link:
+            openExternalFileAnyFormat(metaData, flEntry.getLink(), flEntry.getType());
+        } else {
+            // Cancelled:
+            frame.output(cancelMessage);
+            return;
+        }
+    }
+}
+    /**
 	 * Make sure an URL is "portable", in that it doesn't contain bad characters
 	 * that break the open command in some OSes.
 	 * 
@@ -784,6 +872,83 @@ public class Util {
 			return null;
 	}
 
+	public static Map<BibtexEntry, List<File>> findAssociatedFiles(Collection<BibtexEntry> entries, Collection<String> extensions, Collection<File> directories){
+		HashMap<BibtexEntry, List<File>> result = new HashMap<BibtexEntry, List<File>>();
+	
+		// First scan directories
+		Set<File> filesWithExtension = findFiles(extensions, directories);
+		
+		// Initialize Result-Set
+		for (BibtexEntry entry : entries){
+			result.put(entry, new ArrayList<File>());
+		}
+		
+		// Now look for keys
+		nextFile:
+		for (File file : filesWithExtension){
+			
+			String name = file.getName();
+			for (BibtexEntry entry : entries){
+				if (name.contains(entry.getCiteKey())){
+					result.get(entry).add(file);
+					continue nextFile;
+				}
+			}			
+		}
+		
+		return result;
+	}
+	
+	public static Set<File> findFiles(Collection<String> extensions, Collection<File> directories) {
+		Set<File> result = new HashSet<File>();
+		
+		for (File directory : directories){
+			result.addAll(findFiles(extensions, directory));
+		}
+		
+		return result;
+	}
+
+	private static Collection<? extends File> findFiles(Collection<String> extensions, File directory) {
+		Set<File> result = new HashSet<File>();
+		
+		File[] children = directory.listFiles();
+		if (children == null)
+			return result; // No permission?
+
+		for (File child : children){
+			if (child.isDirectory()) {
+				result.addAll(findFiles(extensions, child));
+			} else {
+				
+				String extension = getFileExtension(child);
+					
+				if (extension != null){
+					if (extensions.contains(extension)){
+						result.add(child);
+					}
+				}
+			}
+		}
+		
+		return result;
+	}
+
+	/**
+	 * Returns the extension of a file or null if the file does not have one (no . in name).
+	 * 
+	 * @param file
+	 * 
+	 * @return The extension, trimmed and in lowercase.
+	 */
+	public static String getFileExtension(File file) {
+		String name = file.getName();
+		int pos = name.lastIndexOf('.');
+		String extension = ((pos >= 0) && (pos < name.length() - 1)) ? name.substring(pos + 1)
+			.trim().toLowerCase() : null;
+		return extension;
+	}
+
 	/**
 	 * New version of findPdf that uses findFiles.
 	 * 
@@ -814,7 +979,24 @@ public class Util {
 		return findFile(entry, null, directories, regularExpression, true);
 	}
 
-	/**
+    /**
+     * Convenience menthod for findPDF. Searches for a file of the given type.
+     * @param entry The BibtexEntry to search for a link for.
+     * @param fileType The file type to search for.
+     * @return The link to the file found, or null if not found.
+     */
+    public static String findFile(BibtexEntry entry, ExternalFileType fileType, List extraDirs) {
+
+        List dirs = new ArrayList();
+        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()]);
+        return findPdf(entry, fileType.getExtension(), directories);
+    }
+
+    /**
 	 * Searches the given directory and file name pattern for a file for the
 	 * bibtexentry.
 	 * 
@@ -858,7 +1040,6 @@ public class Util {
 		String file, boolean relative) {
 
 		for (int i = 0; i < directory.length; i++) {
-
 			String result = findFile(entry, database, directory[i], file, relative);
 			if (result != null) {
 				return result;
@@ -954,7 +1135,7 @@ public class Util {
 			return null;
 		}
 
-		String fieldValue = getField(beforeColon, entry, database);
+		String fieldValue = BibtexDatabase.getResolvedField(beforeColon, entry, database);
 
 		if (fieldValue == null)
 			return null;
@@ -974,19 +1155,6 @@ public class Util {
 		return fieldValue;
 	}
 
-	public static String getField(String field, BibtexEntry bibtex, BibtexDatabase database) {
-
-		if (field.equals("bibtextype"))
-			return bibtex.getType().getName();
-
-		String res = (String) bibtex.getField(field);
-
-		if ((res != null) && (database != null))
-			res = database.resolveForStrings(res);
-
-		return res;
-	}
-
 	/**
 	 * Convenience function for absolute search.
 	 * 
@@ -1026,13 +1194,13 @@ public class Util {
 				 * 
 				 * http://sourceforge.net/tracker/index.php?func=detail&aid=1601651&group_id=92314&atid=600306
 				 */
-                            // Changed by M. Alver 2007.01.04:
-                            // Remove first character if it is a directory separator character:
-                            String tmp = found.substring(root.getCanonicalPath().length());
-                            if ((tmp.length() > 1) && (tmp.charAt(0) == File.separatorChar))
-                                tmp = tmp.substring(1);
-                            return tmp;
-				//return found.substring(root.getCanonicalPath().length());
+                // Changed by M. Alver 2007.01.04:
+                // Remove first character if it is a directory separator character:
+                String tmp = found.substring(root.getCanonicalPath().length());
+                if ((tmp.length() > 1) && (tmp.charAt(0) == File.separatorChar))
+                    tmp = tmp.substring(1);
+                return tmp;
+                //return found.substring(root.getCanonicalPath().length());
 			} catch (IOException e) {
 				return null;
 			}
@@ -1240,11 +1408,13 @@ public class Util {
 	public static File expandFilename(String name, String[] dir) {
 
 		for (int i = 0; i < dir.length; i++) {
-			File result = expandFilename(name, dir[i]);
-			if (result != null) {
-				return result;
-			}
-		}
+            if (dir[i] != null) {
+                File result = expandFilename(name, dir[i]);
+                if (result != null) {
+                    return result;
+                }
+            }
+        }
 
 		return null;
 	}
@@ -1273,7 +1443,8 @@ public class Util {
 				// if (name.startsWith("ftp"))
 
 				file = new File(name);
-				if (file.exists())
+
+                if (file.exists())
 					return file;
 				// Ok, try to fix / and \ problems:
 				if (Globals.ON_WIN) {
@@ -1340,10 +1511,11 @@ public class Util {
 		// The check if they have the same required fields:
 		String[] fields = one.getType().getRequiredFields();
 
-		if (fields == null)
-			return false;
-
-		float req = compareFieldSet(fields, one, two);
+        float req;
+        if (fields == null)
+			req = 1;
+        else
+            req = compareFieldSet(fields, one, two);
 		fields = one.getType().getOptionalFields();
 
 		if (fields != null) {
@@ -1447,18 +1619,20 @@ public class Util {
 			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(Hashtable autoCompleters,
-	 * BibtexEntry be) {
-	 * 
-	 * for (Iterator j=autoCompleters.keySet().iterator(); j.hasNext();) {
-	 * String field = (String)j.next(); Completer comp =
-	 * (Completer)autoCompleters.get(field); comp.addAll(be.getField(field)); } }
-	 */
+    /**
+     * This methods assures all words in the given entry are recorded in their
+     * respective Completers, if any.
+     */
+    public static void updateCompletersForEntry(HashMap autoCompleters,
+                                                BibtexEntry be) {
+
+        for (Iterator j = autoCompleters.keySet().iterator(); j.hasNext();) {
+            String field = (String) j.next();
+            AutoCompleter comp = (AutoCompleter) autoCompleters.get(field);
+            comp.addAll(be.getField(field));
+        }
+    }
+
 
 	/**
 	 * Sets empty or non-existing owner fields of bibtex entries inside a List
@@ -1595,7 +1769,54 @@ public class Util {
 
 	}
 
-	// -------------------------------------------------------------------------------
+    /**
+     * Collect file links from the given set of fields, and add them to the list contained
+     * in the field GUIGlobals.FILE_FIELD.
+     * @param database The database to modify.
+     * @param fields The fields to find links in.
+     * @return A CompoundEdit specifying the undo operation for the whole operation.
+     */
+    public static NamedCompound upgradePdfPsToFile(BibtexDatabase database, String[] fields) {
+        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());
+            FileListTableModel tableModel = new FileListTableModel();
+            // If there are already links in the file field, keep those on top:
+            Object oldFileContent = entry.getField(GUIGlobals.FILE_FIELD);
+            if (oldFileContent != null) {
+                tableModel.setContent((String) oldFileContent);
+            }
+            int oldRowCount = tableModel.getRowCount();
+            for (int j = 0; j < fields.length; j++) {
+                Object o = entry.getField(fields[j]);
+                if (o != null) {
+                    String s = (String) 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);
+                        
+                        entry.clearField(fields[j]);
+                        ce.addEdit(new UndoableFieldChange(entry, fields[j], o, null));
+                    }
+                }
+            }
+            if (tableModel.getRowCount() != oldRowCount) {
+                String newValue = tableModel.getStringRepresentation();
+                entry.setField(GUIGlobals.FILE_FIELD, newValue);
+                ce.addEdit(new UndoableFieldChange(entry, GUIGlobals.FILE_FIELD, oldFileContent, newValue));
+            }
+        }
+        ce.end();
+        return ce;
+    }
+
+    // -------------------------------------------------------------------------------
 
 	/**
 	 * extends the filename with a default Extension, if no Extension '.x' could
@@ -2294,4 +2515,111 @@ public class Util {
 		}
 		return -1;
 	}
+
+
+    /**
+     * Encodes a two-dimensional String array into a single string, using ':' and
+     * ';' as separators. The characters ':' and ';' are escaped with '\'.
+     * @param values The String array.
+     * @return The encoded String.
+     */
+    public static String encodeStringArray(String[][] values) {
+        StringBuilder sb = new StringBuilder();
+        for (int i = 0; i < values.length; i++) {
+            sb.append(encodeStringArray(values[i]));
+            if (i < values.length-1)
+                sb.append(';');
+        }
+        return sb.toString();
+    }
+
+    /**
+     * Encodes a String array into a single string, using ':' as separator.
+     * The characters ':' and ';' are escaped with '\'.
+     * @param entry The String array.
+     * @return The encoded String.
+     */
+    public static String encodeStringArray(String[] entry) {
+        StringBuilder sb = new StringBuilder();
+        for (int i = 0; i < entry.length; i++) {
+            sb.append(encodeString(entry[i]));
+            if (i < entry.length-1)
+                sb.append(':');
+
+        }
+        return sb.toString();
+    }
+
+    /**
+     * Decodes an encoded double String array back into array form. The array
+     * is assumed to be square, and delimited by the characters ';' (first dim) and
+     * ':' (second dim).
+     * @param value The encoded String to be decoded.
+     * @return The decoded String array.
+     */
+    public static String[][] decodeStringDoubleArray(String value) {
+        ArrayList<ArrayList<String>> newList = new ArrayList<ArrayList<String>>();
+        StringBuilder sb = new StringBuilder();
+        ArrayList<String> thisEntry = new ArrayList<String>();
+        boolean escaped = false;
+        for (int i=0; i<value.length(); i++) {
+            char c = value.charAt(i);
+            if (!escaped && (c == '\\')) {
+                escaped = true;
+                continue;
+            }
+            else if (!escaped && (c == ':')) {
+                thisEntry.add(sb.toString());
+                sb = new StringBuilder();
+            }
+            else if (!escaped && (c == ';')) {
+                thisEntry.add(sb.toString());
+                sb = new StringBuilder();
+                newList.add(thisEntry);
+                thisEntry = new ArrayList<String>();
+            }
+            else sb.append(c);
+            escaped = false;
+        }
+        if (sb.length() > 0)
+            thisEntry.add(sb.toString());
+        if (thisEntry.size() > 0)
+            newList.add(thisEntry);
+
+        // Convert to String[][]:
+        String[][] res = new String[newList.size()][newList.get(0).size()];
+        for (int i = 0; i < res.length; i++) {
+            for (int j = 0; j < res[i].length; j++) {
+                res[i][j] = newList.get(i).get(j);
+            }
+        }
+        return res;
+    }
+
+    private static String encodeString(String s) {
+        StringBuilder sb = new StringBuilder();
+        for (int i=0; i<s.length(); i++) {
+            char c = s.charAt(i);
+            if ((c == ';') || (c == ':') || (c == '\\'))
+                sb.append('\\');
+            sb.append(c);
+        }
+        return sb.toString();
+    }
+
+    /**
+	 * Static equals that can also return the right result when one of the
+	 * objects is null.
+	 * 
+	 * @param one
+	 *            The object whose equals method is called if the first is not
+	 *            null.
+	 * @param two
+	 *            The object passed to the first one if the first is not null.
+	 * @return <code>one == null ? two == null : one.equals(two);</code>
+	 */
+	public static boolean equals(Object one, Object two) {
+		return one == null ? two == null : one.equals(two);
+	}
+
 }
\ 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 6450b5d..bc490fa 100644
--- a/src/java/net/sf/jabref/XmpPrefsTab.java
+++ b/src/java/net/sf/jabref/XmpPrefsTab.java
@@ -25,8 +25,8 @@ import com.jgoodies.forms.layout.FormLayout;
  * 
  * Allows the user to enable and configure the XMP privacy filter.
  * 
- * @author $Author: coezbek $
- * @version $Revision: 1.1 $ ($Date: 2007/01/22 23:00:47 $)
+ * @author $Author: mortenalver $
+ * @version $Revision: 1.2 $ ($Date: 2007/01/31 16:52:09 $)
  * 
  */
 class XmpPrefsTab extends JPanel implements PrefsTab {
diff --git a/src/java/net/sf/jabref/export/ExportFormats.java b/src/java/net/sf/jabref/export/ExportFormats.java
index a06af41..4c13b81 100644
--- a/src/java/net/sf/jabref/export/ExportFormats.java
+++ b/src/java/net/sf/jabref/export/ExportFormats.java
@@ -20,18 +20,12 @@ import java.io.File;
  */
 public class ExportFormats {
 
-	private static Map exportFormats = new TreeMap();
+	private static Map<String,ExportFormat> exportFormats = new TreeMap<String,ExportFormat>();
 
     public static void initAllExports() {
         exportFormats.clear();
-        initBuiltinExports();
-        TreeMap customExports = Globals.prefs.customExports.getCustomExportFormats();
-        for (Iterator i=customExports.keySet().iterator(); i.hasNext();) {
-            putFormat((ExportFormat)customExports.get(i.next()));
-        }
-    }
 
-    public static void initBuiltinExports() {
+        // Initialize Build-In Export Formats
         putFormat(new ExportFormat(
                 Globals.lang("HTML"), "html", "html", null, ".html"));
         putFormat(new ExportFormat(
@@ -45,21 +39,23 @@ 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 OpenOfficeDocumentCreator());
         putFormat(new OpenDocumentSpreadsheetCreator());
-
-        //openofficeItem = new JMenuItem("OpenOffice Calc"),
-        //odsItem = new JMenuItem("OpenDocument Spreadsheet");
-
+        putFormat(new MSBibExportFormat());
+    
+        // 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()));
+        }
     }
 
-
-
-
 	/**
-	 * Build a string listing all available export formats.
+	 * Build a string listing of all available export formats.
 	 * 
 	 * @param maxLineLength
 	 *            The max line length before a line break must be added.
@@ -94,7 +90,7 @@ public class ExportFormats {
     public static Map getExportFormats() {
         // It is perhaps overly paranoid to make a defensive copy in this case:
         return Collections.unmodifiableMap(exportFormats);
-    }
+    } 
 
     /**
 	 * Look up the named export format.
@@ -121,6 +117,9 @@ public class ExportFormats {
 	public static AbstractAction getExportAction(JabRefFrame frame, boolean selectedOnly) {
 
 		class ExportAction extends MnemonicAwareAction {
+
+			private static final long serialVersionUID = 639463604530580554L;
+
 			private JabRefFrame frame;
 
 			private boolean selectedOnly;
@@ -155,10 +154,10 @@ public class ExportFormats {
 								return;
 						}
 						ExportFormat format = eff.getExportFormat();
-						Set entryIds = null;
+						Set<String> entryIds = null;
 						if (selectedOnly) {
 							BibtexEntry[] selected = frame.basePanel().getSelectedEntries();
-							entryIds = new HashSet();
+							entryIds = new HashSet<String>();
 							for (int i = 0; i < selected.length; i++) {
 								BibtexEntry bibtexEntry = selected[i];
 								entryIds.add(bibtexEntry.getId());
@@ -195,7 +194,7 @@ public class ExportFormats {
 		String lastUsedFormat = Globals.prefs.get("lastUsedExport");
 		FileFilter defaultFilter = null;
 		JFileChooser fc = new JFileChooser(currentDir);
-		TreeSet filters = new TreeSet();
+		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);
@@ -216,5 +215,4 @@ public class ExportFormats {
 		exportFormats.put(format.getConsoleName(), format);
 	}
 
-
 }
\ No newline at end of file
diff --git a/src/java/net/sf/jabref/export/FileActions.java b/src/java/net/sf/jabref/export/FileActions.java
index 868d549..7812591 100644
--- a/src/java/net/sf/jabref/export/FileActions.java
+++ b/src/java/net/sf/jabref/export/FileActions.java
@@ -431,11 +431,8 @@ public class FileActions
                                    HashMap fieldFormatters, Writer out)
     throws IOException {
 
-    String s = (String)entry.getField(field);
-    if (s == null) {
-        return;
-    }
-        s = database.resolveForStrings(s);
+    String s = BibtexDatabase.getResolvedField(field, entry, database);
+    	
     Object form = fieldFormatters.get(field);
     if (form == null)
         form = fieldFormatters.get("default");
diff --git a/src/java/net/sf/jabref/export/LatexFieldFormatter.java b/src/java/net/sf/jabref/export/LatexFieldFormatter.java
index d30a26c..bb30eac 100644
--- a/src/java/net/sf/jabref/export/LatexFieldFormatter.java
+++ b/src/java/net/sf/jabref/export/LatexFieldFormatter.java
@@ -46,7 +46,23 @@ public class LatexFieldFormatter implements FieldFormatter {
 
     // If the field is non-standard, we will just append braces,
     // wrap and write.
-    if (!BibtexFields.isStandardField(fieldName) && !Globals.BIBTEX_STRING.equals(fieldName)) {
+    boolean resolveStrings = true;
+    if (Globals.prefs.getBoolean("resolveStringsAllFields")) {
+        // Resolve strings for all fields except some:
+        String[] exceptions = Globals.prefs.getStringArray("doNotResolveStringsFor");
+        for (int i = 0; i < exceptions.length; i++) {
+            if (exceptions[i].equals(fieldName)) {
+                resolveStrings = false;
+                break;
+            }
+        }
+    }
+    else {
+        // Default operation - we only resolve strings for standard fields:
+        resolveStrings = BibtexFields.isStandardField(fieldName)
+                || Globals.BIBTEX_STRING.equals(fieldName);
+    }
+    if (!resolveStrings) {
           int brc = 0;
           boolean ok = true;
           for (int i=0; i<text.length(); i++) {
@@ -146,6 +162,7 @@ public class LatexFieldFormatter implements FieldFormatter {
     sb.append(Globals.getOpeningBrace());
     boolean escape = false, inCommandName = false, inCommand = false,
         inCommandOption = false;
+    int nestedEnvironments = 0;
     StringBuffer commandName = new StringBuffer();
     char c;
     for (int i=start_pos; i<end_pos; i++) {
@@ -185,14 +202,25 @@ public class LatexFieldFormatter implements FieldFormatter {
         }
         // If we are in a command body, see if it has ended:
         if (inCommand && (c == '}')) {
+            //System.out.println("nestedEnvironments = " + nestedEnvironments);
             //System.out.println("Done with command: '"+commandName.toString()+"'");
+            if (commandName.toString().equals("begin")) {
+                nestedEnvironments++;
+            }
+            if (nestedEnvironments > 0 && commandName.toString().equals("end")) {
+                nestedEnvironments--;
+            }
+            //System.out.println("nestedEnvironments = " + nestedEnvironments);
+            
             commandName.delete(0, commandName.length());
             inCommand = false;
         }
 
         // We add a backslash before any ampersand characters, with one exception: if
         // we are inside an \\url{...} command, we should write it as it is. Maybe.
-        if ((c == '&') && !escape && !(inCommand && commandName.toString().equals("url"))) {
+        if ((c == '&') && !escape && 
+            !(inCommand && commandName.toString().equals("url")) && 
+            (nestedEnvironments == 0)) {
             sb.append("\\&");
         }
         else
diff --git a/src/java/net/sf/jabref/export/ModsExportFormat.java b/src/java/net/sf/jabref/export/MSBibExportFormat.java
similarity index 62%
copy from src/java/net/sf/jabref/export/ModsExportFormat.java
copy to src/java/net/sf/jabref/export/MSBibExportFormat.java
index 4363af6..503d650 100644
--- a/src/java/net/sf/jabref/export/ModsExportFormat.java
+++ b/src/java/net/sf/jabref/export/MSBibExportFormat.java
@@ -2,7 +2,7 @@ package net.sf.jabref.export;
 
 import net.sf.jabref.Globals;
 import net.sf.jabref.BibtexDatabase;
-import net.sf.jabref.mods.MODSDatabase;
+import net.sf.jabref.msbib.*;
 
 import javax.xml.transform.dom.DOMSource;
 import javax.xml.transform.stream.StreamResult;
@@ -12,20 +12,33 @@ 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
+* 
+*/
 
 /**
- * ExportFormat for exporting in MODS XML format.
+ * ExportFormat for exporting in MSBIB XML format.
  */
-class ModsExportFormat extends ExportFormat {
-    public ModsExportFormat() {
-        super(Globals.lang("MODS"), "mods", null, null, ".xml");
+class MSBibExportFormat extends ExportFormat {
+    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 {
-        SaveSession ss = getSaveSession(encoding, new File(file));
+    	// forcing to use UTF8 output format for some problems with
+    	// xml export in other encodings
+        SaveSession ss = getSaveSession("UTF8", new File(file));
         VerifyingWriter ps = ss.getWriter();
-        MODSDatabase md = new MODSDatabase(database, keySet);
+        MSBibDatabase md = new MSBibDatabase(database, keySet);
 
         // PS: DOES NOT SUPPORT EXPORTING ONLY A SET OF ENTRIES
 
diff --git a/src/java/net/sf/jabref/export/ModsExportFormat.java b/src/java/net/sf/jabref/export/ModsExportFormat.java
index 4363af6..8f84386 100644
--- a/src/java/net/sf/jabref/export/ModsExportFormat.java
+++ b/src/java/net/sf/jabref/export/ModsExportFormat.java
@@ -23,7 +23,7 @@ class ModsExportFormat extends ExportFormat {
     }
 
     public void performExport(final BibtexDatabase database, final String file, final String encoding, Set keySet) throws IOException {
-        SaveSession ss = getSaveSession(encoding, new File(file));
+        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/SaveAllAction.java b/src/java/net/sf/jabref/export/SaveAllAction.java
new file mode 100644
index 0000000..2074b4d
--- /dev/null
+++ b/src/java/net/sf/jabref/export/SaveAllAction.java
@@ -0,0 +1,71 @@
+/*
+ * SaveAllAction.java
+ *
+ * Created on January 9, 2007, 6:45 PM
+ *
+ * To change this template, choose Tools | Template Manager
+ * and open the template in the editor.
+ */
+
+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 spin.Spin;
+
+/**
+ *
+ * @author alver
+ */
+public class SaveAllAction extends MnemonicAwareAction implements Worker {
+    
+    private JabRefFrame frame;
+    private int databases=0, saved=0;
+    
+    /** Creates a new instance of SaveAllAction */
+    public SaveAllAction(JabRefFrame frame) {
+        super(GUIGlobals.getImage("saveAll"));
+        this.frame = frame;
+        putValue(ACCELERATOR_KEY, Globals.prefs.getKey("Save all"));
+        putValue(SHORT_DESCRIPTION, Globals.lang("Save all open databases"));
+        putValue(NAME, "Save all");
+    }
+
+    public void actionPerformed(ActionEvent e) {
+        databases = frame.getTabbedPane().getTabCount();
+        saved = 0;
+        frame.output(Globals.lang("Saving all databases..."));
+        Worker worker = (Worker)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() {
+        for (int i=0; i<databases; i++) {
+            if (i < frame.getTabbedPane().getTabCount()) {
+                //System.out.println("Base "+i);
+                BasePanel panel = frame.baseAt(i);
+                if (panel.getFile() == null) {
+                    frame.showBaseAt(i);
+                }
+                panel.runCommand("save");
+                // TODO: can we find out whether the save was actually done or not?
+                saved++;
+            }
+        }
+    }
+
+    
+    
+    
+}
diff --git a/src/java/net/sf/jabref/export/layout/LayoutEntry.java b/src/java/net/sf/jabref/export/layout/LayoutEntry.java
index 3d3dc19..0d0e362 100755
--- a/src/java/net/sf/jabref/export/layout/LayoutEntry.java
+++ b/src/java/net/sf/jabref/export/layout/LayoutEntry.java
@@ -42,7 +42,7 @@ import wsi.ra.types.StringInt;
  * DOCUMENT ME!
  * 
  * @author $author$
- * @version $Revision: 1.16 $
+ * @version $Revision: 1.17 $
  */
 public class LayoutEntry {
 	// ~ Instance fields
@@ -101,8 +101,8 @@ public class LayoutEntry {
 		String blockStart = null;
 		String blockEnd = null;
 		StringInt si;
-		Vector blockEntries = null;
-		Vector tmpEntries = new Vector();
+		Vector<StringInt> blockEntries = null;
+		Vector<LayoutEntry> tmpEntries = new Vector<LayoutEntry>();
 		LayoutEntry le;
 		si = (StringInt) parsedEntries.get(0);
 		blockStart = si.s;
@@ -124,7 +124,7 @@ public class LayoutEntry {
 			} else if (si.i == LayoutHelper.IS_SIMPLE_FIELD) {
 			} else if ((si.i == LayoutHelper.IS_FIELD_START)
 				|| (si.i == LayoutHelper.IS_GROUP_START)) {
-				blockEntries = new Vector();
+				blockEntries = new Vector<StringInt>();
 				blockStart = si.s;
 			} else if ((si.i == LayoutHelper.IS_FIELD_END) || (si.i == LayoutHelper.IS_GROUP_END)) {
 				if (blockStart.equals(si.s)) {
@@ -167,10 +167,10 @@ public class LayoutEntry {
 		case LayoutHelper.IS_LAYOUT_TEXT:
 			return text;
 		case LayoutHelper.IS_SIMPLE_FIELD:
-			return getField(bibtex, text, database);
+			return BibtexDatabase.getResolvedField(text, bibtex, database);
 		case LayoutHelper.IS_FIELD_START:
 		case LayoutHelper.IS_GROUP_START: {
-			String field = getField(bibtex, text, database);
+			String field = BibtexDatabase.getResolvedField(text, bibtex, database);
 
 			if ((field == null)
 				|| ((type == LayoutHelper.IS_GROUP_START) && (field.equalsIgnoreCase(LayoutHelper
@@ -233,8 +233,8 @@ public class LayoutEntry {
 			} else {
 				// changed section begin - arudert
 				// resolve field (recognized by leading backslash) or text
-				String field = text.startsWith("\\") ? getField(bibtex, text.substring(1), database)
-					: getText(text, database);
+				String field = text.startsWith("\\") ? BibtexDatabase.getResolvedField(text.substring(1), bibtex, database)
+					: BibtexDatabase.getText(text, database);
 				// changed section end - arudert
 				if (field == null) {
 					fieldEntry = "";
@@ -278,7 +278,7 @@ public class LayoutEntry {
 			throw new UnsupportedOperationException(
 				"field and group ends not allowed in begin or end layout");
 		} else if (type == LayoutHelper.IS_OPTION_FIELD) {
-			String field = getText(text, database);
+			String field = BibtexDatabase.getText(text, database);
 			if (option != null) {
 				for (int i = 0; i < option.length; i++) {
 					field = option[i].format(field);
@@ -324,7 +324,7 @@ public class LayoutEntry {
 
 		ArrayList formatterStrings = Util.parseMethodsCalls(formatterName);
 
-		ArrayList results = new ArrayList(formatterStrings.size());
+		ArrayList<LayoutFormatter> results = new ArrayList<LayoutFormatter>(formatterStrings.size());
 
 		Map userNameFormatter = NameFormatterTab.getNameFormatters();
 
@@ -354,41 +354,4 @@ public class LayoutEntry {
 		return (LayoutFormatter[]) results.toArray(new LayoutFormatter[] {});
 	}
 
-	// changed section begin - arudert
-	/**
-	 * Returns a text with references resolved according to an optionally given
-	 * database.
-	 */
-	private String getText(String text, BibtexDatabase database) {
-		String res = text;
-		// changed section end - arudert
-		if ((res != null) && (database != null))
-			res = database.resolveForStrings(res);
-		return res;
-	}
-
-	// changed section end - arudert
-
-	private String getField(BibtexEntry bibtex, String field, BibtexDatabase database) {
-
-		// Change: Morten Alver, May 23, 2006. Formatter argument uses this
-		// method to
-		// resolve field values. We need this part to resolve \bibtextype
-		// correctly in
-		// constructs like \format[ToLowerCase]{\bibtextype}:
-		if (field.equals("bibtextype")) {
-			return bibtex.getType().getName();
-		}
-		// end change Morten Alver
-
-		String res = (String) bibtex.getField(field);
-
-		if ((res != null) && (database != null))
-			res = database.resolveForStrings(res);
-
-		return res;
-	}
-}
-// /////////////////////////////////////////////////////////////////////////////
-// END OF FILE.
-// /////////////////////////////////////////////////////////////////////////////
+}
\ No newline at end of file
diff --git a/src/java/net/sf/jabref/export/layout/format/AuthorFirstFirstCommas.java b/src/java/net/sf/jabref/export/layout/format/AuthorFirstFirstCommas.java
new file mode 100644
index 0000000..15b3aad
--- /dev/null
+++ b/src/java/net/sf/jabref/export/layout/format/AuthorFirstFirstCommas.java
@@ -0,0 +1,22 @@
+package net.sf.jabref.export.layout.format;
+
+import net.sf.jabref.AuthorList;
+import net.sf.jabref.export.layout.LayoutFormatter;
+
+/**
+ * <ul>
+ * <li>Names are given in order: first von last, jr.</li>
+ * <li>First names will NOT be abbreviated.</li>
+ * <li>Individual authors are separated by commas.</li>
+ * <li>There is no comma before the 'and' at the end of a list of three or more authors</li>
+ * </ul>
+ *
+ * @author Morten O. Alver / Christopher Oezbek <oezi at oezi.de>
+ *
+ */
+public class AuthorFirstFirstCommas implements LayoutFormatter {
+
+    public String format(String fieldText) {
+        return AuthorList.fixAuthor_firstNameFirstCommas(fieldText, false, false);
+    }
+}
diff --git a/src/java/net/sf/jabref/export/layout/format/AuthorNatBib.java b/src/java/net/sf/jabref/export/layout/format/AuthorNatBib.java
new file mode 100644
index 0000000..e532743
--- /dev/null
+++ b/src/java/net/sf/jabref/export/layout/format/AuthorNatBib.java
@@ -0,0 +1,18 @@
+package net.sf.jabref.export.layout.format;
+
+import net.sf.jabref.export.layout.LayoutFormatter;
+import net.sf.jabref.AuthorList;
+
+/**
+ * Natbib style: Last names only. Two authors are separated by "and",
+ * three or more authors are given as "Smith et al."
+ *
+ * @author Morten O. Alver
+ */
+public class AuthorNatBib implements LayoutFormatter {
+
+
+    public String format(String fieldText) {
+        return AuthorList.fixAuthor_Natbib(fieldText);
+    }
+}
diff --git a/src/java/net/sf/jabref/export/layout/format/RemoveLatexCommands.java b/src/java/net/sf/jabref/export/layout/format/RemoveLatexCommands.java
index 93e18d5..0803f38 100644
--- a/src/java/net/sf/jabref/export/layout/format/RemoveLatexCommands.java
+++ b/src/java/net/sf/jabref/export/layout/format/RemoveLatexCommands.java
@@ -36,7 +36,7 @@ public class RemoveLatexCommands implements LayoutFormatter {
            // Else we are in a command, and should not keep the letter.
          else {
            currentCommand.append( (char) c);
-           testCharCom: if ((currentCommand.length() == 1)
+           if ((currentCommand.length() == 1)
                && (Globals.SPECIAL_COMMAND_CHARS.indexOf(currentCommand.toString()) >= 0)) {
              // This indicates that we are in a command of the type \^o or \~{n}
  /*            if (i >= field.length()-1)
@@ -90,21 +90,5 @@ public class RemoveLatexCommands implements LayoutFormatter {
     }
 
     return sb.toString();
-        //field.replaceAll("\\\\emph", "").replaceAll("\\\\em", "").replaceAll("\\\\textbf", "");
-  }
-
-  private String getPart(String text) {
-    char c;
-    boolean found = false;
-    StringBuffer part = new StringBuffer();
-    while (!found && (i < text.length())) {
-      i++;
-      c = text.charAt(i);
-      if (c == '}')
-        found = true;
-      else
-        part.append((char)c);
-    }
-    return part.toString();
   }
 }
diff --git a/src/java/net/sf/jabref/export/layout/format/RemoveTilde.java b/src/java/net/sf/jabref/export/layout/format/RemoveTilde.java
new file mode 100644
index 0000000..af8c0b2
--- /dev/null
+++ b/src/java/net/sf/jabref/export/layout/format/RemoveTilde.java
@@ -0,0 +1,59 @@
+///////////////////////////////////////////////////////////////////////////////
+//  Filename: $RCSfile: RemoveTilde.java,v $
+//  Purpose:  Atom representation.
+//  Language: Java
+//  Compiler: JDK 1.4
+//  Authors:  Joerg K. Wegner
+//  Version:  $Revision: 1.1 $
+//            $Date: 2007/06/12 21:32:01 $
+//            $Author: coezbek $
+//
+//  Copyright (c) Dept. Computer Architecture, University of Tuebingen, Germany
+//
+//  This program is free software; you can redistribute it and/or modify
+//  it under the terms of the GNU General Public License as published by
+//  the Free Software Foundation version 2 of the License.
+//
+//  This program is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+//  GNU General Public License for more details.
+///////////////////////////////////////////////////////////////////////////////
+
+package net.sf.jabref.export.layout.format;
+
+import net.sf.jabref.export.layout.LayoutFormatter;
+
+/**
+ * Replace a non-command tilde ~ by a space.
+ * 
+ * Usefull for formatting Latex code.
+ * 
+ * @author $author$
+ * @version $Revision: 1.1 $
+ */
+public class RemoveTilde implements LayoutFormatter {
+
+	public String format(String fieldText) {
+		
+		StringBuffer result = new StringBuffer(fieldText.length());
+
+		char[] c = fieldText.toCharArray();
+		
+		for (int i = 0; i < c.length; i++) {
+
+			if (c[i] != '~'){
+				result.append(c[i]);
+				// Skip the next character if the current one is a backslash
+				if (c[i] == '\\' && i + 1 < c.length){
+					i++;
+					result.append(c[i]);
+				}
+			} else {
+				result.append(' ');
+			}
+		}
+		
+		return result.toString();
+	}
+}
diff --git a/src/java/net/sf/jabref/external/AccessLinksForEntries.java b/src/java/net/sf/jabref/external/AccessLinksForEntries.java
new file mode 100644
index 0000000..9da3ee1
--- /dev/null
+++ b/src/java/net/sf/jabref/external/AccessLinksForEntries.java
@@ -0,0 +1,196 @@
+package net.sf.jabref.external;
+
+import net.sf.jabref.*;
+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
+ * of entries. This is useful for tasks where the user wants e.g. to send a database
+ * with external files included.
+ */
+public class AccessLinksForEntries {
+
+    /**
+     * Look up all external files linked from (at least) one of the entries in a set.
+     * This method does not verify the links.
+     *
+     * @param entries The set of entries.
+     * @return A list of FileListEntry objects pointing to the external files.
+     */
+    public static List<FileListEntry> getExternalLinksForEntries(List<BibtexEntry> entries) {
+        List<FileListEntry> files = new ArrayList<FileListEntry>();
+        FileListTableModel model = new FileListTableModel();
+        for (Iterator<BibtexEntry> iterator = entries.iterator(); iterator.hasNext();) {
+            BibtexEntry entry = iterator.next();
+            String links = (String)entry.getField(GUIGlobals.FILE_FIELD);
+            if (links == null)
+                continue;
+            model.setContent(links);
+            for (int i=0; i<model.getRowCount(); i++)
+                files.add(model.getEntry(i));
+        }
+        return files;
+    }
+
+    /**
+     * Take a list of external links and copy the referred files to a given directory.
+     * This method should be run off the Event Dispatch Thread. A progress bar, if given,
+     * will be updated on the EDT.
+     *
+     * @param files The list of file links.
+     * @param toDir The directory to copy the files to.
+     * @param metaData The MetaData for the database containing the external links. This is needed
+     *  because the database might have its own file directory.
+     * @param prog A JProgressBar which will be updated to show the progress of the process.
+     *  This argument can be null if no progress bar is needed.
+     * @param deleteOriginalFiles if true, the files in their original locations will be deleted
+     *  after copying, for each file whose source directory is different from the destination
+     *  directory differs.
+     * @param callback An ActionListener which should be notified when the process is finished.
+     *  This parameter can be null if no callback is needed.
+     */
+    public static void copyExternalLinksToDirectory(final List<FileListEntry> files, File toDir,
+                                                    MetaData metaData, final JProgressBar prog,
+                                                    boolean deleteOriginalFiles,
+                                                    final ActionListener callback) {
+
+        if (prog != null) SwingUtilities.invokeLater(new Runnable() {
+            public void run() {
+                prog.setMaximum(files.size());
+                prog.setValue(0);
+                prog.setIndeterminate(false);
+            }
+        });
+
+        Set<String> fileNames = new HashSet<String>();
+
+        int i=0;
+
+        for (Iterator<FileListEntry> iterator = files.iterator(); iterator.hasNext();) {
+            FileListEntry entry = iterator.next();
+            File file = new File(entry.getLink());
+
+            // We try to check the extension for the file:
+            String name = file.getName();
+            int pos = name.lastIndexOf('.');
+            String extension = ((pos >= 0) && (pos < name.length() - 1)) ? name.substring(pos + 1)
+                .trim().toLowerCase() : null;
+
+            // Find the default directory for this field type, if any:
+            String dir = metaData.getFileDirectory(extension);
+            // Include the standard "file" directory:
+            String fileDir = metaData.getFileDirectory(GUIGlobals.FILE_FIELD);
+
+            // Include the directory of the bib file:
+            String databaseDir = metaData.getFile().getParent();
+            File tmp = Util.expandFilename(entry.getLink(),
+                    new String[] { dir, fileDir, databaseDir });
+            if (tmp != null)
+                file = tmp;
+
+            // Check if we have arrived at an existing file:
+            if (file.exists()) {
+                if (fileNames.contains(name)) {
+                    // Oops, a file of that name already exists....
+                }
+                else {
+                    fileNames.add(name);
+                    File destination = new File(toDir, name);
+
+                    // Check if the source and destination locations differ:
+                    if (!destination.equals(file)) {
+                        try {
+                            // Copy the file:
+                            Util.copyFile(file, destination, false);
+                            // Delete the original file if requested:
+                            if (deleteOriginalFiles)
+                                file.delete();
+                            
+                        } catch (IOException ex) {
+                            ex.printStackTrace();
+                        }
+                    }
+                    else {
+                        // Destination and source is the same. Do nothing.
+                    }
+                    // Update progress bar:
+                    i++;
+                    final int j = i;
+
+                    if (prog != null) SwingUtilities.invokeLater(new Runnable() {
+                        public void run() {
+                            prog.setValue(j);
+                        }
+                    });
+                }
+            }
+            else {
+                // The link could not be resolved to an existing file.
+                
+            }
+        }
+
+        if (callback != null) {
+            callback.actionPerformed(null);
+        }
+    }
+
+
+    public static class CopyLinkedFiles extends BaseAction {
+        private BasePanel panel;
+
+        public CopyLinkedFiles(BasePanel panel) {
+
+            this.panel = panel;
+        }
+
+        public void action() throws Throwable {
+
+            ArrayList<BibtexEntry> entries = new ArrayList<BibtexEntry>();
+            BibtexEntry[] sel = panel.getSelectedEntries();
+            for (int i = 0; i < sel.length; i++) {
+                BibtexEntry bibtexEntry = sel[i];
+                entries.add(bibtexEntry);
+            }
+            final List<FileListEntry> links =
+                    AccessLinksForEntries.getExternalLinksForEntries(entries);
+            for (Iterator<FileListEntry> iterator = links.iterator(); iterator.hasNext();) {
+                FileListEntry entry = iterator.next();
+                System.out.println("Link: " + entry.getLink());
+            }
+
+            final JProgressBar prog = new JProgressBar();
+            prog.setIndeterminate(true);
+            final JDialog diag = new JDialog(panel.frame(), false);
+            diag.getContentPane().add(prog, BorderLayout.CENTER);
+            diag.pack();
+            diag.setLocationRelativeTo(panel.frame());
+            diag.setVisible(true);
+            Thread t = new Thread(new Runnable() {
+                public void run() {
+                    AccessLinksForEntries.copyExternalLinksToDirectory(links,
+                            new File("/home/alver/tmp"), panel.metaData(), prog, false,
+                            new ActionListener() {
+                                public void actionPerformed(ActionEvent actionEvent) {
+                                    diag.dispose();
+                                }
+                            });
+                }
+            });
+            t.start();
+
+        }
+    }
+
+
+}
\ No newline at end of file
diff --git a/src/java/net/sf/jabref/external/AutoSetExternalFileForEntries.java b/src/java/net/sf/jabref/external/AutoSetExternalFileForEntries.java
index 4cab039..328c3eb 100644
--- a/src/java/net/sf/jabref/external/AutoSetExternalFileForEntries.java
+++ b/src/java/net/sf/jabref/external/AutoSetExternalFileForEntries.java
@@ -10,7 +10,6 @@ import java.io.File;
 import java.awt.*;
 import java.awt.event.ActionListener;
 import java.awt.event.ActionEvent;
-import java.util.Vector;
 import java.util.Collection;
 
 import com.jgoodies.forms.layout.FormLayout;
@@ -30,12 +29,13 @@ public class AutoSetExternalFileForEntries extends AbstractWorker {
     private OptionsDialog optDiag = null;
 
     Object[] brokenLinkOptions =
-        { Globals.lang("Ignore"), Globals.lang("Assign new file"), Globals.lang("Clear field"),
-            Globals.lang("Quit synchronization")};
+            {Globals.lang("Ignore"), Globals.lang("Assign new file"), Globals.lang("Clear field"),
+                    Globals.lang("Quit synchronization")};
 
     private boolean goOn = true, autoSet = true, overWriteAllowed = true, checkExisting = true;
 
-    private int skipped=0, entriesChanged=0, brokenLinks=0;
+    private int skipped = 0, entriesChanged = 0, brokenLinks = 0;
+
 
     public AutoSetExternalFileForEntries(BasePanel panel, String fieldName) {
         this.fieldName = fieldName;
@@ -43,16 +43,17 @@ public class AutoSetExternalFileForEntries extends AbstractWorker {
     }
 
     public void init() {
-        // Get all entries, and make sure there are selected entries:
+        /*// 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 col = panel.database().getEntries();
+        sel = new BibtexEntry[col.size()];
+        sel = (BibtexEntry[]) col.toArray(sel);
+        //goOn = false;
+        //return;
+        //}
 
         // Ask about rules for the operation:
         if (optDiag == null)
@@ -71,20 +72,20 @@ public class AutoSetExternalFileForEntries extends AbstractWorker {
     }
 
     public void run() {
-        if (!goOn){
+        if (!goOn) {
             panel.output(Globals.lang("No entries selected."));
             return;
         }
-	panel.frame().setProgressBarValue(0);
-	panel.frame().setProgressBarVisible(true);
-	int weightAutoSet = 10; // autoSet takes 10 (?) times longer than checkExisting
-	int progressBarMax = (autoSet ? weightAutoSet*sel.length : 0) 
-	    + (checkExisting ? sel.length : 0);
-	panel.frame().setProgressBarMaximum(progressBarMax);
-	int progress = 0;
-        skipped=0;
-        entriesChanged=0;
-        brokenLinks=0;
+        panel.frame().setProgressBarValue(0);
+        panel.frame().setProgressBarVisible(true);
+        int weightAutoSet = 10; // autoSet takes 10 (?) times longer than checkExisting
+        int progressBarMax = (autoSet ? weightAutoSet * sel.length : 0)
+                + (checkExisting ? sel.length : 0);
+        panel.frame().setProgressBarMaximum(progressBarMax);
+        int progress = 0;
+        skipped = 0;
+        entriesChanged = 0;
+        brokenLinks = 0;
         NamedCompound ce = new NamedCompound(Globals.lang("Autoset %0 field", fieldName));
 
         final OpenFileFilter off = Util.getFileFilterForField(fieldName);
@@ -97,16 +98,16 @@ public class AutoSetExternalFileForEntries extends AbstractWorker {
 
         // First we try to autoset fields
         if (autoSet) {
-            for (int i=0; i<sel.length; i++) {
-		progress += weightAutoSet;
-		panel.frame().setProgressBarValue(progress);
+            for (int i = 0; i < sel.length; i++) {
+                progress += weightAutoSet;
+                panel.frame().setProgressBarValue(progress);
 
                 final Object old = sel[i].getField(fieldName);
-                // Check if a link is already set, and if so, if we are allowed to overwrite it:
+                // Check if a extension is already set, and if so, if we are allowed to overwrite it:
                 if ((old != null) && !old.equals("") && !overWriteAllowed)
                     continue;
-                extPan.setEntry(sel[i]);
-                editor.setText((old != null) ? (String)old : "");
+                extPan.setEntry(sel[i], panel.getDatabase());
+                editor.setText((old != null) ? (String) old : "");
                 Thread t = extPan.autoSetFile(fieldName, editor);
                 // Wait for the autoset process to finish:
                 if (t != null)
@@ -128,23 +129,24 @@ public class AutoSetExternalFileForEntries extends AbstractWorker {
         //System.out.println("Done setting");
         // The following loop checks all external links that are already set.
         if (checkExisting) {
-            mainLoop: for (int i=0; i<sel.length; i++) {
-		panel.frame().setProgressBarValue(progress++);
+            mainLoop:
+            for (int i = 0; i < sel.length; i++) {
+                panel.frame().setProgressBarValue(progress++);
                 final Object old = sel[i].getField(fieldName);
-                // Check if a link is set:
-                if ((old != null) && !((String)old).equals("")) {
+                // Check if a extension is set:
+                if ((old != null) && !((String) old).equals("")) {
                     // Get an absolute path representation:
-                    File file = Util.expandFilename((String)old, new String[]{dir, "."});;
+                    File file = Util.expandFilename((String) 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()}),
-                                    Globals.lang("Broken link"),
-                                    JOptionPane.YES_NO_CANCEL_OPTION,
-                                    JOptionPane.QUESTION_MESSAGE, null, brokenLinkOptions, brokenLinkOptions[0]);
+                                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()}),
+                                        Globals.lang("Broken link"),
+                                        JOptionPane.YES_NO_CANCEL_OPTION,
+                                        JOptionPane.QUESTION_MESSAGE, null, brokenLinkOptions, brokenLinkOptions[0]);
                         switch (answer) {
                             case 1:
                                 // Assign new file.
@@ -159,7 +161,7 @@ public class AutoSetExternalFileForEntries extends AbstractWorker {
                                 }
                                 break;
                             case 2:
-                                 // Clear field
+                                // Clear field
                                 ce.addEdit(new UndoableFieldChange(sel[i], fieldName, old, null));
                                 sel[i].setField(fieldName, null);
                                 entriesChanged++;
@@ -183,13 +185,14 @@ public class AutoSetExternalFileForEntries extends AbstractWorker {
         }
     }
 
+
     public void update() {
         if (!goOn)
             return;
 
         panel.output(Globals.lang("Finished synchronizing %0 links. Entries changed%c %1.",
-                new String[] {fieldName.toUpperCase(), String.valueOf(entriesChanged)}));
-	panel.frame().setProgressBarVisible(false);
+                new String[]{fieldName.toUpperCase(), String.valueOf(entriesChanged)}));
+        panel.frame().setProgressBarVisible(false);
         if (entriesChanged > 0) {
             panel.markBaseChanged();
         }
@@ -199,7 +202,7 @@ public class AutoSetExternalFileForEntries extends AbstractWorker {
         JRadioButton autoSetUnset, autoSetAll, autoSetNone;
         JCheckBox checkLinks;
         JButton ok = new JButton(Globals.lang("Ok")),
-            cancel = new JButton(Globals.lang("Cancel"));
+                cancel = new JButton(Globals.lang("Cancel"));
         JLabel description;
         private boolean canceled = true;
         private String fieldName;
@@ -208,14 +211,14 @@ public class AutoSetExternalFileForEntries extends AbstractWorker {
             super(parent, Globals.lang("Synchronize %0 links", fieldName.toUpperCase()), true);
             final String fn = fieldName.toUpperCase();
             this.fieldName = fieldName;
-            ok.addActionListener(new ActionListener () {
+            ok.addActionListener(new ActionListener() {
                 public void actionPerformed(ActionEvent e) {
                     canceled = false;
                     dispose();
                 }
             });
 
-            Action closeAction = new AbstractAction () {
+            Action closeAction = new AbstractAction() {
                 public void actionPerformed(ActionEvent e) {
                     dispose();
                 }
@@ -225,27 +228,27 @@ public class AutoSetExternalFileForEntries extends AbstractWorker {
             cancel.addActionListener(closeAction);
 
             InputMap im = cancel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
-	        ActionMap am = cancel.getActionMap();
+            ActionMap am = cancel.getActionMap();
             im.put(Globals.prefs.getKey("Close dialog"), "close");
-	        am.put("close", closeAction);
+            am.put("close", closeAction);
 
             fieldName = fieldName.toUpperCase();
-            autoSetUnset =  new JRadioButton(Globals.lang("Autoset %0 links. Do not overwrite existing links.", fn), true);
-            autoSetAll =  new JRadioButton(Globals.lang("Autoset %0 links. Allow overwriting existing links.", fn), false);
-            autoSetNone =  new JRadioButton(Globals.lang("Do not autoset"), false);
+            autoSetUnset = new JRadioButton(Globals.lang("Autoset %0 links. Do not overwrite existing links.", fn), true);
+            autoSetAll = new JRadioButton(Globals.lang("Autoset %0 links. Allow overwriting existing links.", fn), false);
+            autoSetNone = new JRadioButton(Globals.lang("Do not autoset"), false);
             checkLinks = new JCheckBox(Globals.lang("Check existing %0 links", fn), true);
             ButtonGroup bg = new ButtonGroup();
             bg.add(autoSetUnset);
             bg.add(autoSetNone);
             bg.add(autoSetAll);
-            FormLayout layout = new FormLayout("fill:pref","");
-	        DefaultFormBuilder builder = new DefaultFormBuilder(layout);
-            description = new JLabel("<HTML>"+
+            FormLayout layout = new FormLayout("fill:pref", "");
+            DefaultFormBuilder builder = new DefaultFormBuilder(layout);
+            description = new JLabel("<HTML>" +
                     Globals.lang(//"This function helps you keep your external %0 links up-to-date." +
                             "Attempt to autoset %0 links for your entries. Autoset works if "
-                            +"a %0 file in your %0 directory or a subdirectory<BR>is named identically to an entry's BibTeX key, plus extension.", fn)
-                    +"</HTML>");
-            //            description.setVerticalAlignment(JLabel.TOP);
+                                    + "a %0 file in your %0 directory or a subdirectory<BR>is named identically to an entry's BibTeX key, plus extension.", fn)
+                    + "</HTML>");
+            //            name.setVerticalAlignment(JLabel.TOP);
             builder.appendSeparator(Globals.lang("Autoset"));
             builder.append(description);
             builder.nextLine();
@@ -257,10 +260,10 @@ public class AutoSetExternalFileForEntries extends AbstractWorker {
             builder.nextLine();
             builder.appendSeparator(Globals.lang("Check links"));
 
-            description = new JLabel("<HTML>"+
-                    Globals.lang("This makes JabRef look up each %0 link and check if the file exists. If not, you will "
-                                    +"be given options<BR>to resolve the problem.", fn)
-                +"</HTML>");
+            description = new JLabel("<HTML>" +
+                    Globals.lang("This makes JabRef look up each %0 extension and check if the file exists. If not, you will "
+                            + "be given options<BR>to resolve the problem.", fn)
+                    + "</HTML>");
             builder.append(description);
             builder.nextLine();
             builder.append(checkLinks);
@@ -268,9 +271,8 @@ public class AutoSetExternalFileForEntries extends AbstractWorker {
             builder.appendSeparator();
 
 
-
             JPanel main = builder.getPanel();
-            main.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+            main.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
 
             ButtonBarBuilder bb = new ButtonBarBuilder();
             bb.addGlue();
@@ -287,15 +289,14 @@ public class AutoSetExternalFileForEntries extends AbstractWorker {
             if (visible)
                 canceled = true;
 
-            String dir = Globals.prefs.get(fieldName+"Directory");
+            String dir = Globals.prefs.get(fieldName + "Directory");
             if ((dir == null) || (dir.trim().length() == 0)) {
 
                 autoSetNone.setSelected(true);
                 autoSetNone.setEnabled(false);
                 autoSetAll.setEnabled(false);
                 autoSetUnset.setEnabled(false);
-            }
-            else {
+            } else {
                 autoSetNone.setEnabled(true);
                 autoSetAll.setEnabled(true);
                 autoSetUnset.setEnabled(true);
diff --git a/src/java/net/sf/jabref/external/ConfirmCloseFileListEntryEditor.java b/src/java/net/sf/jabref/external/ConfirmCloseFileListEntryEditor.java
new file mode 100644
index 0000000..b04e87b
--- /dev/null
+++ b/src/java/net/sf/jabref/external/ConfirmCloseFileListEntryEditor.java
@@ -0,0 +1,13 @@
+package net.sf.jabref.external;
+
+import net.sf.jabref.gui.FileListEntry;
+
+/**
+ * An implementation of this interface is called to confirm whether a FileListEntryEditor
+ * is ready to close when Ok is pressed, or whether there is a problem that needs to be
+ * resolved first.
+ */
+public interface ConfirmCloseFileListEntryEditor {
+
+    public boolean confirmClose(FileListEntry entry);
+}
diff --git a/src/java/net/sf/jabref/external/DownloadExternalFile.java b/src/java/net/sf/jabref/external/DownloadExternalFile.java
new file mode 100644
index 0000000..a0d301f
--- /dev/null
+++ b/src/java/net/sf/jabref/external/DownloadExternalFile.java
@@ -0,0 +1,230 @@
+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;
+
+/**
+ * This class handles the download of an external file. Typically called when the user clicks
+ * the "Download" button in a FileListEditor shown in an EntryEditor.
+ * <p/>
+ * The FileListEditor constructs the DownloadExternalFile instance, then calls the download()
+ * method passing a reference to itself as a callback. The download() method asks for the URL,
+ * then starts the download. When the download is completed, it calls the downloadCompleted()
+ * method on the callback FileListEditor, which then needs to take care of linking to the file.
+ * The local filename is passed as an argument to the downloadCompleted() method.
+ * <p/>
+ * If the download is cancelled, or failed, the user is informed. The callback is never called.
+ */
+public class DownloadExternalFile {
+    private JabRefFrame frame;
+    private JDialog dialog;
+    private MetaData metaData;
+    private String bibtexKey;
+    private FileListEntryEditor editor;
+    private boolean downloadFinished = false;
+
+    public DownloadExternalFile(JabRefFrame frame, MetaData metaData, String bibtexKey) {
+
+        this.frame = frame;
+        this.metaData = metaData;
+        this.bibtexKey = bibtexKey;
+    }
+
+    /**
+     * Start a download.
+     *
+     * @param callback The object to which the filename should be reported when download
+     *                 is complete.
+     */
+    public void download(final DownloadCallback callback) throws IOException {
+
+        final String res = JOptionPane.showInputDialog(frame,
+                Globals.lang("Enter URL to download"));
+
+        if (res == null || res.trim().length() == 0)
+            return;
+
+        // First of all, start the download itself in the background to a temporary file:
+        final File tmp = File.createTempFile("jabref_download", "tmp");
+        tmp.deleteOnExit();
+        (new Thread() {
+            public void run() {
+
+                try {
+
+                    URL url = new URL(res);
+                    URLDownload udl = new URLDownload(frame, url, tmp);
+                    try {
+                        udl.download();
+                    } catch (IOException e2) {
+                        JOptionPane.showMessageDialog(frame, Globals.lang("Invalid URL: "
+                                + e2.getMessage()), Globals.lang("Download file"),
+                                JOptionPane.ERROR_MESSAGE);
+                        Globals.logger("Error while downloading " + url.toString());
+                        return;
+                    }
+
+                    // Download finished: call the method that stops the progress bar etc.:
+                    SwingUtilities.invokeLater(new Runnable() {
+                        public void run() {
+                            downloadFinished();
+                        }
+                    });
+
+
+                } catch (MalformedURLException e1) {
+                    JOptionPane.showMessageDialog(frame, Globals.lang("Invalid URL"), Globals
+                            .lang("Download file"), JOptionPane.ERROR_MESSAGE);
+                }
+            }
+        }).start();
+
+        // Then, while the download is proceeding, let the user choose the details of the file:
+        String suffix = getSuffix(res);
+        String suggestedName = bibtexKey != null ? getSuggestedFileName(res, suffix) : "";
+        final String directory = getFileDirectory(res);
+        File file = new File(new File(directory), suggestedName);
+        FileListEntry entry = new FileListEntry("", bibtexKey != null ? file.getPath() : "",
+                Globals.prefs.getExternalFileTypeByExt(suffix));
+        editor = new FileListEntryEditor(frame, entry, true, metaData);
+        editor.getProgressBar().setIndeterminate(true);
+        editor.setOkEnabled(false);
+        editor.setExternalConfirm(new ConfirmCloseFileListEntryEditor() {
+            public boolean confirmClose(FileListEntry entry) {
+                File f = expandFilename(directory, entry.getLink());
+                if (f.isDirectory()) {
+                    JOptionPane.showMessageDialog(frame,
+                            Globals.lang("Target file cannot be a directory."), Globals.lang("Download file"),
+                            JOptionPane.ERROR_MESSAGE);
+                    return false;
+                }
+                if (f.exists()) {
+                    return JOptionPane.showConfirmDialog
+                        (frame, "'"+f.getName()+"' "+Globals.lang("exists. Overwrite file?"),
+                        Globals.lang("Download file"), JOptionPane.OK_CANCEL_OPTION)
+                            == JOptionPane.OK_OPTION;
+                } else
+                    return true;
+            }
+        });
+        editor.setVisible(true);
+        // Editor closed. Go on:
+        if (editor.okPressed()) {
+            String dirPrefix = directory+System.getProperty("file.separator");
+            File toFile = expandFilename(directory, entry.getLink());
+            try {
+                boolean success = Util.copyFile(tmp, toFile, true);
+                if (!success) {
+                    // OOps, the file exists!
+                    System.out.println("File already exists! DownloadExternalFile.download()");
+                }
+
+                // If the local file is in or below the main file directory, change the
+                // path to relative:
+                if (entry.getLink().startsWith(directory) &&
+                        (entry.getLink().length() > dirPrefix.length())) {
+                    entry.setLink(entry.getLink().substring(dirPrefix.length()));
+                }
+
+                callback.downloadComplete(entry);
+            } catch (IOException ex) {
+                ex.printStackTrace();
+            }
+
+            tmp.delete();
+        }
+        else {
+            // Cancelled. Just delete the temp file:
+            if (downloadFinished)
+                tmp.delete();
+        }
+
+    }
+
+    /**
+     * Construct a File object pointing to the file linked, whether the link is
+     * absolute or relative to the main directory.
+     * @param directory The main directory.
+     * @param link The absolute or relative link.
+     * @return The expanded File.
+     */
+    private File expandFilename(String directory, String link) {
+        File toFile = new File(link);
+        // If this is a relative link, we should perhaps append the directory:
+        String dirPrefix = directory+System.getProperty("file.separator");
+        if (!toFile.isAbsolute()) {
+            toFile = new File(dirPrefix+link);
+        }
+        return toFile;
+    }
+
+    /**
+     * This is called by the download thread when download is completed.
+     */
+    public void downloadFinished() {
+        downloadFinished = true;
+        editor.getProgressBar().setVisible(false);
+        editor.getProgressBarLabel().setVisible(false);
+        editor.setOkEnabled(true);
+        editor.getProgressBar().setValue(editor.getProgressBar().getMaximum());
+    }
+
+    public String getSuggestedFileName(String res, String suffix) {
+        if (suffix == null) {
+            System.out.println("Link has no obvious extension (DownloadExternalFile.download()");
+        }
+
+        String plannedName = bibtexKey + "." + suffix;
+
+        /*
+        * [ 1548875 ] download pdf produces unsupported filename
+        *
+        * http://sourceforge.net/tracker/index.php?func=detail&aid=1548875&group_id=92314&atid=600306
+        *
+        */
+        if (Globals.ON_WIN) {
+            plannedName = plannedName.replaceAll(
+                    "\\?|\\*|\\<|\\>|\\||\\\"|\\:|\\.$|\\[|\\]", "");
+        } else if (Globals.ON_MAC) {
+            plannedName = plannedName.replaceAll(":", "");
+        }
+
+        return plannedName;
+    }
+
+    /**
+     * Look for the last '.' in the link, and returnthe following characters.
+     * This gives the extension for most reasonably named links.
+     *
+     * @param link The link
+     * @return The suffix, excluding the dot (e.g. ".pdf")
+     */
+    public String getSuffix(String link) {
+        int index = link.lastIndexOf('.');
+        if ((index <= 0) || (index == link.length() - 1)) // No occurence, or at the end
+            return null;
+        return link.substring(index + 1);
+    }
+
+    public String getFileDirectory(String link) {
+        // TODO: getFileDirectory()
+        return metaData.getFileDirectory(GUIGlobals.FILE_FIELD);
+    }
+
+    /**
+     * Callback interface that users of this class must implement in order to receive
+     * notification when download is complete.
+     */
+    public interface DownloadCallback {
+        public void downloadComplete(FileListEntry file);
+    }
+}
diff --git a/src/java/net/sf/jabref/external/DroppedFileHandler.java b/src/java/net/sf/jabref/external/DroppedFileHandler.java
index dd01e1f..84527c4 100644
--- a/src/java/net/sf/jabref/external/DroppedFileHandler.java
+++ b/src/java/net/sf/jabref/external/DroppedFileHandler.java
@@ -32,380 +32,362 @@ import com.jgoodies.forms.layout.FormLayout;
  * This class holds the functionality of autolinking to a file that's dropped
  * onto an entry.
  * 
- * Options for handling the files are: 1) Link to the file in its current
- * position (disabled if the file is remote) 2) Copy the file to ??? directory,
- * rename after bibtex key, and link 3) Move the file to ??? directory, rename
- * after bibtex key, and link
+ * Options for handling the files are:
+ * 
+ * 1) Link to the file in its current position (disabled if the file is remote)
+ * 
+ * 2) Copy the file to ??? directory, rename after bibtex key, and extension
+ * 
+ * 3) Move the file to ??? directory, rename after bibtex key, and extension
  */
 public class DroppedFileHandler {
-	private JabRefFrame frame;
-
-	private BasePanel panel;
-
-	private JRadioButton linkInPlace = new JRadioButton(), copyRadioButton = new JRadioButton(),
-		moveRadioButton = new JRadioButton();
-	
-	private JLabel destDirLabel = new JLabel();
-
-	private JCheckBox renameCheckBox = new JCheckBox();
-
-	private JPanel optionsPanel = new JPanel();
-
-	private JPanel importAsNewPanel = new JPanel();
-
-	public DroppedFileHandler(JabRefFrame frame, BasePanel panel) {
-
-		this.frame = frame;
-		this.panel = panel;
-
-		ButtonGroup grp = new ButtonGroup();
-		grp.add(linkInPlace);
-		grp.add(copyRadioButton);
-		grp.add(moveRadioButton);
-		copyRadioButton.setSelected(true);
-
-		DefaultFormBuilder builder = new DefaultFormBuilder(optionsPanel, new FormLayout(
-			"left:pref", ""));
-		builder.append(linkInPlace);
-		builder.append(destDirLabel);
-		builder.append(copyRadioButton);
-		builder.append(moveRadioButton);
-		builder.append(renameCheckBox);
-	}
-
-	/**
-	 * Offer copy/move/linking options for a dragged external file. Perform the
-	 * chosen operation, if any.
-	 * 
-	 * @param fileName
-	 *            The name of the dragged file.
-	 * @param fileType
-	 *            The FileType associated with the file.
-	 * @param localFile
-	 *            Indicate whether this is a local file, or a remote file copied
-	 *            to a local temporary file.
-	 * @param mainTable
-	 *            The MainTable the file was dragged to.
-	 * @param dropRow
-	 *            The row where the file was dropped.
-	 */
-	public void handleDroppedfile(String fileName, ExternalFileType fileType, boolean localFile,
-		MainTable mainTable, int dropRow) {
-
-		NamedCompound edits = new NamedCompound(Globals.lang("Drop %0", fileType.extension));
-
-		if (tryXmpImport(fileName, fileType, localFile, mainTable, edits)) {
-			panel.undoManager.addEdit(edits);
-			return;
-		}
-
-		BibtexEntry entry = mainTable.getEntryAt(dropRow);
-
-		// Show dialog
-		boolean newEntry = false;
-		boolean rename = entry.getCiteKey() != null && entry.getCiteKey().length() > 0;
-		String citeKeyOrReason = (rename ? entry.getCiteKey() : "Entry has no citekey");
-		int reply = showLinkMoveCopyRenameDialog(Globals.lang("Link to file %0", fileName),
-			fileType, rename, citeKeyOrReason, newEntry, false);
-
-		if (reply != JOptionPane.OK_OPTION)
-			return;
-
-		/*
-		 * Ok, we're ready to go. See first if we need to do a file copy before
-		 * linking:
-		 */
-		boolean success = true;
-		String destFilename;
-
-		if (linkInPlace.isSelected()) {
-			destFilename = fileName;
-		} else {
-			destFilename = (renameCheckBox.isSelected() ? entry.getCiteKey() + "." + fileType.extension : fileName);
-			if (copyRadioButton.isSelected()) {
-				success = doCopy(fileName, fileType, destFilename, edits);
-			} else if (moveRadioButton.isSelected()) {
-				success = doRename(fileName, fileType, destFilename, edits);
-			}
-		}
-
-		if (success) {
-			doLink(entry, fileType, destFilename, edits);
-			panel.markBaseChanged();
-		}
-
-		panel.undoManager.addEdit(edits);
-
-	}
-
-	private boolean tryXmpImport(String fileName, ExternalFileType fileType, boolean localFile,
-		MainTable mainTable, NamedCompound edits) {
-
-		if (!fileType.extension.equals("pdf")) {
-			return false;
-		}
-
-		List l = null;
-		try {
-			l = XMPUtil.readXMP(fileName);
-		} catch (Exception e) {
-			return false;
-		}
-
-		if ((l == null) || (l.size() == 0)) {
-			return false;
-		}
-
-		JLabel confirmationMessage = new JLabel(
-			Globals
-				.lang("The PDF contains one or several bibtex-records.\nDo you want to import these as new entries into the current database database?"));
-
-		int reply = JOptionPane.showConfirmDialog(frame, confirmationMessage, Globals.lang(
-			"XMP metadata found in PDF: %0", fileName), JOptionPane.YES_NO_CANCEL_OPTION,
-			JOptionPane.QUESTION_MESSAGE);
-
-		if (reply == JOptionPane.CANCEL_OPTION) {
-			return true; // The user canceled thus that we are done.
-		}
-		if (reply == JOptionPane.NO_OPTION) {
-			return false;
-		}
-
-		// reply == JOptionPane.YES_OPTION)
-
-		/*
-		 * TODO Extract Import functionality from ImportMenuItem then we could
-		 * do:
-		 * 
-		 * ImportMenuItem importer = new ImportMenuItem(frame, (mainTable ==
-		 * null), new PdfXmpImporter());
-		 * 
-		 * importer.automatedImport(new String[] { fileName });
-		 */
-
-		boolean isSingle = l.size() == 1;
-		BibtexEntry single = (isSingle ? (BibtexEntry) l.get(0) : null);
-
-		reply = showLinkMoveCopyRenameDialog(Globals.lang("Link to PDF %0", fileName), fileType,
-			isSingle, (isSingle ? single.getCiteKey() : "Cannot rename for several entries."),
-			false, !isSingle);
-
-		boolean success = true;
-
-		String destFilename;
-
-		if (linkInPlace.isSelected()) {
-			destFilename = fileName;
-		} else {
-			if (renameCheckBox.isSelected()) {
-				destFilename = fileName;
-			} else {
-				destFilename = single.getCiteKey() + "." + fileType.extension;
-			}
-
-			if (copyRadioButton.isSelected()) {
-				success = doCopy(fileName, fileType, destFilename, edits);
-			} else if (moveRadioButton.isSelected()) {
-				success = doRename(fileName, fileType, destFilename, edits);
-			}
-		}
-		if (success) {
-
-			Iterator it = l.iterator();
-
-			while (it.hasNext()) {
-				try {
-					BibtexEntry entry = (BibtexEntry) it.next();
-					entry.setId(Util.createNeutralId());
-					panel.getDatabase().insertEntry(entry);
-					doLink(entry, fileType, destFilename, edits);
-				} catch (KeyCollisionException ex) {
-
-				}
-			}
-			panel.markBaseChanged();
-			panel.updateEntryEditorIfShowing();
-		}
-		return true;
-	}
-
-	public int showLinkMoveCopyRenameDialog(String dialogTitle, ExternalFileType fileType,
-		final boolean allowRename, String citekeyOrReason, boolean newEntry,
-		final boolean multipleEntries) {
-		
-		String dir = panel.metaData().getFileDirectory(fileType.getFieldName());
-		if ((dir == null) || !(new File(dir)).exists()) {
-			destDirLabel.setText(Globals.lang("%0 directory is not set or does not exist!", fileType.getName()));
-			copyRadioButton.setEnabled(false);
-			moveRadioButton.setEnabled(false);
-			linkInPlace.setSelected(true);
-		} else {
-			destDirLabel.setText(Globals.lang("%0 directory is '%1':", fileType.getName(), dir));
-			copyRadioButton.setEnabled(true);
-			moveRadioButton.setEnabled(true);
-		}
-		
-		ChangeListener cl = new ChangeListener() {
+    private JabRefFrame frame;
+
+    private BasePanel panel;
+
+    private JRadioButton linkInPlace = new JRadioButton(), copyRadioButton = new JRadioButton(),
+        moveRadioButton = new JRadioButton();
+    
+    private JLabel destDirLabel = new JLabel();
+
+    private JCheckBox renameCheckBox = new JCheckBox();
+
+    private JPanel optionsPanel = new JPanel();
+
+    public DroppedFileHandler(JabRefFrame frame, BasePanel panel) {
+
+        this.frame = frame;
+        this.panel = panel;
+
+        ButtonGroup grp = new ButtonGroup();
+        grp.add(linkInPlace);
+        grp.add(copyRadioButton);
+        grp.add(moveRadioButton);
+        copyRadioButton.setSelected(true);
+
+        DefaultFormBuilder builder = new DefaultFormBuilder(optionsPanel, new FormLayout(
+            "left:pref", ""));
+        builder.append(linkInPlace);
+        builder.append(destDirLabel);
+        builder.append(copyRadioButton);
+        builder.append(moveRadioButton);
+        builder.append(renameCheckBox);
+    }
+
+    /**
+     * Offer copy/move/linking options for a dragged external file. Perform the
+     * chosen operation, if any.
+     * 
+     * @param fileName
+     *            The name of the dragged file.
+     * @param fileType
+     *            The FileType associated with the file.
+     * @param localFile
+     *            Indicate whether this is a local file, or a remote file copied
+     *            to a local temporary file.
+     * @param mainTable
+     *            The MainTable the file was dragged to.
+     * @param dropRow
+     *            The row where the file was dropped.
+     */
+    public void handleDroppedfile(String fileName, ExternalFileType fileType, boolean localFile,
+        MainTable mainTable, int dropRow) {
+
+        NamedCompound edits = new NamedCompound(Globals.lang("Drop %0", fileType.extension));
+
+        if (tryXmpImport(fileName, fileType, localFile, mainTable, edits)) {
+            panel.undoManager.addEdit(edits);
+            return;
+        }
+
+        BibtexEntry entry = mainTable.getEntryAt(dropRow);
+
+        // Show dialog
+        boolean newEntry = false;
+        boolean rename = entry.getCiteKey() != null && entry.getCiteKey().length() > 0;
+        String citeKeyOrReason = (rename ? entry.getCiteKey() : Globals.lang("Entry has no citekey"));
+        int reply = showLinkMoveCopyRenameDialog(Globals.lang("Link to file %0", fileName),
+            fileType, rename, citeKeyOrReason, newEntry, false);
+
+        if (reply != JOptionPane.OK_OPTION)
+            return;
+
+        /*
+         * Ok, we're ready to go. See first if we need to do a file copy before
+         * linking:
+         */
+        boolean success = true;
+        String destFilename;
+
+        if (linkInPlace.isSelected()) {
+            destFilename = fileName;
+        } else {
+            destFilename = (renameCheckBox.isSelected() ? entry.getCiteKey() + "." + fileType.extension : fileName);
+            if (copyRadioButton.isSelected()) {
+                success = doCopy(fileName, fileType, destFilename, edits);
+            } else if (moveRadioButton.isSelected()) {
+                success = doRename(fileName, fileType, destFilename, edits);
+            }
+        }
+
+        if (success) {
+            doLink(entry, fileType, destFilename, edits);
+            panel.markBaseChanged();
+        }
+
+        panel.undoManager.addEdit(edits);
+
+    }
+
+    private boolean tryXmpImport(String fileName, ExternalFileType fileType, boolean localFile,
+        MainTable mainTable, NamedCompound edits) {
+
+        if (!fileType.extension.equals("pdf")) {
+            return false;
+        }
+
+        List xmpEntriesInFile = null;
+        try {
+            xmpEntriesInFile = XMPUtil.readXMP(fileName);
+        } catch (Exception e) {
+            return false;
+        }
+
+        if ((xmpEntriesInFile == null) || (xmpEntriesInFile.size() == 0)) {
+            return false;
+        }
+
+        JLabel confirmationMessage = new JLabel(
+            Globals
+                .lang("The PDF contains one or several bibtex-records.\nDo you want to import these as new entries into the current database?"));
+
+        int reply = JOptionPane.showConfirmDialog(frame, confirmationMessage, Globals.lang(
+            "XMP metadata found in PDF: %0", fileName), JOptionPane.YES_NO_CANCEL_OPTION,
+            JOptionPane.QUESTION_MESSAGE);
+
+        if (reply == JOptionPane.CANCEL_OPTION) {
+            return true; // The user canceled thus that we are done.
+        }
+        if (reply == JOptionPane.NO_OPTION) {
+            return false;
+        }
+
+        // reply == JOptionPane.YES_OPTION)
+
+        /*
+         * TODO Extract Import functionality from ImportMenuItem then we could
+         * do:
+         * 
+         * ImportMenuItem importer = new ImportMenuItem(frame, (mainTable ==
+         * null), new PdfXmpImporter());
+         * 
+         * importer.automatedImport(new String[] { fileName });
+         */
+
+        boolean isSingle = xmpEntriesInFile.size() == 1;
+        BibtexEntry single = (isSingle ? (BibtexEntry) xmpEntriesInFile.get(0) : null);
+
+        reply = showLinkMoveCopyRenameDialog(Globals.lang("Link to PDF %0", fileName), fileType,
+            isSingle, (isSingle ? single.getCiteKey() : Globals.lang("Cannot rename for several entries.")),
+            false, !isSingle);
+
+        boolean success = true;
+
+        String destFilename;
+
+        if (linkInPlace.isSelected()) {
+            destFilename = fileName;
+        } else {
+            if (renameCheckBox.isSelected()) {
+                destFilename = fileName;
+            } else {
+                destFilename = single.getCiteKey() + "." + fileType.extension;
+            }
+
+            if (copyRadioButton.isSelected()) {
+                success = doCopy(fileName, fileType, destFilename, edits);
+            } else if (moveRadioButton.isSelected()) {
+                success = doRename(fileName, fileType, destFilename, edits);
+            }
+        }
+        if (success) {
+
+            Iterator it = xmpEntriesInFile.iterator();
+
+            while (it.hasNext()) {
+                try {
+                    BibtexEntry entry = (BibtexEntry) it.next();
+                    entry.setId(Util.createNeutralId());
+                    panel.getDatabase().insertEntry(entry);
+                    doLink(entry, fileType, destFilename, edits);
+                } catch (KeyCollisionException ex) {
+
+                }
+            }
+            panel.markBaseChanged();
+            panel.updateEntryEditorIfShowing();
+        }
+        return true;
+    }
+
+    public int showLinkMoveCopyRenameDialog(String dialogTitle, ExternalFileType fileType,
+        final boolean allowRename, String citekeyOrReason, boolean newEntry,
+        final boolean multipleEntries) {
+        
+        String dir = panel.metaData().getFileDirectory(fileType.getFieldName());
+        if ((dir == null) || !(new File(dir)).exists()) {
+            destDirLabel.setText(Globals.lang("%0 directory is not set or does not exist!", fileType.getName()));
+            copyRadioButton.setEnabled(false);
+            moveRadioButton.setEnabled(false);
+            linkInPlace.setSelected(true);
+        } else {
+            destDirLabel.setText(Globals.lang("%0 directory is '%1':", fileType.getName(), dir));
+            copyRadioButton.setEnabled(true);
+            moveRadioButton.setEnabled(true);
+        }
+        
+        ChangeListener cl = new ChangeListener() {
 			public void stateChanged(ChangeEvent arg0) {
-				renameCheckBox.setEnabled(!linkInPlace.isSelected() && allowRename
-					&& (!multipleEntries));
+				renameCheckBox.setEnabled(!linkInPlace.isSelected()
+						&& allowRename && (!multipleEntries));
 			}
 		};
 
-		if (newEntry) {
-			if (multipleEntries) {
-				linkInPlace.setText(Globals.lang("Link from new entries."));
-
-				copyRadioButton.setText(Globals.lang(
-					"Copy to %0 directory and link from new entries.", fileType.getName()));
-				moveRadioButton.setText(Globals.lang(
-					"Move to %0 directory and link from new entries.", fileType.getName()));
-			} else {
-				linkInPlace.setText(Globals.lang("Link from new entry"));
-
-				copyRadioButton.setText(Globals.lang(
-					"Copy to %0 directory and link from new entry.", fileType.getName()));
-				moveRadioButton.setText(Globals.lang(
-					"Move to %0 directory and link from new entry.", fileType.getName()));
-			}
-		} else {
-			if (multipleEntries) {
-				linkInPlace.setText(Globals.lang("Link from entries."));
-
-				copyRadioButton.setText(Globals.lang("Copy to %0 directory and link from entries.",
-					fileType.getName()));
-				moveRadioButton.setText(Globals.lang("Move to %0 directory and link from entries.",
-					fileType.getName()));
-			} else {
-				linkInPlace.setText(Globals.lang("Link from entry"));
-
-				copyRadioButton.setText(Globals.lang("Copy to %0 directory and link from entry.",
-					fileType.getName()));
-				moveRadioButton.setText(Globals.lang("Move to %0 directory and link from entry.",
-					fileType.getName()));
-
-			}
-
-		}
-
-		renameCheckBox.setText("Rename to match citekey: " + citekeyOrReason);
-		linkInPlace.addChangeListener(cl);
-		cl.stateChanged(new ChangeEvent(linkInPlace));
+		if (multipleEntries) {
+			linkInPlace.setText(Globals
+					.lang("Leave files in their current directory."));
+			copyRadioButton.setText(Globals.lang("Copy files to %0.", fileType
+					.getName()));
 
-		try {
-			return JOptionPane.showConfirmDialog(frame, optionsPanel, dialogTitle,
-				JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE);
-		} finally {
-			linkInPlace.removeChangeListener(cl);
-		}
-	}
-	
-	/**
-	 * Make a link to the file.
-	 * 
-	 * @param entry
-	 *            The entry to link from.
-	 * @param fileType
-	 *            The FileType associated with the file.
-	 * @param filename
-	 *            The path to the file.
-	 * @param edits
-	 *            An NamedCompound action this action is to be added to. If none
-	 *            is given, the edit is added to the panel's undoManager.
-	 */
-	private void doLink(BibtexEntry entry, ExternalFileType fileType, String filename,
-		NamedCompound edits) {
-
-		UndoableFieldChange edit = new UndoableFieldChange(entry, fileType.getFieldName(), entry
-			.getField(fileType.getFieldName()), filename);
-		entry.setField(fileType.getFieldName(), filename);
-
-		if (edits == null) {
-			panel.undoManager.addEdit(edit);
+			moveRadioButton.setText(Globals.lang("Move files to %0.", fileType
+					.getName()));
 		} else {
-			edits.addEdit(edit);
-		}
-	}
-
-	/**
-	 * Move the given file to the base directory for its file type, and rename
-	 * it to the given filename.
-	 * 
-	 * @param fileName
-	 *            The name of the source file.
-	 * @param fileType
-	 *            The FileType associated with the file.
-	 * @param destFilename
-	 *            The destination filename.
-	 * @param edits
-	 *            TODO we should be able to undo this action
-	 * @return true if the operation succeeded.
-	 */
-	private boolean doRename(String fileName, ExternalFileType fileType, String destFilename,
-		NamedCompound edits) {
-		String dir = panel.metaData().getFileDirectory(fileType.getFieldName());
-		if ((dir == null) || !(new File(dir)).exists()) {
-			// OOps, we don't know which directory to put it in, or the given
-			// dir doesn't exist....
-			// This should not happen!!
-			return false;
-		}
-		destFilename = new File(destFilename).getName();
-		File f = new File(fileName);
-		File destFile = new File(new StringBuffer(dir).append(System.getProperty("file.separator"))
-			.append(destFilename).toString());
-		f.renameTo(destFile);
-		return true;
-	}
-
-	/**
-	 * Copy the given file to the base directory for its file type, and give it
-	 * the given name.
-	 * 
-	 * @param fileName
-	 *            The name of the source file.
-	 * @param fileType
-	 *            The FileType associated with the file.
-	 * @param toFile
-	 *            The destination filename. An existing path-component will be removed.
-	 * @param edits
-	 *            TODO we should be able to undo this!
-	 * @return
-	 */
-	private boolean doCopy(String fileName, ExternalFileType fileType, String toFile,
-		NamedCompound edits) {
-
-		String dir = panel.metaData().getFileDirectory(fileType.getFieldName());
-		if ((dir == null) || !(new File(dir)).exists()) {
-			// OOps, we don't know which directory to put it in, or the given
-			// dir doesn't exist....
-			System.out.println("dir: " + dir + "\t ext: " + fileType.getExtension());
-			return false;
-		}
-		toFile = new File(toFile).getName();
-		
-		File destFile = new File(new StringBuffer(dir).append(System.getProperty("file.separator"))
-			.append(toFile).toString());
-		if (destFile.equals(new File(fileName))){
-			// File is already in the correct position. Don't override!
-			return true;
+			linkInPlace.setText(Globals
+					.lang("Leave file in its current directory."));
+			copyRadioButton.setText(Globals.lang("Copy file to %0.", fileType
+					.getName()));
+			moveRadioButton.setText(Globals.lang("Move file to %0.", fileType
+					.getName()));
 		}
 		
-		if (destFile.exists()) {
-			int answer = JOptionPane.showConfirmDialog(frame, "'" + destFile.getPath() + "' "
-				+ Globals.lang("exists.Overwrite?"), Globals.lang("File exists"),
-				JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
-			if (answer == JOptionPane.NO_OPTION)
-				return false;
-		}
-		try {
-			Util.copyFile(new File(fileName), destFile, true);
-		} catch (IOException e) {
-			e.printStackTrace();
-			return false;
-		}
-
-		return true;
-	}
+        renameCheckBox.setText(Globals.lang("Rename to match citekey") + ": " + citekeyOrReason);
+        linkInPlace.addChangeListener(cl);
+        cl.stateChanged(new ChangeEvent(linkInPlace));
+
+        try {
+            return JOptionPane.showConfirmDialog(frame, optionsPanel, dialogTitle,
+                JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE);
+        } finally {
+            linkInPlace.removeChangeListener(cl);
+        }
+    }
+    
+    /**
+     * Make a extension to the file.
+     * 
+     * @param entry
+     *            The entry to extension from.
+     * @param fileType
+     *            The FileType associated with the file.
+     * @param filename
+     *            The path to the file.
+     * @param edits
+     *            An NamedCompound action this action is to be added to. If none
+     *            is given, the edit is added to the panel's undoManager.
+     */
+    private void doLink(BibtexEntry entry, ExternalFileType fileType, String filename,
+        NamedCompound edits) {
+
+        UndoableFieldChange edit = new UndoableFieldChange(entry, fileType.getFieldName(), entry
+            .getField(fileType.getFieldName()), filename);
+        entry.setField(fileType.getFieldName(), filename);
+
+        if (edits == null) {
+            panel.undoManager.addEdit(edit);
+        } else {
+            edits.addEdit(edit);
+        }
+    }
+
+    /**
+     * Move the given file to the base directory for its file type, and rename
+     * it to the given filename.
+     * 
+     * @param fileName
+     *            The name of the source file.
+     * @param fileType
+     *            The FileType associated with the file.
+     * @param destFilename
+     *            The destination filename.
+     * @param edits
+     *            TODO we should be able to undo this action
+     * @return true if the operation succeeded.
+     */
+    private boolean doRename(String fileName, ExternalFileType fileType, String destFilename,
+        NamedCompound edits) {
+        String dir = panel.metaData().getFileDirectory(fileType.getFieldName());
+        if ((dir == null) || !(new File(dir)).exists()) {
+            // OOps, we don't know which directory to put it in, or the given
+            // dir doesn't exist....
+            // This should not happen!!
+            return false;
+        }
+        destFilename = new File(destFilename).getName();
+        File f = new File(fileName);
+        File destFile = new File(new StringBuffer(dir).append(System.getProperty("file.separator"))
+            .append(destFilename).toString());
+        f.renameTo(destFile);
+        return true;
+    }
+
+    /**
+     * Copy the given file to the base directory for its file type, and give it
+     * the given name.
+     * 
+     * @param fileName
+     *            The name of the source file.
+     * @param fileType
+     *            The FileType associated with the file.
+     * @param toFile
+     *            The destination filename. An existing path-component will be removed.
+     * @param edits
+     *            TODO we should be able to undo this!
+     * @return
+     */
+    private boolean doCopy(String fileName, ExternalFileType fileType, String toFile,
+        NamedCompound edits) {
+
+        String dir = panel.metaData().getFileDirectory(fileType.getFieldName());
+        if ((dir == null) || !(new File(dir)).exists()) {
+            // OOps, we don't know which directory to put it in, or the given
+            // dir doesn't exist....
+            System.out.println("dir: " + dir + "\t ext: " + fileType.getExtension());
+            return false;
+        }
+        toFile = new File(toFile).getName();
+        
+        File destFile = new File(new StringBuffer(dir).append(System.getProperty("file.separator"))
+            .append(toFile).toString());
+        if (destFile.equals(new File(fileName))){
+            // File is already in the correct position. Don't override!
+            return true;
+        }
+        
+        if (destFile.exists()) {
+            int answer = JOptionPane.showConfirmDialog(frame, "'" + destFile.getPath() + "' "
+                + Globals.lang("exists.Overwrite?"), Globals.lang("File exists"),
+                JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
+            if (answer == JOptionPane.NO_OPTION)
+                return false;
+        }
+        try {
+            Util.copyFile(new File(fileName), destFile, true);
+        } catch (IOException e) {
+            e.printStackTrace();
+            return false;
+        }
+
+        return true;
+    }
 
 }
diff --git a/src/java/net/sf/jabref/external/ExternalFileMenuItem.java b/src/java/net/sf/jabref/external/ExternalFileMenuItem.java
index 6f14e04..0aa4caa 100644
--- a/src/java/net/sf/jabref/external/ExternalFileMenuItem.java
+++ b/src/java/net/sf/jabref/external/ExternalFileMenuItem.java
@@ -1,12 +1,12 @@
 package net.sf.jabref.external;
 
-import net.sf.jabref.Util;
-import net.sf.jabref.MetaData;
+import net.sf.jabref.*;
 
 import javax.swing.*;
 import java.awt.event.ActionListener;
 import java.awt.event.ActionEvent;
 import java.io.IOException;
+import java.io.File;
 
 /**
  * The menu item used in the popup menu for opening external resources associated
@@ -15,20 +15,54 @@ import java.io.IOException;
  */
 public class ExternalFileMenuItem extends JMenuItem implements ActionListener {
 
+    private BibtexEntry entry;
     final String link;
     final MetaData metaData;
+    final ExternalFileType fileType;
+    final JabRefFrame frame;
 
-    public ExternalFileMenuItem(String name, String link, Icon icon, MetaData metaData) {
+    public ExternalFileMenuItem(JabRefFrame frame, BibtexEntry entry, String name,
+                                String link, Icon icon,
+                                MetaData metaData,
+                                ExternalFileType fileType) {
         super(name, icon);
+        this.frame = frame;
+        this.entry = entry;
         this.link = link;
         this.metaData = metaData;
+        this.fileType = fileType;
         addActionListener(this);
     }
 
-    public void actionPerformed(ActionEvent e) {
+    public ExternalFileMenuItem(JabRefFrame frame, BibtexEntry entry, String name,
+                                String link, Icon icon, MetaData metaData) {
+        this(frame, entry, name, link, icon, metaData, null);
+    }
 
+    public void actionPerformed(ActionEvent e) {
+        
         try {
-            Util.openExternalFileAnyFormat(metaData, link);
+            ExternalFileType type = fileType;
+            if (this.fileType == null) {
+                // We don't already know the file type, so we try to deduce it from the extension:
+                File file = new File(link);
+                // We try to check the extension for the file:
+                String name = file.getName();
+                int pos = name.indexOf('.');
+                String extension = ((pos >= 0) && (pos < name.length() - 1)) ? name.substring(pos + 1)
+                    .trim().toLowerCase() : null;
+                // Now we know the extension, check if it is one we know about:
+                type = Globals.prefs.getExternalFileTypeByExt(extension);
+            }
+
+            if (type instanceof UnknownExternalFileType)
+                Util.openExternalFileUnknown(frame, entry, metaData, link, 
+                        (UnknownExternalFileType)type);
+            else
+                Util.openExternalFileAnyFormat(metaData, link, type);
+
+
+
         } catch (IOException e1) {
             e1.printStackTrace();
         }
diff --git a/src/java/net/sf/jabref/external/ExternalFilePanel.java b/src/java/net/sf/jabref/external/ExternalFilePanel.java
index 5e05c17..b2e29f3 100644
--- a/src/java/net/sf/jabref/external/ExternalFilePanel.java
+++ b/src/java/net/sf/jabref/external/ExternalFilePanel.java
@@ -20,6 +20,7 @@ import javax.swing.JPanel;
 import javax.swing.SwingUtilities;
 import javax.xml.transform.TransformerException;
 
+import net.sf.jabref.BibtexDatabase;
 import net.sf.jabref.BibtexEntry;
 import net.sf.jabref.BibtexFields;
 import net.sf.jabref.EntryEditor;
@@ -41,12 +42,14 @@ import net.sf.jabref.util.XMPUtil;
  * 
  * Current Version:
  * 
- * @author $Author: mortenalver $
- * @version $Revision: 1.23 $ ($Date: 2007/01/04 19:48:37 $)
+ * @author $Author: coezbek $
+ * @version $Revision: 1.24 $ ($Date: 2007/06/13 01:39:50 $)
  * 
  */
 public class ExternalFilePanel extends JPanel {
 
+	private static final long serialVersionUID = 3653290879640642718L;
+
 	private JButton browseBut, download, auto, xmp;
 
 	private EntryEditor entryEditor;
@@ -57,7 +60,9 @@ public class ExternalFilePanel extends JPanel {
 
 	private OpenFileFilter off;
 
-	private BibtexEntry entry = null;
+	private BibtexEntry entry;
+	
+	private BibtexDatabase database;
 
 	private MetaData metaData;
 
@@ -127,8 +132,13 @@ public class ExternalFilePanel extends JPanel {
 	 * Change which entry this panel is operating on. This is used only when
 	 * this panel is not attached to an entry editor.
 	 */
-	public void setEntry(BibtexEntry entry) {
+	public void setEntry(BibtexEntry entry, BibtexDatabase database) {
 		this.entry = entry;
+		this.database = database;
+	}
+	
+	public BibtexDatabase getDatabase(){
+		return (database != null ? database : entryEditor.getDatabase());
 	}
 
 	public BibtexEntry getEntry() {
@@ -172,9 +182,10 @@ public class ExternalFilePanel extends JPanel {
 				
 				final File finalFile = file;
 
+		
 				output(Globals.lang("Writing XMP to '%0'...", finalFile.getName()));
 				try {
-					XMPUtil.writeXMP(finalFile, getEntry());
+					XMPUtil.writeXMP(finalFile, getEntry(), getDatabase());
 					output(Globals.lang("Wrote XMP to '%0'.", finalFile.getName()));
 				} catch (IOException e) {
 					JOptionPane.showMessageDialog(editor.getParent(), Globals.lang(
@@ -415,8 +426,6 @@ public class ExternalFilePanel extends JPanel {
 			+ fieldName + "'...");
 		Thread t = (new Thread() {
 			public void run() {
-				Object o = getKey();
-
 				/*
 				 * Find the following directories to look in for:
 				 * 
@@ -426,7 +435,7 @@ public class ExternalFilePanel extends JPanel {
 				 * 
 				 * JabRef-directory.
 				 */
-				LinkedList list = new LinkedList();
+				LinkedList<String> list = new LinkedList<String>();
 				list.add(metaData.getFileDirectory(fieldName));
 
 				/*
diff --git a/src/java/net/sf/jabref/external/ExternalFileType.java b/src/java/net/sf/jabref/external/ExternalFileType.java
index dbcfd0f..1855eb1 100644
--- a/src/java/net/sf/jabref/external/ExternalFileType.java
+++ b/src/java/net/sf/jabref/external/ExternalFileType.java
@@ -1,25 +1,61 @@
 package net.sf.jabref.external;
 
-import java.net.URL;
+import net.sf.jabref.GUIGlobals;
+
+import javax.swing.*;
 
 /**
- * Created by IntelliJ IDEA.
- * User: alver
- * Date: Mar 4, 2006
- * Time: 4:27:05 PM
- * To change this template use File | Settings | File Templates.
+ * 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 {
+public class ExternalFileType implements Comparable {
 
-    protected String name, extension, openWith;
-    protected URL icon;
+    protected String name, extension, openWith, iconName;
+    protected ImageIcon icon;
+    protected boolean remote = false;
 
     public ExternalFileType(String name, String extension, String openWith,
-                            URL icon) {
+                            String iconName) {
         this.name = name;
         this.extension = extension;
         this.openWith = openWith;
-        this.icon = icon;
+        this.iconName = iconName;
+        this.icon = GUIGlobals.getImage(iconName);
+    }
+
+    /**
+     * Construct an ExternalFileType from a String array. This constructor is used when
+     * reading file type definitions from Preferences, where the available data types are
+     * limited. We assume that the array contains the same values as the main constructor,
+     * in the same order.
+     *
+     * TODO: The icon argument needs special treatment. At the moment, we assume that the fourth
+     * element of the array contains the icon keyword to be looked up in the current icon theme.
+     * To support icons found elsewhere on the file system we simply need to prefix the icon name
+     * with a marker. 
+     *
+     * @param val Constructor arguments.
+     */
+    public ExternalFileType(String[] val) {
+        if ((val == null) || (val.length < 4))
+            throw new IllegalArgumentException("Cannot contruct ExternalFileType without four elements in String[] argument.");
+        this.name = val[0];
+        this.extension = val[1];
+        this.openWith = val[2];
+        this.iconName = val[3];
+        this.icon = GUIGlobals.getImage(val[3]);
+    }
+
+    /**
+     * Return a String array representing this file type. This is used for storage into
+     * Preferences, and the same array can be used to construct the file type later,
+     * using the String[] constructor.
+     *
+     * @return A String[] containing all information about this file type.
+     */
+    public String[] getStringArrayRepresentation() {
+        return new String[] {name, extension, openWith, iconName};
     }
 
     public String getName() {
@@ -34,8 +70,25 @@ public class ExternalFileType {
         return extension;
     }
 
+    public void setExtension(String extension) {
+        this.extension = extension;
+    }
+
     /**
-     * Get the bibtex field name used to link to this file type.
+     * Query whether this type of links is remote. Remote links are ignored when
+     * synchronizing links.
+     * @return true if the type is remote.
+     */
+    public boolean isRemote() {
+        return remote;
+    }
+
+    public void setRemote(boolean remote) {
+        this.remote = remote;
+    }
+
+    /**
+     * Get the bibtex field name used to extension to this file type.
      * Currently we assume that field name equals filename extension.
      * @return The field name.
      */
@@ -51,11 +104,23 @@ public class ExternalFileType {
         this.openWith = openWith;
     }
 
-    public URL getIcon() {
+    public ImageIcon getIcon() {
         return icon;
     }
 
-    public void setIcon(URL icon) {
+    public void setIcon(ImageIcon icon) {
         this.icon = icon;
     }
+
+    public String toString() {
+        return getName();
+    }
+
+    public int compareTo(Object o) {
+        return getName().compareTo(((ExternalFileType)o).getName());
+    }
+
+    public ExternalFileType copy() {
+        return new ExternalFileType(name, extension, openWith, iconName);
+    }
 }
diff --git a/src/java/net/sf/jabref/external/ExternalFileTypeEditor.java b/src/java/net/sf/jabref/external/ExternalFileTypeEditor.java
new file mode 100644
index 0000000..ca82178
--- /dev/null
+++ b/src/java/net/sf/jabref/external/ExternalFileTypeEditor.java
@@ -0,0 +1,332 @@
+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 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 com.jgoodies.forms.builder.ButtonBarBuilder;
+import com.jgoodies.forms.builder.ButtonStackBuilder;
+
+/**
+ * Editor for external file types.
+ */
+public class ExternalFileTypeEditor extends JDialog {
+
+    private JFrame frame = null;
+    private JDialog dialog = null;
+    private ArrayList<ExternalFileType> fileTypes;
+    private JTable table;
+    private ExternalFileTypeEntryEditor entryEditor = null;
+    private FileTypeTableModel tableModel;
+    private JButton ok = new JButton(Globals.lang("Ok")),
+        cancel = new JButton(Globals.lang("Cancel"));
+    private JButton add = new JButton(GUIGlobals.getImage("add")),
+        remove = new JButton(GUIGlobals.getImage("remove")),
+        edit = new JButton(GUIGlobals.getImage("edit")),
+        toDefaults = new JButton(Globals.lang("Default"));
+    private EditListener editListener = new EditListener();
+
+    public ExternalFileTypeEditor(JFrame frame) {
+        super(frame, Globals.lang("Manage external file types"), true);
+        this.frame = frame;
+        init();
+    }
+
+    public ExternalFileTypeEditor(JDialog dialog) {
+        super(dialog, Globals.lang("Manage external file types"), true);
+        this.dialog = dialog;
+        init();
+    }
+
+    /**
+     * Update the editor to show the current settings in Preferences.
+     */
+    public void setValues() {
+        fileTypes.clear();
+        ExternalFileType[] types = Globals.prefs.getExternalFileTypeSelection();
+        for (int i = 0; i < types.length; i++) {
+
+            fileTypes.add(types[i].copy());
+        }
+        Collections.sort(fileTypes);
+    }
+
+    /**
+     * Store the list of external entry types to Preferences.
+     */
+    public void storeSettings() {
+        Globals.prefs.setExternalFileTypes(fileTypes);
+    }
+
+    private void init() {
+
+        ok.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                storeSettings();
+                dispose();
+            }
+        });
+        cancel.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                dispose();
+            }
+        });
+        // The toDefaults resets the entire list to its default values.
+        toDefaults.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                /*int reply = JOptionPane.showConfirmDialog(ExternalFileTypeEditor.this,
+                        Globals.lang("All custom file types will be lost. Proceed?"),
+                        Globals.lang("Reset file type definitons"), JOptionPane.YES_NO_OPTION,
+                        JOptionPane.QUESTION_MESSAGE);*/
+                //if (reply == JOptionPane.YES_OPTION) {
+                    java.util.List<ExternalFileType> list = Globals.prefs.getDefaultExternalFileTypes();
+                    fileTypes.clear();
+                    fileTypes.addAll(list);
+                    Collections.sort(fileTypes);
+                    //Globals.prefs.resetExternalFileTypesToDefault();
+                    //setValues();
+                    tableModel.fireTableDataChanged();
+                //}
+            }
+        });
+
+        add.addActionListener(new AddListener());
+        remove.addActionListener(new RemoveListener());
+        edit.addActionListener(editListener);
+        fileTypes = new ArrayList<ExternalFileType>();
+        setValues();
+        
+
+        tableModel = new FileTypeTableModel();
+        table = new JTable(tableModel);
+        table.setDefaultRenderer(ImageIcon.class, new IconRenderer());
+        table.addMouseListener(new TableClickListener());
+
+        table.getColumnModel().getColumn(0).setMaxWidth(24);
+        table.getColumnModel().getColumn(0).setMinWidth(24);
+        table.getColumnModel().getColumn(1).setMinWidth(170);
+        table.getColumnModel().getColumn(2).setMinWidth(60);
+        table.getColumnModel().getColumn(3).setMinWidth(100);
+        table.getColumnModel().getColumn(0).setResizable(false);
+        
+        JScrollPane sp = new JScrollPane(table);
+
+        JPanel upper = new JPanel();
+        upper.setLayout(new BorderLayout());
+        upper.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+        upper.add(sp, BorderLayout.CENTER);
+        getContentPane().add(upper, BorderLayout.CENTER);
+
+        ButtonStackBuilder bs = new ButtonStackBuilder();
+        bs.addGridded(add);
+        bs.addGridded(remove);
+        bs.addGridded(edit);
+        bs.addRelatedGap();
+        bs.addGridded(toDefaults);
+        upper.add(bs.getPanel(), BorderLayout.EAST);
+
+        ButtonBarBuilder bb = new ButtonBarBuilder();
+        bb.addGlue();
+        bb.addGridded(ok);
+        bb.addGridded(cancel);
+        bb.addGlue();
+        bb.getPanel().setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+        getContentPane().add(bb.getPanel(), BorderLayout.SOUTH);
+        pack();
+
+        if (frame != null)
+            setLocationRelativeTo(frame);
+        else
+            setLocationRelativeTo(dialog);
+    }
+
+    private ExternalFileTypeEntryEditor getEditor(ExternalFileType type) {
+        if (entryEditor == null)
+            entryEditor = new ExternalFileTypeEntryEditor(ExternalFileTypeEditor.this,  type);
+        else
+            entryEditor.setEntry(type);
+        return entryEditor;
+    }
+
+    /**
+     * Get an AbstractAction for opening the external file types editor.
+     * @param frame The JFrame used as parent window for the dialog.
+     * @return An Action for opening the editor.
+     */
+    public static AbstractAction getAction(JabRefFrame frame) {
+        return new EditExternalFileTypesAction(frame);
+    }
+
+    /**
+     * Get an AbstractAction for opening the external file types editor.
+     * @param dialog The JDialog used as parent window for the dialog.
+     * @return An Action for opening the editor.
+     */
+    public static AbstractAction getAction(JDialog dialog) {
+        return new EditExternalFileTypesAction(dialog);
+    }
+
+    class AddListener implements ActionListener {
+        public void actionPerformed(ActionEvent e) {
+            // Generate a new file type:
+            ExternalFileType type = new ExternalFileType("", "", "", "new");
+            // Show the file type editor:
+            getEditor(type).setVisible(true);
+            if (entryEditor.okPressed()) {
+                // Ok was pressed. Add the new file type and update the table:
+                fileTypes.add(type);
+                tableModel.fireTableDataChanged();
+            }
+        }
+    }
+
+    class RemoveListener implements ActionListener {
+
+        public void actionPerformed(ActionEvent e) {
+            int[] rows = table.getSelectedRows();
+            if (rows.length == 0)
+                return;
+            for (int i=rows.length-1; i>=0; i--) {
+                fileTypes.remove(rows[i]);
+            }
+            tableModel.fireTableDataChanged();
+            if (fileTypes.size() > 0) {
+                int row = Math.min(rows[0], fileTypes.size()-1);
+                table.setRowSelectionInterval(row, row);
+            }
+        }
+    }
+
+    class EditListener implements ActionListener {
+
+        public void actionPerformed(ActionEvent e) {
+            int[] rows = table.getSelectedRows();
+            if (rows.length != 1)
+                return;
+            getEditor(fileTypes.get(rows[0])).setVisible(true);
+            if (entryEditor.okPressed())
+                tableModel.fireTableDataChanged();
+        }
+    }
+
+    class IconRenderer implements TableCellRenderer {
+        JLabel lab = new JLabel();
+
+        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
+            lab.setText(null);
+            lab.setIcon((ImageIcon)value);
+            return lab;
+        }
+    }
+
+    class FileTypeTableModel extends AbstractTableModel {
+
+        public int getColumnCount() {
+            return 4;
+        }
+
+        public int getRowCount() {
+            return fileTypes.size();
+        }
+
+        public String getColumnName(int column) {
+            switch (column) {
+                case 0:
+                    return " ";
+                case 1:
+                    return Globals.lang("Name");
+                case 2:
+                    return Globals.lang("Extension");
+                case 3:
+                    return Globals.lang("Application");
+                default:
+                    return null;
+            }
+        }
+
+        public Class<?> getColumnClass(int columnIndex) {
+            if (columnIndex == 0)
+                return ImageIcon.class;
+            else return String.class;
+        }
+
+        public Object getValueAt(int rowIndex, int columnIndex) {
+            ExternalFileType type = fileTypes.get(rowIndex);
+            switch (columnIndex) {
+                case 0:
+                    return type.getIcon();
+                case 1:
+                    return type.getName();
+                case 2:
+                    return type.getExtension();
+                case 3:
+                    return type.getOpenWith();
+                default:
+                    return null;
+            }
+        }
+    }
+
+    class TableClickListener extends MouseAdapter {
+
+        private void handleClick(MouseEvent e) {
+            if (e.getClickCount() == 2) {
+                editListener.actionPerformed(null);
+            }
+        }
+
+        public void mouseClicked(MouseEvent e) {
+            handleClick(e);
+        }
+
+        public void mousePressed(MouseEvent e) {
+            handleClick(e);
+        }
+
+        public void mouseReleased(MouseEvent e) {
+            handleClick(e);
+        }
+    }
+
+    public static class EditExternalFileTypesAction extends MnemonicAwareAction {
+        private JFrame frame = null;
+        private JDialog dialog = null;
+        ExternalFileTypeEditor editor = null;
+
+        public EditExternalFileTypesAction(JFrame frame) {
+            super();
+            putValue(NAME, "Manage external file types");
+            this.frame = frame;
+        }
+
+        public EditExternalFileTypesAction(JDialog dialog) {
+            super();
+            putValue(NAME, "Manage external file types");
+            this.dialog = dialog;
+        }
+
+        public void actionPerformed(ActionEvent e) {
+            if (editor == null) {
+                if (frame != null)
+                    editor = new ExternalFileTypeEditor(frame);
+                else
+                    editor = new ExternalFileTypeEditor(dialog);
+            }
+            editor.setValues();
+            editor.setVisible(true);
+        }
+    }
+
+}
diff --git a/src/java/net/sf/jabref/external/ExternalFileTypeEntryEditor.java b/src/java/net/sf/jabref/external/ExternalFileTypeEntryEditor.java
new file mode 100644
index 0000000..27f1566
--- /dev/null
+++ b/src/java/net/sf/jabref/external/ExternalFileTypeEntryEditor.java
@@ -0,0 +1,234 @@
+package net.sf.jabref.external;
+
+import net.sf.jabref.Globals;
+import net.sf.jabref.Util;
+import net.sf.jabref.GUIGlobals;
+
+import javax.swing.*;
+import javax.swing.event.DocumentListener;
+import javax.swing.event.DocumentEvent;
+
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+import com.jgoodies.forms.builder.ButtonBarBuilder;
+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.
+ */
+public class ExternalFileTypeEntryEditor {
+
+    JFrame fParent = null;
+    JDialog dParent = null;
+    JDialog diag;
+    JTextField extension = new JTextField(),
+        name = new JTextField(),
+        application = new JTextField();
+    JButton icon = new JButton(GUIGlobals.getImage("picture"));
+    JButton ok = new JButton(Globals.lang("Ok")),
+            cancel = new JButton(Globals.lang("Cancel"));
+    JRadioButton useDefault = new JRadioButton(Globals.lang("Default")),
+        other = new JRadioButton("");
+    final String emptyMessage = "<"+Globals.lang("Use default viewer")+">";
+    boolean applicationFieldEmpty = false;
+
+    private ExternalFileType entry;
+    private boolean okPressed = false;
+
+    public ExternalFileTypeEntryEditor(JFrame parent, ExternalFileType entry) {
+        fParent = parent;
+        init(entry);
+    }
+
+    public ExternalFileTypeEntryEditor(JDialog parent, ExternalFileType entry) {
+        dParent = parent;
+        init(entry);
+    }
+
+    private void init(ExternalFileType entry) {
+        this.entry = entry;
+        icon.setText(null);
+
+        ButtonGroup bg = new ButtonGroup();
+        bg.add(useDefault);
+        bg.add(other);
+
+        DefaultFormBuilder builder = new DefaultFormBuilder(new FormLayout
+                ("left:pref, 4dlu, fill:150dlu, 4dlu, fill:pref", ""));
+        builder.append(Globals.lang("Icon"));
+        builder.append(icon);
+        builder.nextLine();
+        builder.append(Globals.lang("Name"));
+        builder.append(name);
+        builder.nextLine();
+        builder.append(Globals.lang("Extension"));
+        builder.append(extension);
+        builder.getPanel().setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+        builder.nextLine();
+        builder.append(Globals.lang("Application"));
+        JButton browseBut = new JButton(Globals.lang("Browse"));
+        if (Globals.ON_WIN) {
+            builder.append(useDefault);
+            builder.nextLine();
+            JPanel p1 = new JPanel();
+            builder.append(p1);
+            JPanel p2 = new JPanel();
+            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);
+            builder.append(browseBut);
+        }
+        ButtonBarBuilder bb = new ButtonBarBuilder();
+        bb.addGlue();
+        bb.addGridded(ok);
+        bb.addGridded(cancel);
+        bb.addGlue();
+
+        ok.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                diag.dispose();
+                storeSettings(ExternalFileTypeEntryEditor.this.entry);
+                okPressed = true;
+            }
+        });
+        cancel.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                diag.dispose();
+            }
+        });
+
+        icon.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent actionEvent) {
+                JOptionPane.showMessageDialog(null, "Sorry, the icon can unfortunately not be changed in this version of JabRef");
+            }
+        });
+
+        if (Globals.ON_WIN) {
+            application.getDocument().addDocumentListener(new DocumentListener() {
+                private void handle(DocumentEvent e) {
+                    if (application.getText().length() == 0) {
+                        useDefault.setSelected(true);
+                    } else {
+                        other.setSelected(true);
+                    }
+                }
+                public void insertUpdate(DocumentEvent e) {
+                    handle(e);
+                }
+
+                public void removeUpdate(DocumentEvent documentEvent) {
+                    handle(documentEvent);
+                }
+
+                public void changedUpdate(DocumentEvent documentEvent) {
+                    handle(documentEvent);
+                }
+            });
+        }
+
+        if (dParent != null)
+            diag = new JDialog(dParent, Globals.lang("Edit file type"), true);
+        else
+            diag = new JDialog(fParent, Globals.lang("Edit file type"), true);
+        diag.getContentPane().add(builder.getPanel(), BorderLayout.CENTER);
+        diag.getContentPane().add(bb.getPanel(), BorderLayout.SOUTH);
+        diag.pack();
+
+        BrowseListener browse = new BrowseListener(diag, application);
+        browseBut.addActionListener(browse);
+
+        if (dParent != null)
+            diag.setLocationRelativeTo(dParent);
+        else
+            diag.setLocationRelativeTo(fParent);
+        //Util.placeDialog(diag, parent);
+
+        setValues(entry);
+    }
+
+    public void setEntry(ExternalFileType entry) {
+        this.entry = entry;
+        setValues(entry);
+    }
+
+    public void setVisible(boolean visible) {
+        if (visible)
+            okPressed = false;
+        diag.setVisible(visible);
+    }
+
+    public void setValues(ExternalFileType entry) {
+        name.setText(entry.getName());
+        extension.setText(entry.getExtension());
+        application.setText(entry.getOpenWith());
+        icon.setIcon(entry.getIcon());
+        if (true && (application.getText().length() == 0))
+            useDefault.setSelected(true);
+        else
+            other.setSelected(true);
+    }
+
+    public void storeSettings(ExternalFileType entry) {
+        entry.setName(name.getText().trim());
+        entry.setExtension(extension.getText().trim());
+        if (!Globals.ON_WIN) {
+            entry.setOpenWith(application.getText().trim());
+        } else {
+            // On Windows, store application as empty if the "Default" option is selected,
+            // or if the application name is empty:
+            if (useDefault.isSelected() || (application.getText().trim().length() == 0))
+                entry.setOpenWith("");
+            else
+                entry.setOpenWith(application.getText().trim());
+        }
+    }
+
+    public boolean okPressed() {
+        return okPressed;
+    }
+
+    class BrowseListener implements ActionListener {
+        private JDialog parent;
+        private JTextField comp;
+
+        public BrowseListener(JDialog parent, JTextField comp) {
+            this.parent = parent;
+            this.comp = comp;
+        }
+
+        public void actionPerformed(ActionEvent e) {
+            File initial = new File(comp.getText().trim());
+            if (comp.getText().trim().length() == 0) {
+                // Nothing in the field. Go to the last file dir used:
+                initial = new File(Globals.prefs.get("fileWorkingDirectory"));
+            }
+            String chosen = Globals.getNewFile(/*parent*/null, initial, Globals.NONE,
+                JFileChooser.OPEN_DIALOG, false);
+            if (chosen != null) {
+                File newFile = new File(chosen);
+                // Store the directory for next time:
+                Globals.prefs.put("fileWorkingDirectory", newFile.getParent());
+                comp.setText(newFile.getPath());
+                comp.requestFocus();
+            }
+        }
+    }
+}
diff --git a/src/java/net/sf/jabref/external/FileLinksUpgradeWarning.java b/src/java/net/sf/jabref/external/FileLinksUpgradeWarning.java
new file mode 100644
index 0000000..85370e3
--- /dev/null
+++ b/src/java/net/sf/jabref/external/FileLinksUpgradeWarning.java
@@ -0,0 +1,203 @@
+package net.sf.jabref.external;
+
+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;
+
+/**
+ * This class defines the warning that can be offered when opening a pre-2.3
+ * JabRef file into a later version. This warning mentions the new external file
+ * link system in this version of JabRef, and offers to:
+ *
+ * * upgrade old-style PDF/PS links into the "file" field
+ * * modify General fields to show "file" instead of "pdf" / "ps"
+ * * modify table column settings to show "file" instead of "pdf" / "ps"
+ */
+public class FileLinksUpgradeWarning implements PostOpenAction {
+
+    private static final String[] FIELDS_TO_LOOK_FOR = new String[] {"pdf", "ps"};
+
+    /**
+     * This method should be performed if the major/minor versions recorded in the ParserResult
+     * are less than or equal to 2.2.
+     * @param pr
+     * @return true if the file was written by a jabref version <=2.2
+     */
+    public boolean isActionNecessary(ParserResult pr) {
+        // First check if this warning is disabled:
+        if (!Globals.prefs.getBoolean("showFileLinksUpgradeWarning"))
+            return false;
+        if (pr.getJabrefMajorVersion() < 0)
+            return false; // non-JabRef file
+        if (pr.getJabrefMajorVersion() < 2)
+            return true; // old
+        if (pr.getJabrefMajorVersion() > 2)
+            return false; // wow, did we ever reach version 3?
+        return (pr.getJabrefMinorVersion() <= 2);
+    }
+
+    /**
+     * This method presents a dialog box explaining and offering to make the
+     * changes. If the user confirms, the changes are performed.
+     * @param panel
+     * @param pr
+     */
+    public void performAction(BasePanel panel, ParserResult pr) {
+        // Find out which actions should be offered:
+        // Only offer to change Preferences if file column is not already visible:
+        boolean offerChangeSettings = !Globals.prefs.getBoolean("fileColumn");
+        // Only offer to upgrade links if the pdf/ps fields are used:
+        boolean offerChangeDatabase = linksFound(pr.getDatabase(), FIELDS_TO_LOOK_FOR);
+        // If the "file" directory is not set, offer to migrate pdf/ps dir:
+        boolean offerSetFileDir = !Globals.prefs.hasKey(GUIGlobals.FILE_FIELD+"Directory")
+                && (Globals.prefs.hasKey("pdfDirectory") || Globals.prefs.hasKey("psDirectory"));
+
+        if (!offerChangeDatabase && !offerChangeSettings && !offerSetFileDir)
+                    return; // Nothing to do, just return.
+                
+        JCheckBox changeSettings = new JCheckBox(Globals.lang("Change table column and General fields settings to use the new feature"),
+                offerChangeSettings);
+        JCheckBox changeDatabase = new JCheckBox(Globals.lang("Upgrade old external file links to use the new feature"),
+                offerChangeDatabase);
+        JCheckBox setFileDir = new JCheckBox(Globals.lang("Set main external file directory")+":", offerSetFileDir);
+        JTextField fileDir = new JTextField(30);
+        JCheckBox doNotShowDialog = new JCheckBox(Globals.lang("Do not show these options in the future"),
+                false);
+
+        StringBuilder sb = new StringBuilder("<html>");
+        sb.append(Globals.lang("This database was written using an older version of JabRef."));
+        sb.append("<br>");
+        sb.append(Globals.lang("The current version features a new way of handling links to external files.<br>"
+            +"To take advantage of this, your links must be changed into the new format, and<br>"
+            +"JabRef must be configured to show the new links."));
+        sb.append("<p>");
+        sb.append(Globals.lang("Do you want JabRef to do the following operations?"));
+        sb.append("</html>");
+
+        JPanel message = new JPanel();
+        DefaultFormBuilder b = new DefaultFormBuilder(message,
+                new FormLayout("left:pref", ""));
+        b.append(new JLabel(sb.toString()));
+        b.nextLine();
+        if (offerChangeSettings) {
+            b.append(changeSettings);
+            b.nextLine();
+        }
+        if (offerChangeDatabase) {
+            b.append(changeDatabase);
+            b.nextLine();
+        }
+        if (offerSetFileDir) {
+            if (Globals.prefs.hasKey("pdfDirectory"))
+                fileDir.setText(Globals.prefs.get("pdfDirectory"));
+            else
+                fileDir.setText(Globals.prefs.get("psDirectory"));
+            JPanel pan = new JPanel();
+            pan.add(setFileDir);
+            pan.add(fileDir);
+            JButton browse = new JButton(Globals.lang("Browse"));
+            browse.addActionListener(new BrowseAction(null, fileDir, true));
+            pan.add(browse);
+            b.append(pan);
+            b.nextLine();
+        }
+        b.append("");
+        b.nextLine();
+        b.append(doNotShowDialog);
+
+        int answer = JOptionPane.showConfirmDialog(panel.frame(),
+                message, Globals.lang("Upgrade file"), JOptionPane.YES_NO_OPTION);
+        if (doNotShowDialog.isSelected())
+            Globals.prefs.putBoolean("showFileLinksUpgradeWarning", false);
+
+        if (answer == JOptionPane.YES_OPTION)
+            makeChanges(panel, pr, changeSettings.isSelected(), changeDatabase.isSelected(),
+                    setFileDir.isSelected() ? fileDir.getText() : null);
+    }
+
+    /**
+     * Check the database to find out whether any of a set of fields are used
+     * for any of the entries.
+     * @param database The bib database.
+     * @param fields The set of fields to look for.
+     * @return true if at least one of the given fields is set in at least one entry,
+     *  false otherwise.
+     */
+    public boolean linksFound(BibtexDatabase database, String[] fields) {
+        for (Iterator iterator = database.getEntries().iterator(); iterator.hasNext();) {
+            BibtexEntry entry = (BibtexEntry)iterator.next();
+            for (int i = 0; i < fields.length; i++) {
+                if (entry.getField(fields[i]) != null)
+                    return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * This method performs the actual changes.
+     * @param panel
+     * @param pr
+     * @param fileDir The path to the file directory to set, or null if it should not be set.
+     */
+    public void makeChanges(BasePanel panel, ParserResult pr, boolean upgradePrefs,
+                            boolean upgradeDatabase, String fileDir) {
+
+        if (upgradeDatabase) {
+            // Update file links links in the database:
+            NamedCompound ce = Util.upgradePdfPsToFile(pr.getDatabase(), FIELDS_TO_LOOK_FOR);
+            panel.undoManager.addEdit(ce);
+            panel.markBaseChanged();
+        }
+
+        if (fileDir != null) {
+            Globals.prefs.put(GUIGlobals.FILE_FIELD+"Directory", fileDir);
+        }
+
+        if (upgradePrefs) {
+            // Exchange table columns:
+            Globals.prefs.putBoolean("pdfColumn", Boolean.FALSE);
+            Globals.prefs.putBoolean("fileColumn", Boolean.TRUE);
+
+            // Modify General fields if necessary:
+            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();
+                    //System.out.println(field);
+                    if (field.equals(GUIGlobals.FILE_FIELD)) {
+                        found = true;
+                        break outer;
+                    }
+                }
+            }
+            // If we didn't find the file field, insert it at the bottom of the first tab:
+            if (!found) {
+                String gfs = Globals.prefs.get(Globals.prefs.CUSTOM_TAB_FIELDS+"0");
+                System.out.println(gfs);
+                StringBuffer sb = new StringBuffer(gfs);
+                if (gfs.length() > 0)
+                    sb.append(";");
+                sb.append(GUIGlobals.FILE_FIELD);
+                Globals.prefs.put(Globals.prefs.CUSTOM_TAB_FIELDS+"0", sb.toString());
+                Globals.prefs.updateEntryEditorTabList();
+                panel.frame().removeCachedEntryEditors();
+            }
+            panel.frame().setupAllTables();
+        }
+    }
+
+}
diff --git a/src/java/net/sf/jabref/external/PushToApplicationButton.java b/src/java/net/sf/jabref/external/PushToApplicationButton.java
index bb870d3..e97e641 100644
--- a/src/java/net/sf/jabref/external/PushToApplicationButton.java
+++ b/src/java/net/sf/jabref/external/PushToApplicationButton.java
@@ -43,7 +43,7 @@ public class PushToApplicationButton implements ActionListener {
       applications.add(new PushToEmacs());
       applications.add(new PushToWinEdt());
       applications.add(new PushToLatexEditor());
-
+      applications.add(new PushToVim());
     }
 
 
diff --git a/src/java/net/sf/jabref/external/PushToLatexEditor.java b/src/java/net/sf/jabref/external/PushToLatexEditor.java
index cb5e052..dc5da9a 100644
--- a/src/java/net/sf/jabref/external/PushToLatexEditor.java
+++ b/src/java/net/sf/jabref/external/PushToLatexEditor.java
@@ -18,6 +18,7 @@ import java.io.IOException;
 public class PushToLatexEditor implements PushToApplication {
 
     private boolean couldNotCall=false;
+    private boolean notDefined=false;
 
     public String getName() {
         return Globals.menuTitle("Insert selected citations into LatexEditor");
@@ -42,9 +43,15 @@ public class PushToLatexEditor implements PushToApplication {
     public void pushEntries(BibtexEntry[] entries, String keyString) {
 
         couldNotCall = false;
+        notDefined = false;
 
         String led = Globals.prefs.get("latexEditorPath");
 
+        if ((led == null) || (led.trim().length() == 0)) {
+            notDefined = true;
+            return;
+        }
+
         try {
             StringBuffer toSend = new StringBuffer("-i \\")
                     .append(Globals.prefs.get("citeCommand")).append("{")
@@ -61,7 +68,11 @@ public class PushToLatexEditor implements PushToApplication {
     }
 
     public void operationCompleted(BasePanel panel) {
-        if (couldNotCall) {
+        if (notDefined) {
+            panel.output(Globals.lang("Error") + ": "+
+                    Globals.lang("Path to %0 not defined", getApplicationName())+".");
+        }
+        else if (couldNotCall) {
             panel.output(Globals.lang("Error") + ": " + Globals.lang("Could not call executable") + " '"
                     +Globals.prefs.get("latexEditorPath") + "'.");
         }
diff --git a/src/java/net/sf/jabref/external/PushToVim.java b/src/java/net/sf/jabref/external/PushToVim.java
new file mode 100644
index 0000000..16f65dd
--- /dev/null
+++ b/src/java/net/sf/jabref/external/PushToVim.java
@@ -0,0 +1,109 @@
+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 javax.swing.*;
+import java.io.InputStream;
+import java.io.IOException;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: alver
+ * Date: Mar 7, 2007
+ * Time: 6:55:56 PM
+ * To change this template use File | Settings | File Templates.
+ */
+public class PushToVim implements PushToApplication {
+
+    private boolean couldNotConnect=false, couldNotRunClient=false;
+
+    public String getName() {
+        return Globals.menuTitle("Insert selected citations into Vim") ;
+    }
+
+    public String getApplicationName() {
+        return "Vim";
+    }
+
+    public String getTooltip() {
+        return Globals.lang("Push selection to Vim");
+    }
+
+    public Icon getIcon() {
+        return GUIGlobals.getImage("vim");
+    }
+
+    public String getKeyStrokeName() {
+        return null;
+    }
+
+    public void pushEntries(BibtexEntry[] entries, String keys) {
+
+        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") +
+                       "{" + keys + "}"};
+
+            final Process p = Runtime.getRuntime().exec(com);
+
+            Runnable errorListener = new Runnable() {
+                public void run() {
+                    InputStream out = p.getErrorStream();
+                    int c;
+                    StringBuffer sb = new StringBuffer();
+                    try {
+                        while ((c = out.read()) != -1)
+                            sb.append((char) c);
+                    } catch (IOException e) {
+                        e.printStackTrace();
+                    }
+                    // Error stream has been closed. See if there were any errors:
+                    if (sb.toString().trim().length() > 0) {
+			System.out.println(sb.toString());
+                        couldNotConnect = true;
+                        return;
+                    }
+                }
+            };
+            Thread t = new Thread(errorListener);
+            t.start();
+            t.join();
+        }
+        catch (IOException excep) {
+            couldNotRunClient = true;
+            return;
+        } catch (InterruptedException e) {
+            e.printStackTrace();
+        }
+
+    }
+
+
+    public void operationCompleted(BasePanel panel) {
+        if (couldNotConnect)
+            JOptionPane.showMessageDialog(
+                panel.frame(),
+                "<HTML>"+
+                Globals.lang("Could not connect to Vim server. Make sure that "
+                +"Vim is running<BR>with correct server name."
+                +"</HTML>"),
+                Globals.lang("Error"), JOptionPane.ERROR_MESSAGE);
+        else if (couldNotRunClient)
+            JOptionPane.showMessageDialog(
+                panel.frame(),
+                Globals.lang("Could not run the 'vim' program."),
+                Globals.lang("Error"), JOptionPane.ERROR_MESSAGE);
+        else {
+            panel.output(Globals.lang("Pushed citations to Vim"));
+        }
+    }
+
+    public boolean requiresBibtexKeys() {
+        return true;
+    }
+}
diff --git a/src/java/net/sf/jabref/external/PushToWinEdt.java b/src/java/net/sf/jabref/external/PushToWinEdt.java
index 8d5d191..7fbddf1 100644
--- a/src/java/net/sf/jabref/external/PushToWinEdt.java
+++ b/src/java/net/sf/jabref/external/PushToWinEdt.java
@@ -20,6 +20,7 @@ import java.io.IOException;
 public class PushToWinEdt implements PushToApplication {
 
     private boolean couldNotCall=false;
+    private boolean notDefined=false;
 
     public String getName() {
         return Globals.lang("Insert selected citations into WinEdt");
@@ -44,9 +45,14 @@ public class PushToWinEdt implements PushToApplication {
     public void pushEntries(BibtexEntry[] entries, String keyString) {
 
         couldNotCall = false;
+        notDefined = false;
 
         String winEdt = Globals.prefs.get("winEdtPath");
-        //winEdt = "osascript";
+        if ((winEdt == null) || (winEdt.trim().length() == 0)) {
+            notDefined = true;
+            return;
+        }
+
         try {
             StringBuffer toSend = new StringBuffer("\"[InsText('\\")
                     .append(Globals.prefs.get("citeCommand")).append("{")
@@ -65,7 +71,11 @@ public class PushToWinEdt implements PushToApplication {
     }
 
     public void operationCompleted(BasePanel panel) {
-        if (couldNotCall) {
+        if (notDefined) {
+            panel.output(Globals.lang("Error") + ": "+
+                    Globals.lang("Path to %0 not defined", getApplicationName())+".");
+        }
+        else if (couldNotCall) {
             panel.output(Globals.lang("Error") + ": " + Globals.lang("Could not call executable") + " '"
                     +Globals.prefs.get("winEdtPath") + "'.");
         }
diff --git a/src/java/net/sf/jabref/external/SynchronizeFileField.java b/src/java/net/sf/jabref/external/SynchronizeFileField.java
new file mode 100644
index 0000000..6010737
--- /dev/null
+++ b/src/java/net/sf/jabref/external/SynchronizeFileField.java
@@ -0,0 +1,329 @@
+package net.sf.jabref.external;
+
+import net.sf.jabref.*;
+import net.sf.jabref.gui.*;
+import net.sf.jabref.undo.NamedCompound;
+import net.sf.jabref.undo.UndoableFieldChange;
+
+import javax.swing.*;
+import java.util.Collection;
+import java.util.ArrayList;
+import java.util.Set;
+import java.util.HashSet;
+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;
+
+/**
+ * This action goes through all selected entries in the BasePanel, and attempts to autoset the
+ * given external file (pdf, ps, ...) based on the same algorithm used for the "Auto" button in
+ * EntryEditor.
+ */
+public class SynchronizeFileField extends AbstractWorker {
+
+    private String fieldName = GUIGlobals.FILE_FIELD;
+    private BasePanel panel;
+    private BibtexEntry[] sel = null;
+    private SynchronizeFileField.OptionsDialog optDiag = null;
+
+    Object[] brokenLinkOptions =
+            {Globals.lang("Ignore"), Globals.lang("Assign new file"), Globals.lang("Clear field"),
+                    Globals.lang("Quit synchronization")};
+
+    private boolean goOn = true, autoSet = true, overWriteAllowed = true, checkExisting = true;
+
+    private int skipped = 0, brokenLinks = 0, entriesChangedCount = 0;
+
+    public SynchronizeFileField(BasePanel panel) {
+        this.panel = panel;
+    }
+
+    public void init() {
+        Collection col = panel.database().getEntries();
+        sel = new BibtexEntry[col.size()];
+        sel = (BibtexEntry[]) col.toArray(sel);
+
+        // Ask about rules for the operation:
+        if (optDiag == null)
+            optDiag = new SynchronizeFileField.OptionsDialog(panel.frame(), fieldName);
+        Util.placeDialog(optDiag, panel.frame());
+        optDiag.setVisible(true);
+        if (optDiag.canceled()) {
+            goOn = false;
+            return;
+        }
+        autoSet = !optDiag.autoSetNone.isSelected();
+        overWriteAllowed = optDiag.autoSetAll.isSelected();
+        checkExisting = optDiag.checkLinks.isSelected();
+
+        panel.output(Globals.lang("Synchronizing %0 links...", fieldName.toUpperCase()));
+    }
+
+    public void run() {
+        if (!goOn) {
+            panel.output(Globals.lang("No entries selected."));
+            return;
+        }
+        panel.frame().setProgressBarValue(0);
+        panel.frame().setProgressBarVisible(true);
+        int weightAutoSet = 10; // autoSet takes 10 (?) times longer than checkExisting
+        int progressBarMax = (autoSet ? weightAutoSet * sel.length : 0)
+                + (checkExisting ? sel.length : 0);
+        panel.frame().setProgressBarMaximum(progressBarMax);
+        int progress = 0;
+        skipped = 0;
+        brokenLinks = 0;
+        final NamedCompound ce = new NamedCompound(Globals.lang("Autoset %0 field", fieldName));
+
+        //final OpenFileFilter off = Util.getFileFilterForField(fieldName);
+
+        //ExternalFilePanel extPan = new ExternalFilePanel(fieldName, panel.metaData(), null, null, off);
+        //FieldTextField editor = new FieldTextField(fieldName, "", false);
+
+        // Find the default directory for this field type:
+        String dir = panel.metaData().getFileDirectory(GUIGlobals.FILE_FIELD);
+        Set<BibtexEntry> changedEntries = new HashSet<BibtexEntry>();
+
+        // First we try to autoset fields
+        if (autoSet) {
+            Collection<BibtexEntry> entries = new ArrayList<BibtexEntry>();
+            for (int i = 0; i < sel.length; i++) {
+                entries.add(sel[i]);
+            }
+            // Start the autosetting process:
+
+            Thread t = FileListEditor.autoSetLinks(entries, ce, changedEntries);
+            // Wait for the autosetting to finish:
+            try {
+                t.join();
+            } catch (InterruptedException e) {
+                e.printStackTrace();
+            }
+            /*
+                progress += weightAutoSet;
+                panel.frame().setProgressBarValue(progress);
+
+                Object old = sel[i].getField(fieldName);
+                FileListTableModel tableModel = new FileListTableModel();
+                if (old != null)
+                    tableModel.setContent((String)old);
+                Thread t = FileListEditor.autoSetLinks(sel[i], tableModel, null, null);
+
+                if (!tableModel.getStringRepresentation().equals(old)) {
+                    String toSet = tableModel.getStringRepresentation();
+                    if (toSet.length() == 0)
+                        toSet = null;
+                    ce.addEdit(new UndoableFieldChange(sel[i], fieldName, old, toSet));
+                    sel[i].setField(fieldName, toSet);
+                    entriesChanged++;
+                }
+            }    */
+
+        }
+        progress += sel.length*weightAutoSet;
+        panel.frame().setProgressBarValue(progress);
+        //System.out.println("Done setting");
+        // The following loop checks all external links that are already set.
+        if (checkExisting) {
+            mainLoop:
+            for (int i = 0; i < sel.length; i++) {
+                panel.frame().setProgressBarValue(progress++);
+                final Object old = sel[i].getField(fieldName);
+                // Check if a extension is set:
+                if ((old != null) && !old.equals("")) {
+                    FileListTableModel tableModel = new FileListTableModel();
+                    tableModel.setContent((String)old);
+                    for (int j=0; j<tableModel.getRowCount(); j++) {
+                        FileListEntry flEntry = tableModel.getEntry(j);
+                        // Test whether the file type is "remote", which e.g. is the case
+                        // for the URL file type. If it is, ignore this link:
+                        if (flEntry.getType().isRemote())
+                                continue;
+                        // Get an absolute path representation:
+                        File file = Util.expandFilename(flEntry.getLink(), 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[]{flEntry.getLink(), sel[i].getCiteKey()}),
+                                Globals.lang("Broken link"),
+                                JOptionPane.YES_NO_CANCEL_OPTION,
+                                JOptionPane.QUESTION_MESSAGE, null, brokenLinkOptions, brokenLinkOptions[0]);
+                            switch (answer) {
+                                case 1:
+                                    // Assign new file.
+                                    FileListEntryEditor flEditor = new FileListEntryEditor
+                                            (panel.frame(), flEntry, false, panel.metaData());
+                                    flEditor.setVisible(true);
+                                    break;
+                                case 2:
+                                    // Clear field
+                                    tableModel.removeEntry(j);
+                                    j--; // Step back in the iteration, because we removed an entry.
+                                    break;
+                                case 3:
+                                    // Cancel
+                                    break mainLoop;
+                            }
+                            brokenLinks++;
+                        }
+
+                    }
+                    if (!tableModel.getStringRepresentation().equals(old)) {
+                        // The table has been modified. Store the change:
+                        String toSet = tableModel.getStringRepresentation();
+                        if (toSet.length() == 0)
+                            toSet = null;
+                        ce.addEdit(new UndoableFieldChange(sel[i], fieldName, old,
+                                toSet));
+                        sel[i].setField(fieldName, toSet);
+                        changedEntries.add(sel[i]);
+                        //System.out.println("Changed to: "+tableModel.getStringRepresentation());
+                    }
+
+
+                }
+            }
+        }
+
+        entriesChangedCount = changedEntries.size();
+	//for (BibtexEntry entr : changedEntries)
+	//    System.out.println(entr.getCiteKey());
+        if (entriesChangedCount > 0) {
+            // Add the undo edit:
+            ce.end();
+            panel.undoManager.addEdit(ce);
+            
+        }
+    }
+
+
+    public void update() {
+        if (!goOn)
+            return;
+
+        panel.output(Globals.lang("Finished synchronizing %0 links. Entries changed%c %1.",
+                new String[]{fieldName.toUpperCase(), String.valueOf(entriesChangedCount)}));
+        panel.frame().setProgressBarVisible(false);
+        if (entriesChangedCount > 0) {
+            panel.markBaseChanged();
+        }
+    }
+
+    static class OptionsDialog extends JDialog {
+        JRadioButton autoSetUnset, autoSetAll, autoSetNone;
+        JCheckBox checkLinks;
+        JButton ok = new JButton(Globals.lang("Ok")),
+                cancel = new JButton(Globals.lang("Cancel"));
+        JLabel description;
+        private boolean canceled = true;
+        private String fieldName;
+
+        public OptionsDialog(JFrame parent, String fieldName) {
+            super(parent, Globals.lang("Synchronize %0 links", fieldName.toUpperCase()), true);
+            final String fn = Globals.lang("file");
+            this.fieldName = fieldName;
+            ok.addActionListener(new ActionListener() {
+                public void actionPerformed(ActionEvent e) {
+                    canceled = false;
+                    dispose();
+                }
+            });
+
+            Action closeAction = new AbstractAction() {
+                public void actionPerformed(ActionEvent e) {
+                    dispose();
+                }
+            };
+
+
+            cancel.addActionListener(closeAction);
+
+            InputMap im = cancel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
+            ActionMap am = cancel.getActionMap();
+            im.put(Globals.prefs.getKey("Close dialog"), "close");
+            am.put("close", closeAction);
+
+            autoSetUnset = new JRadioButton(Globals.lang("Autoset %0 links. Do not overwrite existing links.", fn), true);
+            autoSetAll = new JRadioButton(Globals.lang("Autoset %0 links. Allow overwriting existing links.", fn), false);
+            autoSetNone = new JRadioButton(Globals.lang("Do not autoset"), false);
+            checkLinks = new JCheckBox(Globals.lang("Check existing %0 links", fn), true);
+            ButtonGroup bg = new ButtonGroup();
+            bg.add(autoSetUnset);
+            bg.add(autoSetNone);
+            bg.add(autoSetAll);
+            FormLayout layout = new FormLayout("fill:pref", "");
+            DefaultFormBuilder builder = new DefaultFormBuilder(layout);
+            description = new JLabel("<HTML>" +
+                    Globals.lang(//"This function helps you keep your external %0 links up-to-date." +
+                            "Attempt to autoset %0 links for your entries. Autoset works if "
+                                    + "a %0 file in your %0 directory or a subdirectory<BR>is named identically to an entry's BibTeX key, plus extension.", fn)
+                    + "</HTML>");
+            //            name.setVerticalAlignment(JLabel.TOP);
+            builder.appendSeparator(Globals.lang("Autoset"));
+            builder.append(description);
+            builder.nextLine();
+            builder.append(autoSetUnset);
+            builder.nextLine();
+            builder.append(autoSetAll);
+            builder.nextLine();
+            builder.append(autoSetNone);
+            builder.nextLine();
+            builder.appendSeparator(Globals.lang("Check links"));
+
+            description = new JLabel("<HTML>" +
+                    Globals.lang("This makes JabRef look up each %0 extension and check if the file exists. If not, you will "
+                            + "be given options<BR>to resolve the problem.", fn)
+                    + "</HTML>");
+            builder.append(description);
+            builder.nextLine();
+            builder.append(checkLinks);
+            builder.nextLine();
+            builder.appendSeparator();
+
+
+            JPanel main = builder.getPanel();
+            main.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
+
+            ButtonBarBuilder bb = new ButtonBarBuilder();
+            bb.addGlue();
+            bb.addGridded(ok);
+            bb.addGridded(cancel);
+            bb.addGlue();
+            getContentPane().add(main, BorderLayout.CENTER);
+            getContentPane().add(bb.getPanel(), BorderLayout.SOUTH);
+
+            pack();
+        }
+
+        public void setVisible(boolean visible) {
+            if (visible)
+                canceled = true;
+
+            String dir = Globals.prefs.get(fieldName + "Directory");
+            if ((dir == null) || (dir.trim().length() == 0)) {
+
+                autoSetNone.setSelected(true);
+                autoSetNone.setEnabled(false);
+                autoSetAll.setEnabled(false);
+                autoSetUnset.setEnabled(false);
+            } else {
+                autoSetNone.setEnabled(true);
+                autoSetAll.setEnabled(true);
+                autoSetUnset.setEnabled(true);
+            }
+
+            new FocusRequester(ok);
+            super.setVisible(visible);
+
+        }
+
+        public boolean canceled() {
+            return canceled;
+        }
+    }
+}
diff --git a/src/java/net/sf/jabref/external/UnknownExternalFileType.java b/src/java/net/sf/jabref/external/UnknownExternalFileType.java
new file mode 100644
index 0000000..761958c
--- /dev/null
+++ b/src/java/net/sf/jabref/external/UnknownExternalFileType.java
@@ -0,0 +1,16 @@
+package net.sf.jabref.external;
+
+import net.sf.jabref.GUIGlobals;
+
+/**
+ * This subclass of ExternalFileType is used to mark types that are unknown.
+ * This can be the case when a database is loaded which contains links to files
+ * of a type that has not been defined on this JabRef instance.
+ */
+public class UnknownExternalFileType extends ExternalFileType {
+
+    public UnknownExternalFileType(String name) {
+        super(name, "", "", "unknown");
+    }
+    
+}
diff --git a/src/java/net/sf/jabref/external/UpgradeExternalLinks.java b/src/java/net/sf/jabref/external/UpgradeExternalLinks.java
new file mode 100644
index 0000000..6372c3e
--- /dev/null
+++ b/src/java/net/sf/jabref/external/UpgradeExternalLinks.java
@@ -0,0 +1,33 @@
+package net.sf.jabref.external;
+
+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.
+ */
+public class UpgradeExternalLinks extends BaseAction {
+
+    private BasePanel panel;
+
+    public UpgradeExternalLinks(BasePanel panel) {
+
+        this.panel = panel;
+    }
+
+    public void action() throws Throwable {
+
+        int answer = JOptionPane.showConfirmDialog(panel.frame(),
+                Globals.lang("This will move all external links from the 'pdf' and 'ps' fields "
+                    +"into the '%0' field. Proceed?", GUIGlobals.FILE_FIELD), Globals.lang("Upgrade external links"),
+                JOptionPane.YES_NO_OPTION);
+        if (answer !=  JOptionPane.YES_OPTION)
+            return;
+        NamedCompound ce = Util.upgradePdfPsToFile(panel.database(), new String[] {"pdf", "ps"});
+        panel.undoManager.addEdit(ce);
+        panel.markBaseChanged();
+        panel.output(Globals.lang("Upgraded links."));
+    }
+}
diff --git a/src/java/net/sf/jabref/external/WriteXMPAction.java b/src/java/net/sf/jabref/external/WriteXMPAction.java
index 64e3346..7a04291 100644
--- a/src/java/net/sf/jabref/external/WriteXMPAction.java
+++ b/src/java/net/sf/jabref/external/WriteXMPAction.java
@@ -19,10 +19,10 @@ import javax.swing.JOptionPane;
 import javax.swing.JPanel;
 import javax.swing.JScrollPane;
 import javax.swing.JTextArea;
-import javax.swing.border.BevelBorder;
 
 import net.sf.jabref.AbstractWorker;
 import net.sf.jabref.BasePanel;
+import net.sf.jabref.BibtexDatabase;
 import net.sf.jabref.BibtexEntry;
 import net.sf.jabref.FocusRequester;
 import net.sf.jabref.Globals;
@@ -37,7 +37,7 @@ import com.jgoodies.forms.builder.ButtonBarBuilder;
  * to write the XMP data to the external pdf.
  * 
  * @author $Author: coezbek $
- * @version $Revision: 1.2 $ ($Date: 2006/08/26 21:24:39 $)
+ * @version $Revision: 1.3 $ ($Date: 2007/06/13 01:39:50 $)
  * 
  */
 public class WriteXMPAction extends AbstractWorker {
@@ -45,6 +45,8 @@ public class WriteXMPAction extends AbstractWorker {
 	BasePanel panel;
 
 	BibtexEntry[] entries;
+	
+	BibtexDatabase database;
 
 	OptionsDialog optDiag;
 
@@ -63,7 +65,8 @@ public class WriteXMPAction extends AbstractWorker {
 
 		if (entries.length == 0) {
 
-			entries = (BibtexEntry[]) panel.getDatabase().getEntries().toArray(new BibtexEntry[0]);
+			database = panel.getDatabase();
+			entries = database.getEntries().toArray(new BibtexEntry[]{});
 
 			if (entries.length == 0) {
 
@@ -124,7 +127,7 @@ public class WriteXMPAction extends AbstractWorker {
 				optDiag.progressArea.append("    " + file.getPath() + "\n");
 			} else {
 				try {
-					XMPUtil.writeXMP(file, entry);
+					XMPUtil.writeXMP(file, entry, database);
 					optDiag.progressArea.append("  " + Globals.lang("Ok") + ".\n");
 					entriesChanged++;
 				} catch (Exception e) {
diff --git a/src/java/net/sf/jabref/groups/EntryTableTransferHandler.java b/src/java/net/sf/jabref/groups/EntryTableTransferHandler.java
index 8eb2182..55eb753 100644
--- a/src/java/net/sf/jabref/groups/EntryTableTransferHandler.java
+++ b/src/java/net/sf/jabref/groups/EntryTableTransferHandler.java
@@ -316,7 +316,7 @@ public class EntryTableTransferHandler extends TransferHandler {
 			if ((index >= 0) && (index < fileNames[i].length())) {
 				extension = fileNames[i].substring(index + 1).toLowerCase();
 				// System.out.println(extension);
-				fileType = Globals.prefs.getExternalFileType(extension);
+				fileType = Globals.prefs.getExternalFileTypeByExt(extension);
 			}
 			if (extension.equals("bib")) {
 				File f = new File(fileNames[i]);
diff --git a/src/java/net/sf/jabref/gui/AutoCompleteListener.java b/src/java/net/sf/jabref/gui/AutoCompleteListener.java
new file mode 100644
index 0000000..7ca9197
--- /dev/null
+++ b/src/java/net/sf/jabref/gui/AutoCompleteListener.java
@@ -0,0 +1,181 @@
+package net.sf.jabref.gui;
+
+import javax.swing.text.JTextComponent;
+import javax.swing.text.BadLocationException;
+import java.awt.event.KeyAdapter;
+import java.awt.event.KeyEvent;
+
+/**
+ * Created by Morten O. Alver, 16 Feb. 2007
+ */
+public class AutoCompleteListener extends KeyAdapter {
+
+
+    AutoCompleter completer;
+    protected String toSetIn = null,
+            lastBeginning = null;
+    protected int lastCaretPosition = -1;
+    protected Object[] lastCompletions = null;
+    protected int lastShownCompletion = 0;
+
+    // These variables keep track of the situation from time to time.
+
+    public AutoCompleteListener(AutoCompleter completer) {
+        this.completer = completer;
+    }
+
+
+    public void keyPressed(KeyEvent e) {
+        if ((toSetIn != null) && (e.getKeyCode() == KeyEvent.VK_ENTER)) {
+            JTextComponent comp = (JTextComponent) e.getSource();
+            int end = comp.getSelectionEnd();
+            comp.select(end, end);
+            e.consume();
+            return;
+        }
+        // Cycle through alternative completions when user presses PGUP/PGDN:
+        else if ((e.getKeyCode() == KeyEvent.VK_PAGE_DOWN) && (lastCompletions != null)) {
+            cycle((JTextComponent) e.getSource(), 1);
+            e.consume();
+        }
+        else if ((e.getKeyCode() == KeyEvent.VK_PAGE_UP) && (lastCompletions != null)) {
+            cycle((JTextComponent) e.getSource(), -1);
+            e.consume();
+        }
+    }
+
+    private void cycle(JTextComponent comp, int increment) {
+        lastShownCompletion += increment;
+        if (lastShownCompletion >= lastCompletions.length)
+            lastShownCompletion = 0;
+        else if (lastShownCompletion < 0)
+            lastShownCompletion = lastCompletions.length-1;
+        String sno = (String)(lastCompletions[lastShownCompletion]);
+        toSetIn = sno.substring(lastBeginning.length());
+        StringBuffer alltext = new StringBuffer(comp.getText());
+        int deletedChars = comp.getSelectionEnd() - comp.getSelectionStart();
+        alltext.delete(comp.getSelectionStart(), comp.getSelectionEnd());
+        int cp = comp.getCaretPosition() - deletedChars;
+        alltext.insert(cp, toSetIn);
+        //Util.pr(alltext.toString());
+        comp.setText(alltext.toString());
+        comp.setCaretPosition(cp+toSetIn.length());
+        comp.select(cp, cp + sno.length() - lastBeginning.length());
+        lastCaretPosition = comp.getCaretPosition();
+    }
+
+    public void keyTyped(KeyEvent e) {
+        char ch = e.getKeyChar();
+        if (Character.isLetter(ch)) {
+            JTextComponent comp = (JTextComponent) e.getSource();
+            if ((toSetIn != null) && (toSetIn.length() > 1) &&
+                    (ch == toSetIn.charAt(1))) {
+                // User continues on the word that was suggested.
+                toSetIn = toSetIn.substring(1);
+                if (toSetIn.length() > 0) {
+                    int cp = comp.getCaretPosition();
+                    //comp.setCaretPosition(cp+1-toSetIn.);
+                    //Util.pr(cp-toSetIn.length()+" - "+cp);
+                    comp.select(cp + 1 - toSetIn.length(), cp);
+                    lastBeginning = lastBeginning + ch;
+
+                    e.consume();
+                    lastCaretPosition = comp.getCaretPosition();
+
+                    //Util.pr("'"+toSetIn+"'");
+
+                    if (toSetIn.length() < 2)
+                        toSetIn = null;
+                    return;
+                }
+            }
+
+            if ((toSetIn != null) && ((toSetIn.length() < 1) ||
+                    (ch != toSetIn.charAt(1)))) {
+                // User discontinues the word that was suggested.
+                lastBeginning = lastBeginning + ch;
+                Object[] completed =
+                        completer.complete(lastBeginning);
+                if ((completed != null) && (completed.length > 0)) {
+                    lastShownCompletion = 0;
+                    lastCompletions = completed;
+                    String sno = (String) (completed[0]);
+                    int lastLen = toSetIn.length() - 1;
+                    toSetIn = sno.substring(lastBeginning.length() - 1);
+                    String text = comp.getText();
+                    //Util.pr(""+lastLen);
+                    comp.setText(text.substring(0, lastCaretPosition - lastLen)
+                            + toSetIn
+                            + text.substring(lastCaretPosition));
+                    comp.select(lastCaretPosition + 1 - lastLen,
+                            lastCaretPosition + toSetIn.length() - lastLen);
+
+                    lastCaretPosition = comp.getCaretPosition();
+                    e.consume();
+                    return;
+                } else {
+                    toSetIn = null;
+                    return;
+                }
+            }
+
+
+            StringBuffer currentword = getCurrentWord(comp);
+            if (currentword == null)
+                return;
+            currentword.append(ch);
+            Object[] completed = completer.complete(currentword.toString());
+            int no = 0; // We use the first word in the array of completions.
+            if ((completed != null) && (completed.length > 0)) {
+                lastShownCompletion = 0;
+                lastCompletions = completed;
+                String sno = (String) (completed[no]);
+                toSetIn = sno.substring(currentword.length() - 1);
+                //Util.pr("AutoCompListener: Found "+completed[0]);
+                StringBuffer alltext = new StringBuffer(comp.getText());
+                int cp = comp.getCaretPosition();
+                alltext.insert(cp, toSetIn);
+                //Util.pr(alltext.toString());
+                comp.setText(alltext.toString());
+                comp.setCaretPosition(cp);
+                comp.select(cp + 1, cp + 1 + sno.length() - currentword.length());
+                e.consume();
+                lastCaretPosition = comp.getCaretPosition();
+                lastBeginning = currentword.toString();
+                return;
+            }
+        }
+        //Util.pr("#hm");
+        toSetIn = null;
+        lastCompletions = null;
+
+    }
+
+
+
+    protected StringBuffer getCurrentWord(JTextComponent comp) {
+        StringBuffer res = new StringBuffer();
+        String upToCaret;
+
+        try {
+            upToCaret = comp.getText(0, comp.getCaretPosition());
+            if ((comp.getCaretPosition() < comp.getText().length())
+                    && !Character.isWhitespace(comp.getText().charAt(comp.getCaretPosition())))
+                return null;
+            boolean found = false;
+            int piv = upToCaret.length() - 1;
+            while (!found && (piv >= 0)) {
+                if (Character.isWhitespace(upToCaret.charAt(piv)))
+                    found = true;
+                else piv--;
+            }
+            //if (piv < 0)
+            //piv = 0;
+            res.append(upToCaret.substring(piv + 1));
+            //Util.pr("AutoCompListener: "+res.toString());
+        } catch (BadLocationException ex) {
+        }
+
+        return res;
+    }
+}
diff --git a/src/java/net/sf/jabref/gui/AutoCompleter.java b/src/java/net/sf/jabref/gui/AutoCompleter.java
new file mode 100644
index 0000000..8cca0dc
--- /dev/null
+++ b/src/java/net/sf/jabref/gui/AutoCompleter.java
@@ -0,0 +1,67 @@
+package net.sf.jabref.gui;
+
+import net.sf.jabref.AuthorList;
+
+import java.util.TreeSet;
+import java.util.HashMap;
+import java.util.StringTokenizer;
+
+/**
+ * Created by Morten O. Alver, 16 Feb. 2007
+ */
+public class AutoCompleter {
+    final int SHORTEST_WORD = 4,
+            SHORTEST_TO_COMPLETE = 2;
+
+    private TreeSet words = new TreeSet();
+    private HashMap hm = new HashMap();
+    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.
+
+    public AutoCompleter(String fieldName) {
+        if (fieldName.equals("author") || fieldName.equals("editor"))
+            nameField = true;
+	else if (fieldName.equals("journal") || fieldName.equals("publisher"))
+	    entireField = true;
+    }
+
+    public void addWord(String word) {
+        if (word.length() >= SHORTEST_WORD)
+            words.add(word);
+    }
+
+    public void addAll(Object s) {
+        if (s == null)
+            return;
+        if (nameField) {
+            AuthorList list = AuthorList.getAuthorList(s.toString());
+            String processed = list.getAuthorsLastFirstAnds(false);
+            String[] names = processed.split(" and ");
+            for (int i = 0; i < names.length; i++) {
+                String name = names[i];
+                addWord(name);
+            }
+	} else if (entireField) {
+	    addWord(s.toString().trim());
+        } else {
+            StringTokenizer tok = new StringTokenizer(s.toString(), " .,\n");
+            while (tok.hasMoreTokens()) {
+                String word = tok.nextToken();
+                //Util.pr(word);
+                addWord(word);
+            }
+        }
+    }
+
+    public Object[] complete(String s) {
+
+        if (s.length() < SHORTEST_TO_COMPLETE)
+            return null;
+
+        char lastChar = s.charAt(s.length() - 1);
+        String ender = s.substring(0, s.length() - 1)
+                + Character.toString((char) (lastChar + 1));
+        return words.subSet(s, ender).toArray();
+    }
+}
diff --git a/src/java/net/sf/jabref/gui/CheckBoxFileChooser.java b/src/java/net/sf/jabref/gui/CheckBoxFileChooser.java
new file mode 100644
index 0000000..080ef09
--- /dev/null
+++ b/src/java/net/sf/jabref/gui/CheckBoxFileChooser.java
@@ -0,0 +1,104 @@
+/*
+  File: CheckBoxFileChooser.java
+
+  Copyright (c) 2006, The Cytoscape Consortium (www.cytoscape.org)
+
+  The Cytoscape Consortium is:
+  - Institute for Systems Biology
+  - University of California San Diego
+  - Memorial Sloan-Kettering Cancer Center
+  - Institut Pasteur
+  - Agilent Technologies
+
+  This library is free software; you can redistribute it and/or modify it
+  under the terms of the GNU Lesser General Public License as published
+  by the Free Software Foundation; either version 2.1 of the License, or
+  any later version.
+
+  This library is distributed in the hope that it will be useful, but
+  WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF
+  MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  The software and
+  documentation provided hereunder is on an "as is" basis, and the
+  Institute for Systems Biology and the Whitehead Institute
+  have no obligations to provide maintenance, support,
+  updates, enhancements or modifications.  In no event shall the
+  Institute for Systems Biology and the Whitehead Institute
+  be liable to any party for direct, indirect, special,
+  incidental or consequential damages, including lost profits, arising
+  out of the use of this software and its documentation, even if the
+  Institute for Systems Biology and the Whitehead Institute
+  have been advised of the possibility of such damage.  See
+  the GNU Lesser General Public License for more details.
+
+  You should have received a copy of the GNU Lesser General Public License
+  along with this library; if not, write to the Free Software Foundation,
+  Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+*/
+
+//-------------------------------------------------------------------------
+// $Revision$
+// $Date$
+// $Author$
+//-------------------------------------------------------------------------
+package net.sf.jabref.gui;
+
+import java.awt.*;
+import java.awt.event.*;
+
+//-------------------------------------------------------------------------
+import java.io.File;
+
+import javax.swing.*;
+import javax.swing.event.*;
+import javax.swing.filechooser.FileSystemView;
+
+
+//-------------------------------------------------------------------------
+/** extends JFileChooser by adding a JCheckBox at the bottom of the chooser
+ */
+public class CheckBoxFileChooser extends JFileChooser {
+	JCheckBox jcb;
+	boolean jcbFlag = false;
+	String jcbLabel;
+
+	/**
+	 * Creates a new CheckBoxFileChooser object.
+	 *
+	 * @param currentDirectory  DOCUMENT ME!
+	 * @param checkBoxLabel  DOCUMENT ME!
+	 */
+	public CheckBoxFileChooser(File currentDirectory, String checkBoxLabel) {
+		super(currentDirectory, (FileSystemView) null);
+		jcbLabel = checkBoxLabel;
+	}
+
+	protected JDialog createDialog(Component parent) throws HeadlessException {
+		JDialog jd = super.createDialog(parent);
+		jcb = new JCheckBox(jcbLabel);
+        jcb.setBorder(BorderFactory.createEmptyBorder(0,10,2,0));
+        jcb.setSelected(jcbFlag);
+		jcb.addItemListener(new CheckBoxListener());
+        Container contentPane = jd.getContentPane();
+		contentPane.add(jcb, BorderLayout.SOUTH);
+		jd.pack();
+
+		return jd;
+	}
+
+	/** inner class for listening to the JCheckBox jcb
+	 *  and updating the boolean jcbFlag when appropriate
+	 */
+	private class CheckBoxListener implements ItemListener {
+		public void itemStateChanged(ItemEvent e) {
+			if (e.getStateChange() == ItemEvent.SELECTED)
+				jcbFlag = true;
+			else if (e.getStateChange() == ItemEvent.DESELECTED)
+				jcbFlag = false;
+		}
+	}
+
+	/** method for accessing last state of JCheckBox jcb */
+	public boolean getCheckBoxState() {
+		return jcbFlag;
+	}
+}
\ No newline at end of file
diff --git a/src/java/net/sf/jabref/gui/DatabasePropertiesDialog.java b/src/java/net/sf/jabref/gui/DatabasePropertiesDialog.java
index 83d4478..f3ea022 100644
--- a/src/java/net/sf/jabref/gui/DatabasePropertiesDialog.java
+++ b/src/java/net/sf/jabref/gui/DatabasePropertiesDialog.java
@@ -1,10 +1,6 @@
 package net.sf.jabref.gui;
 
-import net.sf.jabref.BasePanel;
-
-import net.sf.jabref.Globals;
-import net.sf.jabref.MetaData;
-import net.sf.jabref.BrowseAction;
+import net.sf.jabref.*;
 
 import javax.swing.*;
 
@@ -31,8 +27,9 @@ public class DatabasePropertiesDialog extends JDialog {
     BasePanel panel = null;
     JComboBox encoding;
     JButton ok, cancel;
-    JTextField pdfDir = new JTextField(40), psDir = new JTextField(40);
-    String oldPdfVal="", oldPsVal=""; // Remember old values to see if they are changed.
+    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.
 
     public DatabasePropertiesDialog(JFrame parent) {
         super(parent, Globals.lang("Database properties"), false);
@@ -49,8 +46,10 @@ public class DatabasePropertiesDialog extends JDialog {
 
     public final void init(JFrame parent) {
 
+        JButton browseFile = new JButton(Globals.lang("Browse"));
         JButton browsePdf = new JButton(Globals.lang("Browse"));
         JButton browsePs = new JButton(Globals.lang("Browse"));
+        browseFile.addActionListener(new BrowseAction(parent, fileDir, true));
         browsePdf.addActionListener(new BrowseAction(parent, pdfDir, true));
         browsePs.addActionListener(new BrowseAction(parent, psDir, true));
 
@@ -62,6 +61,10 @@ public class DatabasePropertiesDialog extends JDialog {
         builder.nextLine();
         builder.appendSeparator(Globals.lang("Override default file directories"));
         builder.nextLine();
+        builder.append(Globals.lang("File directory"));
+        builder.append(fileDir);
+        builder.append(browseFile);
+        builder.nextLine();
         builder.append(Globals.lang("PDF directory"));
         builder.append(pdfDir);
         builder.append(browsePdf);
@@ -103,6 +106,15 @@ public class DatabasePropertiesDialog extends JDialog {
     public void setValues() {
         encoding.setSelectedItem(panel.getEncoding());
 
+        Vector 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());
+        }
+
         Vector pdfD = metaData.getData("pdfDirectory");
         if (pdfD == null)
             pdfDir.setText("");
@@ -122,6 +134,7 @@ public class DatabasePropertiesDialog extends JDialog {
         }
 
         // Store original values to see if they get changed:
+        oldFileVal = fileDir.getText();
         oldPdfVal = pdfDir.getText();
         oldPsVal = psDir.getText();
     }
@@ -132,7 +145,16 @@ public class DatabasePropertiesDialog extends JDialog {
         panel.setEncoding(newEncoding);
 
         Vector dir = new Vector(1);
-        String text = pdfDir.getText().trim();
+        String text = fileDir.getText().trim();
+        if (text.length() > 0) {
+            dir.add(text);
+            metaData.putData(GUIGlobals.FILE_FIELD+"Directory", dir);
+        }
+        else
+            metaData.remove(GUIGlobals.FILE_FIELD+"Directory");
+
+        dir = new Vector(1);
+        text = pdfDir.getText().trim();
         if (text.length() > 0) {
             dir.add(text);
             metaData.putData("pdfDirectory", dir);
diff --git a/src/java/net/sf/jabref/gui/FileListEditor.java b/src/java/net/sf/jabref/gui/FileListEditor.java
new file mode 100644
index 0000000..2a3dcd9
--- /dev/null
+++ b/src/java/net/sf/jabref/gui/FileListEditor.java
@@ -0,0 +1,507 @@
+package net.sf.jabref.gui;
+
+import net.sf.jabref.*;
+import net.sf.jabref.undo.NamedCompound;
+import net.sf.jabref.undo.UndoableFieldChange;
+import net.sf.jabref.external.ExternalFileType;
+import net.sf.jabref.external.DownloadExternalFile;
+import net.sf.jabref.external.UnknownExternalFileType;
+
+import javax.swing.*;
+import java.awt.*;
+import java.awt.event.*;
+import java.util.*;
+import java.util.List;
+import java.io.File;
+import java.io.IOException;
+
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+import com.jgoodies.forms.layout.FormLayout;
+
+/**
+ * Created by Morten O. Alver 2007.02.22
+ */
+public class FileListEditor extends JTable implements FieldEditor,
+        DownloadExternalFile.DownloadCallback {
+
+    FieldNameLabel label;
+    FileListEntryEditor editor = null;
+    private JabRefFrame frame;
+    private MetaData metaData;
+    private String fieldName;
+    private EntryEditor entryEditor;
+    private JPanel panel;
+    private FileListTableModel tableModel;
+    private JScrollPane sPane;
+    private JButton add, remove, up, down, auto, download;
+
+    public FileListEditor(JabRefFrame frame, MetaData metaData, String fieldName, String content,
+                          EntryEditor entryEditor) {
+        this.frame = frame;
+        this.metaData = metaData;
+        this.fieldName = fieldName;
+        this.entryEditor = entryEditor;
+        label = new FieldNameLabel(" " + Util.nCase(fieldName) + " ");
+        tableModel = new FileListTableModel();
+        setText(content);
+        setModel(tableModel);
+        sPane = new JScrollPane(this);
+        setTableHeader(null);
+        addMouseListener(new TableClickListener());
+
+        add = new JButton(GUIGlobals.getImage("add"));
+        remove = new JButton(GUIGlobals.getImage("remove"));
+        up = new JButton(GUIGlobals.getImage("up"));
+        down = new JButton(GUIGlobals.getImage("down"));
+        auto = new JButton(Globals.lang("Auto"));
+        download = new JButton(Globals.lang("Download"));
+        add.setMargin(new Insets(0,0,0,0));
+        remove.setMargin(new Insets(0,0,0,0));
+        up.setMargin(new Insets(0,0,0,0));
+        down.setMargin(new Insets(0,0,0,0));
+        add.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                addEntry();
+            }
+        });
+        remove.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                removeEntries();
+            }
+        });
+        up.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                moveEntry(-1);
+            }
+        });
+        down.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                moveEntry(1);
+            }
+        });
+        auto.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                autoSetLinks();
+            }
+        });
+        download.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                downloadFile();
+            }
+        });
+        DefaultFormBuilder builder = new DefaultFormBuilder(new FormLayout
+                ("fill:pref,1dlu,fill:pref,1dlu,fill:pref", "fill:pref,fill:pref"));
+        builder.append(up);
+        builder.append(add);
+        builder.append(auto);
+        builder.append(down);
+        builder.append(remove);
+        builder.append(download);        
+        panel = new JPanel();
+        panel.setLayout(new BorderLayout());
+        panel.add(sPane, BorderLayout.CENTER);
+        panel.add(builder.getPanel(), BorderLayout.EAST);
+
+        // Add an input/action pair for deleting entries:
+        getInputMap().put(KeyStroke.getKeyStroke("DELETE"), "delete");
+        getActionMap().put("delete", new AbstractAction() {
+            public void actionPerformed(ActionEvent actionEvent) {
+                int row = getSelectedRow();
+                removeEntries();
+                row = Math.min(row, getRowCount()-1);
+                if (row >= 0)
+                    setRowSelectionInterval(row, row);
+            }
+        });
+
+        // Add an input/action pair for inserting an entry:
+        getInputMap().put(KeyStroke.getKeyStroke("INSERT"), "insert");
+        getActionMap().put("insert", new AbstractAction() {
+
+            public void actionPerformed(ActionEvent actionEvent) {
+                addEntry();
+            }
+        });
+    }
+
+
+
+    public String getFieldName() {
+        return fieldName;
+    }
+
+    /*
+      * Returns the component to be added to a container. Might be a JScrollPane
+    * or the component itself.
+    */
+    public JComponent getPane() {
+        return panel;
+    }
+
+    /*
+     * Returns the text component itself.
+    */
+    public JComponent getTextComponent() {
+        return this;
+    }
+
+    public JLabel getLabel() {
+        return label;
+    }
+
+    public void setLabelColor(Color c) {
+        label.setForeground(c);
+    }
+
+    public String getText() {
+        return tableModel.getStringRepresentation();
+    }
+
+    public void setText(String newText) {
+        tableModel.setContent(newText);
+    }
+
+
+    public void append(String text) {
+
+    }
+
+    public void updateFont() {
+
+    }
+
+    public void paste(String textToInsert) {
+
+    }
+
+    public String getSelectedText() {
+        return null;
+    }
+
+    private void addEntry() {
+        int row = getSelectedRow();
+        if (row == -1)
+            row = 0;
+        FileListEntry entry = new FileListEntry("", "", null);
+        if (editListEntry(entry))
+            tableModel.addEntry(row, entry);
+        entryEditor.updateField(this);
+    }
+
+    private void removeEntries() {
+        int[] rows = getSelectedRows();
+        if (rows != null)
+            for (int i = rows.length-1; i>=0; i--) {
+                tableModel.removeEntry(rows[i]);
+            }
+        entryEditor.updateField(this);
+    }
+
+    private void moveEntry(int i) {
+        int[] sel = getSelectedRows();
+        if ((sel.length != 1) || (tableModel.getRowCount() < 2))
+            return;
+        int toIdx = sel[0]+i;
+        if (toIdx >= tableModel.getRowCount())
+            toIdx -= tableModel.getRowCount();
+        if (toIdx < 0)
+            toIdx += tableModel.getRowCount();
+        FileListEntry entry = tableModel.getEntry(sel[0]);
+        tableModel.removeEntry(sel[0]);
+        tableModel.addEntry(toIdx, entry);
+        entryEditor.updateField(this);
+        setRowSelectionInterval(toIdx, toIdx);
+    }
+
+    private boolean editListEntry(FileListEntry entry) {
+        if (editor == null) {
+            editor = new FileListEntryEditor(frame, entry, false, metaData);
+        }
+        else
+            editor.setEntry(entry);
+        editor.setVisible(true);
+        if (editor.okPressed())
+            tableModel.fireTableDataChanged();
+        entryEditor.updateField(this);
+        return editor.okPressed();
+    }
+
+    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) {
+                auto.setEnabled(true);
+                if (e.getID() > 0) {
+                    entryEditor.updateField(FileListEditor.this);
+                    frame.output(Globals.lang("Finished autosetting external links."));
+                }
+                else frame.output(Globals.lang("Finished autosetting external links.")
+                    +" "+Globals.lang("No files found."));
+            }
+        }, diag);
+
+    }
+
+    /**
+     * Automatically add links for this set of entries, based on the globally stored list of
+     * external file types. The entries are modified, and corresponding UndoEdit elements
+     * added to the NamedCompound given as argument. Furthermore, all entries which are modified
+     * are added to the Set of entries given as an argument.
+     *
+     * The entries' bibtex keys must have been set - entries lacking key are ignored.
+     * The operation is done in a new thread, which is returned for the caller to wait for
+     * if needed.
+     *
+     * @param entries A collection of BibtexEntry objects to find links for.
+     * @param ce A NamedCompound to add UndoEdit elements to.
+     * @param changedEntries A Set of BibtexEntry objects to which all modified entries is added.
+     * @return the thread performing the autosetting
+     */
+    public static Thread autoSetLinks(final Collection<BibtexEntry> entries, final NamedCompound ce,
+                                      final Set<BibtexEntry> changedEntries) {
+
+        final 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();
+                ArrayList<File> dirs = new ArrayList<File>();
+                if (Globals.prefs.hasKey(GUIGlobals.FILE_FIELD + "Directory"))
+                    dirs.add(new File(Globals.prefs.get(GUIGlobals.FILE_FIELD + "Directory")));
+                Collection<String> extensions = new ArrayList<String>();
+                for (int i = 0; i < types.length; i++) {
+                    final ExternalFileType type = types[i];
+                    extensions.add(type.getExtension());
+                }
+                // Run the search operation:
+                Map<BibtexEntry, java.util.List<File>> result =
+                        Util.findAssociatedFiles(entries, extensions, dirs);
+
+                // Iterate over the entries:
+                for (Iterator<BibtexEntry> i=result.keySet().iterator(); i.hasNext();) {
+                    BibtexEntry anEntry = i.next();
+                    FileListTableModel tableModel = new FileListTableModel();
+                    Object oldVal = anEntry.getField(GUIGlobals.FILE_FIELD);
+                    if (oldVal != null)
+                        tableModel.setContent((String)oldVal);
+                    List<File> files = result.get(anEntry);
+                    for (File f : files) {
+			f = relativizePath(f, dirs);
+                        boolean alreadyHas = false;
+			//System.out.println("File: "+f.getPath());
+                        for (int j = 0; j < tableModel.getRowCount(); j++) {
+                            FileListEntry existingEntry = tableModel.getEntry(j);
+			    //System.out.println("Comp: "+existingEntry.getLink());
+			    if (new File(existingEntry.getLink()).equals(f)) {
+                                alreadyHas = true;
+                                break;
+                            }
+                        }
+                        if (!alreadyHas) {
+                            int index = f.getPath().lastIndexOf('.');
+                            if ((index >= 0) && (index < f.getPath().length()-1)) {
+                                ExternalFileType type = Globals.prefs.getExternalFileTypeByExt
+                                    (f.getPath().substring(index+1));
+                                FileListEntry flEntry = new FileListEntry(f.getName(), f.getPath(), type);
+                                tableModel.addEntry(tableModel.getRowCount(), flEntry);
+                            } else {
+                                FileListEntry flEntry = new FileListEntry(f.getName(), f.getPath(),
+                                        new UnknownExternalFileType(""));
+                                tableModel.addEntry(tableModel.getRowCount(), flEntry);
+                            }
+                            String newVal = tableModel.getStringRepresentation();
+                            if (newVal.length() == 0)
+                                newVal = null;
+                            UndoableFieldChange change = new UndoableFieldChange(anEntry,
+                                    GUIGlobals.FILE_FIELD, oldVal, newVal);
+                            ce.addEdit(change);
+                            anEntry.setField(GUIGlobals.FILE_FIELD, newVal);
+                            changedEntries.add(anEntry);
+                        }
+                    }
+                }
+            }
+        };
+        Thread t = new Thread(r);
+        t.start();
+        return t;
+    }
+
+
+    /**
+     * Automatically add links for this entry to the table model given as an argument, based on
+     * the globally stored list of external file types. The entry itself is not modified. The entry's
+     * bibtex key must have been set.
+     * The operation is done in a new thread, which is returned for the caller to wait for
+     * if needed.
+     *
+     * @param entry The BibtexEntry to find links for.
+     * @param tableModel The table model to insert links into. Already existing links are not duplicated or removed.
+     * @param metaData The MetaData providing the relevant file directory, if any.
+     * @param callback An ActionListener that is notified (on the event dispatch thread) when the search is
+     *  finished. The ActionEvent has id=0 if no new links were added, and id=1 if one or more links were added.
+     *  This parameter can be null, which means that no callback will be notified.
+     * @param diag An instantiated modal JDialog which will be used to display the progress of the autosetting.
+     *      This parameter can be null, which means that no progress update will be shown.
+     * @return the thread performing the autosetting
+     */
+    public static Thread autoSetLinks(final BibtexEntry entry, final FileListTableModel tableModel,
+                                      final MetaData metaData, final ActionListener callback,
+                                      final JDialog diag) {
+
+        final Collection<BibtexEntry> entries = new ArrayList<BibtexEntry>();
+        entries.add(entry);
+        final ExternalFileType[] types = Globals.prefs.getExternalFileTypeSelection();
+        final JProgressBar prog = new JProgressBar(JProgressBar.HORIZONTAL, types.length-1);
+        prog.setIndeterminate(true);
+        prog.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+        final JLabel label = new JLabel(Globals.lang("Searching for files"));
+        if (diag != null) {
+            diag.setTitle(Globals.lang("Autosetting links"));
+            diag.getContentPane().add(prog, BorderLayout.CENTER);
+            diag.getContentPane().add(label, BorderLayout.SOUTH);
+
+            diag.pack();
+            diag.setLocationRelativeTo(diag.getParent());
+        }
+        Runnable r = new Runnable() {
+
+            public void run() {
+                boolean foundAny = false;
+                ExternalFileType[] types = Globals.prefs.getExternalFileTypeSelection();
+                ArrayList<File> dirs = new ArrayList<File>();
+                if (metaData.getFileDirectory(GUIGlobals.FILE_FIELD) != null)
+                    dirs.add(new File(metaData.getFileDirectory(GUIGlobals.FILE_FIELD)));
+                Collection<String> extensions = new ArrayList<String>();
+                for (int i = 0; i < types.length; i++) {
+                    final ExternalFileType type = types[i];
+                    extensions.add(type.getExtension());
+                }
+                // Run the search operation:
+                Map<BibtexEntry, java.util.List<File>> result =
+                        Util.findAssociatedFiles(entries, extensions, dirs);
+
+                // Iterate over the entries:
+                for (Iterator<BibtexEntry> i=result.keySet().iterator(); i.hasNext();) {
+                    BibtexEntry anEntry = i.next();
+                    List<File> files = result.get(anEntry);
+                    for (File f : files) {
+			        f = relativizePath(f, dirs);
+                        boolean alreadyHas = false;
+                        for (int j = 0; j < tableModel.getRowCount(); j++) {
+                            FileListEntry existingEntry = tableModel.getEntry(j);
+                            if (new File(existingEntry.getLink()).equals(f)) {
+                                alreadyHas = true;
+                                break;
+                            }
+                        }
+                        if (!alreadyHas) {
+                            int index = f.getPath().lastIndexOf('.');
+                            if ((index >= 0) && (index < f.getPath().length()-1)) {
+                                ExternalFileType type = Globals.prefs.getExternalFileTypeByExt
+                                    (f.getPath().substring(index+1));
+                                FileListEntry flEntry = new FileListEntry(f.getName(), f.getPath(), type);
+                                tableModel.addEntry(tableModel.getRowCount(), flEntry);
+                                foundAny = true;
+                            } else {
+                                FileListEntry flEntry = new FileListEntry(f.getName(), f.getPath(),
+                                        new UnknownExternalFileType(""));
+                                tableModel.addEntry(tableModel.getRowCount(), flEntry);
+                                foundAny = true;
+                            }
+                        }
+                    }
+                }
+                final int id = foundAny ? 1 : 0;
+                SwingUtilities.invokeLater(new Runnable() {
+                    public void run() {
+                        if (diag != null)
+                            diag.dispose();
+                        if (callback != null)
+                            callback.actionPerformed(new ActionEvent(this, id, ""));
+                    }
+                });
+
+            }
+        };
+        Thread t = new Thread(r);
+        t.start();
+        if (diag != null) {
+            diag.setVisible(true);
+        }
+        return t;
+    }
+
+    /**
+     * If the file is below one of the directories in a list, return a File specifying
+     * a path relative to that directory.
+     */
+    public static File relativizePath(File f, ArrayList<File> dirs) {
+	String pth = f.getPath();
+	for (File dir : dirs) {
+	    if (pth.startsWith(dir.getPath())) {
+		String subs = pth.substring(dir.getPath().length());
+		if ((subs.length() > 0) && ((subs.charAt(0) == '/') || (subs.charAt(0) == '\\')))
+		    subs = subs.substring(1);
+	    return new File(subs);	    
+	    }
+	}
+	return f;
+    }
+
+
+    /**
+     * Run a file download operation.
+     */
+    private void downloadFile() {
+        String bibtexKey = entryEditor.getEntry().getCiteKey();
+        if (bibtexKey == null) {
+            int answer = JOptionPane.showConfirmDialog(frame,
+                    Globals.lang("This entry has no BibTeX key. Generate key now?"),
+                    Globals.lang("Download file"), JOptionPane.OK_CANCEL_OPTION,
+                    JOptionPane.QUESTION_MESSAGE);
+            if (answer == JOptionPane.OK_OPTION) {
+                ActionListener l = entryEditor.generateKeyAction;
+                l.actionPerformed(null);
+                bibtexKey = entryEditor.getEntry().getCiteKey();
+            }
+        }
+        DownloadExternalFile def = new DownloadExternalFile(frame,
+                frame.basePanel().metaData(), bibtexKey);
+        try {
+            def.download(this);
+        } catch (IOException ex) {
+            ex.printStackTrace();
+        }
+    }
+
+    /**
+     * This is the callback method that the DownloadExternalFile class uses to report the result
+     * of a download operation. This call may never come, if the user cancelled the operation.
+     * @param file The FileListEntry linking to the resulting local file.
+     */
+    public void downloadComplete(FileListEntry file) {
+        tableModel.addEntry(tableModel.getRowCount(), file);
+        entryEditor.updateField(this);
+    }
+
+    class TableClickListener extends MouseAdapter {
+
+        public void mouseClicked(MouseEvent e) {
+            if ((e.getButton() == MouseEvent.BUTTON1) && (e.getClickCount() == 2)) {
+                int row = rowAtPoint(e.getPoint());
+                if (row >= 0) {
+                    FileListEntry entry = tableModel.getEntry(row);
+                    editListEntry(entry);
+                }
+            }
+        }
+    }
+
+
+}
diff --git a/src/java/net/sf/jabref/gui/FileListEntry.java b/src/java/net/sf/jabref/gui/FileListEntry.java
new file mode 100644
index 0000000..af86483
--- /dev/null
+++ b/src/java/net/sf/jabref/gui/FileListEntry.java
@@ -0,0 +1,47 @@
+package net.sf.jabref.gui;
+
+import net.sf.jabref.external.ExternalFileType;
+
+/**
+ * This class represents a file link for a Bibtex entry.
+*/
+public class FileListEntry {
+    private String link;
+    private String description;
+    private ExternalFileType type;
+
+    public FileListEntry(String description, String link, ExternalFileType type) {
+        this.link = link;
+        this.description = description;
+        this.type = type;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public String getLink() {
+        return link;
+    }
+
+    public void setLink(String link) {
+        this.link = link;
+    }
+
+    public ExternalFileType getType() {
+        return type;
+    }
+
+    public void setType(ExternalFileType type) {
+        this.type = type;
+    }
+
+    public String toString() {
+        return description+" : "+link+" : "+type;
+    }
+
+}
diff --git a/src/java/net/sf/jabref/gui/FileListEntryEditor.java b/src/java/net/sf/jabref/gui/FileListEntryEditor.java
new file mode 100644
index 0000000..5db3a04
--- /dev/null
+++ b/src/java/net/sf/jabref/gui/FileListEntryEditor.java
@@ -0,0 +1,210 @@
+package net.sf.jabref.gui;
+
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+import com.jgoodies.forms.builder.ButtonBarBuilder;
+import com.jgoodies.forms.layout.FormLayout;
+
+import javax.swing.*;
+
+import net.sf.jabref.*;
+import net.sf.jabref.external.ExternalFileType;
+import net.sf.jabref.external.ConfirmCloseFileListEntryEditor;
+
+import java.awt.*;
+import java.awt.event.*;
+import java.io.File;
+import java.io.FileFilter;
+import java.util.ArrayList;
+
+/**
+ * This class produces a dialog box for editing a single file link from a Bibtex entry.
+ *
+ * The information to be edited includes the file description, the link itself and the
+ * file type. The dialog also includes convenience buttons for quick linking.
+ *
+ * For use when downloading files, this class also offers a progress bar and a "Downloading..."
+ * label that can be hidden when the download is complete.
+ */
+public class FileListEntryEditor {
+
+    JDialog diag;
+    JTextField link = new JTextField(), description = new JTextField();
+    JButton ok = new JButton(Globals.lang("Ok")),
+            cancel = new JButton(Globals.lang("Cancel"));
+    JComboBox types;
+    JProgressBar prog = new JProgressBar(JProgressBar.HORIZONTAL);
+    JLabel downloadLabel = new JLabel(Globals.lang("Downloading..."));
+    ConfirmCloseFileListEntryEditor externalConfirm = null;
+
+    private FileListEntry entry;
+    private MetaData metaData;
+    private boolean okPressed = false;
+
+    public FileListEntryEditor(JFrame parent, FileListEntry entry, boolean showProgressBar,
+                               MetaData metaData) {
+        this.entry = entry;
+        this.metaData = metaData;
+
+        types = new JComboBox(Globals.prefs.getExternalFileTypeSelection());
+        types.addItemListener(new ItemListener() {
+            public void itemStateChanged(ItemEvent itemEvent) {
+                ok.setEnabled(types.getSelectedItem() != null);
+            }
+        });
+        DefaultFormBuilder builder = new DefaultFormBuilder(new FormLayout
+                ("left:pref, 4dlu, fill:150dlu, 4dlu, fill:pref", ""));
+        builder.append(Globals.lang("Link"));
+        builder.append(link);
+        BrowseListener browse = new BrowseListener(parent, link);
+        JButton browseBut = new JButton(Globals.lang("Browse"));
+        browseBut.addActionListener(browse);
+        builder.append(browseBut);
+        builder.nextLine();
+        builder.append(Globals.lang("Description"));
+        builder.append(description);
+        builder.getPanel().setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+        builder.nextLine();
+        builder.append(Globals.lang("File type"));
+        builder.append(types);
+        if (showProgressBar) {
+            builder.nextLine();
+            builder.append(downloadLabel);
+            builder.append(prog);
+        }
+        
+        ButtonBarBuilder bb = new ButtonBarBuilder();
+        bb.addGlue();
+        bb.addGridded(ok);
+        bb.addGridded(cancel);
+        bb.addGlue();
+
+        ok.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                // If necessary, ask the external confirm object whether we are ready to close.
+                if (externalConfirm != null) {
+                    // Construct an updated FileListEntry:
+                    FileListEntry testEntry = new FileListEntry("", "", null);
+                    storeSettings(testEntry);
+                    if (!externalConfirm.confirmClose(testEntry))
+                        return;
+                }
+                diag.dispose();
+                storeSettings(FileListEntryEditor.this.entry);
+                okPressed = true;
+            }
+        });
+        cancel.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                diag.dispose();
+            }
+        });
+        link.addFocusListener(new FocusListener() {
+            public void focusGained(FocusEvent e) {
+            }
+            public void focusLost(FocusEvent e) {
+                if ((types.getSelectedIndex() == -1) &&
+                        (link.getText().trim().length() > 0)) {
+                    // Try to guess the file type:
+                    String theLink = link.getText().trim();
+                    int index = theLink.indexOf('.');
+                    if ((index >= 0) && (index < theLink.length()-1)) {
+
+                        ExternalFileType type = Globals.prefs.getExternalFileTypeByExt
+                                (theLink.substring(index+1));
+                        if (type != null)
+                            types.setSelectedItem(type);
+                            
+                    }
+                }
+            }
+        });
+
+        diag = new JDialog(parent, Globals.lang("Edit file link"), true);
+        diag.getContentPane().add(builder.getPanel(), BorderLayout.CENTER);
+        diag.getContentPane().add(bb.getPanel(), BorderLayout.SOUTH);
+        diag.pack();
+        Util.placeDialog(diag, parent);
+
+        setValues(entry);
+    }
+
+    public void setExternalConfirm(ConfirmCloseFileListEntryEditor eC) {
+        this.externalConfirm = eC;
+    }
+
+    public void setOkEnabled(boolean enabled) {
+        ok.setEnabled(enabled);
+    }
+
+    public JProgressBar getProgressBar() {
+        return prog;
+    }
+
+    public JLabel getProgressBarLabel() {
+        return downloadLabel;
+    }
+
+    public void setEntry(FileListEntry entry) {
+        this.entry = entry;
+        setValues(entry);
+    }
+
+    public void setVisible(boolean visible) {
+        if (visible)
+            okPressed = false;
+        diag.setVisible(visible);
+    }
+
+    public void setValues(FileListEntry entry) {
+        description.setText(entry.getDescription());
+        link.setText(entry.getLink());
+        types.setSelectedItem(entry.getType());
+    }
+
+    public void storeSettings(FileListEntry entry) {
+        entry.setDescription(description.getText().trim());
+        entry.setLink(link.getText().trim());
+        entry.setType((ExternalFileType)types.getSelectedItem());
+    }
+
+    public boolean okPressed() {
+        return okPressed;
+    }
+
+    class BrowseListener implements ActionListener {
+        private JFrame parent;
+        private JTextField comp;
+
+        public BrowseListener(JFrame parent, JTextField comp) {
+            this.parent = parent;
+            this.comp = comp;
+        }
+
+        public void actionPerformed(ActionEvent e) {
+            File initial = new File(comp.getText().trim());
+            if (comp.getText().trim().length() == 0) {
+                // Nothing in the field. Go to the last file dir used:
+                initial = new File(Globals.prefs.get("fileWorkingDirectory"));
+            }
+            String chosen = Globals.getNewFile(parent, initial, Globals.NONE,
+                JFileChooser.OPEN_DIALOG, false);
+            if (chosen != null) {
+                File newFile = new File(chosen);
+                // Store the directory for next time:
+                Globals.prefs.put("fileWorkingDirectory", newFile.getParent());
+
+                // If the file is below the file directory, make the path relative:
+                ArrayList<File> dirs = new ArrayList<File>();
+                String fileDir = metaData.getFileDirectory(GUIGlobals.FILE_FIELD);
+                if (fileDir != null)
+                    dirs.add(new File(fileDir));
+                if (dirs.size() > 0) {
+                    newFile = FileListEditor.relativizePath(newFile, dirs);
+                }
+
+                comp.setText(newFile.getPath());
+                comp.requestFocus();
+            }
+        }
+    }
+}
diff --git a/src/java/net/sf/jabref/gui/FileListTableModel.java b/src/java/net/sf/jabref/gui/FileListTableModel.java
new file mode 100644
index 0000000..324f254
--- /dev/null
+++ b/src/java/net/sf/jabref/gui/FileListTableModel.java
@@ -0,0 +1,204 @@
+package net.sf.jabref.gui;
+
+import net.sf.jabref.Globals;
+
+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();
+
+    public FileListTableModel() {
+    }
+
+    public int getRowCount() {
+        synchronized (list) {
+            return list.size();
+        }
+    }
+
+    public int getColumnCount() {
+        return 3;
+    }
+
+    public Class getColumnClass(int columnIndex) {
+        return String.class;
+    }
+
+    public Object getValueAt(int rowIndex, int columnIndex) {
+        synchronized (list) {
+            FileListEntry entry = (FileListEntry)list.get(rowIndex);
+            switch (columnIndex) {
+                case 0: return entry.getDescription();
+                case 1: return entry.getLink();
+                default: return entry.getType() != null ?
+                        entry.getType().getName() : "";
+            }
+        }
+    }
+
+    public FileListEntry getEntry(int index) {
+        synchronized (list) {
+            return (FileListEntry)list.get(index);
+        }
+    }
+
+    public void removeEntry(int index) {
+        synchronized (list) {
+            list.remove(index);
+            fireTableRowsDeleted(index, index);
+        }
+
+    }
+
+    /**
+     * Add an entry to the table model, and fire a change event. The change event
+     * is fired on the event dispatch thread.
+     * @param index The row index to insert the entry at.
+     * @param entry The entry to insert.
+     */
+    public void addEntry(final int index, final FileListEntry entry) {
+        synchronized (list) {
+            list.add(index, entry);
+            if (!SwingUtilities.isEventDispatchThread()) {
+                SwingUtilities.invokeLater(new Runnable() {
+                    public void run() {
+                        fireTableRowsInserted(index, index);
+                    }
+                });
+            } else
+                fireTableRowsInserted(index, index);
+        }
+
+    }
+
+    public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
+    }
+
+    /**
+     * Set up the table contents based on the flat string representation of the file list
+     * @param value The string representation
+     */
+    public void setContent(String value) {
+        if (value == null)
+            value = "";
+        ArrayList newList = new ArrayList();
+        StringBuilder sb = new StringBuilder();
+        ArrayList thisEntry = new ArrayList();
+        boolean escaped = false;
+        for (int i=0; i<value.length(); i++) {
+            char c = value.charAt(i);
+            if (!escaped && (c == '\\')) {
+                escaped = true;
+                continue;
+            }
+            else if (!escaped && (c == ':')) {
+                thisEntry.add(sb.toString());
+                sb = new StringBuilder();
+            }
+            else if (!escaped && (c == ';')) {
+                thisEntry.add(sb.toString());
+                sb = new StringBuilder();
+                newList.add(decodeEntry(thisEntry));
+                thisEntry.clear();
+            }
+            else sb.append(c);
+            escaped = false;
+        }
+        if (sb.length() > 0)
+            thisEntry.add(sb.toString());
+        if (thisEntry.size() > 0)
+            newList.add(decodeEntry(thisEntry));
+
+        synchronized (list) {
+            list.clear();
+            list.addAll(newList);
+        }
+        fireTableChanged(new TableModelEvent(this));
+    }
+
+    private FileListEntry decodeEntry(ArrayList contents) {
+        return new FileListEntry(getElementIfAvailable(contents, 0),
+                getElementIfAvailable(contents, 1),
+                Globals.prefs.getExternalFileTypeByName
+                        (getElementIfAvailable(contents, 2)));
+    }
+
+    private String getElementIfAvailable(ArrayList contents, int index) {
+        if (index < contents.size())
+            return (String)contents.get(index);
+        else return "";
+    }
+
+    /**
+     * Transform the file list shown in the table into a flat string representable
+     * as a BibTeX field:
+     * @return String representation.
+     */
+    public String getStringRepresentation() {
+        StringBuilder sb = new StringBuilder();
+        for (Iterator iterator = list.iterator(); iterator.hasNext();) {
+            FileListEntry entry = (FileListEntry) iterator.next();
+            sb.append(encodeEntry(entry));
+            if (iterator.hasNext())
+                sb.append(';');
+        }
+        return sb.toString();
+    }
+
+    /**
+     * Transform the file list shown in the table into a HTML string representation
+     * suitable for displaying the contents in a tooltip.
+     * @return Tooltip representation.
+     */
+    public String getToolTipHTMLRepresentation() {
+        StringBuilder sb = new StringBuilder("<html>");
+        for (Iterator iterator = list.iterator(); iterator.hasNext();) {
+            FileListEntry entry = (FileListEntry) iterator.next();
+            sb.append(entry.getDescription()).append(" (").append(entry.getLink()).append(')');
+            if (iterator.hasNext())
+                sb.append("<br>");
+        }
+        return sb.append("</html>").toString();
+    }
+
+    private String encodeEntry(FileListEntry entry) {
+        StringBuilder sb = new StringBuilder();
+        sb.append(encodeString(entry.getDescription()));
+        sb.append(':');
+        sb.append(encodeString(entry.getLink()));
+        sb.append(':');
+        sb.append(encodeString(entry.getType() != null ? entry.getType().getName() : ""));
+        return sb.toString();
+    }
+
+    private String encodeString(String s) {
+        StringBuilder sb = new StringBuilder();
+        for (int i=0; i<s.length(); i++) {
+            char c = s.charAt(i);
+            if ((c == ';') || (c == ':') || (c == '\\'))
+                sb.append('\\');
+            sb.append(c);
+        }
+        return sb.toString();
+    }
+
+    public void print() {
+        System.out.println("----");
+        for (Iterator iterator = list.iterator(); iterator.hasNext();) {
+            FileListEntry fileListEntry = (FileListEntry) iterator.next();
+            System.out.println(fileListEntry);
+        }
+        System.out.println("----");
+    }
+
+   
+}
diff --git a/src/java/net/sf/jabref/gui/GlazedEntrySorter.java b/src/java/net/sf/jabref/gui/GlazedEntrySorter.java
index a637f73..3b8a86b 100644
--- a/src/java/net/sf/jabref/gui/GlazedEntrySorter.java
+++ b/src/java/net/sf/jabref/gui/GlazedEntrySorter.java
@@ -97,7 +97,6 @@ http://www.gnu.org/copyleft/gpl.ja.html
         }
         list.getReadWriteLock().writeLock().unlock();
 
-
     }
 
 
diff --git a/src/java/net/sf/jabref/gui/ImportInspectionDialog.java b/src/java/net/sf/jabref/gui/ImportInspectionDialog.java
index 64058a5..fe79999 100644
--- a/src/java/net/sf/jabref/gui/ImportInspectionDialog.java
+++ b/src/java/net/sf/jabref/gui/ImportInspectionDialog.java
@@ -1,6 +1,7 @@
 package net.sf.jabref.gui;
 
 import net.sf.jabref.*;
+import net.sf.jabref.external.DownloadExternalFile;
 import net.sf.jabref.groups.GroupTreeNode;
 import net.sf.jabref.groups.AllEntriesGroup;
 import net.sf.jabref.groups.AbstractGroup;
@@ -19,6 +20,7 @@ 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;
@@ -36,8 +38,8 @@ import ca.odell.glazedlists.swing.EventSelectionModel;
  * Dialog to allow the selection of entries as part of an Import
  * 
  * @author alver
- * @author $Author: coezbek $
- * @version $Revision: 1.27 $ ($Date: 2006/12/04 14:37:01 $)
+ * @author $Author: mortenalver $
+ * @version $Revision: 1.34 $ ($Date: 2007/06/13 20:47:58 $)
  *
  */
 public class ImportInspectionDialog extends JDialog {
@@ -77,16 +79,18 @@ public class ImportInspectionDialog extends JDialog {
     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")),
         urlLabel = new JLabel(GUIGlobals.getImage("wwwSmall"));
 
     private final int
         DUPL_COL = 1,
-        PDF_COL = 2,
-        PS_COL = 3,
-        URL_COL = 4,
-        PAD = 5;
+        FILE_COL = 2,
+        PDF_COL = 3,
+        PS_COL = 4,
+        URL_COL = 5,
+        PAD = 6;
 
     /**
      * The "defaultSelected" boolean value determines if new entries added are selected for import or not.
@@ -160,6 +164,9 @@ public class ImportInspectionDialog extends JDialog {
         }
 
         // Add "Attach file" menu choices to right click menu:
+        popup.add(new LinkLocalFile());
+        popup.add(new DownloadFile());
+        popup.add(new AutoSetLinks());
         popup.add(new AttachFile("pdf"));
         popup.add(new AttachFile("ps"));
         popup.add(new AttachUrl());
@@ -201,8 +208,22 @@ public class ImportInspectionDialog extends JDialog {
         delete.addActionListener(deleteListener);
         help.addActionListener(new HelpAction(frame.helpDiag, GUIGlobals.importInspectionHelp));
         getContentPane().add(bb.getPanel(), BorderLayout.SOUTH);
-        setSize(new Dimension(650, 650));
-        //contentPane.setDividerLocation(0.6f);
+
+        // Remember and default to last size:
+        setSize(new Dimension(Globals.prefs.getInt("importInspectionDialogWidth"),
+                Globals.prefs.getInt("importInspectionDialogHeight")));
+        addWindowListener(new WindowAdapter() {
+
+            public void windowOpened(WindowEvent e) {
+                contentPane.setDividerLocation(0.5f);
+            }
+
+            public void windowClosed(WindowEvent e) {
+                Globals.prefs.putInt("importInspectionDialogWidth", getSize().width);
+                Globals.prefs.putInt("importInspectionDialogHeight", getSize().height);
+            }
+        });
+
     }
 
     public void setProgress(int current, int max) {
@@ -325,6 +346,38 @@ public class ImportInspectionDialog extends JDialog {
     }
 
     /**
+     * Generate key for the selected entry only.
+     */
+    public void generateKeySelectedEntry() {
+        if (selectionModel.getSelected().size() != 1)
+                return;
+        BibtexEntry entry = (BibtexEntry) selectionModel.getSelected().get(0);
+        entries.getReadWriteLock().writeLock().lock();
+        BibtexDatabase database = null;
+        // Relate to the existing database, if any:
+        if (panel != null)
+            database = panel.database();
+        // ... or create a temporary one:
+        else
+            database = new BibtexDatabase();
+        try {
+            entry.setId(Util.createNeutralId());
+            // Add the entry to the database we are working with:
+            database.insertEntry(entry);
+        } catch (KeyCollisionException ex) {
+            ex.printStackTrace();
+        }
+        // Generate a unique key:
+        LabelPatternUtil.makeLabel(Globals.prefs.getKeyPattern(), database, entry);
+        // Remove the entry from the database again, since we only added it in order to
+        // make sure the key was unique:
+        database.removeEntry(entry.getId());
+        
+        entries.getReadWriteLock().writeLock().lock();
+        glTable.repaint();
+    }
+
+    /**
      * Generate keys for all entries. All keys will be unique with respect to one another,
      * and, if they are destined for an existing database, with respect to existing keys in
      * the database.
@@ -570,6 +623,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: 
+                        Util.updateCompletersForEntry(panel.getAutoCompleters(), entry);
                         ce.addEdit(new UndoableInsertEntry(panel.database(), entry, panel));
                     } catch (KeyCollisionException e) {
                         e.printStackTrace();
@@ -835,6 +890,138 @@ public class ImportInspectionDialog extends JDialog {
         }
     }
 
+    class DownloadFile extends JMenuItem implements ActionListener,
+        DownloadExternalFile.DownloadCallback {
+
+        BibtexEntry entry = null;
+
+        public DownloadFile() {
+            super(Globals.lang("Download file"));
+            addActionListener(this);
+        }
+
+        public void actionPerformed(ActionEvent actionEvent) {
+            if (selectionModel.getSelected().size() != 1)
+                return;
+            entry = (BibtexEntry) selectionModel.getSelected().get(0);
+            String bibtexKey = entry.getCiteKey();
+            if (bibtexKey == null) {
+                int answer = JOptionPane.showConfirmDialog(frame,
+                        Globals.lang("This entry has no BibTeX key. Generate key now?"),
+                        Globals.lang("Download file"), JOptionPane.OK_CANCEL_OPTION,
+                        JOptionPane.QUESTION_MESSAGE);
+                if (answer == JOptionPane.OK_OPTION) {
+                    generateKeySelectedEntry();
+                    bibtexKey = entry.getCiteKey();
+                }
+            }
+            DownloadExternalFile def = new DownloadExternalFile(frame, metaData, bibtexKey);
+            try {
+                def.download(this);
+            } catch (IOException ex) {
+                ex.printStackTrace();
+            }
+        }
+
+        public void downloadComplete(FileListEntry file) {
+            ImportInspectionDialog.this.toFront(); // Hack
+            FileListTableModel model = new FileListTableModel();
+            String oldVal = (String)entry.getField(GUIGlobals.FILE_FIELD);
+            if (oldVal != null)
+                model.setContent(oldVal);
+            model.addEntry(model.getRowCount(), file);
+            entries.getReadWriteLock().writeLock().lock();
+            entry.setField(GUIGlobals.FILE_FIELD, model.getStringRepresentation());
+            entries.getReadWriteLock().writeLock().unlock();
+            glTable.repaint();
+        }
+    }
+
+    class AutoSetLinks extends JMenuItem implements ActionListener {
+
+        public AutoSetLinks() {
+            super(Globals.lang("Autoset external links"));
+            addActionListener(this);
+        }
+
+        public void actionPerformed(ActionEvent actionEvent) {
+            if (selectionModel.getSelected().size() != 1)
+                return;
+            final BibtexEntry entry = (BibtexEntry) selectionModel.getSelected().get(0);
+            String bibtexKey = entry.getCiteKey();
+            if (bibtexKey == null) {
+                int answer = JOptionPane.showConfirmDialog(frame,
+                        Globals.lang("This entry has no BibTeX key. Generate key now?"),
+                        Globals.lang("Download file"), JOptionPane.OK_CANCEL_OPTION,
+                        JOptionPane.QUESTION_MESSAGE);
+                if (answer == JOptionPane.OK_OPTION) {
+                    generateKeySelectedEntry();
+                    bibtexKey = entry.getCiteKey();
+                } else return; // Can't go on without the bibtex key.
+            }
+            final FileListTableModel model = new FileListTableModel();
+            String oldVal = (String)entry.getField(GUIGlobals.FILE_FIELD);
+            if (oldVal != null)
+                model.setContent(oldVal);
+            // We have a static utility method for searching for all relevant links:
+            JDialog diag = new JDialog(ImportInspectionDialog.this, true);
+            FileListEditor.autoSetLinks(entry, model, metaData, new ActionListener() {
+                public void actionPerformed(ActionEvent e) {
+                    if (e.getID() > 0) {
+                        entries.getReadWriteLock().writeLock().lock();
+                        entry.setField(GUIGlobals.FILE_FIELD, model.getStringRepresentation());
+                        entries.getReadWriteLock().writeLock().unlock();
+                        glTable.repaint();
+                    }
+                }
+            }, diag);
+
+        }
+    }
+
+    class LinkLocalFile extends JMenuItem implements ActionListener,
+        DownloadExternalFile.DownloadCallback {
+
+        BibtexEntry entry = null;
+
+        public LinkLocalFile() {
+            super(Globals.lang("Link local file"));
+            addActionListener(this);
+        }
+
+        public void actionPerformed(ActionEvent actionEvent) {
+            if (selectionModel.getSelected().size() != 1)
+                return;
+            entry = (BibtexEntry) selectionModel.getSelected().get(0);
+            FileListEntry flEntry = new FileListEntry("", "", null);
+            FileListEntryEditor editor = new FileListEntryEditor(frame, flEntry, false, metaData);
+            editor.setVisible(true);                                                 
+            if (editor.okPressed()) {
+                FileListTableModel model = new FileListTableModel();
+                String oldVal = (String)entry.getField(GUIGlobals.FILE_FIELD);
+                if (oldVal != null)
+                    model.setContent(oldVal);
+                model.addEntry(model.getRowCount(), flEntry);
+                entries.getReadWriteLock().writeLock().lock();
+                entry.setField(GUIGlobals.FILE_FIELD, model.getStringRepresentation());
+                entries.getReadWriteLock().writeLock().unlock();
+                glTable.repaint();
+            }
+        }
+
+        public void downloadComplete(FileListEntry file) {
+            ImportInspectionDialog.this.toFront(); // Hack
+            FileListTableModel model = new FileListTableModel();
+            String oldVal = (String)entry.getField(GUIGlobals.FILE_FIELD);
+            if (oldVal != null)
+                model.setContent(oldVal);
+            model.addEntry(model.getRowCount(), file);
+            entries.getReadWriteLock().writeLock().lock();
+            entry.setField(GUIGlobals.FILE_FIELD, model.getStringRepresentation());
+            entries.getReadWriteLock().writeLock().unlock();
+            glTable.repaint();
+        }
+    }
 
     class AttachFile extends JMenuItem implements ActionListener {
         String fileType;
@@ -893,7 +1080,9 @@ public class ImportInspectionDialog extends JDialog {
         for (int i = 2; i < PAD; i++) {
             comparators = comparatorChooser.getComparatorsForColumn(i);
             comparators.clear();
-            if (i == PDF_COL)
+            if (i == FILE_COL)
+                comparators.add(new IconComparator(new String[] {GUIGlobals.FILE_FIELD}));
+            else if (i == PDF_COL)
                 comparators.add(new IconComparator(new String[] {"pdf"}));
             else if (i == PS_COL)
                 comparators.add(new IconComparator(new String[] {"ps"}));
@@ -978,6 +1167,14 @@ public class ImportInspectionDialog extends JDialog {
                 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) {
diff --git a/src/java/net/sf/jabref/gui/MainTableFormat.java b/src/java/net/sf/jabref/gui/MainTableFormat.java
index a6e404e..e2a02a1 100644
--- a/src/java/net/sf/jabref/gui/MainTableFormat.java
+++ b/src/java/net/sf/jabref/gui/MainTableFormat.java
@@ -29,7 +29,8 @@ public class MainTableFormat implements TableFormat {
     ,
     URL_ = {"url", "doi"}
     ,
-    CITESEER = {"citeseerurl"};
+    CITESEER = {"citeseerurl"},
+    FILE = {GUIGlobals.FILE_FIELD};
 
     BasePanel panel;
 
@@ -159,6 +160,8 @@ public class MainTableFormat implements TableFormat {
         // We add those that are enabled in preferences.
         iconCols.clear();
         int coln = 1;
+        if (Globals.prefs.getBoolean("fileColumn"))
+            iconCols.put(new Integer(coln++), FILE);
         if (Globals.prefs.getBoolean("pdfColumn"))
             iconCols.put(new Integer(coln++), PDF);
         if (Globals.prefs.getBoolean("urlColumn"))
diff --git a/src/java/net/sf/jabref/gui/MainTableSelectionListener.java b/src/java/net/sf/jabref/gui/MainTableSelectionListener.java
index 656d056..172f5b9 100644
--- a/src/java/net/sf/jabref/gui/MainTableSelectionListener.java
+++ b/src/java/net/sf/jabref/gui/MainTableSelectionListener.java
@@ -14,11 +14,8 @@ import java.util.Comparator;
 import java.util.List;
 
 /**
- * Created by IntelliJ IDEA.
- * User: alver
- * Date: Oct 15, 2005
- * Time: 3:02:52 AM
- * To change this template use File | Settings | File Templates.
+ * 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,
         KeyListener, FocusListener {
@@ -112,8 +109,27 @@ public class MainTableSelectionListener implements ListEventListener, MouseListe
     }
 
     private void updatePreview(final BibtexEntry toShow, final boolean changedPreview) {
-        if (workingOnPreview)
+        updatePreview(toShow, changedPreview, 0);
+    }
+
+    private void updatePreview(final BibtexEntry toShow, final boolean changedPreview, int repeats) {
+        if (workingOnPreview) {
+            if (repeats > 0)
+                return; // We've already waited once. Give up on this selection.
+            Timer t = new Timer(50, new ActionListener() {
+                public void actionPerformed(ActionEvent actionEvent) {
+                    updatePreview(toShow, changedPreview, 1);
+                }
+            });
+            t.setRepeats(false);
+            t.start();
             return;
+        }
+        EventList list = table.getSelected();
+        // Check if the entry to preview is still selected:
+        if ((list.size() != 1) || ((BibtexEntry)list.get(0) != toShow)) {
+            return;
+        }
         final int mode = panel.getMode();
         workingOnPreview = true;
         final Runnable update = new Runnable() {
@@ -155,16 +171,21 @@ public class MainTableSelectionListener implements ListEventListener, MouseListe
         // First find the column on which the user has clicked.
         final int col = table.columnAtPoint(e.getPoint()),
                 row = table.rowAtPoint(e.getPoint());
+
         // Check if the user has right-clicked. If so, open the right-click menu.
         if (e.isPopupTrigger()) {
-            processPopupTrigger(e, row);
-            return;
+            // Check if the user has clicked on an icon cell to open url or pdf.
+            final String[] iconType = table.getIconTypeForColumn(col);
+            
+            if (iconType == null)
+                processPopupTrigger(e, row);
+            else
+                showIconRightClickMenu(e, row, iconType);
         }
     }
 
      public void mousePressed(MouseEvent e) {
-
-
+         
         // First find the column on which the user has clicked.
         final int col = table.columnAtPoint(e.getPoint()),
                 row = table.rowAtPoint(e.getPoint());
@@ -189,6 +210,12 @@ public class MainTableSelectionListener implements ListEventListener, MouseListe
             return;
         }
 
+         // Workaround for Windows. Right-click is not popup trigger on mousePressed, but
+         // on mouseReleased. Therefore we need to avoid taking action at this point, because
+         // action will be taken when the button is released:
+        if (Globals.ON_WIN && (iconType != null) && (e.getButton() != MouseEvent.BUTTON1))
+            return;
+
 
         if (iconType != null) {
 
@@ -218,7 +245,24 @@ public class MainTableSelectionListener implements ListEventListener, MouseListe
                     }
 
                     try {
-                        Util.openExternalViewer(panel.metaData(), (String)link, fieldName);
+                        // See if this is a simple file link field, or if it is a file-list
+                        // field that can specify a list of links:
+                        if (fieldName.equals(GUIGlobals.FILE_FIELD)) {
+
+                            // We use a FileListTableModel to parse the field content:
+                            FileListTableModel fileList = new FileListTableModel();
+                            fileList.setContent((String)link);
+                            // If there are one or more links, open the first one:
+                            if (fileList.getRowCount() > 0) {
+                                FileListEntry flEntry = fileList.getEntry(0);
+                                ExternalFileMenuItem item = new ExternalFileMenuItem
+                                        (panel.frame(), entry, "",
+                                        flEntry.getLink(), flEntry.getType().getIcon(),
+                                        panel.metaData(), flEntry.getType());
+                                item.actionPerformed(null);
+                            }
+                        } else
+                            Util.openExternalViewer(panel.metaData(), (String)link, fieldName);
                     }
                     catch (IOException ex) {
                         panel.output(Globals.lang("Error") + ": " + ex.getMessage());
@@ -260,14 +304,37 @@ public class MainTableSelectionListener implements ListEventListener, MouseListe
         BibtexEntry entry = (BibtexEntry) tableRows.get(row);
         JPopupMenu menu = new JPopupMenu();
         int count = 0;
-        for (int i=0; i<iconType.length; i++) {
-            Object o = entry.getField(iconType[i]);
-            if (o != null) {
-                menu.add(new ExternalFileMenuItem((String)o, (String)o,
-                        GUIGlobals.getTableIcon(iconType[i]).getIcon(),
-                        panel.metaData()));
+
+        // See if this is a simple file link field, or if it is a file-list
+        // field that can specify a list of links:
+        if (iconType[0].equals(GUIGlobals.FILE_FIELD)) {
+            // We use a FileListTableModel to parse the field content:
+            Object o = entry.getField(iconType[0]);
+            FileListTableModel fileList = new FileListTableModel();
+            fileList.setContent((String)o);
+            // If there are one or more links, open the first one:
+            for (int i=0; i<fileList.getRowCount(); i++) {
+                FileListEntry flEntry = fileList.getEntry(i);
+                String description = flEntry.getDescription();
+                if ((description == null) || (description.trim().length() == 0))
+                    description = flEntry.getLink();
+                menu.add(new ExternalFileMenuItem(panel.frame(), entry, description,
+                        flEntry.getLink(), flEntry.getType().getIcon(), panel.metaData(),
+                        flEntry.getType()));
                 count++;
             }
+
+        }
+        else {
+            for (int i=0; i<iconType.length; i++) {
+                Object o = entry.getField(iconType[i]);
+                if (o != null) {
+                    menu.add(new ExternalFileMenuItem(panel.frame(), entry, (String)o, (String)o,
+                            GUIGlobals.getTableIcon(iconType[i]).getIcon(),
+                            panel.metaData()));
+                    count++;
+                }
+            }
         }
         if (count == 0) {
             processPopupTrigger(e, row);
diff --git a/src/java/net/sf/jabref/imports/BibtexParser.java b/src/java/net/sf/jabref/imports/BibtexParser.java
index 20dd13b..d287f46 100644
--- a/src/java/net/sf/jabref/imports/BibtexParser.java
+++ b/src/java/net/sf/jabref/imports/BibtexParser.java
@@ -36,6 +36,7 @@ import java.util.Collection;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.regex.Pattern;
+import java.util.regex.Matcher;
 
 import net.sf.jabref.BibtexDatabase;
 import net.sf.jabref.BibtexEntry;
@@ -235,11 +236,23 @@ public class BibtexParser {
 		if (_pr != null)
 			return _pr;
 
-		_db = new BibtexDatabase(); // Bibtex related contents.
+        _db = new BibtexDatabase(); // Bibtex related contents.
 		_meta = new HashMap(); // Metadata in comments for Bibkeeper.
 		entryTypes = new HashMap(); // To store custem entry types parsed.
 		_pr = new ParserResult(_db, _meta, entryTypes);
-		skipWhitespace();
+
+        // First see if we can find the version number of the JabRef version that
+        // wrote the file:
+        String versionNum = readJabRefVersionNumber();
+        if (versionNum != null) {
+            _pr.setJabrefVersion(versionNum);
+            setMajorMinorVersions();
+        }
+        else {
+            // No version number found. However, we have only
+        }
+
+        skipWhitespace();
 
 		try {
 			while (!_eof) {
@@ -874,4 +887,75 @@ public class BibtexParser {
 			}
 		}
 	}
+
+    /**
+     * Read the JabRef signature, if any, and find what version number is given.
+     * This method advances the file reader only as far as the end of the first line of
+     * the JabRef signature, or up until the point where the read characters don't match
+     * the signature. This should ensure that the parser can continue from that spot without
+     * resetting the reader, without the risk of losing important contents.
+     *
+     * @return The version number, or null if not found.
+     * @throws IOException
+     */
+    private String readJabRefVersionNumber() throws IOException {
+        StringBuffer headerText = new StringBuffer();
+        
+        boolean keepon = true;
+        int piv = 0;
+        int c;
+
+        // We start by reading the standard part of the signature, which precedes
+        // the version number:
+        //                     This file was created with JabRef X.y.
+        while (keepon) {
+            c = peek();
+            headerText.append((char) c);
+            if (((piv == 0) && Character.isWhitespace((char) c))
+                    || (c == GUIGlobals.SIGNATURE.charAt(piv))) {
+                piv++;
+                read();
+            }
+            else {
+                keepon = false;
+                return null;
+            }
+
+            // Check if we've reached the end of the signature's standard part:
+            if (piv == GUIGlobals.SIGNATURE.length()) {
+                keepon = false;
+
+                // Found the standard part. Now read the version number:
+                StringBuilder sb = new StringBuilder();
+                while (((c=read()) != '\n') && (c != -1))
+                    sb.append((char)c);
+                String versionNum = sb.toString().trim();
+                // See if it fits the X.y. pattern:
+                if (Pattern.compile("[1-9]+\\.[1-9A-Za-z ]+\\.").matcher(versionNum).matches()) {
+                    // It matched. Remove the last period and return:
+                    return versionNum.substring(0, versionNum.length()-1);
+                }
+
+            }
+        }
+
+        return null;
+    }
+
+    /**
+     * After a JabRef version number has been parsed and put into _pr,
+     * parse the version number to determine the JabRef major and minor version
+     * number
+     */
+    private void setMajorMinorVersions() {
+        String v = _pr.getJabrefVersion();
+        Pattern p = Pattern.compile("([0-9]+)\\.([0-9]+).*");
+        Matcher m = p.matcher(v);
+        if (!m.matches())
+            return;
+        if (m.groupCount() >= 2) {
+            _pr.setJabrefMajorVersion(Integer.parseInt(m.group(1)));
+            _pr.setJabrefMinorVersion(Integer.parseInt(m.group(2)));
+        }
+    }
 }
diff --git a/src/java/net/sf/jabref/imports/CheckForNewEntryTypesAction.java b/src/java/net/sf/jabref/imports/CheckForNewEntryTypesAction.java
new file mode 100644
index 0000000..c8974d5
--- /dev/null
+++ b/src/java/net/sf/jabref/imports/CheckForNewEntryTypesAction.java
@@ -0,0 +1,55 @@
+package net.sf.jabref.imports;
+
+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.
+ */
+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();
+            if (BibtexEntryType.ALL_TYPES.get(typeName) != null)
+                i.remove();
+        }
+        return pr.getEntryTypes().size() > 0;
+    }
+
+    public void performAction(BasePanel panel, ParserResult pr) {
+
+        StringBuffer sb = new StringBuffer(Globals.lang("Custom entry types found in file") + ": ");
+        Object[] types = pr.getEntryTypes().keySet().toArray();
+        Arrays.sort(types);
+        for (int i = 0; i < types.length; i++) {
+            sb.append(types[i].toString()).append(", ");
+        }
+        String s = sb.toString();
+        int answer = JOptionPane.showConfirmDialog(panel.frame(),
+                s.substring(0, s.length() - 2) + ".\n"
+                        + Globals.lang("Remember these entry types?"),
+                Globals.lang("Custom entry types"),
+                JOptionPane.YES_NO_OPTION,
+                JOptionPane.QUESTION_MESSAGE);
+        if (answer == JOptionPane.YES_OPTION) {
+            // Import
+            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());
+                BibtexEntryType.ALL_TYPES.put(typ.getName().toLowerCase(), typ);
+            }
+
+        }
+    }
+
+}
diff --git a/src/java/net/sf/jabref/imports/CopacImporter.java b/src/java/net/sf/jabref/imports/CopacImporter.java
new file mode 100644
index 0000000..8d05b29
--- /dev/null
+++ b/src/java/net/sf/jabref/imports/CopacImporter.java
@@ -0,0 +1,157 @@
+package net.sf.jabref.imports;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.regex.Pattern;
+
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.BibtexEntryType;
+import net.sf.jabref.BibtexFields;
+
+/**
+ * Importer for COPAC format.
+ * 
+ * Documentation can be found online at:
+ * 
+ * http://copac.ac.uk/faq/#format
+ * 
+ * @author $Author: coezbek $
+ * @version $Revision: 1.1 $ ($Date: 2007/02/06 16:27:22 $)
+ * 
+ */
+public class CopacImporter extends ImportFormat {
+	/**
+	 * Return the name of this import format.
+	 */
+	public String getFormatName() {
+		return "Copac";
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see net.sf.jabref.imports.ImportFormat#getCLIId()
+	 */
+	public String getCLIId() {
+		return "cpc";
+	}
+
+	static final Pattern copacPattern = Pattern.compile("^\\s*TI- ");
+
+	/**
+	 * Check whether the source is in the correct format for this importer.
+	 */
+	public boolean isRecognizedFormat(InputStream stream) throws IOException {
+
+		BufferedReader in = new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
+
+		String str;
+
+		while ((str = in.readLine()) != null) {
+			if (copacPattern.matcher(str).find())
+				return true;
+		}
+
+		return false;
+	}
+
+	/**
+	 * Parse the entries in the source, and return a List of BibtexEntry
+	 * objects.
+	 */
+	public List 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();
+
+		{ // Preprocess entries
+			String str;
+			StringBuffer sb = new StringBuffer();
+
+			while ((str = in.readLine()) != null) {
+
+				if (str.length() < 4)
+					continue;
+
+				String code = str.substring(0, 4);
+
+				if (code.equals("    ")) {
+					sb.append(" ").append(str.trim());
+				} else {
+
+					// begining of a new item
+					if (str.substring(0, 4).equals("TI- ")) {
+						if (sb.length() > 0) {
+							entries.add(sb.toString());
+						}
+						sb = new StringBuffer();
+					}
+					sb.append('\n').append(str);
+				}
+			}
+			if (sb.length() > 0)
+				entries.add(sb.toString());
+		}
+
+		List results = new LinkedList();
+
+		Iterator it = entries.iterator();
+		while (it.hasNext()) {
+
+			// Copac does not contain enough information on the type of the
+			// document. A book is assumed.
+			BibtexEntry b = new BibtexEntry(BibtexFields.DEFAULT_BIBTEXENTRY_ID,
+				BibtexEntryType.BOOK);
+
+			String[] lines = it.next().toString().split("\n");
+
+			for (int i = 0; i < lines.length; i++) {
+				String line = lines[i].trim();
+				if (line.length() < 4)
+					continue;
+				String code = line.substring(0, 4);
+
+				if (code.equals("TI- "))
+					setOrAppend(b, "title", line.substring(4).trim(), ", ");
+				else if (code.equals("AU- "))
+					setOrAppend(b, "author", line.substring(4).trim(), " and ");
+				else if (code.equals("PY- "))
+					setOrAppend(b, "year", line.substring(4).trim(), ", ");
+				else if (code.equals("PU- "))
+					setOrAppend(b, "publisher", line.substring(4).trim(), ", ");
+				else if (code.equals("SE- "))
+					setOrAppend(b, "series", line.substring(4).trim(), ", ");
+				else if (code.equals("IS- "))
+					setOrAppend(b, "isbn", line.substring(4).trim(), ", ");
+				else if (code.equals("KW- "))
+					setOrAppend(b, "keywords", line.substring(4).trim(), ", ");
+				else if (code.equals("NT- "))
+					setOrAppend(b, "note", line.substring(4).trim(), ", ");
+				else if (code.equals("PD- "))
+					setOrAppend(b, "physicaldimensions", line.substring(4).trim(), ", ");
+				else if (code.equals("DT- "))
+					setOrAppend(b, "documenttype", line.substring(4).trim(), ", ");
+				else
+					setOrAppend(b, code.substring(0, 2), line.substring(4).trim(), ", ");
+			}
+			results.add(b);
+		}
+
+		return results;
+	}
+
+	void setOrAppend(BibtexEntry b, String field, String value, String separator) {
+		Object o = b.getField(field);
+		if (o != null)
+			b.setField(field, (String) o + separator + value);
+		else
+			b.setField(field, value);
+	}
+}
diff --git a/src/java/net/sf/jabref/imports/EndnoteImporter.java b/src/java/net/sf/jabref/imports/EndnoteImporter.java
index d52d361..d1ab52e 100644
--- a/src/java/net/sf/jabref/imports/EndnoteImporter.java
+++ b/src/java/net/sf/jabref/imports/EndnoteImporter.java
@@ -43,12 +43,12 @@ public class EndnoteImporter extends ImportFormat {
 
     // Our strategy is to look for the "%A *" line.
     BufferedReader in = new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
-    Pattern pat1 = Pattern
-        .compile("%A .*");
+    Pattern pat1 = Pattern.compile("%A .*"),
+            pat2 = Pattern.compile("%E .*");
     String str;
     while ((str = in.readLine()) != null){
-        if (pat1.matcher(str).find())
-        return true;
+        if (pat1.matcher(str).matches() || pat2.matcher(str).matches())
+            return true;
     }
     return false;
     }
@@ -81,12 +81,12 @@ public class EndnoteImporter extends ImportFormat {
 
     String[] entries = sb.toString().split(ENDOFRECORD);
     HashMap hm = new HashMap();
-    String Author = "", Type = "", Editor = "";
+    String author = "", Type = "", editor = "";
     for (int i = 0; i < entries.length; i++){
         hm.clear();
-        Author = "";
+        author = "";
         Type = "";
-        Editor = "";
+        editor = "";
         boolean IsEditedBook = false;
         String[] fields = entries[i].trim().substring(1).split("\n%");
         //String lastPrefix = "";
@@ -112,11 +112,11 @@ public class EndnoteImporter extends ImportFormat {
         String val = fields[j].substring(2);
 
         if (prefix.equals("A")){
-            if (Author.equals("")) Author = val;
-            else Author += " and " + val;
+            if (author.equals("")) author = val;
+            else author += " and " + val;
         }else if (prefix.equals("E")){
-            if (Editor.equals("")) Editor = val;
-            else Editor += " and " + val;
+            if (editor.equals("")) editor = val;
+            else editor += " and " + val;
         }else if (prefix.equals("T")) hm.put("title", val);
         else if (prefix.equals("0")){
             if (val.indexOf("Journal") == 0) Type = "article";
@@ -174,14 +174,14 @@ public class EndnoteImporter extends ImportFormat {
 
         // For Edited Book, EndNote puts the editors in the author field.
         // We want them in the editor field so that bibtex knows it's an edited book
-        if (IsEditedBook && Editor.equals("")) {
-           Editor = Author;
-           Author = "";
+        if (IsEditedBook && editor.equals("")) {
+           editor = author;
+           author = "";
         }
 
         //fixauthorscomma
-        if (!Author.equals("")) hm.put("author", fixAuthor(Author));
-        if (!Editor.equals("")) hm.put("editor", fixAuthor(Editor));
+        if (!author.equals("")) hm.put("author", fixAuthor(author));
+        if (!editor.equals("")) hm.put("editor", fixAuthor(editor));
         BibtexEntry b = new BibtexEntry(BibtexFields.DEFAULT_BIBTEXENTRY_ID, Globals
                         .getEntryType(Type)); // id assumes an existing database so don't
         // create one here
diff --git a/src/java/net/sf/jabref/imports/EntryFetcher.java b/src/java/net/sf/jabref/imports/EntryFetcher.java
index aca947d..11347f5 100644
--- a/src/java/net/sf/jabref/imports/EntryFetcher.java
+++ b/src/java/net/sf/jabref/imports/EntryFetcher.java
@@ -1,59 +1,66 @@
 package net.sf.jabref.imports;
 
-import net.sf.jabref.gui.ImportInspectionDialog;
-import net.sf.jabref.BasePanel;
-import net.sf.jabref.JabRefFrame;
-
-import javax.swing.*;
 import java.net.URL;
 
+import javax.swing.JPanel;
+
+import net.sf.jabref.JabRefFrame;
+import net.sf.jabref.gui.ImportInspectionDialog;
+
 /**
- * Created by IntelliJ IDEA.
- * User: alver
- * Date: Mar 26, 2006
- * Time: 1:50:58 AM
- * To change this template use File | Settings | File Templates.
+ * 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.
  */
 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);
-
-    /**
-     * The title for this fetcher
-     * @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 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();
-
-    /**
-     * 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();
+	/**
+	 * 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);
+
+	/**
+	 * The title for this fetcher
+	 * 
+	 * @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 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();
+
+	/**
+	 * 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();
 }
diff --git a/src/java/net/sf/jabref/imports/FieldContentParser.java b/src/java/net/sf/jabref/imports/FieldContentParser.java
index fd2afa9..7568d27 100644
--- a/src/java/net/sf/jabref/imports/FieldContentParser.java
+++ b/src/java/net/sf/jabref/imports/FieldContentParser.java
@@ -17,7 +17,14 @@ public class FieldContentParser {
      * or may not be the same as the argument given.
      */
     public StringBuffer format(StringBuffer content) {
-
+        /*System.out.println("Content: '"+content+"'");
+        byte[] bt = content.toString().getBytes();
+        for (int i = 0; i < bt.length; i++) {
+            byte b = bt[i];
+            System.out.print(b+" ");
+        }
+        System.out.println("");
+        */
         //boolean rep = false;
 
         int i=0;
@@ -26,27 +33,25 @@ public class FieldContentParser {
         // TODO: 2005.12.3: Added replace from \r to \n, to work around a reported problem of words stiched together.
         // But: we need to find out why these lone \r characters appear in his file.
         content = new StringBuffer(content.toString().replaceAll("\r\n","\n").replaceAll("\r", "\n"));
-        //if (rep) System.out.println(content.toString());
-        /*while (i<content.length()) {
-            if (content.charAt(i) == '\r')
-                content.deleteCharAt(i);
-            else i++;
-        }
 
-        i=0;*/
         while (i<content.length()) {
 
             int c = content.charAt(i);
             if (c == '\n') {
-                if ((content.length()>i+2) && (content.charAt(i+1)=='\t')
-                    && !Character.isWhitespace(content.charAt(i+2))) {
-                    // We have \n\t followed by non-whitespace, which indicates
-                    // a wrap made by JabRef. Remove and insert space if necessary.
+                if ((content.length()>i+1) && (content.charAt(i+1)=='\t')
+                    && ((content.length()==i+2) || !Character.isWhitespace(content.charAt(i+2)))) {
+                    // We have either \n\t followed by non-whitespace, or \n\t at the
+                    // end. Bothe cases indicate a wrap made by JabRef. Remove and insert space if necessary.
 
                     content.deleteCharAt(i); // \n
                     content.deleteCharAt(i); // \t
                     // Add space only if necessary:
-                    if ((i>0) && !Character.isWhitespace(content.charAt(i-1))) {
+                    // Note 2007-05-26, mortenalver: the following line was modified. It previously
+                    // didn't add a space if the line break was at i==0. This caused some occurences of
+                    // "string1 # { and } # string2" constructs lose the space in front of the "and" because
+                    // the line wrap caused a JabRef linke break at the start of a value containing the " and ".
+                    // The bug was caused by a protective check for i>0 to avoid intexing char -1 in content.
+                    if ((i==0) || !Character.isWhitespace(content.charAt(i-1))) {
                         content.insert(i, ' ');
                         // Increment i because of the inserted character:
                         i++;
@@ -57,7 +62,6 @@ public class FieldContentParser {
                     && !Character.isWhitespace(content.charAt(i+3))) {
                     // We have \n\t followed by ' ' followed by non-whitespace, which indicates
                     // a wrap made by JabRef <= 1.7.1. Remove:
-
                     content.deleteCharAt(i); // \n
                     content.deleteCharAt(i); // \t
                     // Remove space only if necessary:
@@ -114,7 +118,7 @@ public class FieldContentParser {
                 i++;
 
         }
-
+        
         return content;
     }
 
@@ -126,11 +130,7 @@ public class FieldContentParser {
      * @return the wrapped String.
      */
     public static String wrap(String in, int wrapAmount){
-        // JZ: due to the formatting/wrapping bug, I temporarily disabled
-        // the below code to prevent JabRef from modifying .bib files in
-        // a way that may require manual correction.
-        //return in;
-
+        
         String[] lines = in.split("\n");
         StringBuffer res = new StringBuffer();
         addWrappedLine(res, lines[0], wrapAmount);
diff --git a/src/java/net/sf/jabref/imports/IEEEXploreFetcher.java b/src/java/net/sf/jabref/imports/IEEEXploreFetcher.java
index 82a207a..9e4d89c 100644
--- a/src/java/net/sf/jabref/imports/IEEEXploreFetcher.java
+++ b/src/java/net/sf/jabref/imports/IEEEXploreFetcher.java
@@ -7,6 +7,7 @@ import net.sf.jabref.gui.ImportInspectionDialog;
 import javax.swing.*;
 import java.net.URL;
 import java.net.MalformedURLException;
+import java.net.ConnectException;
 import java.io.*;
 import java.util.regex.Pattern;
 import java.util.regex.Matcher;
@@ -186,8 +187,13 @@ public class IEEEXploreFetcher implements Runnable, EntryFetcher {
             dialog.entryListComplete();
         } catch (MalformedURLException e) {
             e.printStackTrace();
+        } catch (ConnectException e) {
+            JOptionPane.showMessageDialog(frame, 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.
         }
 
 
@@ -424,6 +430,7 @@ public class IEEEXploreFetcher implements Runnable, EntryFetcher {
      * @throws IOException
      */
     public String getResults(URL source) throws IOException {
+        
         InputStream in = source.openStream();
         StringBuffer sb = new StringBuffer();
         byte[] buffer = new byte[256];
diff --git a/src/java/net/sf/jabref/imports/ImportFormatReader.java b/src/java/net/sf/jabref/imports/ImportFormatReader.java
index f6ee34d..3fac1ca 100644
--- a/src/java/net/sf/jabref/imports/ImportFormatReader.java
+++ b/src/java/net/sf/jabref/imports/ImportFormatReader.java
@@ -24,38 +24,27 @@
  */
 package net.sf.jabref.imports;
 
-import net.sf.jabref.*;
-
 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.SortedSet;
-import java.util.TreeSet;
 import java.util.Iterator;
 import java.util.List;
+import java.util.SortedSet;
+import java.util.TreeSet;
 
-import java.util.regex.*;
+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;
 
 
-/*
- * // int jabrefframe BibtexDatabase database=new BibtexDatabase(); String
- * filename=Globals.getNewFile(); ArrayList bibitems=readISI(filename); // is
- * there a getFileName(); Iterator it = bibitems.iterator();
- * while(it.hasNext()){ BibtexEntry entry = (BibtexEntry)it.next();
- * entry.setId(Util.createId(entry.getType(), database); try {
- * database.insertEntry(entry); } catch (KeyCollisionException ex) {
- *  } }
- */
 public class ImportFormatReader {
 
     public static String BIBTEX_FORMAT = "BibTeX";
-    private final static String SPACE_MARKER = "__SPC__";
-    private final static Pattern bracketsPattern = Pattern.compile("\\{.*\\}"),
-	spaceMarkerPattern = Pattern.compile(SPACE_MARKER);
 
   /** all import formats, in the defalt order of import formats */
   private SortedSet formats = new TreeSet();
@@ -85,6 +74,8 @@ public class ImportFormatReader {
     formats.add(new BiomailImporter());
     formats.add(new RepecNepImporter());  
     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(); ) {
@@ -197,7 +188,7 @@ public class ImportFormatReader {
    * 
    * <p>Elements are in default order.</p>
    * 
-   * @return all custom importers, elements are of type {@link InputFormat}
+   * @return all custom importers, elements are of type InputFormat
    */
   public SortedSet getCustomImportFormats() {
     SortedSet result = new TreeSet();
@@ -215,7 +206,7 @@ public class ImportFormatReader {
    * 
    * <p>Elements are in default order.</p>
    * 
-   * @return all custom importers, elements are of type {@link InputFormat}
+   * @return all custom importers, elements are of type InputFormat
    */
   public SortedSet getBuiltInInputFormats() {
     SortedSet result = new TreeSet();
@@ -233,7 +224,7 @@ public class ImportFormatReader {
    * 
    * <p>Elements are in default order.</p>
    * 
-   * @return all custom importers, elements are of type {@link InputFormat}
+   * @return all custom importers, elements are of type InputFormat
    */
   public SortedSet getImportFormats() {
     return this.formats;
@@ -454,6 +445,11 @@ public class ImportFormatReader {
     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();
diff --git a/src/java/net/sf/jabref/imports/ImportMenuItem.java b/src/java/net/sf/jabref/imports/ImportMenuItem.java
index 7dcf879..e4608d2 100644
--- a/src/java/net/sf/jabref/imports/ImportMenuItem.java
+++ b/src/java/net/sf/jabref/imports/ImportMenuItem.java
@@ -165,7 +165,9 @@ public class ImportMenuItem extends JMenuItem implements ActionListener {
                                         LabelPatternUtil.makeLabel(Globals.prefs.getKeyPattern(), toAddTo, entry);
                                         //System.out.println("gen:"+entry.getCiteKey());
                                     }
-                                    
+                                    // Let the autocompleters, if any, harvest words from the entry: 
+                                    Util.updateCompletersForEntry(panel.getAutoCompleters(), entry);
+
                                     ce.addEdit(new UndoableInsertEntry(toAddTo, entry, panel));
                                 }
                             } catch (KeyCollisionException e) {
diff --git a/src/java/net/sf/jabref/imports/MedlineHandler.java b/src/java/net/sf/jabref/imports/MedlineHandler.java
index 2085efd..6c1af6b 100644
--- a/src/java/net/sf/jabref/imports/MedlineHandler.java
+++ b/src/java/net/sf/jabref/imports/MedlineHandler.java
@@ -45,9 +45,10 @@ public class MedlineHandler extends DefaultHandler
 		inMedlineID = false,		inURL=false,
 		inIssue = false,			inPubDate = false,
 		inUrl=false, inForename=false, inAbstractText=false, inMedlineDate=false,
-		inPubMedID=false, inDescriptorName=false,inDoi=false,inPii=false;
+		inPubMedID=false, inDescriptorName=false,inDoi=false,inPii=false,
+        inAffiliation=false;
     String title="", journal="", keywords ="",author="",
-		lastName="",year="",forename="", abstractText="";
+		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="";
@@ -116,7 +117,7 @@ public class MedlineHandler extends DefaultHandler
 
 			}
 		}
-
+        else if(localName.equals("Affiliation")){ inAffiliation=true; }
 
 
 		return;
@@ -187,7 +188,8 @@ public class MedlineHandler extends DefaultHandler
 			}
 			if(!pii.equals(""))
 			    b.setField("pii",pii);
-
+            if(!affiliation.equals(""))
+                b.setField("institution",affiliation);
             // PENDING jeffrey.kuhn at yale.edu 2005-05-27 : added "pmid" bibtex field
             // Older references do not have doi entries, but every
             // medline entry has a unique pubmed ID (aka primary ID).
@@ -207,7 +209,8 @@ public class MedlineHandler extends DefaultHandler
 			forename="";
 			lastName="";
 			abstractText="";
-			pubmedid="";
+            affiliation="";
+            pubmedid="";
 			month="";volume="";lastname="";initials="";number="";page="";medlineID="";url="";
 			MedlineDate="";
             descriptors.clear();
@@ -250,7 +253,8 @@ public class MedlineHandler extends DefaultHandler
 			inInitials=false;
 		}
 		else if(localName.equals("AbstractText")){ inAbstractText=false;}
-		else if(localName.equals("ArticleId")){
+        else if(localName.equals("Affiliation")){ inAffiliation=false; }
+        else if(localName.equals("ArticleId")){
 			if(inDoi)
 				inDoi=false;
 			else if(inPii)
@@ -283,6 +287,7 @@ public class MedlineHandler extends DefaultHandler
 		else if(inMedlineDate){ MedlineDate += new String(data,start,length);}
 		else if(inDoi){ doi=new String(data,start,length);}
 		else if(inPii){ pii=new String(data,start,length);}
+        else if(inAffiliation){ affiliation = new String(data,start,length);}
     }
 
     // PENDING jeffrey.kuhn at yale.edu 2005-05-27 : added fixPageRange method
diff --git a/src/java/net/sf/jabref/imports/MsBibImporter.java b/src/java/net/sf/jabref/imports/MsBibImporter.java
new file mode 100644
index 0000000..38b7a17
--- /dev/null
+++ b/src/java/net/sf/jabref/imports/MsBibImporter.java
@@ -0,0 +1,76 @@
+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.*;
+
+
+/**
+ * Importer for the MS Office 2007 XML bibliography format
+ * By S. M. Mahbub Murshed
+ *
+ * ...
+ */
+public class MsBibImporter extends ImportFormat {
+
+    public boolean isRecognizedFormat(InputStream in) throws IOException {
+
+        /*
+            This method is available for checking if a file can be of the MSBib type.
+            The effect of this method is primarily to avoid unnecessary processing of
+            files when searching for a suitable import format. If this method returns
+            false, the import routine will move on to the next import format.
+
+            The correct behaviour is to return false if it is certain that the file is
+            not of the MsBib type, and true otherwise. Returning true is the safe choice
+            if not certain.
+         */
+    	Document docin = null;
+    	try {
+    	DocumentBuilder dbuild = DocumentBuilderFactory.
+    								newInstance().
+    								newDocumentBuilder();
+   		docin = dbuild.parse(in);   		
+    	} catch (Exception e) {
+	   		return false;
+    	}
+    	if(docin!= null && docin.getDocumentElement().getTagName().contains("Sources") == false)
+    		return false;
+//   		NodeList rootLst = docin.getElementsByTagName("b:Sources");
+//   		if(rootLst.getLength()==0)
+//   			rootLst = docin.getElementsByTagName("Sources");
+//   		if(rootLst.getLength()==0)
+//   			return false;
+    	// System.out.println(docin.getDocumentElement().getTagName());
+        return true;
+    }
+
+    /**
+	 * String used to identify this import filter on the command line.
+	 * 
+	 * @override
+	 * @return "msbib"
+	 */
+	public String getCLIid() {
+		return "msbib";
+	}
+
+    public List importEntries(InputStream in) throws IOException {
+
+        MSBibDatabase dbase = new MSBibDatabase();
+
+        List entries = dbase.importEntries(in);
+
+        return entries;
+    }
+
+    public String getFormatName() {
+        // This method should return the name of this import format.
+        return "MSBib";
+    }
+
+}
diff --git a/src/java/net/sf/jabref/imports/OAI2Fetcher.java b/src/java/net/sf/jabref/imports/OAI2Fetcher.java
index 8fd973f..88c1658 100644
--- a/src/java/net/sf/jabref/imports/OAI2Fetcher.java
+++ b/src/java/net/sf/jabref/imports/OAI2Fetcher.java
@@ -35,272 +35,287 @@ import org.xml.sax.helpers.DefaultHandler;
  * @author Ulrich Stärk
  * @author Christian Kopf
  * 
- * @version $Revision: 1.2 $ ($Date: 2007/01/08 15:26:55 $)
+ * @version $Revision: 1.5 $ ($Date: 2007/03/10 19:22:06 $)
  * 
  */
 public class OAI2Fetcher implements EntryFetcher, Runnable {
 
-	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_SCRIPT = "oai2";
-
-	public static final String OAI2_ARXIV_METADATAPREFIX = "arXiv";
-
-	public static final String OAI2_ARXIV_ARCHIVENAME = "ArXiv.org";
-
-	public static final String OAI2_IDENTIFIER_FIELD = "oai2identifier";
-
-	private SAXParserFactory parserFactory;
-
-	private SAXParser saxParser;
-
-	private String oai2Host;
-
-	private String oai2Script;
-
-	private String oai2MetaDataPrefix;
-
-	private String oai2PrefixIdentifier;
-
-	private String oai2ArchiveName;
-
-	private boolean shouldContinue = true;
-
-	private String query;
-
-	private ImportInspectionDialog dialog;
-
-	private JabRefFrame frame;
-
-	/* some archives - like arxive.org - might expect of you to wait some time */
-
-	private boolean shouldWait() {
-		return waitTime > 0;
-	}
-
-	private long waitTime = -1;
-
-	private Date lastCall;
-
-	/**
-	 * 
-	 * 
-	 * @param oai2Host
-	 *            the host to query without leading http:// and without trailing /
-	 * @param oai2Script
-	 *            the relative location of the oai2 interface without leading
-	 *            and trailing /
-	 * @param oai2Metadataprefix
-	 *            the urlencoded metadataprefix
-	 * @param oai2Prefixidentifier
-	 *            the urlencoded prefix identifier
-	 * @param waitTimeMs
-	 *            Time to wait in milliseconds between query-requests.
-	 */
-	public OAI2Fetcher(String oai2Host, String oai2Script, String oai2Metadataprefix,
-		String oai2Prefixidentifier, String oai2ArchiveName, long waitTimeMs) {
-		this.oai2Host = oai2Host;
-		this.oai2Script = oai2Script;
-		this.oai2MetaDataPrefix = oai2Metadataprefix;
-		this.oai2PrefixIdentifier = oai2Prefixidentifier;
-		this.oai2ArchiveName = oai2ArchiveName;
-		this.waitTime = waitTimeMs;
-		try {
-			parserFactory = SAXParserFactory.newInstance();
-			saxParser = parserFactory.newSAXParser();
-		} catch (ParserConfigurationException e) {
-			e.printStackTrace();
-		} catch (SAXException e) {
-			e.printStackTrace();
-		}
-	}
-
-	/**
-	 * Default Constructor. The archive queried will be ArXiv.org
-	 * 
-	 */
-	public OAI2Fetcher() {
-		this(OAI2_ARXIV_HOST, OAI2_ARXIV_SCRIPT, OAI2_ARXIV_METADATAPREFIX,
-			OAI2_ARXIV_PREFIXIDENTIFIER, OAI2_ARXIV_ARCHIVENAME, 20000L);
-	}
-
-	/**
-	 * Construct the query URL
-	 * 
-	 * @param key
-	 *            The key of the OAI2 entry that the url should 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(oai2Host).append("/");
-		sb.append(oai2Script).append("?");
-		sb.append("verb=GetRecord");
-		sb.append("&identifier=");
-		sb.append(oai2PrefixIdentifier);
-		sb.append(identifier);
-		sb.append("&metadataPrefix=").append(oai2MetaDataPrefix);
-		return sb.toString();
-	}
-	
-	/**
-	 * Strip subccategories from ArXiv key.
-	 * 
-	 * @param key The key to fix.
-	 * @return Fixed key.
-	 */
-	public static String fixKey(String key){
-		int dot = key.indexOf('.');
-		int slash = key.indexOf('/');
-		
-		if (dot > -1 && dot < slash)
-			key = key.substring(0, dot) + key.substring(slash, key.length());
-	
-		return key;
-	}
-
-	/**
-	 * 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.
-	 */
-	public BibtexEntry importOai2Entry(String key) {
-		/**
-		 * Fix for problem reported in mailing-list: 
-		 *   https://sourceforge.net/forum/message.php?msg_id=4087158
-		 */
-		key = fixKey(key);
-		
-		String url = constructUrl(key);
-		try {
-			URL oai2Url = new URL(url);
-			HttpURLConnection oai2Connection = (HttpURLConnection) oai2Url.openConnection();
-			oai2Connection.setRequestProperty("User-Agent", "Jabref");
-			InputStream inputStream = oai2Connection.getInputStream();
-	
-			/* create an empty BibtexEntry and set the oai2identifier field */
-			BibtexEntry be = new BibtexEntry(Util.createNeutralId(), BibtexEntryType.ARTICLE);
-			be.setField(OAI2_IDENTIFIER_FIELD, key);
-			DefaultHandler handlerBase = new OAI2Handler(be);
-			/* parse the result */
-			saxParser.parse(inputStream, handlerBase);
-			return be;
-		} catch (IOException e) {
-			JOptionPane.showMessageDialog(frame, 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(
-				"An SAXException ocurred while parsing '%0':", url)
-				+ "\n\n" + e.getMessage(), Globals.lang(getKeyName()), JOptionPane.ERROR_MESSAGE);
-		} catch (RuntimeException e){
-			JOptionPane.showMessageDialog(frame, Globals.lang(
-				"An Error occurred while fetching from OAI2 source (%0):", url)
-				+ "\n\n" + e.getMessage(), Globals.lang(getKeyName()), JOptionPane.ERROR_MESSAGE);
-		} 
-		return null;
-	}
-
-	public String getHelpPage() {
-		// there is no helppage
-		return null;
-	}
-
-	public URL getIcon() {
-		return GUIGlobals.getIconUrl("www");
-	}
-
-	public String getKeyName() {
-		return "Fetch " + oai2ArchiveName;
-	}
-
-	public JPanel getOptionsPanel() {
-		// we have no additional options
-		return null;
-	}
-
-	public String getTitle() {
-		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 void stopFetching() {
-		shouldContinue = false;
-	}
-
-	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
-				 */
-				if (shouldWait() && lastCall != null) {
-
-					long elapsed = new Date().getTime() - lastCall.getTime();
-
-					while (elapsed < waitTime) {
-						frame.output("Waiting for ArXiv..." + ((waitTime - elapsed) / 1000) + " s");
-						Thread.sleep(1000);
-						elapsed = new Date().getTime() - lastCall.getTime();
-					}
-				}
-
-				frame.output("Processing " + key);
-
-				/* the cancel button has been hit */
-				if (!shouldContinue)
-					break;
-				
-				/* query the archive and load the results into the BibtexEntry */
-				BibtexEntry be = importOai2Entry(key);
-
-				if (shouldWait())
-					lastCall = new Date();
-				
-				/* add the entry to the inspection dialog */
-				if (be != null)
-					dialog.addEntry(be);
-
-				/* update the dialogs progress bar */
-				dialog.setProgress(i + 1, keys.length);
-			}
-			/* inform the inspection dialog, that we're done */
-			dialog.entryListComplete();
-			frame.output("");
-		} catch (InterruptedException e) {
-
-		}
-	}
+    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_SCRIPT = "oai2";
+
+    public static final String OAI2_ARXIV_METADATAPREFIX = "arXiv";
+
+    public static final String OAI2_ARXIV_ARCHIVENAME = "ArXiv.org";
+
+    public static final String OAI2_IDENTIFIER_FIELD = "oai2identifier";
+
+    private SAXParserFactory parserFactory;
+
+    private SAXParser saxParser;
+
+    private String oai2Host;
+
+    private String oai2Script;
+
+    private String oai2MetaDataPrefix;
+
+    private String oai2PrefixIdentifier;
+
+    private String oai2ArchiveName;
+
+    private boolean shouldContinue = true;
+
+    private String query;
+
+    private ImportInspectionDialog dialog;
+
+    private JabRefFrame frame;
+
+    /* some archives - like arxive.org - might expect of you to wait some time */
+
+    private boolean shouldWait() {
+        return waitTime > 0;
+    }
+
+    private long waitTime = -1;
+
+    private Date lastCall;
+
+    /**
+     * 
+     * 
+     * @param oai2Host
+     *            the host to query without leading http:// and without trailing /
+     * @param oai2Script
+     *            the relative location of the oai2 interface without leading
+     *            and trailing /
+     * @param oai2Metadataprefix
+     *            the urlencoded metadataprefix
+     * @param oai2Prefixidentifier
+     *            the urlencoded prefix identifier
+     * @param waitTimeMs
+     *            Time to wait in milliseconds between query-requests.
+     */
+    public OAI2Fetcher(String oai2Host, String oai2Script, String oai2Metadataprefix,
+        String oai2Prefixidentifier, String oai2ArchiveName, long waitTimeMs) {
+        this.oai2Host = oai2Host;
+        this.oai2Script = oai2Script;
+        this.oai2MetaDataPrefix = oai2Metadataprefix;
+        this.oai2PrefixIdentifier = oai2Prefixidentifier;
+        this.oai2ArchiveName = oai2ArchiveName;
+        this.waitTime = waitTimeMs;
+        try {
+            parserFactory = SAXParserFactory.newInstance();
+            saxParser = parserFactory.newSAXParser();
+        } catch (ParserConfigurationException e) {
+            e.printStackTrace();
+        } catch (SAXException e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * Default Constructor. The archive queried will be ArXiv.org
+     * 
+     */
+    public OAI2Fetcher() {
+        this(OAI2_ARXIV_HOST, OAI2_ARXIV_SCRIPT, OAI2_ARXIV_METADATAPREFIX,
+            OAI2_ARXIV_PREFIXIDENTIFIER, OAI2_ARXIV_ARCHIVENAME, 20000L);
+    }
+
+    /**
+     * Construct the query URL
+     * 
+     * @param key
+     *            The key of the OAI2 entry that the url should 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(oai2Host).append("/");
+        sb.append(oai2Script).append("?");
+        sb.append("verb=GetRecord");
+        sb.append("&identifier=");
+        sb.append(oai2PrefixIdentifier);
+        sb.append(identifier);
+        sb.append("&metadataPrefix=").append(oai2MetaDataPrefix);
+        return sb.toString();
+    }
+    
+    /**
+     * Strip subccategories from ArXiv key.
+     * 
+     * @param key The key to fix.
+     * @return Fixed key.
+     */
+    public static String fixKey(String key){
+        int dot = key.indexOf('.');
+        int slash = key.indexOf('/');
+        
+        if (dot > -1 && dot < slash)
+            key = key.substring(0, dot) + key.substring(slash, key.length());
+    
+        return key;
+    }
+
+    public static String correctLineBreaks(String s){
+        s = s.replaceAll("\\n(?!\\s*\\n)", " ");
+        s = s.replaceAll("\\s*\\n\\s*", "\n");
+        return s.replaceAll(" {2,}", " ").replaceAll("(^\\s*|\\s+$)", "");
+    }
+    
+    /**
+     * Import an entry from an OAI2 archive. The BibtexEntry provided has to
+     * have the field OAI2_IDENTIFIER_FIELD set to the search string.
+     * 
+     * @param key
+     *            The OAI2 key to fetch from ArXiv.
+     * @return The imnported BibtexEntry or null if none.
+     */
+    public BibtexEntry importOai2Entry(String key) {
+        /**
+         * Fix for problem reported in mailing-list: 
+         *   https://sourceforge.net/forum/message.php?msg_id=4087158
+         */
+        key = fixKey(key);
+        
+        String url = constructUrl(key);
+        try {
+            URL oai2Url = new URL(url);
+            HttpURLConnection oai2Connection = (HttpURLConnection) oai2Url.openConnection();
+            oai2Connection.setRequestProperty("User-Agent", "Jabref");
+            InputStream inputStream = oai2Connection.getInputStream();
+    
+            /* create an empty BibtexEntry and set the oai2identifier field */
+            BibtexEntry be = new BibtexEntry(Util.createNeutralId(), BibtexEntryType.ARTICLE);
+            be.setField(OAI2_IDENTIFIER_FIELD, key);
+            DefaultHandler handlerBase = new OAI2Handler(be);
+            /* parse the result */
+            saxParser.parse(inputStream, handlerBase);
+            
+            /* Correct line breaks and spacing */
+            Object[] fields = be.getAllFields();
+            for (int i = 0; i < fields.length; i++){
+                String name = fields[i].toString();
+                
+                be.setField(name, correctLineBreaks(be.getField(name).toString()));
+            }
+            return be;
+        } catch (IOException e) {
+            JOptionPane.showMessageDialog(frame, 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(
+                "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(
+                "An Error occurred while fetching from OAI2 source (%0):", new String[]{url})
+                + "\n\n" + e.getMessage(), Globals.lang(getKeyName()), JOptionPane.ERROR_MESSAGE);
+        } 
+        return null;
+    }
+
+    public String getHelpPage() {
+        // there is no helppage
+        return null;
+    }
+
+    public URL getIcon() {
+        return GUIGlobals.getIconUrl("www");
+    }
+
+    public String getKeyName() {
+        return "Fetch " + oai2ArchiveName;
+    }
+
+    public JPanel getOptionsPanel() {
+        // we have no additional options
+        return null;
+    }
+
+    public String getTitle() {
+        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 void stopFetching() {
+        shouldContinue = false;
+    }
+
+    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
+                 */
+                if (shouldWait() && lastCall != null) {
+
+                    long elapsed = new Date().getTime() - lastCall.getTime();
+
+                    while (elapsed < waitTime) {
+                        frame.output(Globals.lang("Waiting for ArXiv...") + ((waitTime - elapsed) / 1000) + " s");
+                        Thread.sleep(1000);
+                        elapsed = new Date().getTime() - lastCall.getTime();
+                    }
+                }
+
+                frame.output(Globals.lang("Processing ") + key);
+
+                /* the cancel button has been hit */
+                if (!shouldContinue)
+                    break;
+                
+                /* query the archive and load the results into the BibtexEntry */
+                BibtexEntry be = importOai2Entry(key);
+
+                if (shouldWait())
+                    lastCall = new Date();
+                
+                /* add the entry to the inspection dialog */
+                if (be != null)
+                    dialog.addEntry(be);
+
+                /* update the dialogs progress bar */
+                dialog.setProgress(i + 1, keys.length);
+            }
+            /* inform the inspection dialog, that we're done */
+            dialog.entryListComplete();
+            frame.output("");
+        } catch (Exception e) {
+            frame.output(Globals.lang("Error while fetching from OIA2: ") + e.getMessage());
+            e.printStackTrace();
+        }
+    }
 }
diff --git a/src/java/net/sf/jabref/imports/OAI2Handler.java b/src/java/net/sf/jabref/imports/OAI2Handler.java
index 0094ee5..d6ad321 100644
--- a/src/java/net/sf/jabref/imports/OAI2Handler.java
+++ b/src/java/net/sf/jabref/imports/OAI2Handler.java
@@ -1,7 +1,6 @@
 package net.sf.jabref.imports;
 
 import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.BibtexFields;
 
 import org.xml.sax.Attributes;
 import org.xml.sax.SAXException;
@@ -12,122 +11,90 @@ import org.xml.sax.helpers.DefaultHandler;
  * 
  * @author Ulrich Stärk
  * @author Christian Kopf
+ * @author Christopher Oezbek
+ * 
+ * @version $Revision: 1.4 $ ($Date: 2007/02/09 10:06:36 $)
  * 
- * @version $Revision: 1.2 $ ($Date: 2007/01/08 15:26:55 $)
- *
  */
 public class OAI2Handler extends DefaultHandler {
 
-	BibtexEntry be;
-	String nextField;
-	String authors = "";
+	BibtexEntry entry;
+
+	StringBuffer authors;
+
 	String keyname;
+
 	String forenames;
-	String key = "";
-	String year = "";
-	boolean assigned = false;
-	
+
+	StringBuffer characters;
+
 	public OAI2Handler(BibtexEntry be) {
-		this.be = be;
+		this.entry = be;
 	}
 	
-	public void endDocument() throws SAXException {
-		be.setField("author",authors);
-		if(year.length() > 0)
-			key += year.substring(year.length()-2, year.length());
-		be.setField(BibtexFields.KEY_FIELD,key);
+	public void startDocument() throws SAXException {
+		authors = new StringBuffer();
 	}
 
-	
-	public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
-		
-        if(localName.equals("id")) {
-			nextField = "id";
-			assigned = true;
-		} else if(localName.equals("keyname")) {
-			nextField = "keyname";
-			assigned = true;
-		} else if(localName.equals("author")) {
-			keyname = "";
-			forenames = "";
-		} else if(localName.equals("forenames")) {
-			nextField = "forenames";
-			assigned = true;
-		} else if(localName.equals("journal-ref")) {
-			nextField = "journal-ref";
-			assigned = true;
-		} else if(localName.equals("datestamp")) {
-			nextField = "datestamp";
-			assigned = true;
-		} else if(localName.equals("title")) {
-			nextField = "title";
-			assigned = true;
-		} else if(localName.equals("abstract")) {
-			nextField = "abstract";
-			assigned = true;
-		} else if(localName.equals("comments")) {
-			nextField = "comments";
-			assigned = true;
-		} else if(localName.equals("report-no")) {
-			nextField = "reportno";
-			assigned = true;
-		} else if(localName.equals("error")) {
-		    nextField = "error";
-            assigned = true;
-        }
+	public void characters(char[] ch, int start, int length) throws SAXException {
+		characters.append(ch, start, length);
 	}
 
-	
-	public void endElement(String uri, String localName, String qName) throws SAXException {
-		if(localName.equals("author")) {
-			String temp = forenames + " " + keyname;
-			if(!authors.equals(""))
-				authors += " and ";
-			authors += temp;
-		}
+	public void startElement(String uri, String localName, String qualifiedName,
+		Attributes attributes) throws SAXException {
+
+		characters = new StringBuffer();
 	}
 
-	
-	public void characters(char[] ch, int start, int length) throws SAXException {
-		String content = new String(ch,start,length);
-		if(assigned) {
-		    if (nextField.equals("error")) {
-                throw new RuntimeException(content);
-            } else if(nextField.equals("id")) {
-				be.setField("eprint",content);
-			} else if(nextField.equals("keyname")) {
-				keyname = content;
-				key += content.substring(0,3);
-			} else if(nextField.equals("forenames")) {
-				forenames = content;
-			} else if(nextField.equals("journal-ref")) {
-				String journal = content.replaceFirst("[0-9].*", "");
-				be.setField("journal", journal);
-				String volume = content.replaceFirst(journal,"");
-				volume = volume.replaceFirst(" .*", "");
-				be.setField("volume", volume);
-				year = content.replaceFirst(".*?\\(", "");
-				year = year.replaceFirst("\\).*", "");
-				be.setField("year", year);
-				String pages = content.replaceFirst(journal,"");
-				pages = pages.replaceFirst(volume, "");
-				pages = pages.replaceFirst("\\("+year+"\\)", "");
-				pages = pages.replaceAll(" ", "");
-				be.setField("pages", pages);
-			} else if(nextField.equals("datestamp")) {
-				if(year.equals(""))
-					year = content.replaceFirst("-.*", "");
-				be.setField("year", year);
-			} else if(nextField.equals("title")) {
-				be.setField("title",content);
-			} else if(nextField.equals("abstract")) {
-				be.setField("abstract",content);
-			} else if(nextField.equals("comments")) {
-				be.setField("comments",content);
-			} else if(nextField.equals("reportno")) {
-				be.setField("reportno",content);
+	public void endElement(String uri, String localName, String qualifiedName) throws SAXException {
+
+		String content = characters.toString();
+
+		if (qualifiedName.equals("error")) {
+			throw new RuntimeException(content);
+		} else if (qualifiedName.equals("id")) {
+			entry.setField("eprint", content);
+		} else if (qualifiedName.equals("keyname")) {
+			keyname = content;
+		} else if (qualifiedName.equals("forenames")) {
+			forenames = content;
+		} else if (qualifiedName.equals("journal-ref")) {
+			String journal = content.replaceFirst("[0-9].*", "");
+			entry.setField("journal", journal);
+			String volume = content.replaceFirst(journal, "");
+			volume = volume.replaceFirst(" .*", "");
+			entry.setField("volume", volume);
+			String year = content.replaceFirst(".*?\\(", "");
+			year = year.replaceFirst("\\).*", "");
+			entry.setField("year", year);
+			String pages = content.replaceFirst(journal, "");
+			pages = pages.replaceFirst(volume, "");
+			pages = pages.replaceFirst("\\(" + year + "\\)", "");
+			pages = pages.replaceAll(" ", "");
+			entry.setField("pages", pages);
+		} else if (qualifiedName.equals("datestamp")) {
+			String year = (String) entry.getField("year");
+			if (year == null || year.equals("")) {
+				entry.setField("year", content.replaceFirst("-.*", ""));
 			}
-			assigned = false;
+		} else if (qualifiedName.equals("title")) {
+			entry.setField("title", content);
+		} else if (qualifiedName.equals("abstract")) {
+			entry.setField("abstract", content);
+		} else if (qualifiedName.equals("comments")) {
+			entry.setField("comments", content);
+		} else if (qualifiedName.equals("report-no")) {
+			entry.setField("reportno", content);
+		} else if (qualifiedName.equals("author")) {
+			String author = forenames + " " + keyname;
+			if (authors.length() > 0)
+				authors.append(" and ");
+			authors.append(author);
 		}
 	}
+
+	public void endDocument() throws SAXException {
+		entry.setField("author", authors.toString());
+	}
+
 }
diff --git a/src/java/net/sf/jabref/imports/OpenDatabaseAction.java b/src/java/net/sf/jabref/imports/OpenDatabaseAction.java
index 25bee7a..94cff01 100644
--- a/src/java/net/sf/jabref/imports/OpenDatabaseAction.java
+++ b/src/java/net/sf/jabref/imports/OpenDatabaseAction.java
@@ -1,6 +1,7 @@
 package net.sf.jabref.imports;
 
 import net.sf.jabref.*;
+import net.sf.jabref.external.FileLinksUpgradeWarning;
 
 import javax.swing.*;
 import java.io.*;
@@ -10,10 +11,23 @@ import java.util.*;
 // The action concerned with opening an existing database.
 
 public class OpenDatabaseAction extends MnemonicAwareAction {
-    boolean showDialog;
 
+    boolean showDialog;
     private JabRefFrame frame;
 
+    // List of actions that may need to be called after opening the file. Such as
+    // upgrade actions etc. that may depend on the JabRef version that wrote the file:
+    private static ArrayList<PostOpenAction> postOpenActions =
+            new ArrayList<PostOpenAction>();
+
+    static {
+        // Add the action for checking for new custom entry types loaded from
+        // the bib file:
+        postOpenActions.add(new CheckForNewEntryTypesAction());
+        // Add the action for the new external file handling system in version 2.3:
+        postOpenActions.add(new FileLinksUpgradeWarning());
+    }
+
     public OpenDatabaseAction(JabRefFrame frame, boolean showDialog) {
         super(GUIGlobals.getImage("open"));
         this.frame = frame;
@@ -50,6 +64,28 @@ public class OpenDatabaseAction extends MnemonicAwareAction {
             filesToOpen.add(new File(Util.checkName(e.getActionCommand())));
         }
 
+        BasePanel toRaise = null;
+        int initialCount = filesToOpen.size(), removed = 0;
+        
+        // Check if any of the files are already open:
+        for (Iterator iterator = filesToOpen.iterator(); iterator.hasNext();) {
+            File file = (File) iterator.next();
+            for (int i=0; i<frame.getTabbedPane().getTabCount(); i++) {
+                BasePanel bp = (BasePanel)frame.baseAt(i);
+                if ((bp.getFile() != null) && bp.getFile().equals(file)) {
+                    iterator.remove();
+                    removed++;
+                    // See if we removed the final one. If so, we must perhaps
+                    // raise the BasePanel in question:
+                    if (removed == initialCount) {
+                        toRaise = bp;
+                    }
+                    break;
+                }
+            }
+        }
+
+
         // Run the actual open in a thread to prevent the program
         // locking until the file is loaded.
         if (filesToOpen.size() > 0) {
@@ -58,11 +94,18 @@ public class OpenDatabaseAction extends MnemonicAwareAction {
                 public void run() {
                     for (Iterator i=theFiles.iterator(); i.hasNext();)
                         openIt((File)i.next(), true);
+
                 }
             }).start();
             for (Iterator i=theFiles.iterator(); i.hasNext();)
                 frame.getFileHistory().newFile(((File)i.next()).getPath());
         }
+        // If no files are remaining to open, this could mean that a file was
+        // already open. If so, we may have to raise the correct tab:
+        else if (toRaise != null) {
+            frame.output(Globals.lang("File '%0' is already open.", toRaise.getFile().getPath()));
+            frame.getTabbedPane().setSelectedComponent(toRaise);
+        }
     }
 
     class OpenItSwingHelper implements Runnable {
@@ -91,6 +134,7 @@ public class OpenDatabaseAction extends MnemonicAwareAction {
                 // Should this be done _after_ we know it was successfully opened?
                 String encoding = Globals.prefs.get("defaultEncoding");
                 ParserResult pr = loadDatabase(file, encoding);
+
                 if ((pr == null) || (pr == ParserResult.INVALID_FORMAT)) {
                     JOptionPane.showMessageDialog(null, Globals.lang("Error opening file" + " '" + fileName + "'"),
                             Globals.lang("Error"),
@@ -99,21 +143,41 @@ public class OpenDatabaseAction extends MnemonicAwareAction {
                     return;
                 }
 
-                addNewDatabase(pr, file, raisePanel);
+                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);
 
             } catch (Exception ex) {
                 //ex.printStackTrace();
                 Util.showQuickErrorDialog(frame, Globals.lang("Open database"), ex);
-                /*
-                JOptionPane.showMessageDialog
-                        (frame, ex.getMessage(),
-                                Globals.lang("Open database"), JOptionPane.ERROR_MESSAGE);
-                                */
             }
         }
     }
 
-    public void addNewDatabase(ParserResult pr, File file,
+    /**
+     * Go through the list of post open actions, and perform those that need
+     * to be performed.
+     * @param panel The BasePanel where the database is shown.
+     * @param pr The result of the bib file parse operation.
+     */
+    public static void performPostOpenActions(BasePanel panel, ParserResult pr,
+                                              boolean mustRaisePanel) {
+        for (Iterator<PostOpenAction> iterator = postOpenActions.iterator(); iterator.hasNext();) {
+            PostOpenAction action = iterator.next();
+            if (action.isActionNecessary(pr)) {
+                if (mustRaisePanel)
+                    panel.frame().getTabbedPane().setSelectedComponent(panel);
+                action.performAction(panel, pr);
+            }
+        }
+    }
+
+    public BasePanel addNewDatabase(ParserResult pr, File file,
                                boolean raisePanel) {
 
         String fileName = file.getPath();
@@ -142,53 +206,15 @@ public class OpenDatabaseAction extends MnemonicAwareAction {
             }).start();
         }
         BasePanel bp = new BasePanel(frame, db, file, meta, pr.getEncoding());
-        /*
-         if (Globals.prefs.getBoolean("autoComplete")) {
-         db.setCompleters(autoCompleters);
-         }
-        */
 
         // file is set to null inside the EventDispatcherThread
         SwingUtilities.invokeLater(new OpenItSwingHelper(bp, file, raisePanel));
 
-        // 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();
-            if (BibtexEntryType.ALL_TYPES.get(typeName) != null)
-                i.remove();
-        }
-        if (pr.getEntryTypes().size() > 0) {
-
-
-            StringBuffer sb = new StringBuffer(Globals.lang("Custom entry types found in file") + ": ");
-            Object[] types = pr.getEntryTypes().keySet().toArray();
-            Arrays.sort(types);
-            for (int i = 0; i < types.length; i++) {
-                sb.append(types[i].toString()).append(", ");
-            }
-            String s = sb.toString();
-            int answer = JOptionPane.showConfirmDialog(frame,
-                    s.substring(0, s.length() - 2) + ".\n"
-                            + Globals.lang("Remember these entry types?"),
-                    Globals.lang("Custom entry types"),
-                    JOptionPane.YES_NO_OPTION,
-                    JOptionPane.QUESTION_MESSAGE);
-            if (answer == JOptionPane.YES_OPTION) {
-                // Import
-                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());
-                    BibtexEntryType.ALL_TYPES.put(typ.getName().toLowerCase(), typ);
-                }
-
-            }
-        }
-
         frame.output(Globals.lang("Opened database") + " '" + fileName +
                 "' " + Globals.lang("with") + " " +
                 db.getEntryCount() + " " + Globals.lang("entries") + ".");
 
+        return bp;
     }
 
     public static ParserResult loadDatabase(File fileToOpen, String encoding)
diff --git a/src/java/net/sf/jabref/imports/ParserResult.java b/src/java/net/sf/jabref/imports/ParserResult.java
index 0f94157..5f483a1 100644
--- a/src/java/net/sf/jabref/imports/ParserResult.java
+++ b/src/java/net/sf/jabref/imports/ParserResult.java
@@ -26,11 +26,11 @@ http://www.gnu.org/copyleft/gpl.ja.html
 */
 package net.sf.jabref.imports;
 
-import java.util.HashMap;
 import java.io.File;
-import net.sf.jabref.*;
-import java.util.Vector;
 import java.util.ArrayList;
+import java.util.HashMap;
+
+import net.sf.jabref.BibtexDatabase;
 
 public class ParserResult {
 
@@ -38,8 +38,12 @@ public class ParserResult {
     private BibtexDatabase base;
     private HashMap metaData, entryTypes;
     private File file = null;
-    private ArrayList warnings = new ArrayList();
+    private ArrayList<String> warnings = new ArrayList<String>();
     private String encoding = null; // Which encoding was used?
+
+
+    private String jabrefVersion = null; // Which JabRef version wrote the file, if any?
+    private int jabrefMajorVersion = 0, jabrefMinorVersion = 0; // Numeric version representation
     private boolean toOpenTab = false;
 
     public ParserResult(BibtexDatabase base, HashMap metaData, HashMap entryTypes) {
@@ -60,8 +64,42 @@ public class ParserResult {
         this.toOpenTab = toOpenTab;
     }
 
+
+    /**
+     * Find which version of JabRef, if any, produced this bib file.
+     * @return The version number string, or null if no JabRef signature could be read.
+     */
+    public String getJabrefVersion() {
+        return jabrefVersion;
+    }
+
+    /**
+     * Set the JabRef version number string for this parser result.
+     * @param jabrefVersion The version number string.                                         
+     */
+    public void setJabrefVersion(String jabrefVersion) {
+        this.jabrefVersion = jabrefVersion;
+    }
+
+
+    public int getJabrefMajorVersion() {
+        return jabrefMajorVersion;
+    }
+
+    public void setJabrefMajorVersion(int jabrefMajorVersion) {
+        this.jabrefMajorVersion = jabrefMajorVersion;
+    }
+
+    public int getJabrefMinorVersion() {
+        return jabrefMinorVersion;
+    }
+
+    public void setJabrefMinorVersion(int jabrefMinorVersion) {
+        this.jabrefMinorVersion = jabrefMinorVersion;
+    }
+
     public BibtexDatabase getDatabase() {
-	return base;
+    	return base;
     }
 
     public HashMap getMetaData() {
diff --git a/src/java/net/sf/jabref/imports/PostOpenAction.java b/src/java/net/sf/jabref/imports/PostOpenAction.java
new file mode 100644
index 0000000..105e31d
--- /dev/null
+++ b/src/java/net/sf/jabref/imports/PostOpenAction.java
@@ -0,0 +1,37 @@
+package net.sf.jabref.imports;
+
+import net.sf.jabref.BasePanel;
+
+/**
+ * This interface defines potential actions that may need to be taken after
+ * opening a bib file into JabRef. This can for instance be file upgrade actions
+ * that should be offered due to new features in JabRef, and may depend on e.g.
+ * which JabRef version the file was last written by.
+ *
+ * This interface is introduced in an attempt to add such functionality in a
+ * flexible manner.
+ */
+public interface PostOpenAction {
+
+    /**
+     * This method is queried in order to find out whether the action needs to be
+     * performed or not.
+     * @param pr The result of the bib parse operation.
+     * @return true if the action should be called, false otherwise.
+     */
+    public boolean isActionNecessary(ParserResult pr);
+
+    /**
+     * This method is called after the new database has been added to the GUI, if
+     * the isActionNecessary() method returned true.
+     *
+     * Note: if several such methods need to be called sequentially, it is
+     *       important that all implementations of this method do not return
+     *       until the operation is finished. If work needs to be off-loaded
+     *       into a worker thread, use Spin to do this synchronously.
+     *
+     * @param panel The BasePanel where the database is shown.
+     * @param pr The result of the bib parse operation.
+     */
+    public void performAction(BasePanel panel, ParserResult pr);
+}
diff --git a/src/java/net/sf/jabref/imports/RisImporter.java b/src/java/net/sf/jabref/imports/RisImporter.java
index d66455c..32d1670 100644
--- a/src/java/net/sf/jabref/imports/RisImporter.java
+++ b/src/java/net/sf/jabref/imports/RisImporter.java
@@ -44,15 +44,14 @@ public class RisImporter extends ImportFormat {
 
     // Our strategy is to look for the "AU  - *" line.
     BufferedReader in = new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
-    Pattern pat1 = Pattern
-        .compile("AU  - .*"),
-        pat2 = Pattern
-        .compile("A1  - .*");
+    Pattern pat1 = Pattern.compile("AU  - .*"),
+        pat2 = Pattern.compile("A1  - .*"),
+        pat3 = Pattern.compile("A2  - .*");
 
     String str;
     while ((str = in.readLine()) != null){
-        if (pat1.matcher(str).find() || pat2.matcher(str).find())
-        return true;
+        if (pat1.matcher(str).find() || pat2.matcher(str).find() || pat3.matcher(str).find())
+            return true;
     }
     return false;
     }
@@ -74,7 +73,7 @@ public class RisImporter extends ImportFormat {
 
 
     for (int i = 0; i < entries.length - 1; i++){
-            String Type = "", Author = "", Editor = "", StartPage = "", EndPage = "",
+            String type = "", author = "", editor = "", startPage = "", endPage = "",
                 comment = "";
             HashMap hm = new HashMap();
 
@@ -100,15 +99,15 @@ public class RisImporter extends ImportFormat {
             String lab = entry.substring(0, 2);
             String val = entry.substring(6).trim();
             if (lab.equals("TY")){
-            if (val.equals("BOOK")) Type = "book";
-            else if (val.equals("JOUR") || val.equals("MGZN")) Type = "article";
-                        else if (val.equals("THES")) Type = "phdthesis";
-                        else if (val.equals("UNPB")) Type = "unpublished";
-                        else if (val.equals("RPRT")) Type = "techreport";
-                        else if (val.equals("CONF")) Type = "inproceedings";
-                        else if (val.equals("CHAP")) Type = "incollection";//"inbook";
-
-            else Type = "other";
+            if (val.equals("BOOK")) type = "book";
+            else if (val.equals("JOUR") || val.equals("MGZN")) type = "article";
+                        else if (val.equals("THES")) type = "phdthesis";
+                        else if (val.equals("UNPB")) type = "unpublished";
+                        else if (val.equals("RPRT")) type = "techreport";
+                        else if (val.equals("CONF")) type = "inproceedings";
+                        else if (val.equals("CHAP")) type = "incollection";//"inbook";
+
+            else type = "other";
             }else if (lab.equals("T1") || lab.equals("TI")) hm.put("title", val);//Title
             // =
             // val;
@@ -116,27 +115,27 @@ public class RisImporter extends ImportFormat {
                 hm.put("booktitle", val);
             }
             else if (lab.equals("A1") || lab.equals("AU")){
-                if (Author.equals("")) // don't add " and " for the first author
-                    Author = val;
-                else Author += " and " + val;
+                if (author.equals("")) // don't add " and " for the first author
+                    author = val;
+                else author += " and " + val;
             }
             else if (lab.equals("A2")){
-                if (Editor.equals("")) // don't add " and " for the first editor
-                    Editor = val;
-                else Editor += " and " + val;
+                if (editor.equals("")) // don't add " and " for the first editor
+                    editor = val;
+                else editor += " and " + val;
             } else if (lab.equals("JA") || lab.equals("JF") || lab.equals("JO")) {
-                if (Type.equals("inproceedings"))
+                if (type.equals("inproceedings"))
                     hm.put("booktitle", val);
                 else
                     hm.put("journal", val);
             }
 
-            else if (lab.equals("SP")) StartPage = val;
+            else if (lab.equals("SP")) startPage = val;
             else if (lab.equals("PB"))
                 hm.put("publisher", val);
             else if (lab.equals("AD") || lab.equals("CY"))
                 hm.put("address", val);
-            else if (lab.equals("EP")) EndPage = val;
+            else if (lab.equals("EP")) endPage = val;
                     else if (lab.equals("SN"))
                         hm.put("issn", val);
             else if (lab.equals("VL")) hm.put("volume", val);
@@ -178,21 +177,21 @@ public class RisImporter extends ImportFormat {
         }
         }
         // fix authors
-        if (Author.length() > 0) {
-            Author = AuthorList.fixAuthor_lastNameFirst(Author);
-            hm.put("author", Author);
+        if (author.length() > 0) {
+            author = AuthorList.fixAuthor_lastNameFirst(author);
+            hm.put("author", author);
         }
-        if (Editor.length() > 0) {
-            Editor = AuthorList.fixAuthor_lastNameFirst(Editor);
-            hm.put("editor", Editor);
+        if (editor.length() > 0) {
+            editor = AuthorList.fixAuthor_lastNameFirst(editor);
+            hm.put("editor", editor);
         }
         if (comment.length() > 0) {
             hm.put("comment", comment);
         }
 
-        hm.put("pages", StartPage + "--" + EndPage);
+        hm.put("pages", startPage + "--" + endPage);
         BibtexEntry b = new BibtexEntry(BibtexFields.DEFAULT_BIBTEXENTRY_ID, Globals
-                        .getEntryType(Type)); // id assumes an existing database so don't
+                        .getEntryType(type)); // id assumes an existing database so don't
 
         // Remove empty fields:
         ArrayList toRemove = new ArrayList();
diff --git a/src/java/net/sf/jabref/labelPattern/LabelPatternUtil.java b/src/java/net/sf/jabref/labelPattern/LabelPatternUtil.java
index 069d9a6..730befd 100644
--- a/src/java/net/sf/jabref/labelPattern/LabelPatternUtil.java
+++ b/src/java/net/sf/jabref/labelPattern/LabelPatternUtil.java
@@ -184,9 +184,13 @@ public class LabelPatternUtil {
                     int num = Integer.parseInt(val.substring(7));
                                         _sbvalue.append(authIniN(authString,num));
                   }
-                                  else if (val.equals("auth.auth.ea")) {
+                  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));
                   }
@@ -614,6 +618,31 @@ public class LabelPatternUtil {
   }
 
   /**
+   * 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) {
diff --git a/src/java/net/sf/jabref/mods/MODSEntry.java b/src/java/net/sf/jabref/mods/MODSEntry.java
index b158ed0..8995322 100644
--- a/src/java/net/sf/jabref/mods/MODSEntry.java
+++ b/src/java/net/sf/jabref/mods/MODSEntry.java
@@ -43,6 +43,8 @@ public class MODSEntry {
 	
 	public static String BIBTEX = "bibtex_";
 	
+	private final boolean CHARFORMAT = false;
+	
 	public MODSEntry() {
 		extensionFields = new HashMap();
 		handledExtensions = new HashSet();
@@ -60,15 +62,29 @@ public class MODSEntry {
 	
 	protected void populateFromBibtex(BibtexEntry bibtex) {
 		LayoutFormatter chars = new XMLChars();
-		if (bibtex.getField("title") != null)
-			title = chars.format(bibtex.getField("title").toString());
+		if (bibtex.getField("title") != null) {
+			if(CHARFORMAT)
+				title = chars.format(bibtex.getField("title").toString());
+			else
+				title = bibtex.getField("title").toString();
+		}
 		
-		if (bibtex.getField("publisher") != null)
-			publisher = chars.format(bibtex.getField("publisher").toString());
+		if (bibtex.getField("publisher") != null) {
+			if(CHARFORMAT)
+				publisher = chars.format(bibtex.getField("publisher").toString());
+			else
+				publisher = bibtex.getField("publisher").toString();
+		}
+			
 		if (bibtex.getField("bibtexkey") != null)
 			id = bibtex.getField("bibtexkey").toString();
-		if (bibtex.getField("place") != null)
-			place = chars.format(bibtex.getField("place").toString());
+		if (bibtex.getField("place") != null) {
+			if(CHARFORMAT)
+				place = chars.format(bibtex.getField("place").toString());
+			else
+				place = bibtex.getField("place").toString();
+		}
+			
 		date = getDate(bibtex);	
 		genre = getMODSgenre(bibtex);
 		if (bibtex.getField("author") != null)
@@ -106,13 +122,21 @@ public class MODSEntry {
 		List result = new LinkedList();
 		LayoutFormatter chars = new XMLChars();
 		
-		if (authors.indexOf(" and ") == -1)
-          result.add(new PersonName(chars.format(authors)));
+		if (authors.indexOf(" and ") == -1) {
+			if(CHARFORMAT)
+				result.add(new PersonName(chars.format(authors)));
+			else
+				result.add(new PersonName(authors));
+		}
         else
         {
             String[] names = authors.split(" and ");
-            for (int i=0; i<names.length; i++)
-              result.add(new PersonName(chars.format(names[i])));
+            for (int i=0; i<names.length; i++) {
+            	if(CHARFORMAT)
+            		result.add(new PersonName(chars.format(names[i])));
+            	else
+            		result.add(new PersonName(names[i]));
+            }
         }
 		return result;
 	}
@@ -164,7 +188,7 @@ public class MODSEntry {
 	   		if(title != null) {
 	   			Element titleInfo = d.createElement("titleInfo");
 	   			Element mainTitle = d.createElement("title");
-	   			mainTitle.appendChild(d.createTextNode(title));
+	   			mainTitle.appendChild(d.createTextNode(stripNonValidXMLCharacters(title)));
 	   			titleInfo.appendChild(mainTitle);
 		   		mods.appendChild(titleInfo);
 	   		}
@@ -176,13 +200,13 @@ public class MODSEntry {
 	   				if (name.getSurname() != null) {
 	   					Element namePart = d.createElement("namePart");
 	   					namePart.setAttribute("type", "family");
-	   					namePart.appendChild(d.createTextNode(name.getSurname()));
+	   					namePart.appendChild(d.createTextNode(stripNonValidXMLCharacters(name.getSurname())));
 	   					modsName.appendChild(namePart);
 	   				}
 	   				if (name.getGivenNames() != null) {
 	   					Element namePart = d.createElement("namePart");
 	   					namePart.setAttribute("type", "given");
-	   					namePart.appendChild(d.createTextNode(name.getGivenNames()));
+	   					namePart.appendChild(d.createTextNode(stripNonValidXMLCharacters(name.getGivenNames())));
 	   					modsName.appendChild(namePart);
 	   				}
 	   				Element role = d.createElement("role");
@@ -199,33 +223,33 @@ public class MODSEntry {
 	   		mods.appendChild(originInfo);
 	   		if (this.publisher != null) {
 	   			Element publisher = d.createElement("publisher");
-				publisher.appendChild(d.createTextNode(this.publisher));
+				publisher.appendChild(d.createTextNode(stripNonValidXMLCharacters(this.publisher)));
 	   			originInfo.appendChild(publisher);
 	   		}
 	   		if (date != null) {
 	   			Element dateIssued = d.createElement("dateIssued");
-	   			dateIssued.appendChild(d.createTextNode(date));
+	   			dateIssued.appendChild(d.createTextNode(stripNonValidXMLCharacters(date)));
 	   			originInfo.appendChild(dateIssued);
 	   		}
 	   		Element issuance = d.createElement("issuance");
-	   		issuance.appendChild(d.createTextNode(this.issuance));
+	   		issuance.appendChild(d.createTextNode(stripNonValidXMLCharacters(this.issuance)));
 	   		originInfo.appendChild(issuance);
 	   		
 	   		if (id != null) {
 	   			Element idref = d.createElement("identifier");
-	   			idref.appendChild(d.createTextNode(id));
+	   			idref.appendChild(d.createTextNode(stripNonValidXMLCharacters(id)));
 	   			mods.appendChild(idref);
 	   			mods.setAttribute("ID", id);
 		   		
 	   		}
 	   		Element typeOfResource = d.createElement("typeOfResource");
-	   		typeOfResource.appendChild(d.createTextNode(type));
+	   		typeOfResource.appendChild(d.createTextNode(stripNonValidXMLCharacters(type)));
 	   		mods.appendChild(typeOfResource);
 	   		
 	   		if (genre != null) {
 	   			Element genreElement = d.createElement("genre");
 	   			genreElement.setAttribute("authority", "marc");
-	   			genreElement.appendChild(d.createTextNode(genre));
+	   			genreElement.appendChild(d.createTextNode(stripNonValidXMLCharacters(genre)));
 	   			mods.appendChild(genreElement);
 	   		}
 	   		
@@ -247,7 +271,7 @@ public class MODSEntry {
 	   			if (handledExtensions.contains(field))
 	   				continue;
 	   			Element theData = d.createElement(field);
-	   			theData.appendChild(d.createTextNode(value));
+	   			theData.appendChild(d.createTextNode(stripNonValidXMLCharacters(value)));
 	   			extension.appendChild(theData);
 	   			mods.appendChild(extension);
 	   		}
@@ -262,6 +286,37 @@ public class MODSEntry {
 	   	// return result;
 	   }
 	
+	/**
+	 * This method ensures that the output String has only
+     * valid XML unicode characters as specified by the
+     * XML 1.0 standard. For reference, please see
+     * <a href="http://www.w3.org/TR/2000/REC-xml-20001006#NT-Char">the
+     * standard</a>. This method will return an empty
+     * String if the input is null or empty.
+     * 
+     * URL: http://cse-mjmcl.cse.bris.ac.uk/blog/2007/02/14/1171465494443.html
+     *
+     * @param in The String whose non-valid characters we want to remove.
+     * @return The in String, stripped of non-valid characters.
+     */
+    public String stripNonValidXMLCharacters(String in) {
+        StringBuffer out = new StringBuffer(); // Used to hold the output.
+        char current; // Used to reference the current character.
+
+        if (in == null || ("".equals(in))) return ""; // vacancy test.
+        for (int i = 0; i < in.length(); i++) {
+            current = in.charAt(i); // NOTE: No IndexOutOfBoundsException caught here; it should not happen.
+            if ((current == 0x9) ||
+                (current == 0xA) ||
+                (current == 0xD) ||
+                ((current >= 0x20) && (current <= 0xD7FF)) ||
+                ((current >= 0xE000) && (current <= 0xFFFD)) ||
+                ((current >= 0x10000) && (current <= 0x10FFFF)))
+                out.append(current);
+        }
+        return out.toString();
+    }
+
 	/*
 	 * render as XML
 	 */
diff --git a/src/java/net/sf/jabref/mods/PageNumbers.java b/src/java/net/sf/jabref/mods/PageNumbers.java
index 1100932..3bc0c02 100644
--- a/src/java/net/sf/jabref/mods/PageNumbers.java
+++ b/src/java/net/sf/jabref/mods/PageNumbers.java
@@ -1,5 +1,6 @@
 /*
  * 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
@@ -18,12 +19,13 @@ import java.io.*;
 import java.util.regex.*;
 /**
  * @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;
+	String freeform = null;
 	int start, end;
 	
 	public PageNumbers(String s) {
@@ -31,7 +33,7 @@ public class PageNumbers {
 	}
 	
 	protected void parsePageNums(String s) {
-		Pattern p = Pattern.compile("(\\d+)--(\\d+)");
+		Pattern p = Pattern.compile("\\s*(\\d+)\\s*-{1,2}\\s*(\\d+)\\s*");
 		Matcher m = p.matcher(s);
 		if (m.matches()) {
 			start = Integer.parseInt(m.group(1));
@@ -58,4 +60,15 @@ public class PageNumbers {
 		}
 		return result;
 	}
+	
+    public String toString(String seperator) {
+    	if (freeform != null)
+    		return freeform; 
+		return (start+seperator+end);
+    }
+
+	public String toString() {
+		return toString("--");
+    }
+ 
 }
diff --git a/src/java/net/sf/jabref/mods/PersonName.java b/src/java/net/sf/jabref/mods/PersonName.java
index 5758b4c..1d87831 100644
--- a/src/java/net/sf/jabref/mods/PersonName.java
+++ b/src/java/net/sf/jabref/mods/PersonName.java
@@ -1,5 +1,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
@@ -13,20 +14,31 @@ import wsi.ra.tool.WSITools;
 import net.sf.jabref.AuthorList;
 
 /**
- * @author Michael Wrighton
+ * @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 {
     protected String givenName = null;
     protected String surname = null;
     protected String middleName = null;
 
+    public PersonName() {
+    }
+
     public PersonName(String name) {
         parseName(name);
     }
 
+    public PersonName(String firstName, String _middleName, String lastName) {
+        givenName = firstName;
+        middleName = _middleName;
+        surname = lastName;
+    }
+
     protected void parseName(String author) {
             // TODO: replace special characters
             Vector v = new Vector();
@@ -61,6 +73,44 @@ public class PersonName {
         return surname;
     }
 
+    public void setSurname(String lastName)
+    {
+        surname = lastName;
+    }
+
+    public String getFirstname()
+    {
+        return givenName;
+    }
+
+    public void setFirstname(String firstName)
+    {
+        givenName = firstName;
+    }
+
+    public String getMiddlename()
+    {
+        return middleName;
+    }
+
+    public void setMiddlename(String _middleName)
+    {
+        middleName = _middleName;
+    }
+
+    public String getFullname()
+    {
+    	String fullName = "";
+    	if(givenName != null && givenName != "")
+    		fullName += givenName + " "; 
+    	if(middleName != null && middleName != "")
+    		fullName += middleName + " ";
+    	if(surname != null && surname != "")
+    		fullName += surname;
+    	
+    	return fullName.trim();
+    }
+
     public String toString() {
         return surname;
     }
diff --git a/src/java/net/sf/jabref/msbib/MSBibDatabase.java b/src/java/net/sf/jabref/msbib/MSBibDatabase.java
new file mode 100644
index 0000000..784fb42
--- /dev/null
+++ b/src/java/net/sf/jabref/msbib/MSBibDatabase.java
@@ -0,0 +1,119 @@
+/*
+ * Created on April 01, 2007
+ * Updated on May 03, 2007
+ * */
+
+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.*;
+/**
+ * @author S M Mahbub Murshed
+ * @email udvranto at yahoo.com
+ *
+ * @version 2.0.0
+ * @see http://mahbub.wordpress.com/2007/03/24/details-of-microsoft-office-2007-bibliographic-format-compared-to-bibtex/
+ * @see http://mahbub.wordpress.com/2007/03/22/deciphering-microsoft-office-2007-bibliography-format/
+ * 
+ * Date: May 15, 2007; May 03, 2007
+ * 
+ * History:
+ * May 03, 2007 - Added suport for export
+ * May 15, 2007 - Added suport for import
+ */
+public class MSBibDatabase {
+	protected Set entries;
+	
+	public MSBibDatabase() {
+		// maybe make this sorted later...
+		entries = new HashSet();
+	}
+	
+	public MSBibDatabase(InputStream stream) throws IOException {
+		importEntries(stream);
+    }
+
+	public MSBibDatabase(BibtexDatabase bibtex) {
+		Set keySet = bibtex.getKeySet();
+        addEntries(bibtex, keySet);
+    }
+
+    public MSBibDatabase(BibtexDatabase bibtex, Set keySet) {
+        if (keySet == null)
+            keySet = bibtex.getKeySet();
+        addEntries(bibtex, keySet);
+    }
+
+    public List importEntries(InputStream stream) throws IOException {
+    	entries = new HashSet();	
+    	ArrayList bibitems = new ArrayList();
+    	Document docin = null;
+    	try {
+    	DocumentBuilder dbuild = DocumentBuilderFactory.
+    								newInstance().
+    								newDocumentBuilder();
+   		docin = dbuild.parse(stream);
+    	} catch (Exception e) {
+	   		System.out.println("Exception caught..." + e);
+	   		e.printStackTrace();
+    	}
+   		String bcol = "b:";
+   		NodeList rootLst = docin.getElementsByTagName("b:Sources");
+   		if(rootLst.getLength()==0) {   			
+   			rootLst = docin.getElementsByTagName("Sources");
+   			bcol = "";
+   		}
+   		if(rootLst.getLength()==0)
+   			return bibitems;
+//    	if(docin!= null && docin.getDocumentElement().getTagName().contains("Sources") == false)
+//    		return bibitems;
+
+   		NodeList sourceList = ((Element)(rootLst.item(0))).getElementsByTagName(bcol+"Source");
+   		for(int i=0; i<sourceList.getLength(); i++) {
+   			MSBibEntry entry = new MSBibEntry((Element)sourceList.item(i),bcol);
+   			entries.add(entry);
+   			bibitems.add(entry.getBibtexRepresentation());   			
+   		}
+   		
+   		return bibitems;
+    }
+
+    private void addEntries(BibtexDatabase database, Set keySet) {
+        entries = new HashSet();
+        for(Iterator iter = keySet.iterator(); iter.hasNext(); ) {
+			BibtexEntry entry = database.getEntryById((String)iter.next());
+			MSBibEntry newMods = new MSBibEntry(entry);
+			entries.add(newMods);
+		}
+	}
+	public Document getDOMrepresentation() {
+		Document result = null;
+	   	try {
+	   		DocumentBuilder dbuild = DocumentBuilderFactory.
+														newInstance().
+														newDocumentBuilder();
+	   		result = dbuild.newDocument();
+	   		Element msbibCollection = result.createElement("b:Sources");
+	   		msbibCollection.setAttribute("SelectedStyle","");
+	   		msbibCollection.setAttribute("xmlns", "http://schemas.openxmlformats.org/officeDocument/2006/bibliography");
+	   		msbibCollection.setAttribute("xmlns:b", "http://schemas.openxmlformats.org/officeDocument/2006/bibliography");	   			   		 
+	   		
+	   		for(Iterator iter = entries.iterator(); iter.hasNext(); ) {
+	   			MSBibEntry entry = (MSBibEntry) iter.next();
+	   			Node node = entry.getDOMrepresentation(result);
+	   			msbibCollection.appendChild(node);
+	   		}
+	   		
+	   		result.appendChild(msbibCollection);	   		
+	   	}
+	   	catch (Exception e)
+		{
+	   		System.out.println("Exception caught..." + e);
+	   		e.printStackTrace();
+		}
+	   	return result;
+	   }
+}
diff --git a/src/java/net/sf/jabref/msbib/MSBibEntry.java b/src/java/net/sf/jabref/msbib/MSBibEntry.java
new file mode 100644
index 0000000..1120846
--- /dev/null
+++ b/src/java/net/sf/jabref/msbib/MSBibEntry.java
@@ -0,0 +1,1162 @@
+/*
+ * Created on April 01, 2007
+ * 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.*;
+
+/**
+ * @author S M Mahbub Murshed
+ * @email udvranto at yahoo.com
+ *
+ * @version 2.0.0
+ * @see http://mahbub.wordpress.com/2007/03/24/details-of-microsoft-office-2007-bibliographic-format-compared-to-bibtex/
+ * @see http://mahbub.wordpress.com/2007/03/22/deciphering-microsoft-office-2007-bibliography-format/
+ * 
+ * Date: May 15, 2007; May 03, 2007
+ * 
+ * History
+ * May 03, 2007 - Added export functionality
+ * May 15, 2007 - Added import functionality
+ * May 16, 2007 - Changed all interger entries to strings,
+ * 				  except LCID which must be an integer.
+ * 				  To avoid exception during integer parsing
+ *				  the exception is caught and LCID is set to zero.
+ */
+public class MSBibEntry {
+	protected String sourceType = "Misc";
+	protected String bibTexEntry = null;
+
+	protected String tag = null;
+	protected String GUID = null;
+	protected int LCID = -1;
+
+	protected List 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 String title = null;
+	protected String year = null;
+	protected String month = null;
+	protected String day = null;
+	
+	protected String shortTitle = null;
+	protected String comments = null;
+	
+	protected PageNumbers pages = null;
+	protected String volume = null;
+	protected String numberOfVolumes = null;
+	protected String edition = null;
+	protected String standardNumber = null;	
+	protected String publisher = null;
+	
+	protected String address = null;
+	protected String bookTitle = null;
+	protected String chapterNumber = null;
+	protected String journalName = null;
+	protected String issue = null;
+	protected String periodicalTitle = null;
+	protected String conferenceName = null;
+	protected String department = null;
+	protected String institution = null;
+	protected String thesisType = null;
+	protected String internetSiteTitle = null;
+	protected String dateAccessed = null;
+	protected String url = null;
+	protected String productionCompany = null;
+	protected String publicationTitle = null;
+	protected String medium = null;
+	protected String albumTitle = null;
+	protected String recordingNumber = null;
+	protected String theater = null;
+	protected String distributor = null;
+	protected String broadcastTitle = null;
+	protected String broadcaster = null;
+	protected String station = null;
+	protected String type = null;
+	protected String patentNumber = null;
+	protected String court = null;
+	protected String reporter = null;
+	protected String caseNumber = null;
+	protected String abbreviatedCaseNumber = null;
+	protected String bibTex_Series = null;
+	protected String bibTex_Abstract = null; 	 
+	protected String bibTex_KeyWords = null; 	 
+	protected String bibTex_CrossRef = null;
+	protected String bibTex_HowPublished = null; 	 
+	protected String bibTex_Affiliation = null;
+	protected String bibTex_Contents = null;
+	protected String bibTex_Copyright = null;	 
+	protected String bibTex_Price = null; 	 
+	protected String bibTex_Size = null;
+
+	private final String BIBTEX = "BIBTEX_";
+	private final String MSBIB = "msbib-";
+
+	private final String bcol = "b:";
+	
+	private final boolean FORMATXML = false;
+	
+	public MSBibEntry() {
+	}
+	
+	public MSBibEntry(BibtexEntry bibtex) {
+		this();
+		populateFromBibtex(bibtex);
+	}
+
+	public MSBibEntry(Element entry, String _bcol) {
+		this();
+		populateFromXml(entry,_bcol);
+	}
+
+	protected String getFromXml(String name, Element entry) {
+		String value = null;
+		NodeList nodeLst = entry.getElementsByTagName(name);
+		if(nodeLst.getLength()>0)
+			value = nodeLst.item(0).getTextContent();
+		return value;
+	}
+	
+
+	protected void populateFromXml(Element entry, String _bcol) {		
+		String temp = null;
+
+		sourceType = getFromXml(_bcol+"SourceType", entry);
+
+		tag  = getFromXml(_bcol+"Tag", entry);
+
+		temp = getFromXml(_bcol+"LCID", entry);
+		if(temp!=null)
+		{
+			try {
+			LCID = Integer.parseInt(temp); }
+			catch (Exception e) {
+				LCID = -1;
+			}
+		}
+
+		title = getFromXml(_bcol+"Title", entry);
+		year = getFromXml(_bcol+"Year", entry);
+		month = getFromXml(_bcol+"Month", entry);
+		day = getFromXml(_bcol+"Day", entry);
+
+		shortTitle = getFromXml(_bcol+"ShortTitle", entry);
+		comments = getFromXml(_bcol+"Comments", entry);
+
+		temp = getFromXml(_bcol+"Pages", entry);
+		if(temp != null)
+			pages = new PageNumbers(temp);
+
+		volume = getFromXml(_bcol+"Volume", entry);
+
+		numberOfVolumes = getFromXml(_bcol+"NumberVolumes", entry);
+
+		edition = getFromXml(_bcol+"Edition", entry);
+		
+		standardNumber = getFromXml(_bcol+"StandardNumber", entry);
+
+		publisher = getFromXml(_bcol+"Publisher", entry);
+
+		String city = getFromXml(_bcol+"City", entry);
+		String state = getFromXml(_bcol+"StateProvince", entry);
+		String country = getFromXml(_bcol+"CountryRegion", entry);
+		address = "";
+		if(city != null)
+			address += city + ", "; 
+		if(state != null)
+			address += state + " "; 
+		if(country != null)
+			address += country;
+		address = address.trim();
+		if(address.equals("") || address.equals(","))
+			address = null;
+
+		bookTitle = getFromXml(_bcol+"BookTitle", entry);
+
+		chapterNumber = getFromXml(_bcol+"ChapterNumber", entry);
+
+		journalName = getFromXml(_bcol+"JournalName", entry);
+
+		issue = getFromXml(_bcol+"Issue", entry);
+
+		periodicalTitle = getFromXml(_bcol+"PeriodicalTitle", entry);
+		
+		conferenceName = getFromXml(_bcol+"ConferenceName", entry);
+		department = getFromXml(_bcol+"Department", entry);
+		institution = getFromXml(_bcol+"Institution", entry);
+
+		thesisType = getFromXml(_bcol+"ThesisType", entry);
+		internetSiteTitle = getFromXml(_bcol+"InternetSiteTitle", entry);
+		String month = getFromXml(_bcol+"MonthAccessed", entry);
+		String day = getFromXml(_bcol+"DayAccessed", entry);
+		String year = getFromXml(_bcol+"YearAccessed", entry);
+		dateAccessed = "";
+		if(month != null)
+			dateAccessed += month + " ";
+		if(day != null)
+			dateAccessed += day + ", ";
+		if(year != null)
+			dateAccessed += year;
+		dateAccessed = dateAccessed.trim();
+		if(dateAccessed.equals("") || dateAccessed.equals(","))
+			dateAccessed = null;
+
+		url = getFromXml(_bcol+"URL", entry);
+		productionCompany = getFromXml(_bcol+"ProductionCompany", entry);
+		
+		publicationTitle = getFromXml(_bcol+"PublicationTitle", entry);
+		medium = getFromXml(_bcol+"Medium", entry);
+		albumTitle = getFromXml(_bcol+"AlbumTitle", entry);
+		recordingNumber = getFromXml(_bcol+"RecordingNumber", entry);
+		theater = getFromXml(_bcol+"Theater", entry);
+		distributor = getFromXml(_bcol+"Distributor", entry);
+		broadcastTitle = getFromXml(_bcol+"BroadcastTitle", entry);
+		broadcaster = getFromXml(_bcol+"Broadcaster", entry);
+		station = getFromXml(_bcol+"Station", entry);
+		type = getFromXml(_bcol+"Type", entry);
+		patentNumber = getFromXml(_bcol+"PatentNumber", entry);
+		court = getFromXml(_bcol+"Court", entry);
+		reporter = getFromXml(_bcol+"Reporter", entry);
+		caseNumber = getFromXml(_bcol+"CaseNumber", entry);
+		abbreviatedCaseNumber = getFromXml(_bcol+"AbbreviatedCaseNumber", entry);
+		bibTex_Series = getFromXml(_bcol+BIBTEX+"Series", entry);
+		bibTex_Abstract = getFromXml(_bcol+BIBTEX+"Abstract", entry);
+		bibTex_KeyWords = getFromXml(_bcol+BIBTEX+"KeyWords", entry);
+		bibTex_CrossRef = getFromXml(_bcol+BIBTEX+"CrossRef", entry);
+		bibTex_HowPublished = getFromXml(_bcol+BIBTEX+"HowPublished", entry);
+		bibTex_Affiliation = getFromXml(_bcol+BIBTEX+"Affiliation", entry);
+		bibTex_Contents = getFromXml(_bcol+BIBTEX+"Contents", entry);
+		bibTex_Copyright = getFromXml(_bcol+BIBTEX+"Copyright", entry);
+		bibTex_Price = getFromXml(_bcol+BIBTEX+"Price", entry);
+		bibTex_Size = getFromXml(_bcol+BIBTEX+"Size", entry);
+	 
+		NodeList nodeLst = entry.getElementsByTagName(_bcol+"Author");
+		if(nodeLst.getLength()>0)
+			getAuthors((Element)(nodeLst.item(0)),_bcol);
+	}
+
+	protected void populateFromBibtex(BibtexEntry bibtex) {
+		// date = getDate(bibtex);	
+		sourceType = getMSBibSourceType(bibtex);
+
+		if (bibtex.getField("bibtexkey") != null)
+			tag = bibtex.getField("bibtexkey").toString();
+
+		if (bibtex.getField("language") != null)
+			LCID = getLCID(bibtex.getField("language").toString());
+
+		if (bibtex.getField("title") != null)
+			title = bibtex.getField("title").toString();
+		if (bibtex.getField("year") != null)
+			year = bibtex.getField("year").toString();
+		if (bibtex.getField("month") != null)
+			month = bibtex.getField("month").toString();
+		if (bibtex.getField(MSBIB+"day") != null)
+			day = bibtex.getField(MSBIB+"day").toString();
+
+		if (bibtex.getField(MSBIB+"shorttitle") != null)
+			shortTitle = bibtex.getField(MSBIB+"shorttitle").toString();
+		if (bibtex.getField("note") != null)
+			comments = bibtex.getField("note").toString();
+
+		if (bibtex.getField("pages") != null)
+			pages = new PageNumbers(bibtex.getField("pages").toString());
+
+		if (bibtex.getField("volume") != null)
+			volume = bibtex.getField("volume").toString();
+
+		if (bibtex.getField(MSBIB+"numberofvolume") != null)
+			numberOfVolumes = bibtex.getField(MSBIB+"numberofvolume").toString();
+
+		if (bibtex.getField("edition") != null)
+			edition = bibtex.getField("edition").toString();
+		
+		standardNumber = new String();
+		if (bibtex.getField("ISBN") != null)
+			standardNumber += ":ISBN:" + bibtex.getField("ISBN").toString();
+		if (bibtex.getField("ISSN") != null)
+			standardNumber += ":ISSN:"+ bibtex.getField("ISSN").toString();
+		if (bibtex.getField("LCCN") != null)
+			standardNumber += ":LCCN:"+ bibtex.getField("LCCN").toString();
+		if (bibtex.getField("mrnumber") != null)
+			standardNumber += ":MRN:"+ bibtex.getField("mrnumber").toString();
+		if(standardNumber.equals(""))
+			standardNumber = null;
+
+		if (bibtex.getField("publisher") != null)
+			publisher = bibtex.getField("publisher").toString();
+
+		if (bibtex.getField("address") != null)
+			address = bibtex.getField("address").toString();
+
+		if (bibtex.getField("booktitle") != null)
+			bookTitle = bibtex.getField("booktitle").toString();
+
+		if (bibtex.getField("chapter") != null)
+			chapterNumber = bibtex.getField("chapter").toString();
+
+		if (bibtex.getField("journal") != null)
+			journalName = bibtex.getField("journal").toString();
+
+		if (bibtex.getField("issue") != null)
+			issue = bibtex.getField("issue").toString();
+
+		if (bibtex.getField(MSBIB+"periodical") != null)
+			periodicalTitle = bibtex.getField(MSBIB+"periodical").toString();
+		
+		if (bibtex.getField("organization") != null)
+			conferenceName = bibtex.getField("organization").toString();
+		if (bibtex.getField("school") != null)
+			department = bibtex.getField("school").toString();
+		if (bibtex.getField("institution") != null)
+			institution = bibtex.getField("institution").toString();
+
+		if (bibtex.getField("type") != null)
+			thesisType = bibtex.getField("type").toString();
+		if ( (sourceType.equals("InternetSite")==true || sourceType.equals("DocumentFromInternetSite")==true)
+				&& bibtex.getField("title") != null)
+			internetSiteTitle = bibtex.getField("title").toString();
+		if (bibtex.getField(MSBIB+"accessed") != null)
+			dateAccessed = bibtex.getField(MSBIB+"accessed").toString();
+		if (bibtex.getField("URL") != null)
+			url = bibtex.getField("URL").toString();
+		if (bibtex.getField(MSBIB+"productioncompany") != null)
+			productionCompany = bibtex.getField(MSBIB+"productioncompany").toString();
+		
+		if ( (sourceType.equals("ElectronicSource")==true 
+				|| sourceType.equals("Art")==true
+				|| sourceType.equals("Misc")==true)
+				&& bibtex.getField("title") != null)
+			publicationTitle = bibtex.getField("title").toString();
+		if (bibtex.getField(MSBIB+"medium") != null)
+			medium = bibtex.getField(MSBIB+"medium").toString();
+		if (sourceType.equals("SoundRecording")==true && bibtex.getField("title") != null)
+			albumTitle = bibtex.getField("title").toString();
+		if (bibtex.getField(MSBIB+"recordingnumber") != null)
+			recordingNumber = bibtex.getField(MSBIB+"recordingnumber").toString();
+		if (bibtex.getField(MSBIB+"theater") != null)
+			theater = bibtex.getField(MSBIB+"theater").toString();
+		if (bibtex.getField(MSBIB+"distributor") != null)
+			distributor = bibtex.getField(MSBIB+"distributor").toString();
+		if (sourceType.equals("Interview")==true && bibtex.getField("title") != null)
+			broadcastTitle = bibtex.getField("title").toString();
+		if (bibtex.getField(MSBIB+"broadcaster") != null)
+			broadcaster = bibtex.getField(MSBIB+"broadcaster").toString();
+		if (bibtex.getField(MSBIB+"station") != null)
+			station = bibtex.getField(MSBIB+"station").toString();
+		if (bibtex.getField(MSBIB+"type") != null)
+			type = bibtex.getField(MSBIB+"type").toString();
+		if (bibtex.getField(MSBIB+"patentnumber") != null)
+			patentNumber = bibtex.getField(MSBIB+"patentnumber").toString();
+		if (bibtex.getField(MSBIB+"court") != null)
+			court = bibtex.getField(MSBIB+"court").toString();
+		if (bibtex.getField(MSBIB+"reporter") != null)
+			reporter = bibtex.getField(MSBIB+"reporter").toString();
+		if (bibtex.getField(MSBIB+"casenumber") != null)
+			caseNumber = bibtex.getField(MSBIB+"casenumber").toString();
+		if (bibtex.getField(MSBIB+"abbreviatedcasenumber") != null)
+			abbreviatedCaseNumber = bibtex.getField(MSBIB+"abbreviatedcasenumber").toString();
+		if (bibtex.getField("series") != null)
+			bibTex_Series = bibtex.getField("series").toString();
+		if (bibtex.getField("abstract") != null)
+			bibTex_Abstract = bibtex.getField("abstract").toString();
+		if (bibtex.getField("keywords") != null)
+			bibTex_KeyWords = bibtex.getField("keywords").toString();
+		if (bibtex.getField("crossref") != null)
+			bibTex_CrossRef = bibtex.getField("crossref").toString();
+		if (bibtex.getField("howpublished") != null)
+			bibTex_HowPublished = bibtex.getField("howpublished").toString();
+		if (bibtex.getField("affiliation") != null)
+			bibTex_Affiliation = bibtex.getField("affiliation").toString();
+		if (bibtex.getField("contents") != null)
+			bibTex_Contents = bibtex.getField("contents").toString();
+		if (bibtex.getField("copyright") != null)
+			bibTex_Copyright = bibtex.getField("copyright").toString();
+		if (bibtex.getField("price") != null)
+			bibTex_Price = bibtex.getField("price").toString();
+		if (bibtex.getField("size") != null)
+			bibTex_Size = bibtex.getField("size").toString();
+	 
+
+		if (bibtex.getField("author") != null)
+			authors = getAuthors(bibtex.getField("author").toString());
+		
+		
+		if(FORMATXML)
+		{
+			title = format(title);
+			// shortTitle = format(shortTitle);
+			// publisher = format(publisher);
+			// conferenceName = format(conferenceName);
+			// department = format(department);
+			// institution = format(institution);
+			// internetSiteTitle = format(internetSiteTitle);
+			// publicationTitle = format(publicationTitle);
+			// albumTitle = format(albumTitle);
+			// theater = format(theater);
+			// distributor = format(distributor);
+			// broadcastTitle = format(broadcastTitle);
+			// broadcaster = format(broadcaster);
+			// station = format(station);
+			// court = format(court);
+			// reporter = format(reporter);
+			// bibTex_Series = format(bibTex_Series);
+			bibTex_Abstract = format(bibTex_Abstract);
+		}
+	}
+
+	private String format(String value)
+	{
+		if(value == null)
+			return null;
+		String result = null;
+		LayoutFormatter chars = new XMLChars();
+		result = chars.format(value);
+		return result;
+	}
+	
+	// http://www.microsoft.com/globaldev/reference/lcid-all.mspx
+	protected int getLCID(String language)
+	{
+		int iLCID = 0;
+		// TODO: add lanaguage to LCID mapping
+		
+		return iLCID;
+	}
+
+	// http://www.microsoft.com/globaldev/reference/lcid-all.mspx
+	protected String getLanguage(int LCID)
+	{
+		String language = "english";
+		// TODO: add lanaguage to LCID mapping
+		
+		return language;
+	}
+	
+	protected List getSpecificAuthors(String type, Element authors, String _bcol) {
+		List result = null;
+		NodeList nodeLst = authors.getElementsByTagName(_bcol+type);
+		if(nodeLst.getLength()<=0)
+			return result;
+		nodeLst = ((Element)(nodeLst.item(0))).getElementsByTagName(_bcol+"NameList");
+		if(nodeLst.getLength()<=0)
+			return result;
+		NodeList person = ((Element)(nodeLst.item(0))).getElementsByTagName(_bcol+"Person");
+		if(person.getLength()<=0)
+			return result;
+
+		result = new LinkedList();
+		for(int i=0;i<person.getLength();i++)
+		{
+			NodeList firstName  = ((Element)(person.item(i))).getElementsByTagName(_bcol+"First");
+			NodeList lastName   = ((Element)(person.item(i))).getElementsByTagName(_bcol+"Last");
+			NodeList middleName = ((Element)(person.item(i))).getElementsByTagName(_bcol+"Middle");
+			PersonName name = new PersonName();
+			if(firstName.getLength()>0)
+				name.setFirstname(firstName.item(0).getTextContent());
+			if(middleName.getLength()>0)
+				name.setMiddlename(middleName.item(0).getTextContent());
+			if(lastName.getLength()>0)
+				name.setSurname(lastName.item(0).getTextContent());
+			result.add(name);
+		}
+		
+		return result;
+	}
+
+	protected void getAuthors(Element authorsElem, String _bcol) {
+		authors = getSpecificAuthors("Author",authorsElem,_bcol);		
+		bookAuthors = getSpecificAuthors("BookAuthor",authorsElem,_bcol);
+		editors = getSpecificAuthors("Editor",authorsElem,_bcol);
+		translators = getSpecificAuthors("Translator",authorsElem,_bcol);
+		producerNames = getSpecificAuthors("ProducerName",authorsElem,_bcol);
+		composers = getSpecificAuthors("Composer",authorsElem,_bcol);
+		conductors = getSpecificAuthors("Conductor",authorsElem,_bcol);
+		performers = getSpecificAuthors("Performer",authorsElem,_bcol);
+		writers = getSpecificAuthors("Writer",authorsElem,_bcol);
+		directors = getSpecificAuthors("Director",authorsElem,_bcol);
+		compilers = getSpecificAuthors("Compiler",authorsElem,_bcol);
+		interviewers = getSpecificAuthors("Interviewer",authorsElem,_bcol);
+		interviewees = getSpecificAuthors("Interviewee",authorsElem,_bcol);
+		inventors = getSpecificAuthors("Inventor",authorsElem,_bcol);
+		counsels = getSpecificAuthors("Counsel",authorsElem,_bcol);		
+	}
+
+	protected List getAuthors(String authors) {
+		List result = new LinkedList();
+		LayoutFormatter chars = new XMLChars();
+		
+		if (authors.indexOf(" and ") == -1)
+		{
+//			if(FORMATXML)
+//				result.add(new PersonName(chars.format(authors)));
+//			else
+				result.add(new PersonName(authors));
+		}
+        else
+        {
+            String[] names = authors.split(" and ");
+            for (int i=0; i<names.length; i++)
+            {
+//            	if(FORMATXML)
+//            		result.add(new PersonName(chars.format(names[i])));
+//            	else
+            		result.add(new PersonName(names[i]));
+            }
+        }
+		return result;
+	}
+	
+	/* construct a MSBib date object */
+	protected String getDate(BibtexEntry bibtex) {
+		String result = "";
+		if (bibtex.getField("year") != null)
+			result += (bibtex.getField("year").toString());
+		if (bibtex.getField("month") != null)
+			result += "-" + bibtex.getField("month").toString();
+		
+		return result;
+	}
+
+	protected String getMSBibSourceType(BibtexEntry bibtex) {
+		String bibtexType = bibtex.getType().getName();
+
+		String result = "Misc";
+		if (bibtexType.equalsIgnoreCase("book"))
+			result = "Book";
+		else if(bibtexType.equalsIgnoreCase("inbook"))
+			result = "BookSection";
+		else if(bibtexType.equalsIgnoreCase("booklet"))
+			{ result = "BookSection"; bibTexEntry = "booklet"; } 
+		else if(bibtexType.equalsIgnoreCase("incollection"))
+			{ result = "BookSection"; bibTexEntry = "incollection"; } 
+
+		else if(bibtexType.equalsIgnoreCase("article"))
+			result = "JournalArticle"; 
+
+		else if(bibtexType.equalsIgnoreCase("inproceedings"))
+			result = "ConferenceProceedings"; 
+		else if(bibtexType.equalsIgnoreCase("conference"))
+			{ result = "ConferenceProceedings"; bibTexEntry = "conference"; } 
+		else if(bibtexType.equalsIgnoreCase("proceedings"))
+			{ result = "ConferenceProceedings"; bibTexEntry = "proceedings"; } 
+		else if(bibtexType.equalsIgnoreCase("collection"))
+			{ result = "ConferenceProceedings"; bibTexEntry = "collection"; } 
+
+		else if(bibtexType.equalsIgnoreCase("techreport"))
+			result = "Report"; 
+		else if(bibtexType.equalsIgnoreCase("manual"))
+			{ result = "Report"; bibTexEntry = "manual"; } 
+		else if(bibtexType.equalsIgnoreCase("mastersthesis"))
+			{ result = "Report"; bibTexEntry = "mastersthesis"; } 
+		else if(bibtexType.equalsIgnoreCase("phdthesis"))
+			{ result = "Report"; bibTexEntry = "phdthesis"; } 
+		else if(bibtexType.equalsIgnoreCase("unpublished"))
+			{ result = "Report"; bibTexEntry = "unpublished"; } 
+
+		else if(bibtexType.equalsIgnoreCase("patent"))
+			result = "Patent"; 
+
+		else if(bibtexType.equalsIgnoreCase("misc"))
+			result = "Misc"; 
+		
+		return result;
+	}
+	
+	public Document getDOMrepresentation() {
+		Document result = null;
+		try {
+			DocumentBuilder d = DocumentBuilderFactory.newInstance().newDocumentBuilder();
+			
+		//	result = getDOMrepresentation(d);
+		}
+		catch (Exception e) 
+		{
+			throw new Error(e);
+		}
+		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)
+			return;
+		Element elem = d.createElement(bcol+name);
+ 		// elem.appendChild(d.createTextNode(healXML(value)));
+//		Text txt = d.createTextNode(value);
+//		if(!txt.getTextContent().equals(value))
+//			System.out.println("Values dont match!");
+//			// throw new Exception("Values dont match!");
+//		elem.appendChild(txt);
+		elem.appendChild(d.createTextNode(stripNonValidXMLCharacters(value)));		
+		parent.appendChild(elem);
+	}
+
+	public void addAuthor(Document d, Element allAuthors, String entryName, List 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();
+			Element person = d.createElement(bcol+"Person");
+			addField(d, person,"Last",name.getSurname());
+			addField(d, person,"Middle",name.getMiddlename());
+			addField(d, person,"First",name.getFirstname());
+			nameList.appendChild(person);
+		}
+		authorTop.appendChild(nameList);
+		
+		allAuthors.appendChild(authorTop);
+	}
+
+	public void addAdrress(Document d,Element parent, String address) {
+		if(address == null)
+			return;
+
+		// US address parser
+		// See documentation here http://regexlib.com/REDetails.aspx?regexp_id=472
+		// Pattern p = Pattern.compile("^(?n:(((?<address1>(\\d{1,5}(\\ 1\\/[234])?(\\x20[A-Z]([a-z])+)+ )|(P\\.O\\.\\ Box\\ \\d{1,5}))\\s{1,2}(?i:(?<address2>(((APT|B LDG|DEPT|FL|HNGR|LOT|PIER|RM|S(LIP|PC|T(E|OP))|TRLR|UNIT)\\x20\\w{1,5})|(BSMT|FRNT|LBBY|LOWR|OFC|PH|REAR|SIDE|UPPR)\\.?)\\s{1,2})?))?)(?<city>[A-Z]([a-z])+(\\.?)(\\x20[A-Z]([a-z])+){0,2})([,\\x20]+?)(?<state>A[LKSZRAP]|C[AOT]|D[EC]|F[LM]|G[AU]|HI|I[ADL N]|K[SY]|LA|M[ADEHINOPST]|N[CDEHJMVY]|O[HKR]|P[ARW]|RI|S[CD] |T[NX]|UT|V[AIT] [...]
+		// the pattern above is for C#, may not work with java. Never tested though.
+		
+		// reduced subset, supports only "CITY , STATE, COUNTRY"
+		// \b(\w+)\s?[,]?\s?(\w+)\s?[,]?\s?(\w+)\b
+		// WORD SPACE , SPACE WORD SPACE , SPACE WORD
+		// tested using http://www.javaregex.com/test.html
+		Pattern p = Pattern.compile("\\b(\\w+)\\s*[,]?\\s*(\\w+)\\s*[,]?\\s*(\\w+)\\b");
+		Matcher m = p.matcher(address);
+		if (m.matches() && m.groupCount()>3)
+		{
+			addField(d, parent,"City",m.group(1));
+			addField(d, parent,"StateProvince",m.group(2));
+			addField(d, parent,"CountryRegion",m.group(3));
+		}
+	}
+
+	public void addDate(Document d,Element parent, String date, String extra) {
+		if(date == null)
+			return;
+
+		// Allows 20.3-2007|||20/3-  2007 etc. 
+		// (\d{1,2})\s?[.,-/]\s?(\d{1,2})\s?[.,-/]\s?(\d{2,4})
+		// 1-2 DIGITS SPACE SEPERATOR SPACE 1-2 DIGITS SPACE SEPERATOR SPACE 2-4 DIGITS
+		// tested using http://www.javaregex.com/test.html
+		Pattern p = Pattern.compile("(\\d{1,2})\\s*[.,-/]\\s*(\\d{1,2})\\s*[.,-/]\\s*(\\d{2,4})");
+		Matcher m = p.matcher(date);
+		if (m.matches() && m.groupCount()>3)
+		{
+			addField(d, parent,"Month"+extra,m.group(1));
+			addField(d, parent,"Day"+extra,m.group(2));
+			addField(d, parent,"Year"+extra,m.group(3));
+		}
+	}
+
+	public Element getDOMrepresentation(Document d) {
+		Node result = null;		
+	   	try {
+	   		Element msbibEntry = d.createElement(bcol+"Source");
+
+	   		addField(d,msbibEntry,"SourceType",sourceType);
+   			addField(d,msbibEntry,BIBTEX+"Entry",bibTexEntry);
+
+   			addField(d,msbibEntry,"Tag",tag);
+   			addField(d,msbibEntry,"GUID",GUID);
+   			if(LCID >= 0)
+   				addField(d,msbibEntry,"LCID",Integer.toString(LCID));
+   			addField(d,msbibEntry,"Title",title);
+   			addField(d,msbibEntry,"Year",year);
+   			addField(d,msbibEntry,"ShortTitle",shortTitle);
+   			addField(d,msbibEntry,"Comments",comments);
+
+   			Element allAuthors = d.createElement(bcol+"Author");
+
+   			addAuthor(d,allAuthors,"Author",authors);
+	   		addAuthor(d,allAuthors,"BookAuthor",bookAuthors);
+	   		addAuthor(d,allAuthors,"Editor",editors);
+	   		addAuthor(d,allAuthors,"Translator",translators);
+	   		addAuthor(d,allAuthors,"ProducerName",producerNames);
+	   		addAuthor(d,allAuthors,"Composer",composers);
+	   		addAuthor(d,allAuthors,"Conductor",conductors);
+	   		addAuthor(d,allAuthors,"Performer",performers);
+	   		addAuthor(d,allAuthors,"Writer",writers);
+	   		addAuthor(d,allAuthors,"Director",directors);
+	   		addAuthor(d,allAuthors,"Compiler",compilers);
+	   		addAuthor(d,allAuthors,"Interviewer",interviewers);
+	   		addAuthor(d,allAuthors,"Interviewee",interviewees);
+	   		addAuthor(d,allAuthors,"Inventor",inventors);
+	   		addAuthor(d,allAuthors,"Counsel",counsels);
+
+	   		msbibEntry.appendChild(allAuthors);
+	   		
+	   		if(pages !=null )
+	   			addField(d,msbibEntry,"Pages",pages.toString("-"));
+	   		addField(d,msbibEntry,"Volume",volume);
+	   		addField(d,msbibEntry,"NumberVolumes",numberOfVolumes);
+	   		addField(d,msbibEntry,"Edition",edition);
+	   		addField(d,msbibEntry,"StandardNumber",standardNumber);
+	   		addField(d,msbibEntry,"Publisher",publisher);
+		
+	   		addAdrress(d,msbibEntry,address);
+	   		
+	   		addField(d,msbibEntry,"BookTitle",bookTitle);
+	   		addField(d,msbibEntry,"ChapterNumber",chapterNumber);
+
+	   		addField(d,msbibEntry,"JournalName",journalName);
+	   		addField(d,msbibEntry,"Issue",issue);
+	   		addField(d,msbibEntry,"PeriodicalTitle",periodicalTitle);
+	   		addField(d,msbibEntry,"ConferenceName",conferenceName);
+
+	   		addField(d,msbibEntry,"Department",department);
+	   		addField(d,msbibEntry,"Institution",institution);
+	   		addField(d,msbibEntry,"ThesisType",thesisType);
+	   		addField(d,msbibEntry,"InternetSiteTitle",internetSiteTitle);
+	   		
+	   		addDate(d,msbibEntry, dateAccessed, "Accessed");
+	   		
+	   		addField(d,msbibEntry,"URL",url);
+	   		addField(d,msbibEntry,"ProductionCompany",productionCompany);
+	   		addField(d,msbibEntry,"PublicationTitle",publicationTitle);
+	   		addField(d,msbibEntry,"Medium",medium);
+	   		addField(d,msbibEntry,"AlbumTitle",albumTitle);
+	   		addField(d,msbibEntry,"RecordingNumber",recordingNumber);	   		
+	   		addField(d,msbibEntry,"Theater",theater);
+	   		addField(d,msbibEntry,"Distributor",distributor);
+	   		addField(d,msbibEntry,"BroadcastTitle",broadcastTitle);
+	   		addField(d,msbibEntry,"Broadcaster",broadcaster);
+	   		addField(d,msbibEntry,"Station",station);
+	   		addField(d,msbibEntry,"Type",type);
+	   		addField(d,msbibEntry,"PatentNumber",patentNumber);
+	   		addField(d,msbibEntry,"Court",court);
+	   		addField(d,msbibEntry,"Reporter",reporter);
+	   		addField(d,msbibEntry,"CaseNumber",caseNumber);
+	   		addField(d,msbibEntry,"AbbreviatedCaseNumber",abbreviatedCaseNumber);
+
+	   		addField(d,msbibEntry,BIBTEX+"Series",bibTex_Series);
+	   		addField(d,msbibEntry,BIBTEX+"Abstract",bibTex_Abstract);
+	   		addField(d,msbibEntry,BIBTEX+"KeyWords",bibTex_KeyWords);
+	   		addField(d,msbibEntry,BIBTEX+"CrossRef",bibTex_CrossRef);
+	   		addField(d,msbibEntry,BIBTEX+"HowPublished",bibTex_HowPublished);
+	   		addField(d,msbibEntry,BIBTEX+"Affiliation",bibTex_Affiliation);
+	   		addField(d,msbibEntry,BIBTEX+"Contents",bibTex_Contents);
+	   		addField(d,msbibEntry,BIBTEX+"Copyright",bibTex_Copyright);
+	   		addField(d,msbibEntry,BIBTEX+"Price",bibTex_Price);
+	   		addField(d,msbibEntry,BIBTEX+"Size",bibTex_Size);
+
+	   		return msbibEntry;
+	   	}
+	   	catch (Exception e)
+		{
+	   		System.out.println("Exception caught..." + e);
+	   		e.printStackTrace();
+	   		throw new Error(e);
+		}
+	   	// return null;
+	   }
+	
+	protected void parseSingleStandardNumber(String type,String bibtype, String standardNum, HashMap hm) {
+		// teste using http://www.javaregex.com/test.html
+		Pattern p = Pattern.compile(":"+type+":(.[^:]+)");
+		Matcher m = p.matcher(standardNum);
+		if (m.matches())
+			hm.put(bibtype,m.group(1));
+	}
+
+	protected void parseStandardNumber(String standardNum, HashMap hm) {
+		if(standardNumber == null)
+			return;
+		parseSingleStandardNumber("ISBN","ISBN",standardNum,hm);
+		parseSingleStandardNumber("ISSN","ISSN",standardNum,hm);
+		parseSingleStandardNumber("LCCN","LCCN",standardNum,hm);
+		parseSingleStandardNumber("MRN","mrnumber",standardNum,hm);
+	}
+
+	public void addAuthor(HashMap hm, String type, List authorsLst) {
+		if(authorsLst == null)
+			return;
+		String allAuthors = "";
+		boolean First = true;
+		for(Iterator iter = authorsLst.iterator(); iter.hasNext();) {
+			PersonName name = (PersonName) iter.next();
+			if(First == false)
+				allAuthors += " and ";
+			allAuthors += name.getFullname();
+			First = false;
+		}
+		hm.put(type,allAuthors);
+	}
+
+//	public String mapMSBibToBibtexTypeString(String msbib) {		
+//		String bibtex = "other";
+//		if(msbib.equals("Book"))
+//			bibtex = "book";
+//		else if(msbib.equals("BookSection"))
+//			bibtex = "inbook";
+//		else if(msbib.equals("JournalArticle"))
+//			bibtex = "article";
+//		else if(msbib.equals("ArticleInAPeriodical"))
+//			bibtex = "article";
+//		else if(msbib.equals("ConferenceProceedings"))
+//			bibtex = "conference";
+//		else if(msbib.equals("Report"))
+//			bibtex = "techreport";
+//		else if(msbib.equals("InternetSite"))
+//			bibtex = "other";
+//		else if(msbib.equals("DocumentFromInternetSite"))
+//			bibtex = "other";
+//		else if(msbib.equals("DocumentFromInternetSite"))
+//			bibtex = "other";
+//		else if(msbib.equals("ElectronicSource"))
+//			bibtex = "other";
+//		else if(msbib.equals("Art"))
+//			bibtex = "other";
+//		else if(msbib.equals("SoundRecording"))
+//			bibtex = "other";
+//		else if(msbib.equals("Performance"))
+//			bibtex = "other";
+//		else if(msbib.equals("Film"))
+//			bibtex = "other";
+//		else if(msbib.equals("Interview"))
+//			bibtex = "other";
+//		else if(msbib.equals("Patent"))
+//			bibtex = "other";
+//		else if(msbib.equals("Case"))
+//			bibtex = "other";
+//		else if(msbib.equals("Misc"))
+//			bibtex = "misc";
+//		else
+//			bibtex = "misc";
+//
+//		return bibtex;
+//	}
+	
+	public BibtexEntryType mapMSBibToBibtexType(String msbib)
+	{
+		BibtexEntryType bibtex = BibtexEntryType.OTHER;
+		if(msbib.equals("Book"))
+			bibtex = BibtexEntryType.BOOK;
+		else if(msbib.equals("BookSection"))
+			bibtex = BibtexEntryType.INBOOK;
+		else if(msbib.equals("JournalArticle"))
+			bibtex = BibtexEntryType.ARTICLE;
+		else if(msbib.equals("ArticleInAPeriodical"))
+			bibtex = BibtexEntryType.ARTICLE;
+		else if(msbib.equals("ConferenceProceedings"))
+			bibtex = BibtexEntryType.CONFERENCE;
+		else if(msbib.equals("Report"))
+			bibtex = BibtexEntryType.TECHREPORT;
+		else if(msbib.equals("InternetSite"))
+			bibtex = BibtexEntryType.OTHER;
+		else if(msbib.equals("DocumentFromInternetSite"))
+			bibtex = BibtexEntryType.OTHER;
+		else if(msbib.equals("DocumentFromInternetSite"))
+			bibtex = BibtexEntryType.OTHER;
+		else if(msbib.equals("ElectronicSource"))
+			bibtex = BibtexEntryType.OTHER;
+		else if(msbib.equals("Art"))
+			bibtex = BibtexEntryType.OTHER;
+		else if(msbib.equals("SoundRecording"))
+			bibtex = BibtexEntryType.OTHER;
+		else if(msbib.equals("Performance"))
+			bibtex = BibtexEntryType.OTHER;
+		else if(msbib.equals("Film"))
+			bibtex = BibtexEntryType.OTHER;
+		else if(msbib.equals("Interview"))
+			bibtex = BibtexEntryType.OTHER;
+		else if(msbib.equals("Patent"))
+			bibtex = BibtexEntryType.OTHER;
+		else if(msbib.equals("Case"))
+			bibtex = BibtexEntryType.OTHER;
+		else if(msbib.equals("Misc"))
+			bibtex = BibtexEntryType.MISC;
+		else
+			bibtex = BibtexEntryType.MISC;
+
+		return bibtex;
+	}
+	public BibtexEntry getBibtexRepresentation() {		
+//		BibtexEntry entry = new BibtexEntry(BibtexFields.DEFAULT_BIBTEXENTRY_ID, 
+//				Globals.getEntryType(mapMSBibToBibtexTypeString(sourceType)));
+
+//		BibtexEntry entry = new BibtexEntry(BibtexFields.DEFAULT_BIBTEXENTRY_ID, 
+//				mapMSBibToBibtexType(sourceType));
+
+		BibtexEntry entry = null;
+		if(tag == null)
+			entry = new BibtexEntry(BibtexFields.DEFAULT_BIBTEXENTRY_ID, 
+					mapMSBibToBibtexType(sourceType));
+		else
+			entry = new BibtexEntry(tag, 
+					mapMSBibToBibtexType(sourceType)); // id assumes an existing database so don't
+		
+
+		// Todo: add check for BibTexEntry types
+//		BibtexEntry entry = new BibtexEntry();
+//		if(sourceType.equals("Book"))
+//			entry.setType(BibtexEntryType.BOOK);
+//		else if(sourceType.equals("BookSection"))
+//			entry.setType(BibtexEntryType.INBOOK);
+//		else if(sourceType.equals("JournalArticle"))
+//			entry.setType(BibtexEntryType.ARTICLE);
+//		else if(sourceType.equals("ArticleInAPeriodical"))
+//			entry.setType(BibtexEntryType.ARTICLE);
+//		else if(sourceType.equals("ConferenceProceedings"))
+//			entry.setType(BibtexEntryType.CONFERENCE);
+//		else if(sourceType.equals("Report"))
+//			entry.setType(BibtexEntryType.TECHREPORT);
+//		else if(sourceType.equals("InternetSite"))
+//			entry.setType(BibtexEntryType.OTHER);
+//		else if(sourceType.equals("DocumentFromInternetSite"))
+//			entry.setType(BibtexEntryType.OTHER);
+//		else if(sourceType.equals("DocumentFromInternetSite"))
+//			entry.setType(BibtexEntryType.OTHER);
+//		else if(sourceType.equals("ElectronicSource"))
+//			entry.setType(BibtexEntryType.OTHER);
+//		else if(sourceType.equals("Art"))
+//			entry.setType(BibtexEntryType.OTHER);
+//		else if(sourceType.equals("SoundRecording"))
+//			entry.setType(BibtexEntryType.OTHER);
+//		else if(sourceType.equals("Performance"))
+//			entry.setType(BibtexEntryType.OTHER);
+//		else if(sourceType.equals("Film"))
+//			entry.setType(BibtexEntryType.OTHER);
+//		else if(sourceType.equals("Interview"))
+//			entry.setType(BibtexEntryType.OTHER);
+//		else if(sourceType.equals("Patent"))
+//			entry.setType(BibtexEntryType.OTHER);
+//		else if(sourceType.equals("Case"))
+//			entry.setType(BibtexEntryType.OTHER);
+//		else if(sourceType.equals("Misc"))
+//			entry.setType(BibtexEntryType.MISC);
+//		else
+//			entry.setType(BibtexEntryType.MISC);
+
+		HashMap hm = new HashMap();
+		
+		if(tag != null)
+			hm.put("bibtexkey",tag);
+//		if(GUID != null)
+//			hm.put("GUID",GUID);
+		if(LCID >= 0)
+			hm.put("language",getLanguage(LCID));
+		if(title != null)
+			hm.put("title",title);
+		if(year != null)
+			hm.put("year",year);
+		if(shortTitle != null)
+			hm.put(MSBIB+"shorttitle",shortTitle);
+		if(comments != null)
+			hm.put("note",comments);
+
+		addAuthor(hm,"author",authors);
+		addAuthor(hm,MSBIB+"bookauthor",bookAuthors);
+		addAuthor(hm,"editor",editors);
+		addAuthor(hm,MSBIB+"translator",translators);
+		addAuthor(hm,MSBIB+"producername",producerNames);
+		addAuthor(hm,MSBIB+"composer",composers);
+		addAuthor(hm,MSBIB+"conductor",conductors);
+		addAuthor(hm,MSBIB+"performer",performers);
+		addAuthor(hm,MSBIB+"writer",writers);
+		addAuthor(hm,MSBIB+"director",directors);
+		addAuthor(hm,MSBIB+"compiler",compilers);
+		addAuthor(hm,MSBIB+"interviewer",interviewers);
+		addAuthor(hm,MSBIB+"interviewee",interviewees);
+		addAuthor(hm,MSBIB+"inventor",inventors);
+		addAuthor(hm,MSBIB+"counsel",counsels);
+   		
+		if(pages !=null )
+			hm.put("pages",pages.toString("--"));
+		if(volume !=null )
+			hm.put("volume",volume);
+		if(numberOfVolumes !=null )
+			hm.put(MSBIB+"numberofvolume",numberOfVolumes);
+		if(edition !=null )
+			hm.put("edition",edition);
+		if(edition !=null )
+			hm.put("edition",edition);
+		parseStandardNumber(standardNumber,hm);
+
+		if(publisher !=null )
+			hm.put("publisher",publisher);
+		if(publisher !=null )
+			hm.put("publisher",publisher);
+		if(address !=null )
+			hm.put("address",address);
+		if(bookTitle !=null )
+			hm.put("booktitle",bookTitle);
+		if(chapterNumber !=null )
+			hm.put("chapter",chapterNumber);
+		if(journalName !=null )
+			hm.put("journal",journalName);
+		if(issue !=null )
+			hm.put("number",issue);
+		if(periodicalTitle !=null )
+			hm.put("organization",periodicalTitle);
+		if(conferenceName !=null )
+			hm.put("organization",conferenceName);
+		if(department !=null )
+			hm.put("school",department);
+		if(institution !=null )
+			hm.put("institution",institution);
+//		if(thesisType !=null )
+//			hm.put("type",thesisType);
+//		if(internetSiteTitle !=null )
+//			hm.put("title",internetSiteTitle);
+		if(dateAccessed !=null )
+			hm.put(MSBIB+"accessed",dateAccessed);
+		if(url !=null )
+			hm.put("url",url);
+		if(productionCompany !=null )
+			hm.put(MSBIB+"productioncompany",productionCompany);
+//		if(publicationTitle !=null )
+//			hm.put("title",publicationTitle);
+		if(medium !=null )
+			hm.put(MSBIB+"medium",medium);
+//		if(albumTitle !=null )
+//			hm.put("title",albumTitle);
+		if(recordingNumber !=null )
+			hm.put(MSBIB+"recordingnumber",recordingNumber);
+		if(theater !=null )
+			hm.put(MSBIB+"theater",theater);
+		if(distributor !=null )
+			hm.put(MSBIB+"distributor",distributor);
+//		if(broadcastTitle !=null )
+//			hm.put("title",broadcastTitle);
+		if(broadcaster !=null )
+			hm.put(MSBIB+"broadcaster",broadcaster);
+		if(station !=null )
+			hm.put(MSBIB+"station",station);
+		if(type !=null )
+			hm.put(MSBIB+"type",type);
+		if(patentNumber !=null )
+			hm.put(MSBIB+"patentnumber",patentNumber);
+		if(court !=null )
+			hm.put(MSBIB+"court",court);
+		if(reporter !=null )
+			hm.put(MSBIB+"reporter",reporter);
+		if(caseNumber !=null )
+			hm.put(MSBIB+"casenumber",caseNumber);
+		if(abbreviatedCaseNumber !=null )
+			hm.put(MSBIB+"abbreviatedcasenumber",abbreviatedCaseNumber);
+
+		if(bibTex_Series !=null )
+			hm.put("series",bibTex_Series);
+		if(bibTex_Abstract !=null )
+			hm.put("abstract",bibTex_Abstract);
+		if(bibTex_KeyWords !=null )
+			hm.put("keywords",bibTex_KeyWords);
+		if(bibTex_CrossRef !=null )
+			hm.put("crossref",bibTex_CrossRef);
+		if(bibTex_HowPublished !=null )
+			hm.put("howpublished",bibTex_HowPublished);
+		if(bibTex_Affiliation !=null )
+			hm.put("affiliation",bibTex_Affiliation);
+		if(bibTex_Contents !=null )
+			hm.put("contents",bibTex_Contents);
+		if(bibTex_Copyright !=null )
+			hm.put("copyright",bibTex_Copyright);
+		if(bibTex_Price !=null )
+			hm.put("price",bibTex_Price);
+		if(bibTex_Size !=null )
+			hm.put("size",bibTex_Size);
+
+		entry.setField(hm);
+		return entry;
+	}
+
+	/**
+	 * This method ensures that the output String has only
+     * valid XML unicode characters as specified by the
+     * XML 1.0 standard. For reference, please see
+     * <a href="http://www.w3.org/TR/2000/REC-xml-20001006#NT-Char">the
+     * standard</a>. This method will return an empty
+     * String if the input is null or empty.
+     * 
+     * URL: http://cse-mjmcl.cse.bris.ac.uk/blog/2007/02/14/1171465494443.html
+     *
+     * @param in The String whose non-valid characters we want to remove.
+     * @return The in String, stripped of non-valid characters.
+     */
+    public String stripNonValidXMLCharacters(String in) {
+        StringBuffer out = new StringBuffer(); // Used to hold the output.
+        char current; // Used to reference the current character.
+
+        if (in == null || ("".equals(in))) return ""; // vacancy test.
+        for (int i = 0; i < in.length(); i++) {
+            current = in.charAt(i); // NOTE: No IndexOutOfBoundsException caught here; it should not happen.
+            if ((current == 0x9) ||
+                (current == 0xA) ||
+                (current == 0xD) ||
+                ((current >= 0x20) && (current <= 0xD7FF)) ||
+                ((current >= 0xE000) && (current <= 0xFFFD)) ||
+                ((current >= 0x10000) && (current <= 0x10FFFF)))
+                out.append(current);
+        }
+        return out.toString();
+    }
+
+	/*
+	 * render as XML
+	 */
+	public String toString() {
+		StringWriter sresult = new StringWriter();
+	   	try {
+	      	 DOMSource source = new DOMSource(getDOMrepresentation());
+	      	 StreamResult result = new StreamResult(sresult);
+	      	 Transformer trans = TransformerFactory.newInstance().newTransformer();
+	      	 trans.setOutputProperty(OutputKeys.INDENT, "yes");
+	      	 trans.transform(source, result);
+	      	}
+	      	catch (Exception e) {
+	      		throw new Error(e);
+	      	}
+	      return sresult.toString();
+	}
+
+}
diff --git a/src/java/net/sf/jabref/util/ResourceExtractor.java b/src/java/net/sf/jabref/util/ResourceExtractor.java
index d355c5d..08d19d2 100644
--- a/src/java/net/sf/jabref/util/ResourceExtractor.java
+++ b/src/java/net/sf/jabref/util/ResourceExtractor.java
@@ -30,6 +30,7 @@ public class ResourceExtractor implements Worker {
     /** Creates a new instance of ResourceExtractor */
     public ResourceExtractor(final Component parent, final String filename, File destination) {
          resource = JabRef.class.getResource(filename);
+         //System.out.println(filename+"\n"+resource);
          this.parent = parent;
          this.destination = destination;
     }
diff --git a/src/java/net/sf/jabref/util/XMPSchemaBibtex.java b/src/java/net/sf/jabref/util/XMPSchemaBibtex.java
index 5a85193..8babf5a 100644
--- a/src/java/net/sf/jabref/util/XMPSchemaBibtex.java
+++ b/src/java/net/sf/jabref/util/XMPSchemaBibtex.java
@@ -1,19 +1,18 @@
 package net.sf.jabref.util;
 
 import java.io.IOException;
-import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Calendar;
 import java.util.HashMap;
-import java.util.Iterator;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
-import java.util.Set;
 import java.util.TreeSet;
 
 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;
@@ -159,7 +158,7 @@ public class XMPSchemaBibtex extends XMPSchema {
 	public static Map getAllProperties(XMPSchema schema, String namespaceName) {
 		NodeList nodes = schema.getElement().getChildNodes();
 
-		Map result = new HashMap();
+		Map<String, String> result = new HashMap<String, String>();
 
 		if (nodes == null) {
 			return result;
@@ -227,12 +226,10 @@ public class XMPSchemaBibtex extends XMPSchema {
 		 * single space, and any leading or trailing spaces are deleted."
 		 * </cite>
 		 */
-		Set entries = result.entrySet();
-		Iterator it = entries.iterator();
-		while (it.hasNext()) {
-			Map.Entry entry = (Map.Entry) it.next();
-			String key = (String) entry.getKey();
-			if (preserveWhiteSpace.containsKey(key))
+		
+		for (Map.Entry<String, String> entry : result.entrySet()){
+			String key = entry.getKey();
+			if (preserveWhiteSpace.contains(key))
 				continue;
 			entry.setValue(((String) entry.getValue()).replaceAll("\\s+", " ").trim());
 		}
@@ -240,14 +237,23 @@ public class XMPSchemaBibtex extends XMPSchema {
 		return result;
 	}
 
-	public static HashMap preserveWhiteSpace = new HashMap();
+	public static HashSet<String> preserveWhiteSpace = new HashSet<String>();
 	static {
-		preserveWhiteSpace.put("abstract", null);
-		preserveWhiteSpace.put("note", null);
-		preserveWhiteSpace.put("review", null);
+		preserveWhiteSpace.add("abstract");
+		preserveWhiteSpace.add("note");
+		preserveWhiteSpace.add("review");
 	}
 
 	public void setBibtexEntry(BibtexEntry entry) {
+		setBibtexEntry(entry, null);
+	}
+	
+	/**
+	 * 
+	 * @param entry
+	 * @param database maybenull
+	 */
+	public void setBibtexEntry(BibtexEntry entry, BibtexDatabase database) {
 		// Set all the values including key and entryType
 		Object[] fields = entry.getAllFields();
 		Object[] results;
@@ -255,7 +261,7 @@ public class XMPSchemaBibtex extends XMPSchema {
 		
 		JabRefPreferences prefs = JabRefPreferences.getInstance();
 		if (prefs.getBoolean("useXmpPrivacyFilter")) {
-			TreeSet filters = new TreeSet(Arrays.asList(prefs.getStringArray("xmpPrivacyFilter")));
+			TreeSet<String> filters = new TreeSet<String>(Arrays.asList(prefs.getStringArray("xmpPrivacyFilter")));
 			results = new Object[fields.length];
 			resultsSize = 0;
 			for (int i = 0; i < fields.length; i++) {
@@ -267,13 +273,14 @@ public class XMPSchemaBibtex extends XMPSchema {
 			results = fields;
 			resultsSize = fields.length;
 		}
-
+		
 		for (int i = 0; i < resultsSize; i++){
-			String s = results[i].toString();
-			if (s.equals("author") || s.equals("editor")) {
-				setPersonList(s, entry.getField(s).toString());
+			String field = results[i].toString();
+			String value = BibtexDatabase.getResolvedField(field, entry, database);
+			if (field.equals("author") || field.equals("editor")) {
+				setPersonList(field, value);
 			} else {
-				setTextProperty(s, entry.getField(s).toString());
+				setTextProperty(field, value);
 			}
 		}
 		setTextProperty("entrytype", entry.getType().getName());
@@ -295,7 +302,6 @@ public class XMPSchemaBibtex extends XMPSchema {
 		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 a8f5bd1..48ac2be 100644
--- a/src/java/net/sf/jabref/util/XMPUtil.java
+++ b/src/java/net/sf/jabref/util/XMPUtil.java
@@ -12,16 +12,14 @@ import java.io.StringWriter;
 import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.Collection;
-import java.util.HashMap;
 import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.List;
-import java.util.Map;
-import java.util.Set;
 
 import 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;
@@ -42,10 +40,6 @@ import org.pdfbox.pdmodel.PDDocument;
 import org.pdfbox.pdmodel.PDDocumentCatalog;
 import org.pdfbox.pdmodel.PDDocumentInformation;
 import org.pdfbox.pdmodel.common.PDMetadata;
-import org.w3c.dom.Element;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
 
 /**
  * XMPUtils provide support for reading and writing BibTex data as XMP-Metadata
@@ -53,11 +47,11 @@ import org.w3c.dom.NodeList;
  * 
  * @author Christopher Oezbek <oezi at oezi.de>
  * 
- * TODO: 
+ * TODO:
  * 
  * Synchronization
  * 
- * @version $Revision: 1.4 $ ($Date: 2007/01/22 23:00:46 $)
+ * @version $Revision: 1.5.2.1 $ ($Date: 2007/06/29 13:56:21 $)
  */
 public class XMPUtil {
 
@@ -89,14 +83,18 @@ public class XMPUtil {
 	 *            The filename from which to open the file.
 	 * @param entry
 	 *            The entry to write.
+	 * @param database
+	 *            maybenull An optional database which the given bibtex entries
+	 *            belong to, which will be used to resolve strings. If the
+	 *            database is null the strings will not be resolved.
 	 * @throws TransformerException
 	 *             If the entry was malformed or unsupported.
 	 * @throws IOException
 	 *             If the file could not be written to or could not be found.
 	 */
-	public static void writeXMP(String filename, BibtexEntry entry) throws IOException,
-		TransformerException {
-		writeXMP(new File(filename), entry);
+	public static void writeXMP(String filename, BibtexEntry entry,
+			BibtexDatabase database) throws IOException, TransformerException {
+		writeXMP(new File(filename), entry, database);
 	}
 
 	/**
@@ -109,7 +107,7 @@ public class XMPUtil {
 	 *             Throws an IOException if the file cannot be read, so the user
 	 *             than remove a lock or cancel the operation.
 	 */
-	public static List readXMP(File file) throws IOException {
+	public static List<BibtexEntry> readXMP(File file) throws IOException {
 		FileInputStream is = new FileInputStream(file);
 		try {
 			return readXMP(is);
@@ -129,9 +127,10 @@ public class XMPUtil {
 	 *             Throws an IOException if the file cannot be read, so the user
 	 *             than remove a lock or cancel the operation.
 	 */
-	public static List readXMP(InputStream inputStream) throws IOException {
+	public static List<BibtexEntry> readXMP(InputStream inputStream)
+			throws IOException {
 
-		List result = new LinkedList();
+		List<BibtexEntry> result = new LinkedList<BibtexEntry>();
 
 		PDDocument document = null;
 
@@ -139,7 +138,7 @@ public class XMPUtil {
 			document = PDDocument.load(inputStream);
 			if (document.isEncrypted()) {
 				throw new EncryptionNotSupportedException(
-					"Error: Cannot read metadata from encrypted document.");
+						"Error: Cannot read metadata from encrypted document.");
 			}
 
 			XMPMetadata meta = getXMPMetadata(document);
@@ -148,7 +147,8 @@ public class XMPUtil {
 			if (meta == null)
 				return null;
 
-			List schemas = meta.getSchemasByNamespaceURI(XMPSchemaBibtex.NAMESPACE);
+			List schemas = meta
+					.getSchemasByNamespaceURI(XMPSchemaBibtex.NAMESPACE);
 
 			Iterator it = schemas.iterator();
 			while (it.hasNext()) {
@@ -159,7 +159,8 @@ public class XMPUtil {
 
 			// If we did not find anything have a look if a Dublin Core exists
 			if (result.size() == 0) {
-				schemas = meta.getSchemasByNamespaceURI(XMPSchemaDublinCore.NAMESPACE);
+				schemas = meta
+						.getSchemasByNamespaceURI(XMPSchemaDublinCore.NAMESPACE);
 				it = schemas.iterator();
 				while (it.hasNext()) {
 					XMPSchemaDublinCore dc = (XMPSchemaDublinCore) it.next();
@@ -173,7 +174,7 @@ public class XMPUtil {
 
 			if (result.size() == 0) {
 				BibtexEntry entry = getBibtexEntryFromDocumentInformation(document
-					.getDocumentInformation());
+						.getDocumentInformation());
 
 				if (entry != null)
 					result.add(entry);
@@ -185,7 +186,23 @@ public class XMPUtil {
 		return result;
 	}
 
-	public static BibtexEntry getBibtexEntryFromDocumentInformation(PDDocumentInformation di) {
+	/**
+	 * Helper function for retrieving a BibtexEntry from the
+	 * PDDocumentInformation in a PDF file.
+	 * 
+	 * To understand how to get hold of a PDDocumentInformation have a look in
+	 * the test cases for XMPUtil.
+	 * 
+	 * The BibtexEntry is build by mapping individual fields in the document
+	 * information (like author, title, keywords) to fields in a bibtex entry.
+	 * 
+	 * @param di
+	 *            The document information from which to build a BibtexEntry.
+	 * 
+	 * @return The bibtex entry found in the document information.
+	 */
+	public static BibtexEntry getBibtexEntryFromDocumentInformation(
+			PDDocumentInformation di) {
 
 		BibtexEntry entry = new BibtexEntry();
 
@@ -213,7 +230,8 @@ public class XMPUtil {
 				String value = dict.getString(key);
 				key = key.substring("bibtex/".length());
 				if (key.equals("entrytype")) {
-					BibtexEntryType type = BibtexEntryType.getStandardType(value);
+					BibtexEntryType type = BibtexEntryType
+							.getStandardType(value);
 					if (type != null)
 						entry.setType(type);
 				} else
@@ -225,7 +243,23 @@ public class XMPUtil {
 		return (entry.getAllFields().length > 0 ? entry : null);
 	}
 
-	public static BibtexEntry getBibtexEntryFromDublinCore(XMPSchemaDublinCore dcSchema) {
+	/**
+	 * Helper function for retrieving a BibtexEntry from the DublinCore metadata
+	 * in a PDF file.
+	 * 
+	 * To understand how to get hold of a XMPSchemaDublinCore have a look in the
+	 * test cases for XMPUtil.
+	 * 
+	 * The BibtexEntry is build by mapping individual fields in the dublin core
+	 * (like creator, title, subject) to fields in a bibtex entry.
+	 * 
+	 * @param di
+	 *            The document information from which to build a BibtexEntry.
+	 * 
+	 * @return The bibtex entry found in the document information.
+	 */
+	public static BibtexEntry getBibtexEntryFromDublinCore(
+			XMPSchemaDublinCore dcSchema) {
 
 		BibtexEntry entry = new BibtexEntry();
 
@@ -282,7 +316,8 @@ public class XMPUtil {
 			if (c != null) {
 				entry.setField("year", String.valueOf(c.get(Calendar.YEAR)));
 				if (date.length() > 4) {
-					entry.setField("month", Globals.MONTHS[c.get(Calendar.MONTH)]);
+					entry.setField("month", "#"
+							+ Globals.MONTHS[c.get(Calendar.MONTH)] + "#");
 				}
 			}
 		}
@@ -364,7 +399,7 @@ public class XMPUtil {
 			StringBuffer sb = null;
 			while (it.hasNext()) {
 				if (sb != null) {
-					sb.append(", ");
+					sb.append(",");
 				} else {
 					sb = new StringBuffer();
 				}
@@ -413,16 +448,20 @@ public class XMPUtil {
 	 *            The file to write to.
 	 * @param entry
 	 *            The entry to write.
+	 * @param database
+	 *            maybenull An optional database which the given bibtex entries
+	 *            belong to, which will be used to resolve strings. If the
+	 *            database is null the strings will not be resolved.
 	 * @throws TransformerException
 	 *             If the entry was malformed or unsupported.
 	 * @throws IOException
 	 *             If the file could not be written to or could not be found.
 	 */
-	public static void writeXMP(File file, BibtexEntry entry) throws IOException,
-		TransformerException {
-		List l = new LinkedList();
+	public static void writeXMP(File file, BibtexEntry entry,
+			BibtexDatabase database) throws IOException, TransformerException {
+		List<BibtexEntry> l = new LinkedList<BibtexEntry>();
 		l.add(entry);
-		writeXMP(file, l, true);
+		writeXMP(file, l, database, true);
 	}
 
 	/**
@@ -432,13 +471,24 @@ public class XMPUtil {
 	 * 
 	 * @param bibtexEntries
 	 *            The BibtexEntries to write XMP-metadata for.
+	 * @param database
+	 *            maybenull An optional database which the given bibtex entries
+	 *            belong to, which will be used to resolve strings. If the
+	 *            database is null the strings will not be resolved.
 	 * @throws TransformerException
 	 *             Thrown if the bibtexEntries could not transformed to XMP.
 	 * @throws IOException
 	 *             Thrown if an IOException occured while writing to the stream.
+	 * 
+	 * @see #toXMP(Collection, OutputStream) if you don't need strings to be
+	 *      resolved.
 	 */
-	public static void toXMP(Collection bibtexEntries, OutputStream outputStream)
-		throws IOException, TransformerException {
+	public static void toXMP(Collection<BibtexEntry> bibtexEntries,
+			BibtexDatabase database, OutputStream outputStream)
+			throws IOException, TransformerException {
+
+		if (database != null)
+			bibtexEntries = database.resolveForStrings(bibtexEntries, true);
 
 		XMPMetadata x = new XMPMetadata();
 
@@ -454,21 +504,27 @@ public class XMPUtil {
 	}
 
 	/**
-	 * Convenience method for toXMP(Collection, OutputStream) returning a String
-	 * containing the XMP-metadata of the given collection of BibtexEntries.
+	 * Convenience method for toXMP(Collection<BibtexEntry>, BibtexDatabase,
+	 * OutputStream) returning a String containing the XMP-metadata of the given
+	 * collection of BibtexEntries.
 	 * 
 	 * The resulting metadata string is wrapped as a complete XMP-document.
 	 * 
 	 * @param bibtexEntries
-	 *            The BibtexEntries to return XMP-metadata for.
+	 *            The BibtexEntries to return XMP-metadata for. 
+	 * @param database
+	 *            maybenull An optional database which the given bibtex entries
+	 *            belong to, which will be used to resolve strings. If the
+	 *            database is null the strings will not be resolved.
 	 * @return The XMP representation of the given bibtexEntries.
 	 * @throws TransformerException
 	 *             Thrown if the bibtexEntries could not transformed to XMP.
 	 */
-	public static String toXMP(Collection bibtexEntries) throws TransformerException {
+	public static String toXMP(Collection<BibtexEntry> bibtexEntries,
+			BibtexDatabase database) throws TransformerException {
 		try {
 			ByteArrayOutputStream bs = new ByteArrayOutputStream();
-			toXMP(bibtexEntries, bs);
+			toXMP(bibtexEntries, database, bs);
 			return bs.toString();
 		} catch (IOException e) {
 			throw new TransformerException(e);
@@ -486,14 +542,15 @@ public class XMPUtil {
 	 *         found.
 	 * @throws IOException
 	 */
-	public static XMPMetadata readRawXMP(InputStream inputStream) throws IOException {
+	public static XMPMetadata readRawXMP(InputStream inputStream)
+			throws IOException {
 		PDDocument document = null;
 
 		try {
 			document = PDDocument.load(inputStream);
 			if (document.isEncrypted()) {
 				throw new EncryptionNotSupportedException(
-					"Error: Cannot read metadata from encrypted document.");
+						"Error: Cannot read metadata from encrypted document.");
 			}
 
 			return getXMPMetadata(document);
@@ -504,7 +561,7 @@ public class XMPUtil {
 		}
 	}
 
-	protected static XMPMetadata getXMPMetadata(PDDocument document) throws IOException {
+	static XMPMetadata getXMPMetadata(PDDocument document) throws IOException {
 		PDDocumentCatalog catalog = document.getDocumentCatalog();
 		PDMetadata metaRaw = catalog.getMetadata();
 
@@ -512,7 +569,8 @@ public class XMPUtil {
 			return null;
 		}
 
-		XMPMetadata meta = new XMPMetadata(XMLUtil.parse(metaRaw.createInputStream()));
+		XMPMetadata meta = new XMPMetadata(XMLUtil.parse(metaRaw
+				.createInputStream()));
 		meta.addXMLNSMapping(XMPSchemaBibtex.NAMESPACE, XMPSchemaBibtex.class);
 		return meta;
 	}
@@ -536,7 +594,11 @@ public class XMPUtil {
 		}
 	}
 
-	protected static void writeToDCSchema(XMPSchemaDublinCore dcSchema, BibtexEntry entry) {
+	static void writeToDCSchema(XMPSchemaDublinCore dcSchema,
+			BibtexEntry entry, BibtexDatabase database) {
+
+		if (database != null)
+			entry = database.resolveForStrings(entry, false);
 
 		// Set all the values including key and entryType
 		Object[] fields = entry.getAllFields();
@@ -566,7 +628,8 @@ public class XMPUtil {
 
 				int n = list.size();
 				for (int i = 0; i < n; i++) {
-					dcSchema.addContributor(list.getAuthor(i).getFirstLast(false));
+					dcSchema.addContributor(list.getAuthor(i).getFirstLast(
+							false));
 				}
 				continue;
 			}
@@ -821,16 +884,20 @@ public class XMPUtil {
 	 *            The pdf document to write to.
 	 * @param entry
 	 *            The Bibtex entry that is written as a schema.
+	 * @param database
+	 *            maybenull An optional database which the given bibtex entries
+	 *            belong to, which will be used to resolve strings. If the
+	 *            database is null the strings will not be resolved.
 	 * @throws IOException
 	 * @throws TransformerException
 	 */
-	public static void writeDublinCore(PDDocument document, BibtexEntry entry) throws IOException,
-		TransformerException {
+	public static void writeDublinCore(PDDocument document, BibtexEntry entry,
+			BibtexDatabase database) throws IOException, TransformerException {
 
-		List l = new ArrayList();
-		l.add(entry);
+		List<BibtexEntry> entries = new ArrayList<BibtexEntry>();
+		entries.add(entry);
 
-		writeDublinCore(document, l);
+		writeDublinCore(document, entries, database);
 	}
 
 	/**
@@ -840,13 +907,21 @@ public class XMPUtil {
 	 * 
 	 * @param document
 	 *            The pdf document to write to.
-	 * @param c
+	 * @param entries
 	 *            The Bibtex entries that are written as schemas
+	 * @param database
+	 *            maybenull An optional database which the given bibtex entries
+	 *            belong to, which will be used to resolve strings. If the
+	 *            database is null the strings will not be resolved.
 	 * @throws IOException
 	 * @throws TransformerException
 	 */
-	public static void writeDublinCore(PDDocument document, Collection c) throws IOException,
-		TransformerException {
+	public static void writeDublinCore(PDDocument document,
+			Collection<BibtexEntry> entries, BibtexDatabase database)
+			throws IOException, TransformerException {
+
+		if (database != null)
+			entries = database.resolveForStrings(entries, false);
 
 		PDDocumentCatalog catalog = document.getDocumentCatalog();
 		PDMetadata metaRaw = catalog.getMetadata();
@@ -859,18 +934,17 @@ public class XMPUtil {
 		}
 
 		// Remove all current Dublin-Core schemas
-		List schemas = meta.getSchemasByNamespaceURI(XMPSchemaDublinCore.NAMESPACE);
+		List schemas = meta
+				.getSchemasByNamespaceURI(XMPSchemaDublinCore.NAMESPACE);
 		Iterator it = schemas.iterator();
 		while (it.hasNext()) {
 			XMPSchema bib = (XMPSchema) it.next();
 			bib.getElement().getParentNode().removeChild(bib.getElement());
 		}
 
-		it = c.iterator();
-		while (it.hasNext()) {
-			BibtexEntry entry = (BibtexEntry) it.next();
+		for (BibtexEntry entry : entries) {
 			XMPSchemaDublinCore dcSchema = new XMPSchemaDublinCore(meta);
-			writeToDCSchema(dcSchema, entry);
+			writeToDCSchema(dcSchema, entry, null);
 			meta.addSchema(dcSchema);
 		}
 
@@ -892,12 +966,20 @@ public class XMPUtil {
 	 * @param document
 	 *            The pdf document to write to.
 	 * @param entry
-	 *            The Bibtex entry that is written into the PDF properties.
+	 *            The Bibtex entry that is written into the PDF properties. *
+	 * @param database
+	 *            maybenull An optional database which the given bibtex entries
+	 *            belong to, which will be used to resolve strings. If the
+	 *            database is null the strings will not be resolved.
 	 */
-	public static void writeDocumentInformation(PDDocument document, BibtexEntry entry) {
+	public static void writeDocumentInformation(PDDocument document,
+			BibtexEntry entry, BibtexDatabase database) {
 
 		PDDocumentInformation di = document.getDocumentInformation();
 
+		if (database != null)
+			entry = database.resolveForStrings(entry, false);
+
 		// Set all the values including key and entryType
 		Object[] fields = entry.getAllFields();
 
@@ -911,11 +993,13 @@ public class XMPUtil {
 			} else if (fields[i].equals("abstract")) {
 				di.setSubject(entry.getField("abstract").toString());
 			} else {
-				di.setCustomMetadataValue("bibtex/" + fields[i].toString(), entry.getField(
-					fields[i].toString()).toString());
+				di.setCustomMetadataValue("bibtex/" + fields[i].toString(),
+						entry.getField(fields[i].toString()).toString());
 			}
 		}
-		di.setCustomMetadataValue("bibtex/entrytype", entry.getType().getName());
+		di
+				.setCustomMetadataValue("bibtex/entrytype", entry.getType()
+						.getName());
 	}
 
 	/**
@@ -931,7 +1015,11 @@ public class XMPUtil {
 	 * @param file
 	 *            The file to write the entries to.
 	 * @param bibtexEntries
-	 *            The entries to write to the file.
+	 *            The entries to write to the file. *
+	 * @param database
+	 *            maybenull An optional database which the given bibtex entries
+	 *            belong to, which will be used to resolve strings. If the
+	 *            database is null the strings will not be resolved.
 	 * @param writePDFInfo
 	 *            Write information also in PDF document properties
 	 * @throws TransformerException
@@ -939,8 +1027,12 @@ public class XMPUtil {
 	 * @throws IOException
 	 *             If the file could not be written to or could not be found.
 	 */
-	public static void writeXMP(File file, Collection bibtexEntries, boolean writePDFInfo)
-		throws IOException, TransformerException {
+	public static void writeXMP(File file,
+			Collection<BibtexEntry> bibtexEntries, BibtexDatabase databasee,
+			boolean writePDFInfo) throws IOException, TransformerException {
+
+		if (databasee != null)
+			bibtexEntries = databasee.resolveForStrings(bibtexEntries, false);
 
 		PDDocument document = null;
 
@@ -948,12 +1040,13 @@ public class XMPUtil {
 			document = PDDocument.load(file.getAbsoluteFile());
 			if (document.isEncrypted()) {
 				throw new EncryptionNotSupportedException(
-					"Error: Cannot add metadata to encrypted document.");
+						"Error: Cannot add metadata to encrypted document.");
 			}
 
 			if (writePDFInfo && bibtexEntries.size() == 1) {
-				writeDocumentInformation(document, (BibtexEntry) bibtexEntries.iterator().next());
-				writeDublinCore(document, bibtexEntries);
+				writeDocumentInformation(document, (BibtexEntry) bibtexEntries
+						.iterator().next(), null);
+				writeDublinCore(document, bibtexEntries, null);
 			}
 
 			PDDocumentCatalog catalog = document.getDocumentCatalog();
@@ -961,14 +1054,17 @@ public class XMPUtil {
 
 			XMPMetadata meta;
 			if (metaRaw != null) {
-				meta = new XMPMetadata(XMLUtil.parse(metaRaw.createInputStream()));
+				meta = new XMPMetadata(XMLUtil.parse(metaRaw
+						.createInputStream()));
 			} else {
 				meta = new XMPMetadata();
 			}
-			meta.addXMLNSMapping(XMPSchemaBibtex.NAMESPACE, XMPSchemaBibtex.class);
+			meta.addXMLNSMapping(XMPSchemaBibtex.NAMESPACE,
+					XMPSchemaBibtex.class);
 
 			// Remove all current Bibtex-schemas
-			List schemas = meta.getSchemasByNamespaceURI(XMPSchemaBibtex.NAMESPACE);
+			List schemas = meta
+					.getSchemasByNamespaceURI(XMPSchemaBibtex.NAMESPACE);
 			Iterator it = schemas.iterator();
 			while (it.hasNext()) {
 				XMPSchemaBibtex bib = (XMPSchemaBibtex) it.next();
@@ -980,7 +1076,7 @@ public class XMPUtil {
 				BibtexEntry e = (BibtexEntry) it.next();
 				XMPSchemaBibtex bibtex = new XMPSchemaBibtex(meta);
 				meta.addSchema(bibtex);
-				bibtex.setBibtexEntry(e);
+				bibtex.setBibtexEntry(e, null);
 			}
 
 			// Save to stream and then input that stream to the PDF
@@ -995,7 +1091,7 @@ public class XMPUtil {
 				document.save(file.getAbsolutePath());
 			} catch (COSVisitorException e) {
 				throw new TransformerException("Could not write XMP-metadata: "
-					+ e.getLocalizedMessage());
+						+ e.getLocalizedMessage());
 			}
 
 		} finally {
@@ -1008,7 +1104,7 @@ public class XMPUtil {
 	/**
 	 * Print usage information for the command line tool xmpUtil.
 	 * 
-	 * @see net.sf.jabref.util.XMUtil.main()
+	 * @see XMPUtil#main(String[])
 	 */
 	protected static void usage() {
 		System.out.println("Read or write XMP-metadata from or to pdf file.");
@@ -1018,12 +1114,14 @@ public class XMPUtil {
 		System.out.println("  xmpUtil <pdf>");
 		System.out.println("Read from PDF and print raw XMP:");
 		System.out.println("  xmpUtil -x <pdf>");
-		System.out.println("Write the entry in <bib> given by <key> to the PDF:");
+		System.out
+				.println("Write the entry in <bib> given by <key> to the PDF:");
 		System.out.println("  xmpUtil <key> <bib> <pdf>");
 		System.out.println("Write all entries in <bib> to the PDF:");
 		System.out.println("  xmpUtil <bib> <pdf>");
 		System.out.println("");
-		System.out.println("To report bugs visit http://jabref.sourceforge.net");
+		System.out
+				.println("To report bugs visit http://jabref.sourceforge.net");
 	}
 
 	/**
@@ -1050,7 +1148,8 @@ public class XMPUtil {
 	 * @throws TransformerException
 	 *             If the given BibtexEntry is malformed.
 	 */
-	public static void main(String[] args) throws IOException, TransformerException {
+	public static void main(String[] args) throws IOException,
+			TransformerException {
 
 		// Don't forget to initialize the preferences
 		if (Globals.prefs == null) {
@@ -1071,20 +1170,25 @@ public class XMPUtil {
 				while (it.hasNext()) {
 					BibtexEntry e = (BibtexEntry) it.next();
 					StringWriter sw = new StringWriter();
-					e.write(sw, new net.sf.jabref.export.LatexFieldFormatter(), false);
+					e.write(sw, new net.sf.jabref.export.LatexFieldFormatter(),
+							false);
 					System.out.println(sw.getBuffer().toString());
 				}
 
 			} else if (args[0].endsWith(".bib")) {
 				// Read from bib and write as XMP
 
-				ParserResult result = BibtexParser.parse(new FileReader(args[0]));
-				Collection c = result.getDatabase().getEntries();
+				ParserResult result = BibtexParser
+						.parse(new FileReader(args[0]));
+				Collection<BibtexEntry> entries = result.getDatabase()
+						.getEntries();
 
-				if (c.size() == 0) {
-					System.err.println("Could not find BibtexEntry in " + args[0]);
+				if (entries.size() == 0) {
+					System.err.println("Could not find BibtexEntry in "
+							+ args[0]);
 				} else {
-					System.out.println(XMPUtil.toXMP(c));
+					System.out.println(XMPUtil.toXMP(entries, result
+							.getDatabase()));
 				}
 
 			} else {
@@ -1098,7 +1202,8 @@ public class XMPUtil {
 				XMPMetadata meta = XMPUtil.readRawXMP(new File(args[1]));
 
 				if (meta == null) {
-					System.err.println("The given pdf does not contain any XMP-metadata.");
+					System.err
+							.println("The given pdf does not contain any XMP-metadata.");
 				} else {
 					XMLUtil.save(meta.getXMPDocument(), System.out, "UTF-8");
 				}
@@ -1106,14 +1211,18 @@ public class XMPUtil {
 			}
 
 			if (args[0].endsWith(".bib") && args[1].endsWith(".pdf")) {
-				ParserResult result = BibtexParser.parse(new FileReader(args[0]));
+				ParserResult result = BibtexParser
+						.parse(new FileReader(args[0]));
 
-				Collection c = result.getDatabase().getEntries();
+				Collection<BibtexEntry> entries = result.getDatabase()
+						.getEntries();
 
-				if (c.size() == 0) {
-					System.err.println("Could not find BibtexEntry in " + args[0]);
+				if (entries.size() == 0) {
+					System.err.println("Could not find BibtexEntry in "
+							+ args[0]);
 				} else {
-					XMPUtil.writeXMP(new File(args[1]), c, false);
+					XMPUtil.writeXMP(new File(args[1]), entries, result
+							.getDatabase(), false);
 					System.out.println("XMP written.");
 				}
 				break;
@@ -1133,9 +1242,10 @@ public class XMPUtil {
 			BibtexEntry e = result.getDatabase().getEntryByKey(args[0]);
 
 			if (e == null) {
-				System.err.println("Could not find BibtexEntry " + args[0] + " in " + args[0]);
+				System.err.println("Could not find BibtexEntry " + args[0]
+						+ " in " + args[0]);
 			} else {
-				XMPUtil.writeXMP(new File(args[2]), e);
+				XMPUtil.writeXMP(new File(args[2]), e, result.getDatabase());
 
 				System.out.println("XMP written.");
 			}
diff --git a/src/java/tests/net/sf/jabref/AllTests.java b/src/java/tests/net/sf/jabref/AllTests.java
index 6eb1f28..a97ce4d 100644
--- a/src/java/tests/net/sf/jabref/AllTests.java
+++ b/src/java/tests/net/sf/jabref/AllTests.java
@@ -8,11 +8,12 @@ public class AllTests {
 	public static Test suite() {
 		TestSuite suite = new TestSuite("Test for test.net.sf.jabref");
 		//$JUnit-BEGIN$
-		suite.addTestSuite(UtilTest.class);
-		suite.addTestSuite(FileBasedTestCase.class);
+		suite.addTestSuite(BibtexDatabaseTest.class);
+		suite.addTestSuite(JabRefTestCase.class);
 		suite.addTestSuite(UtilFindFileTest.class);
 		suite.addTestSuite(AuthorListTest.class);
-		suite.addTestSuite(JabRefTestCase.class);
+		suite.addTestSuite(FileBasedTestCase.class);
+		suite.addTestSuite(UtilTest.class);
 		//$JUnit-END$
 
 		suite.addTest(tests.net.sf.jabref.export.layout.format.AllTests.suite());
diff --git a/src/java/tests/net/sf/jabref/BibtexDatabaseTest.java b/src/java/tests/net/sf/jabref/BibtexDatabaseTest.java
new file mode 100644
index 0000000..902a739
--- /dev/null
+++ b/src/java/tests/net/sf/jabref/BibtexDatabaseTest.java
@@ -0,0 +1,36 @@
+package tests.net.sf.jabref;
+
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.IOException;
+
+import junit.framework.TestCase;
+import net.sf.jabref.BibtexDatabase;
+import net.sf.jabref.imports.BibtexParser;
+import net.sf.jabref.imports.ParserResult;
+
+public class BibtexDatabaseTest extends TestCase {
+
+	/**
+	 * Some basic test cases for resolving strings.
+	 * 
+	 * @throws FileNotFoundException
+	 * @throws IOException
+	 */
+	public void testResolveStrings() throws FileNotFoundException, IOException{
+		
+		ParserResult result = BibtexParser.parse(new FileReader("src/tests/net/sf/jabref/util/twente.bib"));
+		
+		BibtexDatabase db = result.getDatabase();
+		
+		assertEquals("Arvind", db.resolveForStrings("#Arvind#"));
+		assertEquals("Patterson, David", db.resolveForStrings("#Patterson#"));
+		assertEquals("Arvind and Patterson, David", db.resolveForStrings("#Arvind# and #Patterson#"));
+		
+		// Strings that are not found return just the given string.
+		assertEquals("#unknown#", db.resolveForStrings("#unknown#"));
+		
+	}
+	
+	
+}
diff --git a/src/java/tests/net/sf/jabref/FileBasedTestCase.java b/src/java/tests/net/sf/jabref/FileBasedTestCase.java
index ca3bb98..17e8aca 100644
--- a/src/java/tests/net/sf/jabref/FileBasedTestCase.java
+++ b/src/java/tests/net/sf/jabref/FileBasedTestCase.java
@@ -16,7 +16,7 @@ import net.sf.jabref.imports.ParserResult;
  * functions.
  * 
  * @author $Author: coezbek $
- * @version $Revision: 1.4 $ ($Date: 2006/11/23 22:37:19 $)
+ * @version $Revision: 1.5 $ ($Date: 2007/05/30 23:53:36 $)
  * 
  */
 public class FileBasedTestCase extends TestCase {
@@ -202,7 +202,19 @@ public class FileBasedTestCase extends TestCase {
 
 			File foo = new File(dirTest, "foo.dat");
 			foo.createNewFile();
-
+			
+			File graphicsDir = new File(root, "graphicsDir");
+			graphicsDir.mkdir();
+			
+			File graphicsSubDir = new File(graphicsDir, "subDir");
+			graphicsSubDir.mkdir();
+			
+			File jpg = new File(graphicsSubDir, "testHipKro03test.jpg");
+			jpg.createNewFile();
+
+			File png = new File(graphicsSubDir, "testHipKro03test.png");
+			png.createNewFile();
+			
 		} catch (Exception e) {
 			throw new RuntimeException();
 		}
diff --git a/src/java/tests/net/sf/jabref/UtilFindFileTest.java b/src/java/tests/net/sf/jabref/UtilFindFileTest.java
index fb3b323..dced24b 100644
--- a/src/java/tests/net/sf/jabref/UtilFindFileTest.java
+++ b/src/java/tests/net/sf/jabref/UtilFindFileTest.java
@@ -2,16 +2,13 @@ package tests.net.sf.jabref;
 
 import java.io.File;
 import java.io.IOException;
-import java.io.StringReader;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
 
-import junit.framework.TestCase;
-import net.sf.jabref.BibtexDatabase;
 import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.Globals;
-import net.sf.jabref.JabRefPreferences;
 import net.sf.jabref.Util;
-import net.sf.jabref.imports.BibtexParser;
-import net.sf.jabref.imports.ParserResult;
 
 /**
  * Testing Util.findFile for finding files based on regular expressions.
@@ -72,6 +69,19 @@ public class UtilFindFileTest extends FileBasedTestCase {
 		}
 	}
 
+	public void testFindAssociatedFiles() throws IOException {
+		Collection<BibtexEntry> entries = Arrays.asList(new BibtexEntry[]{entry});
+		Collection<String> extensions = Arrays.asList(new String[]{"jpg", "pdf"});
+		Collection<File> dirs = Arrays.asList(new File[] { new File(root.getAbsoluteFile() + "/pdfs/"), new File(root.getAbsoluteFile() + "/graphicsDir/") });
+		
+		Map<BibtexEntry, List<File>> results = Util.findAssociatedFiles(entries, extensions, dirs);
+		
+		assertEquals(2, results.get(entry).size());
+		assertTrue(results.get(entry).contains(new File(root.getAbsoluteFile() + "/graphicsDir/subDir/testHipKro03test.jpg")));
+		assertFalse(results.get(entry).contains(new File(root.getAbsoluteFile() + "/graphicsDir/subDir/testHipKro03test.png")));
+		assertTrue(results.get(entry).contains(new File(root.getAbsoluteFile() + "/pdfs/sub/HipKro03-sub.pdf")));
+	}
+	
 	public void testFindPdfInMultiple() throws IOException {
 
 		{
diff --git a/src/java/tests/net/sf/jabref/UtilTest.java b/src/java/tests/net/sf/jabref/UtilTest.java
index 480c339..1cf3c8c 100644
--- a/src/java/tests/net/sf/jabref/UtilTest.java
+++ b/src/java/tests/net/sf/jabref/UtilTest.java
@@ -3,7 +3,6 @@ package tests.net.sf.jabref;
 import java.awt.Container;
 import java.awt.Dialog;
 import java.io.StringReader;
-import java.net.URISyntaxException;
 import java.text.DecimalFormat;
 import java.text.NumberFormat;
 import java.util.Arrays;
@@ -65,7 +64,7 @@ public class UtilTest extends TestCase {
 
 	public void testCreateNeutralId() {
 		
-		HashSet set = new HashSet();
+		HashSet<String> set = new HashSet<String>();
 		for (int i = 0; i < 10000; i++){
 			String string = Util.createNeutralId();
 			assertFalse(set.contains(string));
@@ -254,14 +253,14 @@ public class UtilTest extends TestCase {
 		
 		try {
 		
-			List f = new LinkedList(Arrays.asList(formats));
-			List n = new LinkedList(Arrays.asList(names));
+			List<String> f = new LinkedList<String>(Arrays.asList(formats));
+			List<String> n = new LinkedList<String>(Arrays.asList(names));
 			
 			n.add("testMe123454321");
 			f.add("*@*@test");
 
-			String[] newNames = (String[])n.toArray(new String[n.size()]);
-			String[] newFormats = (String[])f.toArray(new String[f.size()]);
+			String[] newNames = n.toArray(new String[n.size()]);
+			String[] newFormats = f.toArray(new String[f.size()]);
 			
 			Globals.prefs.putStringArray(NameFormatterTab.NAME_FORMATER_KEY, newNames);
 			Globals.prefs.putStringArray(NameFormatterTab.NAME_FORMATTER_VALUE, newFormats);
diff --git a/src/java/tests/net/sf/jabref/export/layout/AllTests.java b/src/java/tests/net/sf/jabref/export/layout/AllTests.java
index e55883e..0d001de 100644
--- a/src/java/tests/net/sf/jabref/export/layout/AllTests.java
+++ b/src/java/tests/net/sf/jabref/export/layout/AllTests.java
@@ -8,9 +8,9 @@ public class AllTests {
 	public static Test suite() {
 		TestSuite suite = new TestSuite("Test for test.net.sf.jabref.layout");
 		//$JUnit-BEGIN$
+		suite.addTestSuite(HTMLCharsTest.class);
 		suite.addTestSuite(RTFCharsTest.class);
 		suite.addTestSuite(LayoutTest.class);
-		suite.addTestSuite(HTMLCharsTest.class);
 		//$JUnit-END$
 		return suite;
 	}
diff --git a/src/java/tests/net/sf/jabref/export/layout/format/AllTests.java b/src/java/tests/net/sf/jabref/export/layout/format/AllTests.java
index 258b14f..8d993f7 100644
--- a/src/java/tests/net/sf/jabref/export/layout/format/AllTests.java
+++ b/src/java/tests/net/sf/jabref/export/layout/format/AllTests.java
@@ -8,27 +8,28 @@ public class AllTests {
 	public static Test suite() {
 		TestSuite suite = new TestSuite("Test for test.net.sf.jabref");
 		//$JUnit-BEGIN$
-		suite.addTestSuite(AuthorFirstAbbrLastOxfordCommasTest.class);
-		suite.addTestSuite(AuthorFirstLastCommasTest.class);
-		suite.addTestSuite(AuthorLastFirstAbbreviatorTester.class);
+		suite.addTestSuite(AuthorAbbreviatorTest.class);
 		suite.addTestSuite(AuthorLastFirstTest.class);
-		suite.addTestSuite(AuthorAndsCommaReplacerTest.class);
-		suite.addTestSuite(AuthorFirstFirstTest.class);
-		suite.addTestSuite(AuthorFirstLastOxfordCommasTest.class);
+		suite.addTestSuite(AuthorLastFirstAbbrOxfordCommasTest.class);
 		suite.addTestSuite(BibtexNameLayoutFormatterTest.class);
+		suite.addTestSuite(AuthorFirstAbbrLastOxfordCommasTest.class);
 		suite.addTestSuite(AuthorOrgSciTest.class);
-		suite.addTestSuite(AuthorAbbreviatorTest.class);
-		suite.addTestSuite(CompositeFormatTest.class);
-		suite.addTestSuite(ResolvePDFTest.class);
-		suite.addTestSuite(AuthorAndsReplacerTest.class);
-		suite.addTestSuite(AuthorLastFirstAbbrCommasTest.class);
-		suite.addTestSuite(HTMLParagraphsTest.class);
 		suite.addTestSuite(AuthorLastFirstOxfordCommasTest.class);
+		suite.addTestSuite(AuthorFirstLastCommasTest.class);
+		suite.addTestSuite(NoSpaceBetweenAbbreviationsTest.class);
+		suite.addTestSuite(ResolvePDFTest.class);
+		suite.addTestSuite(DOICheckTest.class);
 		suite.addTestSuite(AuthorFirstAbbrLastCommasTest.class);
+		suite.addTestSuite(AuthorFirstLastOxfordCommasTest.class);
+		suite.addTestSuite(CompositeFormatTest.class);
+		suite.addTestSuite(AuthorFirstFirstTest.class);
+		suite.addTestSuite(AuthorLastFirstAbbrCommasTest.class);
 		suite.addTestSuite(AuthorLastFirstCommasTest.class);
-		suite.addTestSuite(DOICheckTest.class);
-		suite.addTestSuite(AuthorLastFirstAbbrOxfordCommasTest.class);
-		suite.addTestSuite(NoSpaceBetweenAbbreviationsTest.class);
+		suite.addTestSuite(AuthorAndsReplacerTest.class);
+		suite.addTestSuite(AuthorLastFirstAbbreviatorTester.class);
+		suite.addTestSuite(HTMLParagraphsTest.class);
+		suite.addTestSuite(AuthorAndsCommaReplacerTest.class);
+		suite.addTestSuite(RemoveTildeTest.class);
 		//$JUnit-END$
 		return suite;
 	}
diff --git a/src/java/tests/net/sf/jabref/export/layout/format/BibtexNameLayoutFormatterTest.java b/src/java/tests/net/sf/jabref/export/layout/format/BibtexNameLayoutFormatterTest.java
index 8cc0d0f..a92492f 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,8 +1,6 @@
 package tests.net.sf.jabref.export.layout.format;
 
 import junit.framework.TestCase;
-import net.sf.jabref.export.layout.LayoutFormatter;
-import net.sf.jabref.export.layout.format.AuthorLastFirstCommas;
 import net.sf.jabref.export.layout.format.NameFormat;
 
 public class BibtexNameLayoutFormatterTest extends TestCase {
diff --git a/src/java/tests/net/sf/jabref/export/layout/format/RemoveTildeTest.java b/src/java/tests/net/sf/jabref/export/layout/format/RemoveTildeTest.java
new file mode 100644
index 0000000..3b5fa2c
--- /dev/null
+++ b/src/java/tests/net/sf/jabref/export/layout/format/RemoveTildeTest.java
@@ -0,0 +1,31 @@
+package tests.net.sf.jabref.export.layout.format;
+
+import junit.framework.TestCase;
+import net.sf.jabref.export.layout.LayoutFormatter;
+import net.sf.jabref.export.layout.format.RemoveTilde;
+
+public class RemoveTildeTest extends TestCase {
+
+	public void testFormatString() {
+
+		LayoutFormatter l = new RemoveTilde();
+
+		assertEquals("", l.format(""));
+		
+		assertEquals("simple", l.format("simple"));
+		
+		assertEquals(" ", l.format("~"));
+		
+		assertEquals("   ", l.format("~~~"));
+		
+		assertEquals(" \\~ ", l.format("~\\~~"));
+		
+		assertEquals("\\\\ ", l.format("\\\\~"));
+		
+		assertEquals("Doe Joe and Jane, M. and Kamp, J. A.", l
+				.format("Doe Joe and Jane, M. and Kamp, J.~A."));
+		
+		assertEquals("T\\~olkien, J. R. R.", l
+				.format("T\\~olkien, J.~R.~R."));
+	}
+}
diff --git a/src/java/tests/net/sf/jabref/imports/AllTests.java b/src/java/tests/net/sf/jabref/imports/AllTests.java
index ec76c56..fde72a0 100644
--- a/src/java/tests/net/sf/jabref/imports/AllTests.java
+++ b/src/java/tests/net/sf/jabref/imports/AllTests.java
@@ -9,8 +9,9 @@ public class AllTests {
 		TestSuite suite = new TestSuite("Test for tests.net.sf.jabref.imports");
 		//$JUnit-BEGIN$
 		suite.addTestSuite(OAI2ImportTest.class);
-		suite.addTestSuite(BibtexParserTest.class);
 		suite.addTestSuite(IsiImporterTest.class);
+		suite.addTestSuite(CopacImporterTest.class);
+		suite.addTestSuite(BibtexParserTest.class);
 		//$JUnit-END$
 		return suite;
 	}
diff --git a/src/java/tests/net/sf/jabref/imports/BibtexParserTest.java b/src/java/tests/net/sf/jabref/imports/BibtexParserTest.java
index e922998..003a203 100644
--- a/src/java/tests/net/sf/jabref/imports/BibtexParserTest.java
+++ b/src/java/tests/net/sf/jabref/imports/BibtexParserTest.java
@@ -38,7 +38,7 @@ public class BibtexParserTest extends TestCase {
 
 	public void testBibtexParser() {
 		try {
-			BibtexParser p = new BibtexParser(null);
+			new BibtexParser(null);
 			fail("Should not accept null.");
 		} catch (NullPointerException npe) {
 
diff --git a/src/java/tests/net/sf/jabref/imports/CopacImporterTest.java b/src/java/tests/net/sf/jabref/imports/CopacImporterTest.java
new file mode 100644
index 0000000..90b02e1
--- /dev/null
+++ b/src/java/tests/net/sf/jabref/imports/CopacImporterTest.java
@@ -0,0 +1,80 @@
+package tests.net.sf.jabref.imports;
+
+import java.io.IOException;
+import java.util.List;
+
+import junit.framework.TestCase;
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.BibtexEntryType;
+import net.sf.jabref.Globals;
+import net.sf.jabref.JabRefPreferences;
+import net.sf.jabref.imports.CopacImporter;
+
+public class CopacImporterTest extends TestCase {
+	protected void setUp() throws Exception {
+		super.setUp();
+
+		if (Globals.prefs == null) {
+			Globals.prefs = JabRefPreferences.getInstance();
+		}
+	}
+
+	protected void tearDown() throws Exception {
+		super.tearDown();
+	}
+
+	public void testIsRecognizedFormat() throws IOException {
+
+        CopacImporter importer = new CopacImporter();
+		assertTrue(importer.isRecognizedFormat(CopacImporterTest.class
+			.getResourceAsStream("CopacImporterTest1.txt")));
+
+		assertTrue(importer.isRecognizedFormat(CopacImporterTest.class
+			.getResourceAsStream("CopacImporterTest2.txt")));
+
+		assertFalse(importer.isRecognizedFormat(CopacImporterTest.class
+			.getResourceAsStream("IsiImporterTest1.isi")));
+
+		assertFalse(importer.isRecognizedFormat(CopacImporterTest.class
+			.getResourceAsStream("IsiImporterTestINSPEC.isi")));
+
+		assertFalse(importer.isRecognizedFormat(CopacImporterTest.class
+			.getResourceAsStream("IsiImporterTestWOS.isi")));
+
+		assertFalse(importer.isRecognizedFormat(CopacImporterTest.class
+			.getResourceAsStream("IsiImporterTestMedline.isi")));
+	}
+
+	public void testImportEntries() throws IOException {
+		CopacImporter importer = new CopacImporter();
+
+		List entries = importer.importEntries(CopacImporterTest.class
+			.getResourceAsStream("CopacImporterTest1.txt"));
+		assertEquals(1, entries.size());
+		BibtexEntry entry = (BibtexEntry) entries.get(0);
+		
+		assertEquals("The SIS project : software reuse with a natural language approach", entry.getField("title"));
+		assertEquals(
+			"Prechelt, Lutz and Universit�t Karlsruhe. Fakult�t f�r Informatik",
+			entry.getField("author"));
+		assertEquals("Interner Bericht ; Nr.2/92", entry.getField("series"));
+		assertEquals("1992", entry.getField("year"));
+		assertEquals("Karlsruhe :  Universitat Karlsruhe, Fakultat fur Informatik", entry.getField("publisher"));
+		assertEquals(BibtexEntryType.BOOK, entry.getType());
+	}
+
+	public void testImportEntries2() throws IOException {
+		CopacImporter importer = new CopacImporter();
+
+		List entries = importer.importEntries(CopacImporterTest.class
+			.getResourceAsStream("CopacImporterTest2.txt"));
+		assertEquals(2, entries.size());
+		BibtexEntry one = (BibtexEntry) entries.get(0);
+		
+		assertEquals("Computing and operational research at the London Hospital", one.getField("title"));
+		
+		BibtexEntry two = (BibtexEntry) entries.get(1);
+	
+		assertEquals("Real time systems : management and design", two.getField("title"));
+	}
+}
diff --git a/src/java/tests/net/sf/jabref/imports/CopacImporterTest1.txt b/src/java/tests/net/sf/jabref/imports/CopacImporterTest1.txt
new file mode 100644
index 0000000..8c82a7d
--- /dev/null
+++ b/src/java/tests/net/sf/jabref/imports/CopacImporterTest1.txt
@@ -0,0 +1,9 @@
+
+TI- The SIS project : software reuse with a natural language approach
+AU- Prechelt, Lutz
+AU- Universit�t Karlsruhe. Fakult�t f�r Informatik
+SE- Interner Bericht ; Nr.2/92
+PU- Karlsruhe :  Universitat Karlsruhe, Fakultat fur Informatik
+PY- 1992
+HL- Edinburgh
+
diff --git a/src/java/tests/net/sf/jabref/imports/CopacImporterTest2.txt b/src/java/tests/net/sf/jabref/imports/CopacImporterTest2.txt
new file mode 100644
index 0000000..65707c5
--- /dev/null
+++ b/src/java/tests/net/sf/jabref/imports/CopacImporterTest2.txt
@@ -0,0 +1,34 @@
+TI- Computing and operational research at the London Hospital
+AU- Barber, Barry
+AU- Abbott, W.
+SE- Computers in medicine series
+PU- London :  Butterworths
+PY- 1972
+PD- x, 102p, leaf : ill., form, port ; 22cm
+IS- 0407517006 (Pbk)
+NT- Bibl.p.94-97. - Index
+KW- London Hospital and Medical College
+KW- Electronic data processing - Medicine
+KW- Computers - Hospital administration
+KW- Hospital planning
+KW- Operations research
+KW- Hospital equipment and supplies
+KW- Electronic data processing - Hospitals - Administration
+KW- Hospitals, London, London Hospital and Medical College, Records
+    management, Applications of computer systems, to 1971
+HL- Aberdeen ; Birmingham ; Edinburgh ; Trinity College Dublin ;
+    UCL (University College London)
+
+
+TI- Real time systems : management and design
+AU- Tebbs, David
+AU- Collins, Garfield
+PU- London ; New York :  McGraw-Hill
+PY- 1977
+PD- ix, 357p : ill., forms ; 24cm
+IS- 0070844828
+NT- Index
+KW- Real-time data processing - Management
+KW- Real time computer systems, Design
+HL- Aberdeen ; Birmingham ; Edinburgh ; Imperial College ;
+    Liverpool ; Manchester ; Oxford ; Trinity College Dublin
diff --git a/src/java/tests/net/sf/jabref/imports/IsiImporterTest.java b/src/java/tests/net/sf/jabref/imports/IsiImporterTest.java
index ceba558..2b0def8 100644
--- a/src/java/tests/net/sf/jabref/imports/IsiImporterTest.java
+++ b/src/java/tests/net/sf/jabref/imports/IsiImporterTest.java
@@ -3,7 +3,6 @@ package tests.net.sf.jabref.imports;
 import java.io.IOException;
 import java.util.HashMap;
 import java.util.List;
-import java.util.regex.Pattern;
 
 import junit.framework.TestCase;
 import net.sf.jabref.BibtexEntry;
@@ -15,8 +14,8 @@ import net.sf.jabref.imports.IsiImporter;
 /**
  * Test cases for the IsiImporter
  * 
- * @author $Author: mortenalver $
- * @version $Revision: 1.6 $ ($Date: 2006/09/26 21:01:39 $)
+ * @author $Author: coezbek $
+ * @version $Revision: 1.7 $ ($Date: 2007/02/06 16:27:21 $)
  * 
  */
 public class IsiImporterTest extends TestCase {
diff --git a/src/java/tests/net/sf/jabref/imports/OAI2ImportTest.java b/src/java/tests/net/sf/jabref/imports/OAI2ImportTest.java
index 80ca18e..113046e 100644
--- a/src/java/tests/net/sf/jabref/imports/OAI2ImportTest.java
+++ b/src/java/tests/net/sf/jabref/imports/OAI2ImportTest.java
@@ -1,6 +1,7 @@
 package tests.net.sf.jabref.imports;
 
 import java.io.File;
+import java.io.FileInputStream;
 
 import javax.xml.parsers.SAXParser;
 import javax.xml.parsers.SAXParserFactory;
@@ -9,27 +10,37 @@ import junit.framework.TestCase;
 import net.sf.jabref.BibtexEntry;
 import net.sf.jabref.BibtexEntryType;
 import net.sf.jabref.Util;
-import net.sf.jabref.imports.*;
+import net.sf.jabref.imports.OAI2Fetcher;
+import net.sf.jabref.imports.OAI2Handler;
 
+import org.xml.sax.SAXException;
 
 /**
  * Test for OAI2-Handler and Fetcher.
  * 
  * @author Ulrich Stärk
  * @author Christian Kopf
+ * @author Christopher Oezbek
+ * 
+ * @version $Revision: 1.4.2.1 $ ($Date: 2007/06/29 13:56:21 $)
  * 
- * @version $Revision: 1.2 $ ($Date: 2007/01/08 15:26:55 $)
- *
  */
 public class OAI2ImportTest extends TestCase {
 
 	OAI2Handler handler;
+
 	BibtexEntry be;
+
 	File fis;
+
 	File fis2;
+
+	File fis3;
+
 	protected SAXParserFactory parserFactory;
+
 	protected SAXParser saxParser;
-	
+
 	protected void setUp() throws Exception {
 		parserFactory = SAXParserFactory.newInstance();
 		saxParser = parserFactory.newSAXParser();
@@ -37,78 +48,125 @@ public class OAI2ImportTest extends TestCase {
 		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() {
+		assertEquals("Test this", OAI2Fetcher.correctLineBreaks("Test\nthis"));
+		assertEquals("Test this", OAI2Fetcher.correctLineBreaks("Test \n this"));
+		assertEquals("Test\nthis", OAI2Fetcher.correctLineBreaks("Test\n\nthis"));
+		assertEquals("Test\nthis", OAI2Fetcher.correctLineBreaks("Test\n    \nthis"));
+		assertEquals("Test\nthis", OAI2Fetcher.correctLineBreaks("  Test   \n   \n   this  "));
 	}
-	
-	public void testParse() {
+
+	public void testParse() throws Throwable {
 		try {
-			saxParser.parse(fis,handler);
-		} catch (Exception e) {
-			fail("Exception");
+			saxParser.parse(fis, handler);
+			assertEquals("hep-ph/0408155", (String) 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"));
+
+			// 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"));
+		} catch (SAXException e) {
+			throw e.getException();
 		}
 	}
-	
-	public void testOai2xml() {
+
+	public void testOai22xml() throws Exception {
 		try {
-			saxParser.parse(fis,handler);
-			assertEquals("hep-ph/0408155",(String)be.getField("eprint"));
-			assertEquals("G. F. Giudice and A. Riotto and A. Zaffaroni",(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"));
-			assertEquals("GiuRioZaf05",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"));
-		} catch (Exception e) {
-			fail("Exception");
+			saxParser.parse(fis2, handler);
+			assertEquals("2005", (String) be.getField("year"));
+		} catch (SAXException e) {
+			throw e.getException();
 		}
 	}
-	
-	public void testOai22xml() {
+
+	public void testOai23xml() throws Throwable {
 		try {
-			saxParser.parse(fis2,handler);
-			assertEquals("GiuRioZaf05",be.getCiteKey());
-			assertEquals("2005",(String)be.getField("year"));
-		} catch (Exception e) {
-			fail("Exception");
+			saxParser.parse(new FileInputStream(fis3), handler);
+			assertEquals("Javier L�pez Pe�a and Gabriel Navarro", be.getField("author").toString());
+		} catch (SAXException e) {
+			throw e.getException();
 		}
+
 	}
-	
+
 	public void testUrlConstructor() {
 		OAI2Fetcher fetcher = new OAI2Fetcher();
-		assertEquals("http://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%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",
+			fetcher.constructUrl("math/0612188"));
+
 	}
-	
-	public void testFixKey(){
+
+	public void testFixKey() {
 		assertEquals("", OAI2Fetcher.fixKey(""));
 		assertEquals("test", OAI2Fetcher.fixKey("test"));
-        assertEquals("math/0601001", OAI2Fetcher.fixKey("math.RA/0601001"));
-        assertEquals("math/0601001", OAI2Fetcher.fixKey("math.QA/0601001"));
-        assertEquals("hep-ph/0408155",OAI2Fetcher.fixKey("hep-ph/0408155"));
+		assertEquals("math/0601001", OAI2Fetcher.fixKey("math.RA/0601001"));
+		assertEquals("math/0601001", OAI2Fetcher.fixKey("math.QA/0601001"));
+		assertEquals("hep-ph/0408155", OAI2Fetcher.fixKey("hep-ph/0408155"));
 	}
-	
+
 	public void testOnline() throws InterruptedException {
-        try {
-            OAI2Fetcher fetcher = new OAI2Fetcher();
-            be = fetcher.importOai2Entry("math.QA/0601001");
-            assertEquals("math/0601001",(String)be.getField("eprint"));
-        } catch (Exception e) {
-            fail();
-            e.printStackTrace();
-        }
-        
-        Thread.sleep(30000);
-        
-		try {
+
+		{
+			OAI2Fetcher fetcher = new OAI2Fetcher();
+			be = fetcher.importOai2Entry("math.RA/0612188");
+			assertNotNull(be);
+
+			assertEquals("math/0612188", (String) 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());
+
+			Thread.sleep(20000);
+		}
+
+		{
+			OAI2Fetcher fetcher = new OAI2Fetcher();
+			be = fetcher.importOai2Entry("astro-ph/0702080");
+			assertNotNull(be);
+
+			assertEquals("astro-ph/0702080", (String) be.getField("eprint"));
+			assertEquals(
+				"Magnetized Hypermassive Neutron Star Collapse: a candidate central engine for short-hard GRBs",
+				be.getField("title").toString());
+
+			Thread.sleep(20000);
+		}
+
+		{
+			OAI2Fetcher fetcher = new OAI2Fetcher();
+			be = fetcher.importOai2Entry("math.QA/0601001");
+			assertNotNull(be);
+
+			assertEquals("math/0601001", (String) be.getField("eprint"));
+			Thread.sleep(20000);
+		}
+
+		{
 			OAI2Fetcher fetcher = new OAI2Fetcher();
 			be = fetcher.importOai2Entry("hep-ph/0408155");
+			assertNotNull(be);
 			
-			assertEquals("hep-ph/0408155",(String)be.getField("eprint"));
-		} catch (Exception e) {
-			fail();
-			e.printStackTrace();
+			assertEquals("hep-ph/0408155", (String) be.getField("eprint"));
 		}
+
 	}
 }
diff --git a/src/java/tests/net/sf/jabref/imports/oai2.xml b/src/java/tests/net/sf/jabref/imports/oai2.xml
index 82768fa..2de0a64 100644
--- a/src/java/tests/net/sf/jabref/imports/oai2.xml
+++ b/src/java/tests/net/sf/jabref/imports/oai2.xml
@@ -13,7 +13,15 @@
 </header>
 <metadata>
  <arXiv xmlns="http://arxiv.org/OAI/arXiv/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://arxiv.org/OAI/arXiv/ http://arXiv.org/OAI/arXiv.xsd">
- <id>hep-ph/0408155</id><authors><author><keyname>Giudice</keyname><forenames>G. F.</forenames></author><author><keyname>Riotto</keyname><forenames>A.</forenames></author><author><keyname>Zaffaroni</keyname><forenames>A.</forenames></author></authors><title>Heavy Particles from Inflation</title><categories>hep-ph astro-ph hep-th</categories><comments>23 pages</comments><report-no>CERN-PH-TH/2004-151</report-no><journal-ref>Nucl.Phys. B710 (2005) 511-525</journal-ref><doi>10.1016/j.nuclph [...]
+ <id>hep-ph/0408155</id>
+ <authors>
+ 	<author><keyname>Giudice</keyname><forenames>G. F.</forenames></author>
+ 	<author><keyname>Riotto</keyname><forenames>A.</forenames></author>
+ 	<author><keyname>Zaffaroni</keyname><forenames>A.</forenames></author>
+ 	<author><keyname>López-Peña</keyname><forenames>J.</forenames></author>
+ </authors>
+ 
+ 	<title>Heavy Particles from Inflation</title><categories>hep-ph astro-ph hep-th</categories><comments>23 pages</comments><report-no>CERN-PH-TH/2004-151</report-no><journal-ref>Nucl.Phys. B710 (2005) 511-525</journal-ref><doi>10.1016/j.nuclphysb.2004.12.037</doi><abstract>  We describe a simple and efficient mechanism by which very heavy particles
 are copiously created from a primordial inflationary epoch. It works for scalar
 fields which are massless or very light during inflation and acquire a large
 mass right after the end of inflation. Such particles can exist in realistic
diff --git a/src/java/tests/net/sf/jabref/imports/oai23.xml b/src/java/tests/net/sf/jabref/imports/oai23.xml
new file mode 100644
index 0000000..106320d
--- /dev/null
+++ b/src/java/tests/net/sf/jabref/imports/oai23.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<OAI-PMH xmlns="http://www.openarchives.org/OAI/2.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/ http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd">
+<responseDate>2007-02-08T22:18:16Z</responseDate>
+<request verb="GetRecord" identifier="oai:arXiv.org:math/0612188" metadataPrefix="arXiv">http://arXiv.org/oai2</request>
+<GetRecord>
+<record>
+<header>
+ <identifier>oai:arXiv.org:math/0612188</identifier>
+ <datestamp>2006-12-15</datestamp>
+ <setSpec>math</setSpec>
+</header>
+<metadata>
+ <arXiv xmlns="http://arxiv.org/OAI/arXiv/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://arxiv.org/OAI/arXiv/ http://arXiv.org/OAI/arXiv.xsd">
+ <id>math/0612188</id>
+ <authors>
+ <author>
+ 	<keyname>Peña</keyname>
+	<forenames>Javier López</forenames>
+ </author>
+ <author>
+ 	<keyname>Navarro</keyname>
+ 	<forenames>Gabriel</forenames>
+ </author>
+</authors>
+
+<title>On the classification and properties of noncommutative duplicates</title><categories>math.RA math.KT math.QA</categories><comments>11 pages, no figures</comments><subj-class>Rings and Algebras; K-Theory and Homology; Quantum Algebra</subj-class><msc-class>16W35; 16S35; 16E40</msc-class><abstract>  We give an explicit description of the set of all factorization structures,
+or twisting maps, existing between the algebras k^2 and k^2, and classify the
+resulting algebras up to isomorphism. In the process we relate several
+different approaches formerly taken to deal with this problem, filling a gap
+that appeared in a recent paper by Cibils. We also provide a counterexample to
+a result concerning the Hochschild (co)homology appeared in a paper by J.A.
+Guccione and J.J. Guccione.
+</abstract></arXiv>
+</metadata>
+</record>
+</GetRecord>
+</OAI-PMH>
diff --git a/src/java/tests/net/sf/jabref/util/XMPSchemaBibtexTest.java b/src/java/tests/net/sf/jabref/util/XMPSchemaBibtexTest.java
index cdcf834..53d9e7a 100644
--- a/src/java/tests/net/sf/jabref/util/XMPSchemaBibtexTest.java
+++ b/src/java/tests/net/sf/jabref/util/XMPSchemaBibtexTest.java
@@ -220,7 +220,7 @@ public class XMPSchemaBibtexTest extends JabRefTestCase {
 		XMPSchemaBibtex bibtex = new XMPSchemaBibtex(xmp);
 		
 		BibtexEntry e = FileBasedTestCase.getBibtexEntry();
-		bibtex.setBibtexEntry(e);
+		bibtex.setBibtexEntry(e, null);
 		
 		BibtexEntry e2 = bibtex.getBibtexEntry();
 
diff --git a/src/java/tests/net/sf/jabref/util/XMPUtilTest.java b/src/java/tests/net/sf/jabref/util/XMPUtilTest.java
index 4fcb4fe..c1e051f 100644
--- a/src/java/tests/net/sf/jabref/util/XMPUtilTest.java
+++ b/src/java/tests/net/sf/jabref/util/XMPUtilTest.java
@@ -3,6 +3,8 @@ package tests.net.sf.jabref.util;
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
 import java.io.FileWriter;
 import java.io.IOException;
 import java.io.InputStreamReader;
@@ -22,6 +24,7 @@ import java.util.TreeSet;
 import javax.xml.transform.TransformerException;
 
 import junit.framework.TestCase;
+import net.sf.jabref.AuthorList;
 import net.sf.jabref.BibtexEntry;
 import net.sf.jabref.BibtexEntryType;
 import net.sf.jabref.Globals;
@@ -60,7 +63,7 @@ public class XMPUtilTest extends TestCase {
 	 */
 	public static String bibtexDescription(String bibtex) {
 		return "      <rdf:Description rdf:about='' xmlns:bibtex='http://jabref.sourceforge.net/bibteXMP/'>\n"
-			+ bibtex + "\n" + "      </rdf:Description>\n";
+				+ bibtex + "\n" + "      </rdf:Description>\n";
 	}
 
 	/**
@@ -76,7 +79,7 @@ public class XMPUtilTest extends TestCase {
 		xmp.append("<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?>\n");
 		xmp.append("  <x:xmpmeta xmlns:x='adobe:ns:meta/'>\n");
 		xmp
-			.append("    <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/' xmlns:rdfs='http://www.w3.org/2000/01/rdf-schema#'>\n");
+				.append("    <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/' xmlns:rdfs='http://www.w3.org/2000/01/rdf-schema#'>\n");
 
 		xmp.append(bibtexDescriptions);
 
@@ -100,11 +103,11 @@ public class XMPUtilTest extends TestCase {
 		try {
 			document = PDDocument.load(tempFile.getAbsoluteFile());
 			if (document.isEncrypted()) {
-				System.err.println("Error: Cannot add metadata to encrypted document.");
+				System.err
+						.println("Error: Cannot add metadata to encrypted document.");
 				System.exit(1);
 			}
 			PDDocumentCatalog catalog = document.getDocumentCatalog();
-			PDMetadata meta = catalog.getMetadata();
 
 			// Convert to UTF8 and make available for metadata.
 			ByteArrayOutputStream bs = new ByteArrayOutputStream();
@@ -124,14 +127,16 @@ public class XMPUtilTest extends TestCase {
 		}
 	}
 
-	public static BibtexEntry bibtexString2BibtexEntry(String s) throws IOException {
+	public static BibtexEntry bibtexString2BibtexEntry(String s)
+			throws IOException {
 		ParserResult result = BibtexParser.parse(new StringReader(s));
 		Collection c = result.getDatabase().getEntries();
 		assertEquals(1, c.size());
 		return (BibtexEntry) c.iterator().next();
 	}
 
-	public static String bibtexEntry2BibtexString(BibtexEntry e) throws IOException {
+	public static String bibtexEntry2BibtexString(BibtexEntry e)
+			throws IOException {
 		StringWriter sw = new StringWriter();
 		e.write(sw, new net.sf.jabref.export.LatexFieldFormatter(), false);
 		return sw.getBuffer().toString();
@@ -140,11 +145,12 @@ public class XMPUtilTest extends TestCase {
 	/* TEST DATA */
 	public String t1BibtexString() {
 		return "@article{canh05,\n"
-			+ "  author = {Crowston, K. and Annabi, H. and Howison, J. and Masango, C.},\n"
-			+ "  title = {Effective work practices for floss development: A model and propositions},\n"
-			+ "  booktitle = {Hawaii International Conference On System Sciences (HICSS)},\n"
-			+ "  year = {2005},\n" + "  owner = {oezbek},\n" + "  timestamp = {2006.05.29},\n"
-			+ "  url = {http://james.howison.name/publications.html}}\n";
+				+ "  author = {Crowston, K. and Annabi, H. and Howison, J. and Masango, C.},\n"
+				+ "  title = {Effective work practices for floss development: A model and propositions},\n"
+				+ "  booktitle = {Hawaii International Conference On System Sciences (HICSS)},\n"
+				+ "  year = {2005},\n" + "  owner = {oezbek},\n"
+				+ "  timestamp = {2006.05.29},\n"
+				+ "  url = {http://james.howison.name/publications.html}}\n";
 	}
 
 	public BibtexEntry t1BibtexEntry() throws IOException {
@@ -153,12 +159,14 @@ 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:bibtexkey='OezbekC06' "
-			+ "bibtex:entrytype='INCOLLECTION' "
-			+ "bibtex:year='2003' "
-			+ "bibtex:booktitle='Proceedings of the of the 25th International Conference on \n Software-Engineering (Portland, Oregon)' "
-			+ ">\n" + "<bibtex:pdf>YeKis03 - Towards.pdf</bibtex:pdf>\n" + "</rdf:Description>\n";
+				+ "bibtex:title='�pt�mz�t��n' "
+				+ "bibtex:bibtexkey='OezbekC06' "
+				+ "bibtex:entrytype='INCOLLECTION' "
+				+ "bibtex:year='2003' "
+				+ "bibtex:booktitle='Proceedings of the of the 25th International Conference on \n Software-Engineering (Portland, Oregon)' "
+				+ ">\n"
+				+ "<bibtex:pdf>YeKis03 - Towards.pdf</bibtex:pdf>\n"
+				+ "</rdf:Description>\n";
 	}
 
 	public String t2BibtexString() throws IOException {
@@ -166,14 +174,15 @@ public class XMPUtilTest extends TestCase {
 	}
 
 	public BibtexEntry t2BibtexEntry() {
-		BibtexEntry e = new BibtexEntry(Util.createNeutralId(), BibtexEntryType.INCOLLECTION);
+		BibtexEntry e = new BibtexEntry(Util.createNeutralId(),
+				BibtexEntryType.INCOLLECTION);
 		e.setField("title", "�pt�mz�t��n");
 		e.setField("bibtexkey", "OezbekC06");
 		e.setField("year", "2003");
 		e
-			.setField(
-				"booktitle",
-				"Proceedings of the of the 25th International Conference on Software-Engineering (Portland, Oregon)");
+				.setField(
+						"booktitle",
+						"Proceedings of the of the 25th International Conference on Software-Engineering (Portland, Oregon)");
 		e.setField("pdf", "YeKis03 - Towards.pdf");
 		return e;
 	}
@@ -192,9 +201,9 @@ public class XMPUtilTest extends TestCase {
 		e.setField("year", "1982");
 		e.setField("month", "#jul#");
 		e
-			.setField(
-				"abstract",
-				"The success of the Linux operating system has demonstrated the viability of an alternative form of software development � open source software � that challenges traditional assumptions about software markets. Understanding what drives open source developers to participate in open source projects is crucial for assessing the impact of open source software. This article identifies two broad types of motivations that account for their participation in open source projects. The first ca [...]
+				.setField(
+						"abstract",
+						"The success of the Linux operating system has demonstrated the viability of an alternative form of software development � open source software � that challenges traditional assumptions about software markets. Understanding what drives open source developers to participate in open source projects is crucial for assessing the impact of open source software. This article identifies two broad types of motivations that account for their participation in open source projects. The first  [...]
 		return e;
 	}
 
@@ -204,24 +213,24 @@ public class XMPUtilTest extends TestCase {
 
 	public String t3XMP() {
 		return bibtexDescription("<bibtex:title>Hypersonic ultra-sound</bibtex:title>\n"
-			+ "<bibtex:author><rdf:Seq>\n"
-			+ "  <rdf:li>Kelly Clarkson</rdf:li>"
-			+ "  <rdf:li>Ozzy Osbourne</rdf:li>"
-			+ "</rdf:Seq></bibtex:author>"
-			+ "<bibtex:editor><rdf:Seq>"
-			+ "  <rdf:li>Huey Duck</rdf:li>"
-			+ "  <rdf:li>Dewey Duck</rdf:li>"
-			+ "  <rdf:li>Louie Duck</rdf:li>"
-			+ "</rdf:Seq></bibtex:editor>"
-			+ "<bibtex:bibtexkey>Clarkson06</bibtex:bibtexkey>"
-			+ "<bibtex:journal>Internation Journal of High Fidelity</bibtex:journal>"
-			+ "<bibtex:booktitle>Catch-22</bibtex:booktitle>"
-			+ "<bibtex:pdf>YeKis03 - Towards.pdf</bibtex:pdf>"
-			+ "<bibtex:keywords>peanut,butter,jelly</bibtex:keywords>"
-			+ "<bibtex:entrytype>Inproceedings</bibtex:entrytype>"
-			+ "<bibtex:year>1982</bibtex:year>"
-			+ "<bibtex:month>#jul#</bibtex:month>"
-			+ "<bibtex:abstract>The success of the Linux operating system has demonstrated the viability of an alternative form of software development � open source software � that challenges traditional assumptions about software markets. Understanding what drives open source developers to participate in open source projects is crucial for assessing the impact of open source software. This article identifies two broad types of motivations that account for their participation in open source proj [...]
+				+ "<bibtex:author><rdf:Seq>\n"
+				+ "  <rdf:li>Kelly Clarkson</rdf:li>"
+				+ "  <rdf:li>Ozzy Osbourne</rdf:li>"
+				+ "</rdf:Seq></bibtex:author>"
+				+ "<bibtex:editor><rdf:Seq>"
+				+ "  <rdf:li>Huey Duck</rdf:li>"
+				+ "  <rdf:li>Dewey Duck</rdf:li>"
+				+ "  <rdf:li>Louie Duck</rdf:li>"
+				+ "</rdf:Seq></bibtex:editor>"
+				+ "<bibtex:bibtexkey>Clarkson06</bibtex:bibtexkey>"
+				+ "<bibtex:journal>International Journal of High Fidelity</bibtex:journal>"
+				+ "<bibtex:booktitle>Catch-22</bibtex:booktitle>"
+				+ "<bibtex:pdf>YeKis03 - Towards.pdf</bibtex:pdf>"
+				+ "<bibtex:keywords>peanut,butter,jelly</bibtex:keywords>"
+				+ "<bibtex:entrytype>Inproceedings</bibtex:entrytype>"
+				+ "<bibtex:year>1982</bibtex:year>"
+				+ "<bibtex:month>#jul#</bibtex:month>"
+				+ "<bibtex:abstract>The success of the Linux operating system has demonstrated the viability of an alternative form of software development � open source software � that challenges traditional assumptions about software markets. Understanding what drives open source developers to participate in open source projects is crucial for assessing the impact of open source software. This article identifies two broad types of motivations that account for their participation in open source pro [...]
 	}
 
 	/**
@@ -251,13 +260,30 @@ public class XMPUtilTest extends TestCase {
 			Globals.prefs = JabRefPreferences.getInstance();
 		}
 
+		// Store Privacy Settings
+		prefs = JabRefPreferences.getInstance();
+
+		use = prefs.getBoolean("useXmpPrivacyFilter");
+		privacyFilters = prefs.getStringArray("xmpPrivacyFilters");
+
+		// The code assumes privacy filters to be off
+		prefs.putBoolean("useXmpPrivacyFilter", false);
 	}
 
+	JabRefPreferences prefs;
+
+	boolean use;
+
+	String[] privacyFilters;
+
 	/**
 	 * Delete the temporary file.
 	 */
 	public void tearDown() {
 		pdfFile.delete();
+
+		prefs.putBoolean("useXmpPrivacyFilter", use);
+		prefs.putStringArray("xmpPrivacyFilter", privacyFilters);
 	}
 
 	/**
@@ -268,8 +294,8 @@ public class XMPUtilTest extends TestCase {
 	public void testReadXMPSimple() throws Exception {
 
 		String bibtex = "<bibtex:year>2003</bibtex:year>\n"
-			+ "<bibtex:title>Beach sand convolution by surf-wave optimzation</bibtex:title>\n"
-			+ "<bibtex:bibtexkey>OezbekC06</bibtex:bibtexkey>\n";
+				+ "<bibtex:title>Beach sand convolution by surf-wave optimzation</bibtex:title>\n"
+				+ "<bibtex:bibtexkey>OezbekC06</bibtex:bibtexkey>\n";
 
 		writeManually(pdfFile, bibtexXPacket(bibtexDescription(bibtex)));
 
@@ -280,7 +306,8 @@ public class XMPUtilTest extends TestCase {
 		assertNotNull(e);
 		assertEquals("OezbekC06", e.getCiteKey());
 		assertEquals("2003", e.getField("year"));
-		assertEquals("Beach sand convolution by surf-wave optimzation", e.getField("title"));
+		assertEquals("Beach sand convolution by surf-wave optimzation", e
+				.getField("title"));
 		assertEquals(BibtexEntryType.OTHER, e.getType());
 
 	}
@@ -294,8 +321,8 @@ 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:bibtexkey>OezbekC06</bibtex:bibtexkey>\n";
+				+ "<bibtex:title>�pt�mz�t��n</bibtex:title>\n"
+				+ "<bibtex:bibtexkey>OezbekC06</bibtex:bibtexkey>\n";
 
 		writeManually(pdfFile, bibtexXPacket(bibtexDescription(bibtex)));
 
@@ -313,69 +340,66 @@ public class XMPUtilTest extends TestCase {
 	/**
 	 * Make sure that the privacy filter works.
 	 * 
-	 * @throws IOException Should not happen.
-	 * @throws TransformerException Should not happen.
+	 * @throws IOException
+	 *             Should not happen.
+	 * @throws TransformerException
+	 *             Should not happen.
 	 */
 	public void testPrivacyFilter() throws IOException, TransformerException {
 
-		JabRefPreferences prefs = JabRefPreferences.getInstance();
+		{ // First set:
+			prefs.putBoolean("useXmpPrivacyFilter", true);
+			prefs.putStringArray("xmpPrivacyFilter",
+					new String[] { "author;title;note" });
 
-		boolean use = prefs.getBoolean("useXmpPrivacyFilter");
-		String[] privacyFilters = prefs.getStringArray("xmpPrivacyFilters");
-
-		try {
-			{ // First set:
-				prefs.putBoolean("useXmpPrivacyFilter", true);
-				prefs.putStringArray("xmpPrivacyFilter", new String[] { "author;title;note" });
-
-				BibtexEntry e = t1BibtexEntry();
+			BibtexEntry e = t1BibtexEntry();
 
-				XMPUtil.writeXMP(pdfFile, e);
+			XMPUtil.writeXMP(pdfFile, e, null);
 
-				List l = XMPUtil.readXMP(pdfFile.getAbsoluteFile());
-				assertEquals(1, l.size());
-				BibtexEntry x = (BibtexEntry) l.get(0);
-
-				TreeSet ts = new TreeSet(Arrays.asList(x.getAllFields()));
+			List l = XMPUtil.readXMP(pdfFile.getAbsoluteFile());
+			assertEquals(1, l.size());
+			BibtexEntry x = (BibtexEntry) l.get(0);
 
-				assertEquals(8, ts.size());
+			TreeSet<Object> ts = new TreeSet<Object>(Arrays.asList(x
+					.getAllFields()));
 
-				ts.contains("bibtextype");
-				ts.contains("bibtexkey");
-				ts.contains("booktitle");
-				ts.contains("year");
-				ts.contains("owner");
-				ts.contains("timestamp");
-				ts.contains("year");
-				ts.contains("url");
-			}
-			{ // First set:
-				prefs.putBoolean("useXmpPrivacyFilter", true);
-				prefs.putStringArray("xmpPrivacyFilter",
-					new String[] { "author;title;note;booktitle;year;owner;timestamp" });
+			assertEquals(8, ts.size());
 
-				BibtexEntry e = t1BibtexEntry();
+			ts.contains("bibtextype");
+			ts.contains("bibtexkey");
+			ts.contains("booktitle");
+			ts.contains("year");
+			ts.contains("owner");
+			ts.contains("timestamp");
+			ts.contains("year");
+			ts.contains("url");
+		}
+		{ // First set:
+			prefs.putBoolean("useXmpPrivacyFilter", true);
+			prefs
+					.putStringArray(
+							"xmpPrivacyFilter",
+							new String[] { "author;title;note;booktitle;year;owner;timestamp" });
 
-				XMPUtil.writeXMP(pdfFile, e);
+			BibtexEntry e = t1BibtexEntry();
 
-				List l = XMPUtil.readXMP(pdfFile.getAbsoluteFile());
-				assertEquals(1, l.size());
-				BibtexEntry x = (BibtexEntry) l.get(0);
+			XMPUtil.writeXMP(pdfFile, e, null);
 
-				TreeSet ts = new TreeSet(Arrays.asList(x.getAllFields()));
+			List l = XMPUtil.readXMP(pdfFile.getAbsoluteFile());
+			assertEquals(1, l.size());
+			BibtexEntry x = (BibtexEntry) l.get(0);
 
-				assertEquals(8, ts.size());
+			TreeSet<Object> ts = new TreeSet<Object>(Arrays.asList(x
+					.getAllFields()));
 
-				ts.contains("bibtextype");
-				ts.contains("bibtexkey");
-				ts.contains("year");
-				ts.contains("url");
-			}
+			assertEquals(8, ts.size());
 
-		} finally {
-			prefs.putBoolean("useXmpPrivacyFilter", use);
-			prefs.putStringArray("xmpPrivacyFilter", privacyFilters);
+			ts.contains("bibtextype");
+			ts.contains("bibtexkey");
+			ts.contains("year");
+			ts.contains("url");
 		}
+
 	}
 
 	/**
@@ -385,11 +409,15 @@ public class XMPUtilTest extends TestCase {
 	 */
 	public void testReadXMPSeq() throws Exception {
 
-		String bibtex = "<bibtex:author><rdf:Seq>\n" + "  <rdf:li>Kelly Clarkson</rdf:li>"
-			+ "  <rdf:li>Ozzy Osbourne</rdf:li>" + "</rdf:Seq></bibtex:author>"
-			+ "<bibtex:editor><rdf:Seq>" + "  <rdf:li>Huey Duck</rdf:li>"
-			+ "  <rdf:li>Dewey Duck</rdf:li>" + "  <rdf:li>Louie Duck</rdf:li>"
-			+ "</rdf:Seq></bibtex:editor>" + "<bibtex:bibtexkey>Clarkson06</bibtex:bibtexkey>";
+		String bibtex = "<bibtex:author><rdf:Seq>\n"
+				+ "  <rdf:li>Kelly Clarkson</rdf:li>"
+				+ "  <rdf:li>Ozzy Osbourne</rdf:li>"
+				+ "</rdf:Seq></bibtex:author>" + "<bibtex:editor><rdf:Seq>"
+				+ "  <rdf:li>Huey Duck</rdf:li>"
+				+ "  <rdf:li>Dewey Duck</rdf:li>"
+				+ "  <rdf:li>Louie Duck</rdf:li>"
+				+ "</rdf:Seq></bibtex:editor>"
+				+ "<bibtex:bibtexkey>Clarkson06</bibtex:bibtexkey>";
 
 		writeManually(pdfFile, bibtexXPacket(bibtexDescription(bibtex)));
 
@@ -400,7 +428,8 @@ public class XMPUtilTest extends TestCase {
 		assertNotNull(e);
 		assertEquals("Clarkson06", e.getCiteKey());
 		assertEquals("Kelly Clarkson and Ozzy Osbourne", e.getField("author"));
-		assertEquals("Huey Duck and Dewey Duck and Louie Duck", e.getField("editor"));
+		assertEquals("Huey Duck and Dewey Duck and Louie Duck", e
+				.getField("editor"));
 		assertEquals(BibtexEntryType.OTHER, e.getType());
 	}
 
@@ -430,7 +459,8 @@ public class XMPUtilTest extends TestCase {
 		try {
 			document = PDDocument.load(tempFile.getAbsoluteFile());
 			if (document.isEncrypted()) {
-				System.err.println("Error: Cannot add metadata to encrypted document.");
+				System.err
+						.println("Error: Cannot add metadata to encrypted document.");
 				System.exit(1);
 			}
 			PDDocumentCatalog catalog = document.getDocumentCatalog();
@@ -442,7 +472,8 @@ public class XMPUtilTest extends TestCase {
 				// PDMetadata.getInputStreamAsString() does not work
 
 				// Convert to UTF8 and make available for metadata.
-				InputStreamReader is = new InputStreamReader(meta.createInputStream(), "UTF8");
+				InputStreamReader is = new InputStreamReader(meta
+						.createInputStream(), "UTF8");
 				return slurp(is).trim(); // Trim to kill padding end-newline.
 			}
 		} finally {
@@ -459,20 +490,26 @@ 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:bibtexkey>OezbekC06</bibtex:bibtexkey>\n";
+				+ "<bibtex:title>�pt�mz�t��n</bibtex:title>\n"
+				+ "<bibtex:bibtexkey>OezbekC06</bibtex:bibtexkey>\n";
 
 		writeManually(pdfFile, bibtexXPacket(bibtexDescription(bibtex)));
-		assertEquals(bibtexXPacket(bibtexDescription(bibtex)), readManually(pdfFile));
-
-		bibtex = "<bibtex:author><rdf:Seq>\n" + "  <rdf:li>Kelly Clarkson</rdf:li>"
-			+ "  <rdf:li>Ozzy Osbourne</rdf:li>" + "</rdf:Seq></bibtex:author>"
-			+ "<bibtex:editor><rdf:Seq>" + "  <rdf:li>Huey Duck</rdf:li>"
-			+ "  <rdf:li>Dewey Duck</rdf:li>" + "  <rdf:li>Louie Duck</rdf:li>"
-			+ "</rdf:Seq></bibtex:editor>" + "<bibtex:bibtexkey>Clarkson06</bibtex:bibtexkey>";
+		assertEquals(bibtexXPacket(bibtexDescription(bibtex)),
+				readManually(pdfFile));
+
+		bibtex = "<bibtex:author><rdf:Seq>\n"
+				+ "  <rdf:li>Kelly Clarkson</rdf:li>"
+				+ "  <rdf:li>Ozzy Osbourne</rdf:li>"
+				+ "</rdf:Seq></bibtex:author>" + "<bibtex:editor><rdf:Seq>"
+				+ "  <rdf:li>Huey Duck</rdf:li>"
+				+ "  <rdf:li>Dewey Duck</rdf:li>"
+				+ "  <rdf:li>Louie Duck</rdf:li>"
+				+ "</rdf:Seq></bibtex:editor>"
+				+ "<bibtex:bibtexkey>Clarkson06</bibtex:bibtexkey>";
 
 		writeManually(pdfFile, bibtexXPacket(bibtexDescription(bibtex)));
-		assertEquals(bibtexXPacket(bibtexDescription(bibtex)), readManually(pdfFile));
+		assertEquals(bibtexXPacket(bibtexDescription(bibtex)),
+				readManually(pdfFile));
 	}
 
 	/**
@@ -482,36 +519,35 @@ public class XMPUtilTest extends TestCase {
 	 */
 	public void testReadWriteXMP() throws Exception {
 		ParserResult result = BibtexParser
-			.parse(new StringReader(
-				"@article{canh05,"
-					+ "  author = {Crowston, K. and Annabi, H. and Howison, J. and Masango, C.},"
-					+ "\n"
-					+ "  title = {Effective work practices for floss development: A model and propositions},"
-					+ "\n"
-					+ "  booktitle = {Hawaii International Conference On System Sciences (HICSS)},"
-					+ "\n" + "  year = {2005}," + "\n" + "  owner = {oezbek}," + "\n"
-					+ "  timestamp = {2006.05.29}," + "\n"
-					+ "  url = {http://james.howison.name/publications.html}" + "\n" + "}"));
+				.parse(new StringReader(
+						"@article{canh05,"
+								+ "  author = {Crowston, K. and Annabi, H. and Howison, J. and Masango, C.},"
+								+ "\n"
+								+ "  title = {Effective work practices for floss development: A model and propositions},"
+								+ "\n"
+								+ "  booktitle = {Hawaii International Conference On System Sciences (HICSS)},"
+								+ "\n"
+								+ "  year = {2005},"
+								+ "\n"
+								+ "  owner = {oezbek},"
+								+ "\n"
+								+ "  timestamp = {2006.05.29},"
+								+ "\n"
+								+ "  url = {http://james.howison.name/publications.html}"
+								+ "\n" + "}"));
 
 		Collection c = result.getDatabase().getEntries();
 		assertEquals(1, c.size());
 
 		BibtexEntry e = (BibtexEntry) c.iterator().next();
 
-		XMPUtil.writeXMP(pdfFile, e);
+		XMPUtil.writeXMP(pdfFile, e, null);
 
 		List l = XMPUtil.readXMP(pdfFile.getAbsoluteFile());
 		assertEquals(1, l.size());
 		BibtexEntry x = (BibtexEntry) l.get(0);
 
-		assertEquals(e.getCiteKey(), x.getCiteKey());
-		assertEquals(e.getType(), x.getType());
-
-		Object[] o = e.getAllFields();
-
-		for (int i = 0; i < o.length; i++) {
-			assertEquals(e.getField(o.toString()), x.getField(o.toString()));
-		}
+		assertEquals(e, x);
 	}
 
 	/**
@@ -523,8 +559,8 @@ public class XMPUtilTest extends TestCase {
 
 		{
 			String bibtex = "<bibtex:title>\nHallo\nWorld \nthis \n is\n\nnot \n\nan \n\n exercise \n \n.\n \n\n</bibtex:title>\n"
-				+ "<bibtex:tabs>\nHallo\tWorld \tthis \t is\t\tnot \t\tan \t\n exercise \t \n.\t \n\t</bibtex:tabs>\n"
-				+ "<bibtex:abstract>\n\nAbstract preserve\n\t Whitespace\n\n</bibtex:abstract>";
+					+ "<bibtex:tabs>\nHallo\tWorld \tthis \t is\t\tnot \t\tan \t\n exercise \t \n.\t \n\t</bibtex:tabs>\n"
+					+ "<bibtex:abstract>\n\nAbstract preserve\n\t Whitespace\n\n</bibtex:abstract>";
 
 			writeManually(pdfFile, bibtexXPacket(bibtexDescription(bibtex)));
 
@@ -533,9 +569,12 @@ public class XMPUtilTest extends TestCase {
 			BibtexEntry e = (BibtexEntry) l.get(0);
 
 			assertNotNull(e);
-			assertEquals("Hallo World this is not an exercise .", e.getField("title"));
-			assertEquals("Hallo World this is not an exercise .", e.getField("tabs"));
-			assertEquals("\n\nAbstract preserve\n\t Whitespace\n\n", e.getField("abstract"));
+			assertEquals("Hallo World this is not an exercise .", e
+					.getField("title"));
+			assertEquals("Hallo World this is not an exercise .", e
+					.getField("tabs"));
+			assertEquals("\n\nAbstract preserve\n\t Whitespace\n\n", e
+					.getField("abstract"));
 		}
 	}
 
@@ -573,40 +612,52 @@ public class XMPUtilTest extends TestCase {
 	 */
 	public void testSimpleUpdate() throws Exception {
 
-		String s = " <rdf:Description rdf:about=''" + "  xmlns:xmp='http://ns.adobe.com/xap/1.0/'>"
-			+ "  <xmp:CreatorTool>Acrobat PDFMaker 7.0.7</xmp:CreatorTool>"
-			+ "  <xmp:ModifyDate>2006-08-07T18:50:24+02:00</xmp:ModifyDate>"
-			+ "  <xmp:CreateDate>2006-08-07T14:44:24+02:00</xmp:CreateDate>"
-			+ "  <xmp:MetadataDate>2006-08-07T18:50:24+02:00</xmp:MetadataDate>"
-			+ " </rdf:Description>" + "" + " <rdf:Description rdf:about=''"
-			+ "  xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/'>"
-			+ "  <xapMM:DocumentID>uuid:843cd67d-495e-4c1e-a4cd-64178f6b3299</xapMM:DocumentID>"
-			+ "  <xapMM:InstanceID>uuid:1e56b4c0-6782-440d-ba76-d2b3d87547d1</xapMM:InstanceID>"
-			+ "  <xapMM:VersionID>" + "   <rdf:Seq>" + "    <rdf:li>17</rdf:li>" + "   </rdf:Seq>"
-			+ "  </xapMM:VersionID>" + " </rdf:Description>" + ""
-			+ " <rdf:Description rdf:about=''" + "  xmlns:dc='http://purl.org/dc/elements/1.1/'>"
-			+ "  <dc:format>application/pdf</dc:format>" + "</rdf:Description>";
+		String s = " <rdf:Description rdf:about=''"
+				+ "  xmlns:xmp='http://ns.adobe.com/xap/1.0/'>"
+				+ "  <xmp:CreatorTool>Acrobat PDFMaker 7.0.7</xmp:CreatorTool>"
+				+ "  <xmp:ModifyDate>2006-08-07T18:50:24+02:00</xmp:ModifyDate>"
+				+ "  <xmp:CreateDate>2006-08-07T14:44:24+02:00</xmp:CreateDate>"
+				+ "  <xmp:MetadataDate>2006-08-07T18:50:24+02:00</xmp:MetadataDate>"
+				+ " </rdf:Description>"
+				+ ""
+				+ " <rdf:Description rdf:about=''"
+				+ "  xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/'>"
+				+ "  <xapMM:DocumentID>uuid:843cd67d-495e-4c1e-a4cd-64178f6b3299</xapMM:DocumentID>"
+				+ "  <xapMM:InstanceID>uuid:1e56b4c0-6782-440d-ba76-d2b3d87547d1</xapMM:InstanceID>"
+				+ "  <xapMM:VersionID>" + "   <rdf:Seq>"
+				+ "    <rdf:li>17</rdf:li>" + "   </rdf:Seq>"
+				+ "  </xapMM:VersionID>" + " </rdf:Description>" + ""
+				+ " <rdf:Description rdf:about=''"
+				+ "  xmlns:dc='http://purl.org/dc/elements/1.1/'>"
+				+ "  <dc:format>application/pdf</dc:format>"
+				+ "</rdf:Description>";
 
 		writeManually(pdfFile, bibtexXPacket(s));
 
 		// Nothing there yet, but should not crash
 		assertEquals(0, XMPUtil.readXMP(pdfFile).size());
 
-		s = " <rdf:Description rdf:about=''" + "  xmlns:xmp='http://ns.adobe.com/xap/1.0/'>"
-			+ "  <xmp:CreatorTool>Acrobat PDFMaker 7.0.7</xmp:CreatorTool>"
-			+ "  <xmp:ModifyDate>2006-08-07T18:50:24+02:00</xmp:ModifyDate>"
-			+ "  <xmp:CreateDate>2006-08-07T14:44:24+02:00</xmp:CreateDate>"
-			+ "  <xmp:MetadataDate>2006-08-07T18:50:24+02:00</xmp:MetadataDate>"
-			+ " </rdf:Description>" + "" + " <rdf:Description rdf:about=''"
-			+ "  xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/'>"
-			+ "  <xapMM:DocumentID>uuid:843cd67d-495e-4c1e-a4cd-64178f6b3299</xapMM:DocumentID>"
-			+ "  <xapMM:InstanceID>uuid:1e56b4c0-6782-440d-ba76-d2b3d87547d1</xapMM:InstanceID>"
-			+ "  <xapMM:VersionID>" + "   <rdf:Seq>" + "    <rdf:li>17</rdf:li>" + "   </rdf:Seq>"
-			+ "  </xapMM:VersionID>" + " </rdf:Description>" + ""
-			+ " <rdf:Description rdf:about=''" + "  xmlns:dc='http://purl.org/dc/elements/1.1/'>"
-			+ "  <dc:format>application/pdf</dc:format>" + "  <dc:title>" + "   <rdf:Alt>"
-			+ "    <rdf:li xml:lang='x-default'>Questionnaire.pdf</rdf:li>" + "   </rdf:Alt>"
-			+ "  </dc:title>" + "" + "</rdf:Description>";
+		s = " <rdf:Description rdf:about=''"
+				+ "  xmlns:xmp='http://ns.adobe.com/xap/1.0/'>"
+				+ "  <xmp:CreatorTool>Acrobat PDFMaker 7.0.7</xmp:CreatorTool>"
+				+ "  <xmp:ModifyDate>2006-08-07T18:50:24+02:00</xmp:ModifyDate>"
+				+ "  <xmp:CreateDate>2006-08-07T14:44:24+02:00</xmp:CreateDate>"
+				+ "  <xmp:MetadataDate>2006-08-07T18:50:24+02:00</xmp:MetadataDate>"
+				+ " </rdf:Description>"
+				+ ""
+				+ " <rdf:Description rdf:about=''"
+				+ "  xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/'>"
+				+ "  <xapMM:DocumentID>uuid:843cd67d-495e-4c1e-a4cd-64178f6b3299</xapMM:DocumentID>"
+				+ "  <xapMM:InstanceID>uuid:1e56b4c0-6782-440d-ba76-d2b3d87547d1</xapMM:InstanceID>"
+				+ "  <xapMM:VersionID>" + "   <rdf:Seq>"
+				+ "    <rdf:li>17</rdf:li>" + "   </rdf:Seq>"
+				+ "  </xapMM:VersionID>" + " </rdf:Description>" + ""
+				+ " <rdf:Description rdf:about=''"
+				+ "  xmlns:dc='http://purl.org/dc/elements/1.1/'>"
+				+ "  <dc:format>application/pdf</dc:format>" + "  <dc:title>"
+				+ "   <rdf:Alt>"
+				+ "    <rdf:li xml:lang='x-default'>Questionnaire.pdf</rdf:li>"
+				+ "   </rdf:Alt>" + "  </dc:title>" + "" + "</rdf:Description>";
 
 		writeManually(pdfFile, bibtexXPacket(s));
 
@@ -616,7 +667,7 @@ public class XMPUtilTest extends TestCase {
 
 		{
 			// Now write new packet and check if it was correctly written
-			XMPUtil.writeXMP(pdfFile, t1BibtexEntry());
+			XMPUtil.writeXMP(pdfFile, t1BibtexEntry(), null);
 
 			List l = XMPUtil.readXMP(pdfFile.getAbsoluteFile());
 			assertEquals(1, l.size());
@@ -631,32 +682,38 @@ public class XMPUtilTest extends TestCase {
 			try {
 				document = PDDocument.load(pdfFile.getAbsoluteFile());
 				if (document.isEncrypted()) {
-					throw new IOException("Error: Cannot read metadata from encrypted document.");
+					throw new IOException(
+							"Error: Cannot read metadata from encrypted document.");
 				}
 				PDDocumentCatalog catalog = document.getDocumentCatalog();
 				PDMetadata metaRaw = catalog.getMetadata();
 
 				XMPMetadata meta;
 				if (metaRaw != null) {
-					meta = new XMPMetadata(XMLUtil.parse(metaRaw.createInputStream()));
+					meta = new XMPMetadata(XMLUtil.parse(metaRaw
+							.createInputStream()));
 				} else {
 					meta = new XMPMetadata();
 				}
-				meta.addXMLNSMapping(XMPSchemaBibtex.NAMESPACE, XMPSchemaBibtex.class);
+				meta.addXMLNSMapping(XMPSchemaBibtex.NAMESPACE,
+						XMPSchemaBibtex.class);
 
 				List schemas = meta.getSchemas();
 
 				assertEquals(4, schemas.size());
 
-				schemas = meta.getSchemasByNamespaceURI(XMPSchemaBibtex.NAMESPACE);
+				schemas = meta
+						.getSchemasByNamespaceURI(XMPSchemaBibtex.NAMESPACE);
 				assertEquals(1, schemas.size());
 
-				schemas = meta.getSchemasByNamespaceURI(XMPSchemaDublinCore.NAMESPACE);
+				schemas = meta
+						.getSchemasByNamespaceURI(XMPSchemaDublinCore.NAMESPACE);
 				assertEquals(1, schemas.size());
 				XMPSchemaDublinCore dc = (XMPSchemaDublinCore) schemas.get(0);
 				assertEquals("application/pdf", dc.getFormat());
 
-				schemas = meta.getSchemasByNamespaceURI(XMPSchemaBasic.NAMESPACE);
+				schemas = meta
+						.getSchemasByNamespaceURI(XMPSchemaBasic.NAMESPACE);
 				assertEquals(1, schemas.size());
 				XMPSchemaBasic bs = (XMPSchemaBasic) schemas.get(0);
 				assertEquals("Acrobat PDFMaker 7.0.7", bs.getCreatorTool());
@@ -681,9 +738,11 @@ public class XMPUtilTest extends TestCase {
 				assertEquals(c.get(Calendar.SECOND), other.get(Calendar.SECOND));
 				assertTrue(c.getTimeZone().hasSameRules(other.getTimeZone()));
 
-				schemas = meta.getSchemasByNamespaceURI(XMPSchemaMediaManagement.NAMESPACE);
+				schemas = meta
+						.getSchemasByNamespaceURI(XMPSchemaMediaManagement.NAMESPACE);
 				assertEquals(1, schemas.size());
-				XMPSchemaMediaManagement mm = (XMPSchemaMediaManagement) schemas.get(0);
+				XMPSchemaMediaManagement mm = (XMPSchemaMediaManagement) schemas
+						.get(0);
 				assertEquals("17", mm.getSequenceList("xapMM:VersionID").get(0));
 
 			} finally {
@@ -697,7 +756,7 @@ public class XMPUtilTest extends TestCase {
 			BibtexEntry toSet = t1BibtexEntry();
 			toSet.setField("author", "Pokemon!");
 
-			XMPUtil.writeXMP(pdfFile, toSet);
+			XMPUtil.writeXMP(pdfFile, toSet, null);
 
 			List l = XMPUtil.readXMP(pdfFile.getAbsoluteFile());
 			assertEquals(1, l.size());
@@ -712,32 +771,38 @@ public class XMPUtilTest extends TestCase {
 			try {
 				document = PDDocument.load(pdfFile.getAbsoluteFile());
 				if (document.isEncrypted()) {
-					throw new IOException("Error: Cannot read metadata from encrypted document.");
+					throw new IOException(
+							"Error: Cannot read metadata from encrypted document.");
 				}
 				PDDocumentCatalog catalog = document.getDocumentCatalog();
 				PDMetadata metaRaw = catalog.getMetadata();
 
 				XMPMetadata meta;
 				if (metaRaw != null) {
-					meta = new XMPMetadata(XMLUtil.parse(metaRaw.createInputStream()));
+					meta = new XMPMetadata(XMLUtil.parse(metaRaw
+							.createInputStream()));
 				} else {
 					meta = new XMPMetadata();
 				}
-				meta.addXMLNSMapping(XMPSchemaBibtex.NAMESPACE, XMPSchemaBibtex.class);
+				meta.addXMLNSMapping(XMPSchemaBibtex.NAMESPACE,
+						XMPSchemaBibtex.class);
 
 				List schemas = meta.getSchemas();
 
 				assertEquals(4, schemas.size());
 
-				schemas = meta.getSchemasByNamespaceURI(XMPSchemaBibtex.NAMESPACE);
+				schemas = meta
+						.getSchemasByNamespaceURI(XMPSchemaBibtex.NAMESPACE);
 				assertEquals(1, schemas.size());
 
-				schemas = meta.getSchemasByNamespaceURI(XMPSchemaDublinCore.NAMESPACE);
+				schemas = meta
+						.getSchemasByNamespaceURI(XMPSchemaDublinCore.NAMESPACE);
 				assertEquals(1, schemas.size());
 				XMPSchemaDublinCore dc = (XMPSchemaDublinCore) schemas.get(0);
 				assertEquals("application/pdf", dc.getFormat());
 
-				schemas = meta.getSchemasByNamespaceURI(XMPSchemaBasic.NAMESPACE);
+				schemas = meta
+						.getSchemasByNamespaceURI(XMPSchemaBasic.NAMESPACE);
 				assertEquals(1, schemas.size());
 				XMPSchemaBasic bs = (XMPSchemaBasic) schemas.get(0);
 				assertEquals("Acrobat PDFMaker 7.0.7", bs.getCreatorTool());
@@ -762,9 +827,11 @@ public class XMPUtilTest extends TestCase {
 				assertEquals(c.get(Calendar.SECOND), other.get(Calendar.SECOND));
 				assertTrue(c.getTimeZone().hasSameRules(other.getTimeZone()));
 
-				schemas = meta.getSchemasByNamespaceURI(XMPSchemaMediaManagement.NAMESPACE);
+				schemas = meta
+						.getSchemasByNamespaceURI(XMPSchemaMediaManagement.NAMESPACE);
 				assertEquals(1, schemas.size());
-				XMPSchemaMediaManagement mm = (XMPSchemaMediaManagement) schemas.get(0);
+				XMPSchemaMediaManagement mm = (XMPSchemaMediaManagement) schemas
+						.get(0);
 				assertEquals("17", mm.getSequenceList("xapMM:VersionID").get(0));
 
 			} finally {
@@ -783,21 +850,29 @@ public class XMPUtilTest extends TestCase {
 	 */
 	public void testXMLEscape() throws Exception {
 		ParserResult result = BibtexParser
-			.parse(new StringReader(
-				"@article{canh05,"
-					+ "  author = {Crowston, K. and Annabi, H. and Howison, J. and Masango, C.},"
-					+ "\n"
-					+ "  title = {</bibtex:title> \" bla \" '' '' && &  for floss development: A model and propositions},"
-					+ "\n" + "  booktitle = {<randomXML>}," + "\n" + "  year = {2005}," + "\n"
-					+ "  owner = {oezbek}," + "\n" + "  timestamp = {2006.05.29}," + "\n"
-					+ "  url = {http://james.howison.name/publications.html}" + "\n" + "}"));
+				.parse(new StringReader(
+						"@article{canh05,"
+								+ "  author = {Crowston, K. and Annabi, H. and Howison, J. and Masango, C.},"
+								+ "\n"
+								+ "  title = {</bibtex:title> \" bla \" '' '' && &  for floss development: A model and propositions},"
+								+ "\n"
+								+ "  booktitle = {<randomXML>},"
+								+ "\n"
+								+ "  year = {2005},"
+								+ "\n"
+								+ "  owner = {oezbek},"
+								+ "\n"
+								+ "  timestamp = {2006.05.29},"
+								+ "\n"
+								+ "  url = {http://james.howison.name/publications.html}"
+								+ "\n" + "}"));
 
 		Collection c = result.getDatabase().getEntries();
 		assertEquals(1, c.size());
 
 		BibtexEntry e = (BibtexEntry) c.iterator().next();
 
-		XMPUtil.writeXMP(pdfFile, e);
+		XMPUtil.writeXMP(pdfFile, e, null);
 
 		List l = XMPUtil.readXMP(pdfFile.getAbsoluteFile());
 		assertEquals(1, l.size());
@@ -810,13 +885,28 @@ public class XMPUtilTest extends TestCase {
 		assertEquals(expected.getCiteKey(), actual.getCiteKey());
 		assertEquals(expected.getType(), actual.getType());
 
-		assertEquals(expected.getAllFields().length, actual.getAllFields().length);
-
 		Object[] o = expected.getAllFields();
 
 		for (int i = 0; i < o.length; i++) {
-			assertEquals(expected.getField(o.toString()), actual.getField(o.toString()));
+			if (o[i].toString().toLowerCase().equals("author")
+					|| o[i].toString().toLowerCase().equals("editor")) {
+
+				AuthorList expectedAuthors = AuthorList.getAuthorList(expected
+						.getField(o[i].toString()).toString());
+				AuthorList actualAuthors = AuthorList.getAuthorList(actual
+						.getField(o[i].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());
+			}
 		}
+
+		assertEquals(expected.getAllFields().length,
+				actual.getAllFields().length);
+
 	}
 
 	/**
@@ -825,28 +915,33 @@ public class XMPUtilTest extends TestCase {
 	 */
 	public void testXMPreadString() throws Exception {
 
-		ParserResult result = BibtexParser.parse(new StringReader("@article{canh05,"
-			+ "  author = {Crowston, K. and Annabi, H.},\n" + "  title = {Title A}}\n"
-			+ "@inProceedings{foo," + "  author={Norton Bar}}"));
+		ParserResult result = BibtexParser.parse(new StringReader(
+				"@article{canh05,"
+						+ "  author = {Crowston, K. and Annabi, H.},\n"
+						+ "  title = {Title A}}\n" + "@inProceedings{foo,"
+						+ "  author={Norton Bar}}"));
 
-		Collection c = result.getDatabase().getEntries();
+		Collection<BibtexEntry> c = result.getDatabase().getEntries();
 		assertEquals(2, c.size());
 
-		String xmp = XMPUtil.toXMP(c);
+		String xmp = XMPUtil.toXMP(c, null);
 
 		/* Test minimal syntaxical completeness */
 		assertTrue(0 < xmp.indexOf("xpacket"));
 		assertTrue(0 < xmp.indexOf("adobe:ns:meta"));
-		assertTrue(0 < xmp.indexOf("<bibtex:bibtexkey>canh05</bibtex:bibtexkey>")
-			|| 0 < xmp.indexOf("bibtex:bibtexkey="));
+		assertTrue(0 < xmp
+				.indexOf("<bibtex:bibtexkey>canh05</bibtex:bibtexkey>")
+				|| 0 < xmp.indexOf("bibtex:bibtexkey="));
 		assertTrue(0 < xmp.indexOf("<rdf:li>Norton Bar</rdf:li>"));
 		assertTrue(0 < xmp.indexOf("id='W5M0MpCehiHzreSzNTczkc9d'?>")
-			|| 0 < xmp.indexOf("id=\"W5M0MpCehiHzreSzNTczkc9d\"?>"));
-		assertTrue(0 < xmp.indexOf("xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'")
-			|| 0 < xmp.indexOf("xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\""));
+				|| 0 < xmp.indexOf("id=\"W5M0MpCehiHzreSzNTczkc9d\"?>"));
+		assertTrue(0 < xmp
+				.indexOf("xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'")
+				|| 0 < xmp
+						.indexOf("xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\""));
 		assertTrue(0 < xmp.indexOf("<rdf:Description"));
 		assertTrue(0 < xmp.indexOf("<?xpacket end='w'?>")
-			|| 0 < xmp.indexOf("<?xpacket end=\"w\"?>"));
+				|| 0 < xmp.indexOf("<?xpacket end=\"w\"?>"));
 
 		/* Test contents of string */
 		writeManually(pdfFile, xmp);
@@ -911,11 +1006,11 @@ public class XMPUtilTest extends TestCase {
 	 * 
 	 */
 	public void testWriteMultiple() throws IOException, TransformerException {
-		List l = new LinkedList();
+		List<BibtexEntry> l = new LinkedList<BibtexEntry>();
 		l.add(t2BibtexEntry());
 		l.add(t3BibtexEntry());
 
-		XMPUtil.writeXMP(pdfFile, l, false);
+		XMPUtil.writeXMP(pdfFile, l, null, false);
 
 		l = XMPUtil.readXMP(pdfFile);
 
@@ -935,29 +1030,34 @@ public class XMPUtilTest extends TestCase {
 	}
 
 	public void testReadWriteDC() throws IOException, TransformerException {
-		List l = new LinkedList();
+		List<BibtexEntry> l = new LinkedList<BibtexEntry>();
 		l.add(t3BibtexEntry());
 
-		XMPUtil.writeXMP(pdfFile, l, true);
+		XMPUtil.writeXMP(pdfFile, l, null, true);
 
 		PDDocument document = PDDocument.load(pdfFile.getAbsoluteFile());
 		try {
 			if (document.isEncrypted()) {
-				System.err.println("Error: Cannot add metadata to encrypted document.");
+				System.err
+						.println("Error: Cannot add metadata to encrypted document.");
 				System.exit(1);
 			}
 
-			assertEquals("Kelly Clarkson and Ozzy Osbourne", document.getDocumentInformation()
-				.getAuthor());
-			assertEquals("Hypersonic ultra-sound", document.getDocumentInformation().getTitle());
+			assertEquals("Kelly Clarkson and Ozzy Osbourne", document
+					.getDocumentInformation().getAuthor());
+			assertEquals("Hypersonic ultra-sound", document
+					.getDocumentInformation().getTitle());
 			assertEquals("Huey Duck and Dewey Duck and Louie Duck", document
-				.getDocumentInformation().getCustomMetadataValue("bibtex/editor"));
-			assertEquals("Clarkson06", document.getDocumentInformation().getCustomMetadataValue(
-				"bibtex/bibtexkey"));
-			assertEquals("peanut,butter,jelly", document.getDocumentInformation().getKeywords());
+					.getDocumentInformation().getCustomMetadataValue(
+							"bibtex/editor"));
+			assertEquals("Clarkson06", document.getDocumentInformation()
+					.getCustomMetadataValue("bibtex/bibtexkey"));
+			assertEquals("peanut,butter,jelly", document
+					.getDocumentInformation().getKeywords());
 
-			assertEquals(t3BibtexEntry(), XMPUtil.getBibtexEntryFromDocumentInformation(document
-				.getDocumentInformation()));
+			assertEquals(t3BibtexEntry(), XMPUtil
+					.getBibtexEntryFromDocumentInformation(document
+							.getDocumentInformation()));
 
 			PDDocumentCatalog catalog = document.getDocumentCatalog();
 			PDMetadata metaRaw = catalog.getMetadata();
@@ -966,15 +1066,19 @@ public class XMPUtilTest extends TestCase {
 				fail();
 			}
 
-			XMPMetadata meta = new XMPMetadata(XMLUtil.parse(metaRaw.createInputStream()));
-			meta.addXMLNSMapping(XMPSchemaBibtex.NAMESPACE, XMPSchemaBibtex.class);
+			XMPMetadata meta = new XMPMetadata(XMLUtil.parse(metaRaw
+					.createInputStream()));
+			meta.addXMLNSMapping(XMPSchemaBibtex.NAMESPACE,
+					XMPSchemaBibtex.class);
 
 			// Check Dublin Core
-			List schemas = meta.getSchemasByNamespaceURI("http://purl.org/dc/elements/1.1/");
+			List schemas = meta
+					.getSchemasByNamespaceURI("http://purl.org/dc/elements/1.1/");
 
 			assertEquals(1, schemas.size());
 
-			XMPSchemaDublinCore dcSchema = (XMPSchemaDublinCore) schemas.iterator().next();
+			XMPSchemaDublinCore dcSchema = (XMPSchemaDublinCore) schemas
+					.iterator().next();
 			assertNotNull(dcSchema);
 
 			assertEquals("Hypersonic ultra-sound", dcSchema.getTitle());
@@ -985,7 +1089,8 @@ public class XMPUtilTest extends TestCase {
 			assertEquals("Dewey Duck", dcSchema.getContributors().get(1));
 			assertEquals("Louie Duck", dcSchema.getContributors().get(2));
 			assertEquals("Inproceedings", dcSchema.getTypes().get(0));
-			assertEquals("bibtex/bibtexkey/Clarkson06", dcSchema.getRelationships().get(0));
+			assertEquals("bibtex/bibtexkey/Clarkson06", dcSchema
+					.getRelationships().get(0));
 			assertEquals("peanut", dcSchema.getSubjects().get(0));
 			assertEquals("butter", dcSchema.getSubjects().get(1));
 			assertEquals("jelly", dcSchema.getSubjects().get(2));
@@ -995,7 +1100,8 @@ public class XMPUtilTest extends TestCase {
 			 */
 			assertEquals(4, dcSchema.getRelationships().size());
 
-			assertEquals(t3BibtexEntry(), XMPUtil.getBibtexEntryFromDublinCore(dcSchema));
+			assertEquals(t3BibtexEntry(), XMPUtil
+					.getBibtexEntryFromDublinCore(dcSchema));
 
 		} finally {
 			document.close();
@@ -1003,30 +1109,36 @@ public class XMPUtilTest extends TestCase {
 
 	}
 
-	public void testWriteSingleUpdatesDCAndInfo() throws IOException, TransformerException {
-		List l = new LinkedList();
+	public void testWriteSingleUpdatesDCAndInfo() throws IOException,
+			TransformerException {
+		List<BibtexEntry> l = new LinkedList<BibtexEntry>();
 		l.add(t3BibtexEntry());
 
-		XMPUtil.writeXMP(pdfFile, l, true);
+		XMPUtil.writeXMP(pdfFile, l, null, true);
 
 		PDDocument document = PDDocument.load(pdfFile.getAbsoluteFile());
 		try {
 			if (document.isEncrypted()) {
-				System.err.println("Error: Cannot add metadata to encrypted document.");
+				System.err
+						.println("Error: Cannot add metadata to encrypted document.");
 				System.exit(1);
 			}
 
-			assertEquals("Kelly Clarkson and Ozzy Osbourne", document.getDocumentInformation()
-				.getAuthor());
-			assertEquals("Hypersonic ultra-sound", document.getDocumentInformation().getTitle());
+			assertEquals("Kelly Clarkson and Ozzy Osbourne", document
+					.getDocumentInformation().getAuthor());
+			assertEquals("Hypersonic ultra-sound", document
+					.getDocumentInformation().getTitle());
 			assertEquals("Huey Duck and Dewey Duck and Louie Duck", document
-				.getDocumentInformation().getCustomMetadataValue("bibtex/editor"));
-			assertEquals("Clarkson06", document.getDocumentInformation().getCustomMetadataValue(
-				"bibtex/bibtexkey"));
-			assertEquals("peanut,butter,jelly", document.getDocumentInformation().getKeywords());
+					.getDocumentInformation().getCustomMetadataValue(
+							"bibtex/editor"));
+			assertEquals("Clarkson06", document.getDocumentInformation()
+					.getCustomMetadataValue("bibtex/bibtexkey"));
+			assertEquals("peanut,butter,jelly", document
+					.getDocumentInformation().getKeywords());
 
-			assertEquals(t3BibtexEntry(), XMPUtil.getBibtexEntryFromDocumentInformation(document
-				.getDocumentInformation()));
+			assertEquals(t3BibtexEntry(), XMPUtil
+					.getBibtexEntryFromDocumentInformation(document
+							.getDocumentInformation()));
 
 			PDDocumentCatalog catalog = document.getDocumentCatalog();
 			PDMetadata metaRaw = catalog.getMetadata();
@@ -1035,15 +1147,19 @@ public class XMPUtilTest extends TestCase {
 				fail();
 			}
 
-			XMPMetadata meta = new XMPMetadata(XMLUtil.parse(metaRaw.createInputStream()));
-			meta.addXMLNSMapping(XMPSchemaBibtex.NAMESPACE, XMPSchemaBibtex.class);
+			XMPMetadata meta = new XMPMetadata(XMLUtil.parse(metaRaw
+					.createInputStream()));
+			meta.addXMLNSMapping(XMPSchemaBibtex.NAMESPACE,
+					XMPSchemaBibtex.class);
 
 			// Check Dublin Core
-			List schemas = meta.getSchemasByNamespaceURI("http://purl.org/dc/elements/1.1/");
+			List schemas = meta
+					.getSchemasByNamespaceURI("http://purl.org/dc/elements/1.1/");
 
 			assertEquals(1, schemas.size());
 
-			XMPSchemaDublinCore dcSchema = (XMPSchemaDublinCore) schemas.iterator().next();
+			XMPSchemaDublinCore dcSchema = (XMPSchemaDublinCore) schemas
+					.iterator().next();
 			assertNotNull(dcSchema);
 
 			assertEquals("Hypersonic ultra-sound", dcSchema.getTitle());
@@ -1054,7 +1170,8 @@ public class XMPUtilTest extends TestCase {
 			assertEquals("Dewey Duck", dcSchema.getContributors().get(1));
 			assertEquals("Louie Duck", dcSchema.getContributors().get(2));
 			assertEquals("Inproceedings", dcSchema.getTypes().get(0));
-			assertEquals("bibtex/bibtexkey/Clarkson06", dcSchema.getRelationships().get(0));
+			assertEquals("bibtex/bibtexkey/Clarkson06", dcSchema
+					.getRelationships().get(0));
 			assertEquals("peanut", dcSchema.getSubjects().get(0));
 			assertEquals("butter", dcSchema.getSubjects().get(1));
 			assertEquals("jelly", dcSchema.getSubjects().get(2));
@@ -1064,7 +1181,8 @@ public class XMPUtilTest extends TestCase {
 			 */
 			assertEquals(4, dcSchema.getRelationships().size());
 
-			assertEquals(t3BibtexEntry(), XMPUtil.getBibtexEntryFromDublinCore(dcSchema));
+			assertEquals(t3BibtexEntry(), XMPUtil
+					.getBibtexEntryFromDublinCore(dcSchema));
 
 		} finally {
 			document.close();
@@ -1075,21 +1193,22 @@ public class XMPUtilTest extends TestCase {
 	public void testReadRawXMP() throws Exception {
 
 		ParserResult result = BibtexParser
-			.parse(new StringReader(
-				"@article{canh05,"
-					+ "  author = {Crowston, K. and Annabi, H. and Howison, J. and Masango, C.},\n"
-					+ "  title = {Effective work practices for floss development: A model and propositions},\n"
-					+ "  booktitle = {Hawaii International Conference On System Sciences (HICSS)},\n"
-					+ "  year = {2005},\n" + "  owner = {oezbek},\n"
-					+ "  timestamp = {2006.05.29},\n"
-					+ "  url = {http://james.howison.name/publications.html}}"));
+				.parse(new StringReader(
+						"@article{canh05,"
+								+ "  author = {Crowston, K. and Annabi, H. and Howison, J. and Masango, C.},\n"
+								+ "  title = {Effective work practices for floss development: A model and propositions},\n"
+								+ "  booktitle = {Hawaii International Conference On System Sciences (HICSS)},\n"
+								+ "  year = {2005},\n"
+								+ "  owner = {oezbek},\n"
+								+ "  timestamp = {2006.05.29},\n"
+								+ "  url = {http://james.howison.name/publications.html}}"));
 
 		Collection c = result.getDatabase().getEntries();
 		assertEquals(1, c.size());
 
 		BibtexEntry e = (BibtexEntry) c.iterator().next();
 
-		XMPUtil.writeXMP(pdfFile, e);
+		XMPUtil.writeXMP(pdfFile, e, null);
 
 		XMPMetadata metadata = XMPUtil.readRawXMP(pdfFile);
 
@@ -1107,13 +1226,16 @@ public class XMPUtilTest extends TestCase {
 		assertEquals("C. Masango", authors.get(3));
 
 		assertEquals("Article", bib.getTextProperty("entrytype"));
-		assertEquals("Effective work practices for floss development: A model and propositions",
-			bib.getTextProperty("title"));
-		assertEquals("Hawaii International Conference On System Sciences (HICSS)", bib
-			.getTextProperty("booktitle"));
+		assertEquals(
+				"Effective work practices for floss development: A model and propositions",
+				bib.getTextProperty("title"));
+		assertEquals(
+				"Hawaii International Conference On System Sciences (HICSS)",
+				bib.getTextProperty("booktitle"));
 		assertEquals("2005", bib.getTextProperty("year"));
 		assertEquals("oezbek", bib.getTextProperty("owner"));
-		assertEquals("http://james.howison.name/publications.html", bib.getTextProperty("url"));
+		assertEquals("http://james.howison.name/publications.html", bib
+				.getTextProperty("url"));
 
 	}
 
@@ -1168,7 +1290,7 @@ public class XMPUtilTest extends TestCase {
 
 			BibtexEntry e = t1BibtexEntry();
 
-			XMPUtil.writeXMP(pdfFile, e);
+			XMPUtil.writeXMP(pdfFile, e, null);
 
 			ByteArrayOutputStream s = new ByteArrayOutputStream();
 			PrintStream oldOut = System.out;
@@ -1189,7 +1311,7 @@ public class XMPUtilTest extends TestCase {
 			// Write XMP to file
 			BibtexEntry e = t1BibtexEntry();
 
-			XMPUtil.writeXMP(pdfFile, e);
+			XMPUtil.writeXMP(pdfFile, e, null);
 
 			ByteArrayOutputStream s = new ByteArrayOutputStream();
 			PrintStream oldOut = System.out;
@@ -1202,16 +1324,19 @@ public class XMPUtilTest extends TestCase {
 			/* Test minimal syntaxical completeness */
 			assertTrue(0 < xmp.indexOf("xpacket"));
 			assertTrue(0 < xmp.indexOf("adobe:ns:meta"));
-			assertTrue(0 < xmp.indexOf("<bibtex:bibtexkey>canh05</bibtex:bibtexkey>")
-				|| 0 < xmp.indexOf("bibtex:bibtexkey="));
+			assertTrue(0 < xmp
+					.indexOf("<bibtex:bibtexkey>canh05</bibtex:bibtexkey>")
+					|| 0 < xmp.indexOf("bibtex:bibtexkey="));
 			assertTrue(0 < xmp.indexOf("<rdf:li>K. Crowston</rdf:li>"));
 			assertTrue(0 < xmp.indexOf("id='W5M0MpCehiHzreSzNTczkc9d'?>")
-				|| 0 < xmp.indexOf("id=\"W5M0MpCehiHzreSzNTczkc9d\"?>"));
-			assertTrue(0 < xmp.indexOf("xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'")
-				|| 0 < xmp.indexOf("xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\""));
+					|| 0 < xmp.indexOf("id=\"W5M0MpCehiHzreSzNTczkc9d\"?>"));
+			assertTrue(0 < xmp
+					.indexOf("xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'")
+					|| 0 < xmp
+							.indexOf("xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\""));
 			assertTrue(0 < xmp.indexOf("<rdf:Description"));
 			assertTrue(0 < xmp.indexOf("<?xpacket end='w'?>")
-				|| 0 < xmp.indexOf("<?xpacket end=\"w\"?>"));
+					|| 0 < xmp.indexOf("<?xpacket end=\"w\"?>"));
 
 			/* Test contents of string */
 			writeManually(pdfFile, xmp);
@@ -1243,8 +1368,8 @@ public class XMPUtilTest extends TestCase {
 				ByteArrayOutputStream s = new ByteArrayOutputStream();
 				PrintStream oldOut = System.out;
 				System.setOut(new PrintStream(s));
-				XMPUtil.main(new String[] { "canh05", tempBib.getAbsolutePath(),
-					pdfFile.getAbsolutePath() });
+				XMPUtil.main(new String[] { "canh05",
+						tempBib.getAbsolutePath(), pdfFile.getAbsolutePath() });
 				System.setOut(oldOut);
 				s.close();
 
@@ -1257,8 +1382,8 @@ public class XMPUtilTest extends TestCase {
 				ByteArrayOutputStream s = new ByteArrayOutputStream();
 				PrintStream oldOut = System.out;
 				System.setOut(new PrintStream(s));
-				XMPUtil.main(new String[] { "OezbekC06", tempBib.getAbsolutePath(),
-					pdfFile.getAbsolutePath() });
+				XMPUtil.main(new String[] { "OezbekC06",
+						tempBib.getAbsolutePath(), pdfFile.getAbsolutePath() });
 				System.setOut(oldOut);
 				s.close();
 				// PDF should be annotated:
@@ -1293,7 +1418,8 @@ public class XMPUtilTest extends TestCase {
 			ByteArrayOutputStream s = new ByteArrayOutputStream();
 			PrintStream oldOut = System.out;
 			System.setOut(new PrintStream(s));
-			XMPUtil.main(new String[] { tempBib.getAbsolutePath(), pdfFile.getAbsolutePath() });
+			XMPUtil.main(new String[] { tempBib.getAbsolutePath(),
+					pdfFile.getAbsolutePath() });
 			System.setOut(oldOut);
 			s.close();
 
@@ -1310,8 +1436,14 @@ public class XMPUtilTest extends TestCase {
 				b = tmp;
 			}
 
-			assertEquals(t1BibtexEntry(), a);
-			assertEquals(t3BibtexEntry(), b);
+			BibtexEntry t1 = t1BibtexEntry();
+			BibtexEntry t3 = t3BibtexEntry();
+
+			// Writing and reading will resolve strings!
+			t3.setField("month", "July");
+
+			assertEquals(t1, a);
+			assertEquals(t3, b);
 
 		} finally {
 			if (fileWriter != null)
@@ -1323,6 +1455,51 @@ public class XMPUtilTest extends TestCase {
 	}
 
 	/**
+	 * Test that readXMP and writeXMP work together.
+	 * 
+	 * @throws Exception
+	 */
+	public void testResolveStrings() throws Exception {
+		ParserResult original = BibtexParser
+				.parse(new StringReader(
+						"@string{ crow = \"Crowston, K.\"}\n"
+								+ "@string{ anna = \"Annabi, H.\"}\n"
+								+ "@string{ howi = \"Howison, J.\"}\n"
+								+ "@string{ masa = \"Masango, C.\"}\n"
+								+ "@article{canh05,"
+								+ "  author = {#crow# and #anna# and #howi# and #masa#},"
+								+ "\n"
+								+ "  title = {Effective work practices for floss development: A model and propositions},"
+								+ "\n"
+								+ "  booktitle = {Hawaii International Conference On System Sciences (HICSS)},"
+								+ "\n"
+								+ "  year = {2005},"
+								+ "\n"
+								+ "  owner = {oezbek},"
+								+ "\n"
+								+ "  timestamp = {2006.05.29},"
+								+ "\n"
+								+ "  url = {http://james.howison.name/publications.html}"
+								+ "\n" + "}"));
+
+		Collection c = original.getDatabase().getEntries();
+		assertEquals(1, c.size());
+
+		BibtexEntry e = (BibtexEntry) c.iterator().next();
+
+		XMPUtil.writeXMP(pdfFile, e, original.getDatabase());
+
+		List l = XMPUtil.readXMP(pdfFile.getAbsoluteFile());
+		assertEquals(1, l.size());
+		BibtexEntry x = (BibtexEntry) l.get(0);
+
+		assertEquals(
+				AuthorList
+						.getAuthorList("Crowston, K. and Annabi, H. and Howison, J. and Masango, C."),
+				AuthorList.getAuthorList(x.getField("author").toString()));
+	}
+
+	/**
 	 * Test that we cannot use encrypted PDFs.
 	 */
 	public void testEncryption() throws Exception {
@@ -1348,13 +1525,97 @@ public class XMPUtilTest extends TestCase {
 		}
 
 		try {
-			XMPUtil.writeXMP("src/tests/encrypted.pdf", t1BibtexEntry());
+			XMPUtil.writeXMP("src/tests/encrypted.pdf", t1BibtexEntry(), null);
 			fail();
 		} catch (EncryptionNotSupportedException e) {
 		}
 	}
 
 	/**
+	 * A better testcase for resolveStrings. Makes sure that also the document
+	 * information and dublin core are written correctly.
+	 * 
+	 * Data was contributed by Philip K.F. H�lzenspies (p.k.f.holzenspies [at] utwente.nl).
+	 * 
+	 * @throws IOException
+	 * @throws FileNotFoundException
+	 * @throws TransformerException
+	 * 
+	 */
+	public void testResolveStrings2() throws FileNotFoundException,
+			IOException, TransformerException {
+
+		ParserResult result = BibtexParser.parse(new FileReader(
+				"src/tests/net/sf/jabref/util/twente.bib"));
+
+		assertEquals("Arvind", result.getDatabase().resolveForStrings(
+				"#Arvind#"));
+
+		AuthorList originalAuthors = AuthorList
+				.getAuthorList("Patterson, David and Arvind and Asanov\\'\\i{}c, Krste and Chiou, Derek and Hoe, James and Kozyrakis, Christos and Lu, S{hih-Lien} and Oskin, Mark and Rabaey, Jan and Wawrzynek, John");
+
+		try {
+			XMPUtil.writeXMP(pdfFile, result.getDatabase().getEntryByKey(
+					"Patterson06"), result.getDatabase());
+
+			// Test whether we the main function can load the bibtex correctly
+			BibtexEntry b = XMPUtil.readXMP(pdfFile).get(0);
+
+			assertEquals(originalAuthors, AuthorList.getAuthorList(b.getField(
+					"author").toString()));
+
+			// Next check from Document Information
+			PDDocument document = PDDocument.load(pdfFile.getAbsoluteFile());
+			try {
+
+				assertEquals(originalAuthors, AuthorList.getAuthorList(document
+						.getDocumentInformation().getAuthor()));
+
+				b = XMPUtil.getBibtexEntryFromDocumentInformation(document
+						.getDocumentInformation());
+				assertEquals(originalAuthors, AuthorList.getAuthorList(b
+						.getField("author").toString()));
+
+				// Now check from Dublin Core
+				PDDocumentCatalog catalog = document.getDocumentCatalog();
+				PDMetadata metaRaw = catalog.getMetadata();
+
+				if (metaRaw == null) {
+					fail();
+				}
+
+				XMPMetadata meta = new XMPMetadata(XMLUtil.parse(metaRaw
+						.createInputStream()));
+				meta.addXMLNSMapping(XMPSchemaBibtex.NAMESPACE,
+						XMPSchemaBibtex.class);
+
+				List schemas = meta
+						.getSchemasByNamespaceURI("http://purl.org/dc/elements/1.1/");
+
+				assertEquals(1, schemas.size());
+
+				XMPSchemaDublinCore dcSchema = (XMPSchemaDublinCore) schemas
+						.iterator().next();
+				assertNotNull(dcSchema);
+
+				assertEquals("David Patterson", dcSchema.getCreators().get(0));
+				assertEquals("Arvind", dcSchema.getCreators().get(1));
+				assertEquals("Krste Asanov\\'\\i{}c", dcSchema.getCreators()
+						.get(2));
+
+				b = XMPUtil.getBibtexEntryFromDublinCore(dcSchema);
+				assertEquals(originalAuthors, AuthorList.getAuthorList(b
+						.getField("author").toString()));
+			} finally {
+				document.close();
+			}
+
+		} finally {
+			pdfFile.delete();
+		}
+	}
+
+	/**
 	 * Read the contents of a reader as one string
 	 * 
 	 * @param reader
diff --git a/src/resource/JabRef_de.properties b/src/resource/JabRef_de.properties
index 363e078..188dc80 100644
--- a/src/resource/JabRef_de.properties
+++ b/src/resource/JabRef_de.properties
@@ -2,8 +2,6 @@
 #! created/edited by Popeye version 0.54 (popeye.sourceforge.net)
 #! encoding:ISO-8859-1
 
-!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.=Dies_ist_ein_einfacher_Copy_&_Paste-Dialog._Nachdem_Text_in_das_Texteingabefeld_geladen_oder_kopiert_wurde,_k\u00f6nnen_Sie_Textteile_markieren_und_ihnen_ein_BibTeX-Feld_zuordnen.
-
 %0_contains_the_Regular_Expression_<b>%1</b>=%0_den_regul\u00e4ren_Ausdruck_<b>%1</b>_enth\u00e4lt
 
 %0_contains_the_term_<b>%1</b>=%0_den_Ausdruck_<b>%1</b>_enth\u00E4lt
@@ -40,12 +38,6 @@ A_CiteSeer_fetch_operation_is_currently_in_progress.=CiteSeer-Abruf_ist_in_Bearb
 
 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_Namen_exisitiert_bereits
-
-Abbreviate_journal_names_of_the_selected_entries_(ISO_abbreviation)=Zeitschriftennamen_der_ausgew\u00e4hlten_Eintr\u00e4ge_abk\u00fcrzen_(ISO-Abk\u00fcrzung)
-
-Abbreviate_journal_names_of_the_selected_entries_(MEDLINE_abbreviation)=Zeitschriftennamen_der_ausgew\u00e4hlten_Eintr\u00e4ge_abk\u00fcrzen_(MEDLINE-Abk\u00fcrzung)
-
 Abbreviate_names=Namen_abk\u00fcrzen
 
 Abbreviation=Abk\u00fcrzung
@@ -84,10 +76,6 @@ Add_Subgroup=Untergruppe_hinzuf\u00FCgen
 
 Add_to_group=Zu_Gruppe_hinzuf\u00FCgen
 
-Added_entry=Eintrag_hinzugef\u00FCgt
-
-Added_group=Gruppe_hinzugef\u00FCgt
-
 Added_group_"%0".=Gruppe_"%0"_hinzugef\u00FCgt.
 
 Added_new=Neu_hinzugef\u00FCgt
@@ -98,22 +86,16 @@ Additionally,_entries_whose_<b>%0</b>_field_does_not_contain_<b>%1</b>_can_be_as
 
 Advanced=Erweitert
 
-Advanced_options_for_setting...=Erweiterte_Optionen_f\u00fcr_Einstellung...
-
 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_typlos_eingestuft._Fortfahren?
-
 All_fields=Alle_Felder
 
 All_subgroups_(recursively)=Alle_Untergruppen_(rekursiv)
 
 Allow_editing_in_table_cells=Bearbeiten_in_der_Tabelle_zulassen
 
-Always_save_database_ordered_by_author_name=Datei_immer_nach_Autorennamen_sortiert_abspeichern
-
 and=und
 
 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.
@@ -124,8 +106,6 @@ 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
@@ -134,8 +114,6 @@ Apply=\u00DCbernehmen
 
 Arguments_passed_on_to_running_JabRef_instance._Shutting_down.=Argumente_wurden_der_laufenden_JabRef-Instanz_\u00fcbergeben._Schlie\u00dfen_l\u00e4uft.
 
-Assign_entries_based_on:=Eintr\u00e4ge_zuweisen_basierend_auf:
-
 Assign_entry_selection_exclusively_to_this_group=Ausgew\u00e4hlte_Eintr\u00e4ge_ausschlie\u00dflich_dieser_Gruppe_zuordnen
 
 Assign_new_file=Neue_Datei_zuordnen
@@ -158,8 +136,6 @@ 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
@@ -182,15 +158,11 @@ Autoset_%0_links._Allow_overwriting_existing_links.=%0_Links_automatisch_zuordne
 
 Autoset_%0_links._Do_not_overwrite_existing_links.=%0_Links_automatisch_zuordnen._Vorhandene_Links_nicht_\u00fcberschreiben.
 
-Autosetting_%0_field...=Automatisches_Setzen_von_Feld_%0...
-
-AUX_File_import=Teildatenbank_aus_AUX_Datei_erstellen
-
 AUX_file_import=AUX_Datei_Import
 
 Available_export_formats=Verf\u00FCgbare_Exportformate
 
-Available_fields=verf\u00FCgbare_BibTeX_Felder
+Available_fields=Verf\u00fcgbare_BibTeX-Felder
 
 Available_import_formats=Verf\u00FCgbare_Importformate
 
@@ -204,10 +176,6 @@ Backup_old_file_when_saving=Beim_Speichern_ein_Backup_der_alten_Datei_anlegen
 
 Bibkey_to_filename_conversion=Konvertierung_von_BibTeX-Key_zu_Dateiname
 
-Biblioscape_Tag_file=Biblioscape_Tag-Datei
-
-BibTeX=BibTeX
-
 BibTeX_key=BibTeX-Key
 
 BibTeX_key_is_unique.=Der_BibTeX-Key_ist_eindeutig.
@@ -218,12 +186,8 @@ BibTeX_source=BibTeX-Quelltext
 
 BibTeXML=BibTeXML
 
-BibTeXML_File=BibTeXML-Datei
-
 Binding=Tastenk\u00FCrzel
 
-Broken_link=Fehlerhafter_Link
-
 Browse=Durchsuchen
 
 by=durch
@@ -236,8 +200,6 @@ Cannot_add_entries_to_group_without_generating_keys._Generate_keys_now?=Eintr\u0
 
 Cannot_merge_this_change=Kann_diese_\u00C4nderung_nicht_einf\u00FCgen
 
-Cannot_move_group=Gruppe_kann_nicht_verschoben_werden
-
 Cannot_move_group_"%0"_down.=Gruppe_"%0"_kann_nicht_nach_unten_bewegt_werden.
 
 Cannot_move_group_"%0"_left.=Gruppe_"%0"_kann_nicht_nach_links_bewegt_werden.
@@ -284,7 +246,7 @@ Changed_preamble=Pr\u00E4ambel_ge\u00E4ndert
 
 Changed_type_to=Typ_ge\u00E4ndert_zu
 
-Characters_to_ignore=Folgende_Buchstaben_ignorieren
+Characters_to_ignore=Folgende_Zeichen_ignorieren
 
 Check_existing_%0_links=Existierende_%0-Links_\u00fcberpr\u00fcfen
 
@@ -292,8 +254,6 @@ 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.
 
-Citation_import_from_CiteSeer_failed.=Fehler_beim_Import_von_CiteSeer.
-
 Cite_command_(for_Emacs/WinEdt)=Cite-Kommando_(f\u00fcr_Emacs/WinEdt)
 
 CiteSeer_Error=CiteSeer-Fehler
@@ -308,8 +268,6 @@ CiteSeer_Import_Fields=CiteSeer_Import-Felder
 
 CiteSeer_Transfer=CiteSeer-Transfer
 
-CiteSeer_Warning=CiteSeer_Warnung
-
 Class_name=Klassenname
 
 Clear=Zur\u00FCcksetzen
@@ -318,27 +276,14 @@ clear_all_groups=Alle_Gruppen_l\u00F6schen
 
 Clear_field=Feld_l\u00f6schen
 
-Clear_highlight=Markierten_l\u00f6schen
-
-Clear_highlighted=Markierte_l\u00f6schen
-
-Clear_highlighted_groups=Markierte_Gruppen_l\u00f6schen
-
-Clear_inputarea=gesamten_Text_entfernen
+Clear_fields=Felder_l\u00f6schen
 
-Clear_search=Suche_l\u00f6schen
+Clear_highlight=Markierten_l\u00f6schen
 
 Close=Schlie\u00DFen
 
-Close_database=Datei_schlie\u00DFen
-
 Close_dialog=Dialog_schlie\u00DFen
 
-# The following lines correspond to names of key bindings:
-Close_entry_editor=Eintragseditor_schlie\u00DFen
-
-Close_preamble_editor=Pr\u00E4ambel-Editor_schlie\u00DFen
-
 Close_the_current_database=Aktuelle_Datei_schlie\u00DFen
 
 Close_the_help_window=Hilfefenster_schlie\u00DFen
@@ -359,8 +304,6 @@ Command_line_id=Kommandozeilen_ID
 
 Complete_record=Kompletter_Eintrag
 
-Completed_citation_import_from_CiteSeer.=Import_von_CiteSeer_abgeschlossen.
-
 Completed_Import_Fields_from_CiteSeer.=Die_Felder_wurden_aus_CiteSeer_importiert.
 
 Completed_import_from_CiteSeer.=Import_von_CiteSeer_abgeschlossen
@@ -379,12 +322,8 @@ Copied_keys=BibTeX-Keys_kopiert
 
 Copy=Kopieren
 
-Copy_\cite{BibTeX_key}=Kopiere_\cite{BibTeX-Key}
-
 Copy_BibTeX_key=BibTeX-Key_kopieren
 
-Copy_to_clipboard=Text_in_Zwischenablage_kopieren
-
 Could_not_call_executable=Konnte_das_Programm_nicht_aufrufen
 
 Could_not_connect_to_a_running_gnuserv_process._Make_sure_that_Emacs_or_XEmacs_is_running,<BR>and_that_the_server_has_been_started_(by_running_the_command_'gnuserv-start').=Konnte_zu_keinem_aktiven_gnuserv-Prozess_verbinden._Vergewissern_Sie_sich,_dass_(X)Emacs_l\u00e4uft,<BR>und_dass_der_Server_gestartet_wurde_(mit_dem_Befehl_'gnuserv-start').
@@ -401,6 +340,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_image_file=Bilddatei_nicht_gefunden.
 
 Could_not_find_layout_file=Keine_Layoutdatei_gefunden
 
@@ -428,13 +368,9 @@ Couldn't_parse_the_'citeseerurl'_field_of_the_following_entries=Die_'citeseerurl
 
 Create_group=Gruppe_anlegen
 
-Created_group=Gruppe_erstellen
-
-Created_group_"%0".=Gruppe_"%0"_erstellt.
-
 Created_groups.=Gruppen_erstellt.
 
-Curly_braces_{_and_}_must_be_balanced.=Geschweifte_Klammern_{_und_}_m\u00FCssen_sich_ausgleichen.
+crossreferenced_entries_included=Inklusive_querverwiesenen_Eintr\u00E4gen
 
 Current_content=Aktueller_Inhalt
 
@@ -443,8 +379,8 @@ Current_value=Aktueller_Wert
 Custom_entry_types=Benutzerdefinierte_Eintragstypen
 
 Custom_entry_types_found_in_file=Benutzerdefinierte_Eintragstypen_gefunden
-
-Custom_export=Externe_Exportfilter
+Custom_icon_theme=Pers\u00f6nliches_Icon-Theme
+Custom_icon_theme_file=Datei_des_pers\u00f6nlichen_Icon-Themes
 
 Custom_importers=Externe_Importfilter
 
@@ -476,8 +412,6 @@ Default_grouping_field=Standard_Gruppierungs-Feld
 
 Default_look_and_feel=Standard_"look_and_feel"
 
-Default_owner=Standard-Besitzer
-
 Default_pattern=Standardmuster
 
 Default_sort_criteria=Standard-Sortierkriterium
@@ -506,8 +440,6 @@ Delete_strings=Strings_l\u00F6schen
 
 Deleted=Gel\u00F6scht
 
-Deleted_entry=Eintrag_gel\u00F6scht
-
 Delimit_fields_with_semicolon,_ex.=Felder_mit_Semikolon_abgrenzen,_z.B.
 
 Descending=Absteigend
@@ -515,6 +447,7 @@ Descending=Absteigend
 Description=Beschreibung
 
 Deselect_all=Auswahl_aufheben
+Deselect_all_duplicates=Auswahl_der_Duplikate_aufheben
 
 Details=Details
 
@@ -534,6 +467,8 @@ Display_imported_entries_in_an_inspection_window_before_they_are_added.=Importie
 
 Display_only_entries_belonging_to_all_selected_groups.=Nur_Eintr\u00E4ge_anzeigen,_die_zu_allen_ausgew\u00E4hlten_Gruppen_geh\u00F6ren.
 
+Display_version=Version_anzeigen
+
 Displaying_no_groups=Keine_Gruppen_anzeigen
 
 Do_not_abbreviate_names=Namen_nicht_abk\u00fcrzen
@@ -562,18 +497,10 @@ Download_file=Datei_herunterladen
 
 Downloading...=Download_l\u00E4uft
 
-Due_to_the_duplicate_BibTeX_key,_the_groups_assignment(s)_for_this_entryncannot_be_restored_correctly_when_reopening_this_database._It_is_recommendednthat_you_have_JabRef_generate_a_unique_key_now_to_prevent_this_problem.=Aufgrund_des_doppelten_BibTeX-Keys_kann_die_Gruppenzuordnung_dieses_Eintrags_beim_n\u00E4chstenn\u00D6ffnen_nicht_wiederhergestellt_werden._Es_wird_empfohlen,_von_JabRef_jetzt_einen_eindeutigennKey_automatisch_generieren_zu_lassen,_um_dieses_Problem_zu_verhindern.
-
-dummy=dummy
-
-Duplicate_BibTeX_key=Doppelter_BibTeX-Key
-
 duplicate_BibTeX_key=doppelter_BibTeX-Key
 
 Duplicate_BibTeX_key.=Doppelter_BibTeX-Key.
 
-duplicate_BibTeX_key.=doppelter_BibTeX-Key.
-
 Duplicate_BibTeX_key._Grouping_may_not_work_for_this_entry.=Doppelter_BibTeX-Key._Es_kann_sein,_dass_die_Gruppierung_f\u00fcr_diesen_Eintrag_nicht_funktioniert.
 
 Duplicate_Key_Warning=Warnung:_Key_bereits_vorhanden
@@ -600,24 +527,18 @@ Edit=Bearbeiten
 
 Edit_custom_export=Bearbeite_externen_Exportfilter
 
-Edit_entry=Eintrag_bearbeiten
-
 Edit_group=Gruppe_bearbeiten
 
 Edit_journal=Zeitschrift_bearbeiten
 
 Edit_preamble=Pr\u00E4ambel_bearbeiten
 
-Edit_strings=Strings_bearbeiten
-
 empty_BibTeX_key=leerer_BibTeX-Key
 
 Empty_BibTeX_key.=Leerer_BibTeX-Key.
 
 Empty_BibTeX_key._Grouping_may_not_work_for_this_entry.=Leerer_BibTeX-Key._Es_kann_sein,_dass_die_Gruppierung_f\u00fcr_diesen_Eintrag_nicht_funktioniert.
 
-Empty_database=Leere_Datei
-
 empty_database=leere_Datenbank
 
 Enable_source_editing=Bearbeiten_von_Sourcecode_zulassen
@@ -642,23 +563,10 @@ entry=Eintrag
 
 Entry_editor=Eintragseditor
 
-# The following lines correspond to names of key bindings:
-Entry_editor,_next_entry=Eintragseditor,_n\u00E4chster_Eintrag
-
-Entry_editor,_next_panel=Eintragseditor,_n\u00E4chstes_Panel
-
-Entry_editor,_previous_entry=Eintragseditor,_voriger_Eintrag
-
-Entry_editor,_previous_panel=Eintragseditor,_voriges_Panel
-
-Entry_editor,_store_field=Eintragseditor,_Feld_speichern
-
 Entry_in_current_database=Eintrag_in_aktueller_Datenbank
 
 Entry_in_import=Eintrag_in_Importierung
 
-Entry_is_incomplete=Eintrag_ist_nicht_vollst\u00E4ndig
-
 Entry_preview=Eintragsvorschau
 
 Entry_table=Tabellenansicht
@@ -671,33 +579,29 @@ Entry_type_names_are_not_allowed_to_contain_white_space_or_the_following_charact
 
 Entry_types=Eintragstypen
 
-EOF_in_mid-string=EOF_in_mid-string
-
 Error=Fehler
+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_line=Fehler_in_Zeile
-
-Error_messages=Fehlermeldungen
+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_writing=Fehler_beim_Schreiben
 
-Existing_file=Bestehende_Datei
+Exceptions=Ausnahmen
 
-exists._Overwrite?=Existiert._\u00DCberschreiben?
+Existing_file=Bestehende_Datei
 
 exists._Overwrite_file?=existiert._Ersetzen?
+exists.Overwrite?=ist_vorhanden._\u00dcberschreiben?
 
 Exit=Beenden
 
 Expand_subtree=Unterbaum_aufklappen
 
-Explicit=Explizit
-
 Export=Exportieren
 
 Export_entry_types=Eintragstypen_exportieren
@@ -710,12 +614,8 @@ Export_preferences_to_file=Exportiere_Einstellungen_in_Datei
 
 Export_properties=Eigenschaften_f\u00FCr_Exportfilter
 
-Export_selected_to_clipboard=Ausgew\u00E4hlte_in_die_Zwischenablage_kopieren
-
 Export_to_clipboard=In_die_Zwischenablage_kopieren
 
-Exported_database_to_file=Datei_exportiert_nach
-
 Exporting=Exportiere
 
 External_changes=Externe_\u00C4nderungen
@@ -732,17 +632,11 @@ Fetch=Abrufen
 
 Fetch_Articles_Citing_your_Database=Literaturangaben_abrufen,_die_Ihre_Datei_zitieren
 
-Fetch_Citations_from_CiteSeer=Zitierende_Literatur_von_CiteSeer_abrufen
-
-Fetch_citations_from_CiteSeer=Zitierende_Literatur_von_CiteSeer_abrufen
-
 Fetch_CiteSeer=CiteSeer_abrufen
 
-Fetch_Medline=Medline_abrufen
-
-fetch_Medline=Medline_abrufen
+Fetch_CiteSeer_by_ID=CiteSeer_mittels_ID_abrufen
 
-Fetch_Medline_by_author=Medline_mittels_Autor_abrufen
+Fetch_Medline=Medline_abrufen
 
 Fetch_Medline_by_ID=Medline_mittels_ID_abrufen
 
@@ -752,8 +646,6 @@ Fetching_Citations=Literaturangaben_werden_abgerufen
 
 Fetching_Identifiers=Bezeichner_werden_abgerufen
 
-Fetching_Medline...=Rufe_Medline_ab...
-
 Fetching_Medline_by_ID...=Rufe_Medline_mittels_ID_ab...
 
 Fetching_Medline_by_id_...=Rufe_Medline_mittels_ID_ab...
@@ -769,13 +661,11 @@ Field_content=Feldinhalt
 
 Field_name=Feldname
 
-Field_names_are_not_allowed_to_contain_white_space_or_the_following_characters=Der_Feldname_darf_weder_Leerzeichen_noch_eines_der_folgenden_Zeichen_enthalten
-
 Field_sizes=Feldgr\u00f6\u00dfen
 
-Field_to_group_by=Sortierfeld
+Field_to_filter=Feld_f\u00fcr_Filter
 
-Field_to_search=Zu_durchsuchendes_Feld
+Field_to_group_by=Sortierfeld
 
 Fields=Felder
 
@@ -786,11 +676,10 @@ file=Datei
 File_'%0'_not_found=Datei_'%0'_nicht_gefunden
 
 File_changed=Datei_ge\u00E4ndert
+File_exists=Datei_ist_vorhanden
 
 File_extension=Dateiendung
 
-File_has_been_updated_externally._Are_you_sure_you_want_to_save?=Die_Datei_wurde_extern_ver\u00E4ndert._Sind_Sie_sicher,_dass_Sie_abspeichern_m\u00F6chten?
-
 File_not_found=Datei_nicht_gefunden
 
 File_updated_externally=Datei_extern_ge\u00E4ndert
@@ -801,11 +690,8 @@ Files_opened=Dateien_ge\u00F6ffnet
 
 Filter=Filter
 
-Find_duplicates=Nach_doppelten_Eintr\u00E4gen_suchen
-
-Finished_autosetting_%0_field._Entries_changed:_%1.=Automatisches_Setzen_von_Feld_%0_abgeschlossen._Ge\u00e4nderte_Eintr\u00e4ge:_%1.
-
 Finished_synchronizing_%0_links._Entries_changed%c_%1.=Synchronisierung_von_%0_Links_abgeschlossen._Ge\u00e4nderte_Eintr\u00e4ge%c_%1.
+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.
 
@@ -813,6 +699,8 @@ Fit_table_horizontally_on_screen=Tabelle_horizontal_dem_Bildschirm_anpassen
 
 Float=Oben_einsortieren
 
+Float_marked_entries=Markierte_Eintr\u00E4ge_zuoberst_anzeigen
+
 Font_Family=Schriftart
 
 Font_Preview=Vorschau
@@ -826,8 +714,10 @@ FontSelector=Schriften_w\u00E4hlen
 for=f\u00FCr
 
 Format_of_author_and_editor_names=Format_der_Autoren-_und_Hrsg.-Namen
+Format_String=Formatier-Ausdruck
 
 Format_used=benutztes_Format
+Formatter_Name=Name_des_Formatierers
 
 Formatter_not_found=Formatierer_nicht_gefunden
 
@@ -849,6 +739,9 @@ Generate_keys=Erstelle_Key
 
 Generate_keys_before_saving_(for_entries_without_a_key)=Keys_vor_dem_Speichern_erstellen_(f\u00fcr_Einr\u00e4ge_ohne_Key)
 
+
+Generate_keys_for_imported_entries=Keys_f\u00fcr_importierte_Eintr\u00e4ge_generieren
+
 Generate_now=Jetzt_generieren
 
 Generated_BibTeX_key_for=BibTeX-Key_erzeugt_f\u00FCr
@@ -863,12 +756,10 @@ Gray_out_non-hits=Nicht-Treffer_grau_einf\u00E4rben
 
 Gray_out_non-matching_entries=Nicht_\u00FCbereinstimmende_Eintr\u00E4ge_ausblenden
 
-Group_definitions_have_been_converted_to_JabRef_1.7_format.=Die_Gruppendefinitionen_wurden_zum_JabRef_1.7-Format_konvertiert.
-
-Group_name=Name_der_Gruppe
-
 Group_properties=Gruppeneigenschaften
 
+grouping_may_not_work_for_this_entry=Dieser_Eintrag_unterst\u00FCtzt_m\u00F6glicherweise_keine_Gruppierung
+
 Groups=Gruppen
 
 Harvard_RTF=Harvard_RTF
@@ -877,11 +768,11 @@ 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
+Help_on_Preview_Settings=Hilfe_zu_den_Einstellungen_der_Vorschau
+Help_on_Regular_Expression_Search=Hilfe_zur_Suche_mit_regul\u00e4rem_Ausdruck
 
 Hide_non-hits=Nicht-Treffer_ausblenden
 
@@ -891,18 +782,16 @@ 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_groups_that_contain_entries_contained_in_any_currently_selected_group=Gruppen_markieren,_die_Eintr\u00e4ge_enthalten,_die_in_einer_der_gerade_markierten_Gruppen_enthalten_sind
-
 Highlight_overlapping_groups=Sich_\u00fcberschneidende_Gruppen_markieren
 
 Hint%c_To_search_specific_fields_only,_enter_for_example%c<p><tt>author%esmith_and_title%eelectrical</tt>=Hinweis%c_Um_ausschlie\u00DFlich_bestimmte_Felder_zu_durchsuchen,_geben_Sie_z.B._ein%c<p><tt>author%esmith_and_title%eelectrical</tt>
 
 HTML=HTML
 
+HTML_table=HTML-Tabelle
+
+HTML_table_(with_Abstract_&_BibTeX)=HTML-Tabelle_(mit_Abstract_&_BibTeX)
+
 Ignore=Ignorieren
 
 Illegal_type_name=Ung\u00FCltiger_Typ
@@ -911,41 +800,27 @@ Immediate_subgroups=Direkte_Untergruppen
 
 Import=Importieren
 
-Import_and_append=Importieren_und_anh\u00E4ngen
-
 Import_and_keep_old_entry=Importieren_und_alten_Eintrag_behalten
 
 Import_and_remove_old_entry=Importieren_und_alten_Eintrag_l\u00F6schen
 
 Import_cancelled.=Importierung_abgebrochen.
 
-Import_Data_from_CiteSeer=Daten_von_CiteSeer_importieren
-
 Import_Data_from_CiteSeer_Database=Daten_aus_CiteSeer-Datenbank_importieren
 
-Import_database=Datei_importieren
-
 Import_entries=Eintr\u00E4ge_importieren
 
 Import_entry_types=Eintragstypen_importieren
 
 Import_failed=Import_fehlgeschlagen
 
-Import_Fields_from_CiteSeer=Felder_von_CiteSeer_importieren
-
-Import_fields_from_CiteSeer=Felder_von_CiteSeer_importieren
-
-Import_fields_from_CiteSeer_Database=Import_fields_from_CiteSeer_Database
-
 Import_Fields_from_CiteSeer_Database=Felder_aus_CiteSeer-Datenbank_importieren
 
 Import_file=Importiere_Datei
 
 Import_group_definitions=Gruppendefinitionen_importieren
 
-Import_name=Importer_Name
-
-Import_plain_text=Klartext_importieren
+Import_name=Name_des_Importfilters
 
 Import_preferences=Einstellungen_importieren
 
@@ -963,8 +838,6 @@ Imported_entries=Eintr\u00E4ge_importiert
 
 Imported_entry_types=Eintragstypen_importiert
 
-Imported_file=Importierte_Datei
-
 Imported_from_database=Importiert_aus_Datei
 
 ImportFormat_class=ImportFormat_Klasse
@@ -978,8 +851,7 @@ Importing_in_unknown_format=Importiere_ein_unbekanntes_Format
 In_JabRef,_use_pairs_of_#_characters_to_indicate_a_string.=Benutzen_Sie_in_JabRef_das_Zeichen_#_paarweise,_um_einen_String_(Abk\u00FCrzung)_anzugeben.
 
 Include_abstracts=Abstracts_ber\u00fccksichtigen
-
-Include_subgroups=Untergruppen_ber\u00fccksichtigen
+Include_entries=Eintr\u00e4ge_einschlie\u00dfen
 
 Include_subgroups\:_When_selected,_view_entries_contained_in_this_group_or_its_subgroups=Untergruppen_ber\u00fccksichtigen\:_Eintr\u00e4ge_dieser_Gruppe_und_ihrer_Untergruppen_anzeigen
 
@@ -989,8 +861,6 @@ Incremental_search=Weitersuchen
 
 Incremental_search_failed._Repeat_to_search_from_top.=Direkte_Suche_fehlgeschlagen._Wiederhole_die_Suche_vom_Anfang_der_Datenbank.
 
-Independent=Unabh\u00E4ngig
-
 Independent_group\:_When_selected,_view_only_this_group's_entries=Unabh\u00e4ngige_Gruppen\:_Nur_die_Eintr\u00e4ge_dieser_Gruppe_anzeigen
 
 Initially_show_groups_tree_expanded=Baumansicht_der_Gruppen_standardm\u00e4\u00dfig_aufklappen
@@ -1011,8 +881,6 @@ insert_string_=String_einf\u00FCgen_
 
 Insert_URL=URL_einf\u00fcgen
 
-INSPEC=INSPEC
-
 integrity=Integrit\u00E4t
 
 # Integrity check is a process that checks for indications of wrongly filled out bibtex fields. "Scan" is the button that starts the check.
@@ -1020,8 +888,6 @@ Integrity_check=Integrit\u00E4ts\u00FCberpr\u00FCfung
 
 Intersection=Schnittmenge
 
-Intersection_with_supergroups=Schnittmenge_mit_Obergruppen
-
 Invalid_BibTeX_key=Ung\u00fcltiger_BibTeX-Key
 
 Invalid_date_format=Ung\u00fcltiges_Datumsformat
@@ -1032,8 +898,6 @@ Inverted=Invertiert
 
 is_a_standard_type.=ist_ein_Standardtyp
 
-ISI=ISI
-
 ISO_abbreviation=ISO-Abk\u00fcrzung
 
 Item_list_for_field=Wortliste_f\u00FCr_Feld
@@ -1042,15 +906,11 @@ JabRef_help=JabRef_Hilfe
 
 JabRef_preferences=JabRef_Einstellungen
 
-Journal_abbreviations=Abk\u00fcrzung_der_Zeitschriftennamen
+Journal_abbreviations=Abk\u00fcrzung_der_Zeitschriftentitel
 
 Journal_list_preview=Vorschau_der_Zeitschriftenliste
 
-Journal_name=Zeitschriftenname
-
-Journal_names=Zeitschriftennamen
-
-JStor_file=JStor_Datei
+Journal_name=Zeitschriftentitel
 
 Keep=Behalten
 
@@ -1078,8 +938,6 @@ Language=Sprache
 
 Last_modified=zuletzt_ge\u00E4ndert
 
-Latex_AUX_file=LaTeX_AUX_Datei
-
 LaTeX_AUX_file=LaTeX_AUX-Datei
 
 Left=Links
@@ -1097,8 +955,9 @@ Load_session=Sitzung_laden
 Loading_session...=Lade_Sitzung...
 
 Look_and_feel=Aussehen
+Looking_for_pdf...=Suche_nach_pdf...
 
-lower=klein
+Mac_file_dialog=Mac_Dateidialog
 
 Main_layout_file=Haupt-Layoutdatei
 
@@ -1108,8 +967,6 @@ Main_PS_directory=Standard-Ordner_f\u00fcr_PS-Dateien
 
 Manage=Verwalten
 
-Manage_content_selectors=Wortauswahl_verwalten
-
 Manage_custom_exports=Verwalte_externe_Exportfilter
 
 Manage_custom_imports=Verwalte_externe_Importfilter
@@ -1129,16 +986,10 @@ Marked_selected=Ausgew\u00E4hlte_markiert
 
 Medline_entries_fetched=Medline-Eintr\u00E4ge_abgerufen
 
-Medline_XML=Medline_XML
-
-Medline_XML_File=Medline_XML_Datei
-
 Menu_and_label_font_size=Schriftgr\u00F6\u00DFe_in_Men\u00FCs
 
 Merged_external_changes=Externe_\u00C4nderungen_eingef\u00FCgt
 
-messages=Meldungen
-
 Messages=Mitteilungen
 
 Messages_and_Hints=Hinweise_und_Warnungen
@@ -1151,8 +1002,6 @@ Modified_group_"%0".=Gruppe_"%0"_ge\u00E4ndert.
 
 Modified_groups=Ge\u00e4nderte_Gruppen
 
-Modified_groups_tree=Baum_mit__modifizierten_Gruppen
-
 Modified_string=Ver\u00E4nderter_String
 
 Modify=Bearbeiten
@@ -1169,19 +1018,16 @@ Move_entries_in_group_selection_to_the_top=Sortiere_Eintr\u00E4ge_der_Gruppenaus
 
 move_group=Gruppe_verschieben
 
-Move_matching_entries_to_the_top=Treffer_nach_oben_sortieren
-
 Move_string_down=String_nach_unten
 
 Move_string_up=String_nach_oben
 
 Move_up=Nach_oben
 
-Moved_Group=Gruppe_verschoben
-
 Moved_group_"%0".=Gruppe_"%0"_verschoben.
 
 Name=Name
+Name_formatter=Namens-Formatierer
 
 Natbib_style=Natbib-Stil
 
@@ -1191,52 +1037,25 @@ New=Neu
 
 new=neu
 
-New_article=Neuer_Eintrag_'article'
-
 New_BibTeX_database=Neue_BibTeX-Datei
 
 New_BibTeX_entry=Neuer_BibTeX-Eintrag
 
 New_BibTeX_subdatabase=Neue_BibTeX-Teildatei
 
-New_book=Neuer_Eintrag_'book'
-
 New_content=Neuer_Inhalt
 
-New_database=Neue_Datei
-
 New_database_created.=Neue_Datei_angelegt.
-
-New_entry=Neuer_Eintrag
-
-New_entry...=Neuer_Eintrag...
-
-New_entry_from_plain_text=Neuer_Eintrag_aus_Klartext
+New_field_value=Neuer_Feldwert
 
 New_file=Neue_Datei
 
 New_group=Neue_Gruppe
 
-New_inbook=Neuer_Eintrag_'inbook'
-
-New_mastersthesis=Neuer_Eintrag_'masterthesis'
-
-New_phdthesis=Neuer_Eintrag_'phdthesis'
-
-New_proceedings=Neuer_Eintrag_'proceedings'
-
 New_string=Neuer_String
 
-New_subdatabase=Neue_Teildatei
-
-New_subdatabase_based_on_AUX_file=Neue_Teildatei_aus_AUX-Datei
-
-New_unpublished=Neuer_Eintrag_'unpublished'
-
 Next_entry=N\u00E4chster_Eintrag
 
-Next_tab=N\u00E4chster_Tab
-
 No_%0_found=Kein_%0_gefunden
 
 No_actual_changes_found.=Keine_aktuellen_\u00c4nderungen_gefunden.
@@ -1256,14 +1075,14 @@ No_entries_imported.=Keine_Eintr\u00E4ge_importiert.
 No_entries_or_multiple_entries_selected.=Keine_oder_mehrere_Eintr\u00e4ge_ausgew\u00e4hlt.
 
 No_entries_selected=Keine_Eintr\u00E4ge_ausgew\u00E4hlt.
+No_entries_selected.=Keine_Eintr\u00e4ge_ausgew\u00e4hlt.
 
 No_exceptions_have_ocurred.=Es_sind_keine_Ausnahmen_aufgetreten.
-
-No_file_extension._Could_not_find_viewer_for_file.=Dateierweiterung_fehlt._Kein_Anzeigeprogramm_f\u00fcr_die_Datei_gefunden.
+No_file_associated=Keine_Datei_zugeordnet
 
 No_GUI._Only_process_command_line_options.=Kein_GUI._Nur_Kommandozeilenbefehle_ausf\u00FChren.
 
-No_journal_names_could_be_abbreviated.=Es_konnten_keine_Zeitschriftennamen_abgek\u00fcrzt_werden.
+No_journal_names_could_be_abbreviated.=Es_konnten_keine_Zeitschriftentitel_abgek\u00fcrzt_werden.
 
 No_journal_names_could_be_unabbreviated.=Das_Aufheben_der_Abk\u00fcrzung_konnte_bei_keiner_Zeitschrift_durchgef\u00fchrt_werden.
 
@@ -1277,10 +1096,6 @@ No_saved_session_found.=Keine_gespeicherte_Sitzung_gefunden.
 
 No_url_defined=Keine_URL_angegeben
 
-non-Mac_only=nicht_f\u00FCr_Mac
-
-Normal=Normal
-
 not=nicht
 
 not_found=davon_nicht_gefunden
@@ -1289,8 +1104,6 @@ Not_saved_(empty_session)=Nicht_gespeichert_(leere_Sitzung)
 
 Note_that_the_entry_causing_the_problem_has_been_selected.=Der_Eintrag,_der_das_Problem_verursacht,_wurde_ausgew\u00E4hlt.
 
-Note_that_the_new_definitions_will_not_be_compatible_with_previous_JabRef_versions.=Beachten_Sie,_da\u00DF_die_neuen_Definitionen_nicht_mit_fr\u00DCheren_Versionen_von_JabRef_kompatibel_sind.
-
 Note_that_you_must_specify_the_fully_qualified_class_name_for_the_look_and_feel,=Es_muss_der_volle_Klassenname_f\u00FCr_das_zu_verwendende_"look_and_feel"_angegeben_werden.
 
 Nothing_to_redo=Wiederholen_nicht_m\u00F6glich
@@ -1310,8 +1123,6 @@ One_or_more_keys_will_be_overwritten._Continue?=Einer_oder_mehrere_Keys_werden_\
 
 Open=\u00D6ffnen
 
-open=\u00F6ffnen
-
 Open_BibTeX_database=BibTeX-Datei_\u00f6ffnen
 
 Open_database=Datei_\u00F6ffnen
@@ -1327,6 +1138,7 @@ Open_PDF_or_PS=PDF_oder_PS_\u00F6ffnen
 Open_right-click_menu_with_Ctrl+left_button=Kontextmen\u00FC_mit_Strg_+_linker_Maustaste_\u00F6ffnen
 
 Open_URL_or_DOI=URL_oder_DOI_\u00F6ffnen
+OpenDocument_Spreadsheet=OpenDocument-Tabelle
 
 Opened_database=Datei_ge\u00F6ffnet
 
@@ -1334,6 +1146,9 @@ Opening=\u00D6ffne
 
 Opening_preferences...=\u00D6ffne_Voreinstellungen...
 
+OpenOffice_Calc=OpenOffice_Calc
+Operation_canceled.\n=Vorgang_abgebrochen.\n
+
 Optional_fields=Optionale_Felder
 
 Options=Optionen
@@ -1342,20 +1157,21 @@ or=oder
 
 out_of=von
 
-Output_or_export_file=Speichere_oder_exportiere_Datei
+Output=Ausgabe
 
-Overlapping_groups=Sich_\u00fcberschneidende_Gruppen
+Output_or_export_file=Speichere_oder_exportiere_Datei
 
 Override=\u00FCberschreiben
 
 Override_default_file_directories=Standard-Verzeichnisse_\u00fcberschreiben
 
+Override_default_font_settings=Standardschrifteinstellungen_\u00FCberschreiben
+
 override_the_bibtex_key_by_the_selected_text=BibTeX-Key_mit_ausgew\u00e4hltem_Text_\u00fcberschreiben
+Overwrite_existing_field_values=Bestehende_Feldwerte_\u00fcberschreiben
 
 Overwrite_keys=Keys_\u00FCberschreiben
 
-Ovid=Ovid
-
 pairs_processed=Paare_\u00FCberarbeitet
 
 Paste=Einf\u00FCgen
@@ -1364,8 +1180,6 @@ paste_entries=Eintr\u00E4ge_einf\u00FCgen
 
 paste_entry=Eintrag_einf\u00FCgen
 
-Paste_from_clipboard=Text_aus_Zwischenablage_einf\u00FCgen
-
 Pasted=Eingef\u00FCgt
 
 Path_to_HTML_viewer=Pfad_zum_HTML-Browser
@@ -1378,26 +1192,16 @@ Path_to_PS_viewer=Pfad_zum_PS-Anzeigeprogramm
 
 Path_to_WinEdt.exe=Pfad_zu_WinEdt
 
-Paths_to_external_programs=Pfad_zu_externen_Programmen
-
 PDF_directory=PDF-Verzeichnis
 
-PDF_links=PDF-Link
-
 Personal_journal_list=Pers\u00f6nliche_Zeitschriftenliste
 
 Pick_titles=Titel_w\u00e4hlen
 
-Plain_right_menu=Men\u00FC
-
-Plain_text=Einfacher_Text
-
 Plain_text_import=Klartext_importieren
 
 Please_check_your_network_connection_to_this_machine.=Bitte_\u00FCberpr\u00FCfen_Sie_die_Netzwerkverbindung_ihres_Computers.
 
-Please_define_BibTeX_key_first=Bitte_geben_Sie_zuerst_einen_BibTeX-Key_an
-
 Please_enter_a_name_for_the_group.=Bitte_geben_Sie_einen_Namen_f\u00FCr_die_Gruppe_ein.
 
 Please_enter_a_search_term._For_example,_to_search_all_fields_for_<b>Smith</b>,_enter%c<p><tt>smith</tt><p>To_search_the_field_<b>Author</b>_for_<b>Smith</b>_and_the_field_<b>Title</b>_for_<b>electrical</b>,_enter%c<p><tt>author%esmith_and_title%eelectrical</tt>=Bitte_geben_Sie_einen_Suchausdruck_ein._Um_zum_Beispiel_alle_Felder_nach_<b>Smith</b>_zu_durchsuchen,_geben_Sie_ein%c<p><tt>smith</tt><p>Um_das_Feld_<b>Author</b>_nach_<b>Smith</b>_und_das_Feld_<b>Title</b>_nach_<b>electrical</b> [...]
@@ -1424,54 +1228,37 @@ Possible_duplicate_of_existing_entry._Click_to_resolve.=M\u00f6glicherweise_dopp
 
 Preamble=Pr\u00E4ambel
 
-Preamble_editor,_store_changes=Pr\u00E4ambel-Editor,_\u00C4nderungen_\u00FCbernehmen
-
 Preferences=Einstellungen
 
-Preferences_recorded=Einstellungen_ge\u00E4ndert
-
 Preferences_recorded.=Einstellungen_gespeichert.
 
-Preserve_formatting_of_non-BibTeX_fields=Formatierung_von_nicht-BibTeX-Feldern_beibehalten
-
 Preview=Vorschau
 
 Previous_entry=Vorheriger_Eintrag
 
-Previous_tab=Vorheriger_Tab
-
 Primary_sort_criterion=Prim\u00e4res_Sortierkriterium
 
 Problem_with_parsing_entry=Problem_beim_Analysieren_des_Eintrags
 
-PS_directory=PS-Verzeichnis
+Program_output=Programmausgabe
 
-PS_links=PS_Links
+PS_directory=PS-Verzeichnis
+Push_entries_to_external_application_(%0)=Eintr\u00e4ge_in_externe_Anwendung_einf\u00fcgen_(%0)
 
 Push_selection_to_Emacs=Auswahl_in_Emacs_einf\u00fcgen
 
-push_selection_to_lyx=Ausgew\u00e4hlte_Eintr\u00e4ge_in_LyX_einf\u00fcgen
-
 Push_selection_to_LyX/Kile=Auswahl_in_LyX/Kile_einf\u00FCgen
 
 Push_selection_to_WinEdt=Auswahl_in_WinEdt_einf\u00FCgen
 
 Push_to_LatexEditor=In_LatexEditor_einf\u00fcgen
 
-Push_to_LyX=In_LyX_einf\u00FCgen
-
-Push_to_WinEdt=In_WinEdt_einf\u00FCgen
-
 Pushed_citations_to_Emacs=Literaturangaben_in_Emacs_eingef\u00fcgt
 
 Pushed_citations_to_WinEdt=Literaturangaben_in_WinEdt_eingef\u00fcgt
 
 Pushed_the_citations_for_the_following_rows_to=Literaturangaben_der_folgenden_Zeilen_eingef\u00FCgt_in
 
-Query_author(s)=Autor(en)_abfragen
-
-Quit=Beenden
-
 Quit_JabRef=JabRef_beenden
 
 Quit_synchronization=Synchronisation_beenden
@@ -1482,12 +1269,8 @@ Really_delete_the_selected=Wirklich_l\u00F6schen:
 
 Rearrange_tabs_alphabetically_by_title=Tabs_alphabetisch_nach_Titel_sortieren
 
-Recent_files=Zuletzt_ge\u00F6ffnete_Dateien
-
 Redo=Wiederholen
 
-Refer/Endnote=Refer/Endnote
-
 Reference_database=Referenz-Datenbank
 
 # The next two lines are used like in "References found: 1  Number of references to fetch?"
@@ -1497,8 +1280,6 @@ Refine_supergroup\:_When_selected,_view_entries_contained_in_both_this_group_and
 
 Refresh_view=Ansicht_aktualisieren
 
-Regexp=Regexp
-
 Regular_Expression=Regul\u00E4rer_Ausdruck
 
 Remember_these_entry_types?=Diese_Eintragstypen_behalten?
@@ -1547,14 +1328,10 @@ Remove_old_entry=Alten_Eintrag_entfernen
 
 Remove_selected_strings=Ausgew\u00E4hlte_Strings_entfernen
 
-remove_string=String_l\u00F6schen
-
 remove_string_=String_l\u00F6schen_
 
 Removed_entry_type.=Eintragstyp_gel\u00F6scht.
 
-Removed_group=Gruppe_gel\u00F6scht
-
 Removed_group_"%0".=Gruppe_"%0"_gel\u00F6scht.
 
 Removed_group_"%0"_and_its_subgroups.=Gruppe_"%0"_inklusive_Untergruppen_gel\u00F6scht.
@@ -1563,8 +1340,6 @@ Removed_string=String_gel\u00F6scht
 
 Renamed_string=String_umbenannt
 
-Repeat_incremental_search=Direkte_Suche_wiederholen
-
 Replace=Ersetzen
 
 Replace_(regular_expression)=Ersetzen_(regul\u00e4rer_Ausdruck)
@@ -1591,16 +1366,12 @@ Review_changes=\u00c4nderungen_\u00fcberpr\u00fcfen
 
 Right=Rechts
 
-RIS=RIS
-
 Save=Speichern
 
 Save_before_closing=Speichern_vor_dem_Beenden
 
 Save_database=Datei_speichern
 
-Save_database_as_...=Datei_speichern_unter_...
-
 Save_entries_in_their_original_order=Eintr\u00e4ge_in_urspr\u00fcnglicher_Reihenfolge_abspeichern
 
 Save_failed=Fehler_beim_Speichern
@@ -1613,10 +1384,6 @@ Save_in_default_table_sort_order=In_der_Reihenfolge_der_Tabellensortierung_speic
 
 Save_ordered_by_author/editor/year=Speichern_sortiert_nach_author/editor/year
 
-Save_selected_as_...=Auswahl_speichern_unter_...
-
-Save_session=Sitzung_speichern
-
 Saved_database=Datei_gespeichert
 
 Saved_selected_to=Auswahl_gespeichert_unter
@@ -1629,8 +1396,6 @@ Saving_database=Speichere_Datei
 
 Scan=\u00DCberpr\u00FCfen
 
-SciFinder=SciFinder
-
 Search=Suchen
 
 Search_All_Fields=Durchsuche_alle_Felder
@@ -1643,24 +1408,16 @@ Search_expression=Suchausdruck
 
 Search_for=Suchen_nach
 
-Search_General_Fields=Allgemeine_Felder_durchsuchen
-
 Search_general_fields=Allgemeine_Felder_durchsuchen
 
 Search_IEEEXplore=IEEEXplore_durchsuchen
 
-Search_Optional_Fields=Optionale_Felder_durchsuchen
-
 Search_optional_fields=Optionale_Felder_durchsuchen
 
-Search_Required_Fields=Ben\u00f6tigte_Felder_durchsuchen
-
 Search_required_fields=Ben\u00f6tigte_Felder_durchsuchen
 
 Search_Specified_Field(s)=Durchsuche_diese(s)_Feld(er)
 
-Search_term=Suchbegriff
-
 Searched_database._Global_number_of_hits=Datenbank_durchsucht._Anzahl_Treffer
 
 Searched_database._Number_of_hits=Datei_durchsucht._Anzahl_der_Treffer
@@ -1686,6 +1443,7 @@ Select_encoding=Kodierung_w\u00e4hlen
 Select_entries_in_group_selection=W\u00E4hle_Eintr\u00E4ge_in_Gruppenauswahl
 
 Select_entry_type=Eintragstyp_ausw\u00E4hlen
+Select_external_application=Externe_Anwendung_ausw\u00e4hlen
 
 Select_file_from_ZIP-archive=Eintrag_aus_der_ZIP-Archiv_ausw\u00E4hlen
 
@@ -1693,20 +1451,21 @@ Select_format=Format_w\u00E4hlen
 
 Select_matches=Treffer_ausw\u00E4hlen
 
-Select_matching_entries=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
+Selected_entries=Ausgew\u00e4hlte_Eintr\u00e4ge
 
 Selector_enabled_fields=Felder_mit_Wortliste
 
+Set/clear_fields=Felder_setzen/l\u00f6schen
+Set_field=Setze_Feld
+Set_fields=Felder_setzen
+
 Set_general_fields=Allgemeine_Felder_festlegen
 
 Set_table_font=Tabellenschriftart_ausw\u00E4hlen
 
-Set_up_general_fields=Allgemeine_Felder_festlegen
-
 Settings=Einstellungen
 
 Setup_selectors=Wortlisten_verwalten
@@ -1721,8 +1480,6 @@ Show_'Firstname_Lastname'='Vorname_Nachname'_anzeigen
 
 Show_'Lastname,_Firstname'='Nachname,_Vorname'_anzeigen
 
-Show_abstract=Zeige_abstract
-
 Show_BibTeX_source_by_default=Quelltextpanel_standardm\u00e4\u00dfig_anzeigen
 
 Show_BibTeX_source_panel=BibTeX-Quelltextpanel_anzeigen
@@ -1737,13 +1494,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_general_fields=Allgemeine_Felder_anzeigen
-
-Show_groups_matching_all=Gruppen_anzeigen,_die_alle_enthalten
-
-Show_groups_matching_any=Gruppen_anzeigen,_die_mindestens_einen_enthalten
-
 Show_icons_for_groups=Gruppen-Icon_anzeigen
+Show_last_names_only=Zeige_nur_Nachnamen
 
 Show_names_unchanged=Namen_unver\u00E4ndert_anzeigen
 
@@ -1753,8 +1505,6 @@ Show_one_more_row=Zeige_eine_Zeile_mehr
 
 Show_optional_fields=Optionale_Felder_anzeigen
 
-Show_overlapping_groups=Sich_\u00fcberschneidende_Gruppen_anzeigen
-
 Show_PDF/PS_column=PDF/PS-Spalte_anzeigen
 
 Show_required_fields=Ben\u00F6tigte_Felder_anzeigen
@@ -1767,40 +1517,35 @@ Show_warning_dialog_when_an_empty_BibTeX_key_is_entered=Warnmeldung_bei_leerem_B
 
 Simple_HTML=Einfaches_HTML
 
-Sixpack=Sixpack
-
 Size=Gr\u00F6\u00DFe
 
-Size_of_groups_interface_(rows)=Gr\u00F6\u00DFe_der_Gruppenansicht_(Reihen)
-
 Skip=\u00dcberspringen
+Skipped_-_No_PDF_linked=\u00dcbersprungen_-_Kein_PDF_verlinkt
+Skipped_-_PDF_does_not_exist=\u00dcbersprungen_-_PDF_exisitert_nicht
+
+Skipped_entry.=Eintrag_\u00fcbersprungen.
 
 Sort_alphabetically=Alphabetisch_sortieren
 
 Sort_Automatically=Automatisch_sortieren
 
-Sort_options=Sortieroptionen
-
 sort_subgroups=Untergruppen_sortieren
 
-Sorted_all_subgroups_recursively=Alle_Untergruppen_rekursiv_sortiert
-
 Sorted_all_subgroups_recursively.=Alle_Untergruppen_rekursiv_sortiert.
 
-Sorted_immediate_subgroups=Direkte_Untergruppen_sortiert
-
 Sorted_immediate_subgroups.=Alle_direkten_Untergruppen_sortiert.
 
 source_edit=Quelltextbearbeitung
+Special_Name_Formatters=Spezielle_Namens-Formatierer
 
 Special_table_columns=Spezielle_Spalten
 
-Start=Starten
-
 Start_incremental_search=Weitersuchen_(bei_direkter_Suche)
 
 Start_search=Suche_starten
 
+Starting_import=Starte_Import
+
 Statically_group_entries_by_manual_assignment=Statisches_Gruppieren_der_Eintr\u00E4ge_durch_manuelle_Zuweisung
 
 Status=Status
@@ -1809,8 +1554,6 @@ Stop=Stop
 
 Store=Speichern
 
-Store_fields_with_double_braces,_and_remove_extra_braces_when_loading.<BR>Double_braces_signal_that_BibTeX_should_preserve_character_case.=Felder_mit_geschweiften_Klammern_speichern_und_\u00fcberz\u00e4hlige_Klammern_beim_Laden_entfernen.<BR>Geschweifte_Klammern_zeigen_an,_dass_BibTeX_die_Gro\u00df-/Kleinschreibung_beibehalten_soll.
-
 Store_journal_abbreviations=Abk\u00fcrzungen_der_Zeitschriften_speichern
 
 Store_string=String_speichern
@@ -1821,29 +1564,21 @@ Stored_definition_for_type=Typ-Definition_gespeichert
 
 Stored_entry=Eintrag_gespeichert
 
-Stored_entry.=Eintrag_gespeichert.
-
 Strings=Ersetzen
 
 Strings_for_database=Strings_f\u00FCr_die_Datei
 
-subdatabase_from_aux=Datenbank_aus_LaTeX_aux
-
 Subdatabase_from_aux=Teildatenbank_aus_aux-Datei
 
 Suggest=Vorschlag
 
-Switch_preview_layout=Layout_der_Vorschau_wechseln
-
 #### These lines were changed:
-Switches_between_full_and_abbreviated_journal_name_if_the_journal_name_is_known.=Wechselt_zwischen_vollem_und_abgek\u00fcrztem_Zeitschriftennamen_falls_bekannt.
+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
 
 Synchronizing_%0_links...=Synchronisiere_%0-Links...
 
-Table=Tabelle
-
 Table_appearance=Erscheinungsbild_der_Tabelle
 
 Table_background_color=Hintergrundfarbe_der_Tabelle
@@ -1872,10 +1607,6 @@ The_file<BR>'%0'<BR>has_been_modified<BR>externally!=Die_Datei<BR>_'%0'_<BR>wurd
 
 The_group_"%0"_already_contains_the_selection.=Die_Gruppe_"%0"_enth\u00e4lt_bereits_diese_Auswahl.
 
-The_group_"%0"_does_not_support_the_adding_of_entries.=Die_Gruppe_"%0"_unterst\u00FCtzt_das_manuelle_Hinzuf\u00FCgen_von_Eintr\u00E4gen_nicht.
-
-The_group_"%0"_does_not_support_the_removal_of_entries.=Die_Gruppe_"%0"_unterst\u00FCtzt_das_manuelle_Entfernen_von_Eintr\u00E4gen_nicht.
-
 The_label_of_the_string_can_not_be_a_number.=Der_Name_des_Strings_darf_keine_Zahl_sein.
 
 The_label_of_the_string_can_not_contain_spaces.=Der_Name_des_Strings_darf_keine_Leerzeichen_enthalten.
@@ -1900,12 +1631,8 @@ There_are_possible_duplicates_(marked_with_a_'D'_icon)_that_haven't_been_resolve
 
 There_is_no_entry_type=Es_exisitiert_kein_Eintragstyp
 
-This_action_will_modify_the_"%0"_field_of_your_entries.nThis_could_cause_undesired_changes_to_your_entries,_so_itnis_recommended_that_you_change_the_field_in_your_groupndefinition_to_"keywords"_or_a_non-standard_name.nnDo_you_still_want_to_continue?=Dies_ver\u00E4ndert_das_Feld_"%0"_Ihrer_Eintr\u00E4ge.nDas_k\u00F6nnte_zu_ungewollten_\u00C4nderungen_Ihrer_Eintr\u00E4ge_f\u00FChren.nDeshalb_ist_es_erforderlich,_dass_Sie_in_Ihrer_Gruppendefinition_das_Feld_"keywords"nangeben_oder_einen_Nam [...]
-
 this_button_will_update=Dieser_Button_\u00E4ndert_die_verwendete<BR>Spaltenbreite_in_der_Tabelle_der_Eintr\u00E4ge
 
-this_button_will_update_the_column_width_settings<BR>to_match_the_current_widths_in_your_table=diese_Schaltfl\u00E4che_setzt_die_Einstellungen_der_Spaltenbreite<BR>auf_die_aktuellen_Spaltenbreiten_Ihrer_Tabelle
-
 This_entry_is_incomplete=Dieser_Eintrag_ist_unvollst\u00E4ndig
 
 This_entry_type_cannot_be_removed.=Dieser_Eintragstyp_kann_nicht_entfernt_werden.
@@ -1922,14 +1649,10 @@ 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._First_load_or_paste_some_text_into_the_text_input_area._After_that,_you_can_mark_text_and_assign_it_to_a_bibtex_field.=Dies_ist_ein_einfacher_Copy_&_Paste-Dialog._F\u00FCgen_sie_zun\u00E4chst_Text_in_das_Eingabefeld_ein._Anschlie\u00DFend_k\u00F6nen_Sie_Textstellen_markieren_und_einem_BibTeX-Feld_zuordnen.
-
 This_is_a_simple_copy_and_paste_dialog_for_import_some_fields_from_normal_text.=Dies_ist_ein_einfacher_Copy_&_Paste_Dialog_zum_Einf\u00fcgen_von_Feldern_aus_normalem_Text.
 
 This_makes_JabRef_look_up_each_%0_link_and_check_if_the_file_exists._If_not,_you_will_be_given_options<BR>to_resolve_the_problem.=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_cannot_work_on_multiple_rows.=Diese_Aktion_kann_nicht_mit_mehreren_Zeilen_durchgef\u00FChrt_werden.
-
 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_one_or_more_entries_to_be_selected.=F\u00fcr_diesen_Vorgang_muss_mindestens_ein_Eintrag_ausgew\u00e4hlt_sein.
@@ -1938,22 +1661,12 @@ To_set_up,_go_to_<B>Tools_->_Manage_journal_abbreviations</B>=Einstellungen_unte
 
 Toggle_abbreviation=Abk\u00fcrzung_an-/abschalten
 
-Toggle_entry_preview=Eintragsvorschau_ein-/ausblenden
-
-Toggle_groups_interface=Gruppenansicht_ein-/ausblenden
-
-Toggle_search_panel=Suchdialog_ein-/ausblenden
-
-Tools=Extras
-
 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_Zeitschriftennamen_der_ausgew\u00e4hlten_Eintr\u00e4ge_aufheben
-
 unable_to_access_LyX-pipe=LyX-pipe_nicht_gefunden
 
 Unable_to_create_graphical_interface=Grafische_Benutzeroberfl\u00E4che_konnte_nicht_erzeugt_werden
@@ -1961,6 +1674,8 @@ Unable_to_create_graphical_interface=Grafische_Benutzeroberfl\u00E4che_konnte_ni
 Unable_to_parse_clipboard_text_as_Bibtex_entries.=Der_Text_der_Zwischenablage_konnte_nicht_als_BibTeX-Format_analysiert_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
 
@@ -1968,8 +1683,6 @@ Undo=R\u00FCckg\u00E4ngig
 
 Union=Vereinigung
 
-unknown_bibtex_entries=unbekannte_BibTeX-Eintr\u00E4ge
-
 Unknown_bibtex_entries=Unbekannte_BibTeX_Eintr\u00e4ge
 
 unknown_edit=unbekannter_Bearbeitungsschritt
@@ -1988,8 +1701,6 @@ Unmarked_selected=Markierung_f\u00fcr_ausgew\u00e4hlte_Eintr\u00e4ge_aufgehoben
 
 Unpack_EndNote_filter_set=Entpacke_EndNote_Filter-Set
 
-Unpacked_file=Entpackte_Datei
-
 Unpacked_file.=Datei_entpackt.
 
 Unsupported_version_of_class_%0:_%1=Nicht_unterst\u00FCtzte_Version_der_Klasse_%0:_%1
@@ -2004,26 +1715,20 @@ Updated_group_selection=Gruppenauswahl_aktualisiert
 
 Updating_entries...=Eintr\u00E4ge_werden_aktualisiert...
 
-UPPER=GROSS
-
-Upper_Each_First=Jeden_Ersten_Gro\u00DF
-
-Upper_first=Ersten_gro\u00DF
-
 usage=Benutzung
 
 Use_antialiasing_font=Antialias-Schrift_benutzen
-
-Use_antialiasing_font_in_table=Gegl\u00E4ttete_Schriftart_verwenden_(in_der_Tabelle)
+Use_custom_icon_theme=Angepasstes_Icon-Theme_verwenden
 
 Use_inspection_window_also_when_a_single_entry_is_imported.=Kontrollfenster_benutzen,_auch_wenn_nur_ein_Eintrag_importiert_wird
 
+Use_native_file_dialog=Plattformabh\u00E4ngigen_Dateidialog_verwenden
+
 Use_other_look_and_feel=anderes_"look_and_feel"_benutzen
+Use_Regular_Expression_Search=Suche_mit_regul\u00e4rem_Ausdruck_benutzen
 
 Use_regular_expressions=Regul\u00E4re_Ausdr\u00FCcke_benutzen
 
-Use_the_following_delimiter=Benutzen_Sie_das_folgende_Trennzeichen
-
 Use_the_following_delimiter_character(s)=Folgende(s)_Trennzeichen_benutzen
 
 Uses_default_application=Benutze_Standardprogramm
@@ -2036,8 +1741,6 @@ verify_that_LyX_is_running_and_that_the_lyxpipe_is_valid=\u00FCberpr\u00FCfen_Si
 
 View=Ansicht
 
-Visible_fields=Angezeigte_Felder
-
 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
@@ -2052,14 +1755,25 @@ 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:
+When_adding/removing_keywords,_separate_them_by=Trennzeichen_zwischen_Stichw\u00f6rtern_im_Gruppierungs-Feld
 
 with=mit
 
 Word=Wort
+Write_BibtexEntry_as_XMP-metadata_to_PDF.=BibTeX-Eintrag_als_XMP-Metadaten_ins_PDF_schreiben.
+Write_XMP=XMP_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...
 
 Wrong_file_format=Falsches_Dateiformat
 
+XMP-annotated_PDF=PDF_mit_XMP-Anmerkungen
+XMP_Export_Privacy_Settings=Sicherheitseinstellungen_f\u00fcr_den_XMP-Export
+
+XMP_metadata=XMP-Metadaten
+
 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_cleared_this_field._Original_value=Sie_haben_dieses_Feld_gel\u00F6scht._Urspr\u00FCnglicher_Wert
@@ -2070,119 +1784,164 @@ You_must_enter_an_integer_value_in_the_text_field_for=Sie_m\u00fcssen_eine_Ganzz
 
 You_must_fill_in_a_name_for_the_entry_type.=Sie_m\u00FCssen_einen_Namen_f\u00FCr_den_Eintragstyp_eingeben.
 
-You_must_provide_a_name,_a_search_string_and_a_field_name_for_this_group.=Sie_m\u00FCssen_einen_Namen,_einen_Suchbegriff_und_einen_Feldnamen_f\u00FCr_die_Gruppe_angeben.
-
 You_must_restart_JabRef_for_the_new_key_bindings_to_work_properly.=Sie_m\u00FCssen_JabRef_neu_starten,_damit_die_Tastenk\u00FCrzel_funktionieren.
 
-You_must_select_a_row_to_perform_this_operation.=Sie_m\u00FCssen_eine_Zeile_ausw\u00E4hlen,_um_diese_Aktion_durchf\u00FChren_zu_k\u00F6nnen.
-
 You_must_select_at_least_one_row_to_perform_this_operation.=Sie_m\u00FCssen_mindestens_eine_Zeile_ausw\u00E4hlen,_um_diesen_Vorgang_durchzuf\u00FChren.
 
 You_must_set_both_BibTeX_key_and_%0_directory=Sie_m\u00FCssen_sowohl_den_BibTeX-Key_als_auch_den_%0-Ordner_angeben
 
-You_must_set_both_bibtex_key_and_PDF_directory=Sie_m\u00fcssen_sowohl_den_BibTeX-Key,_als_auch_das_PDF-Verzeichnis_angeben
-
 Your_new_key_bindings_have_been_stored.=Ihre_neuen_Tastenk\u00FCrzel_wurden_gespeichert.
 
-Float_marked_entries=Markierte_Eintr\u00E4ge_zuoberst_anzeigen
-
-Starting_import=Starte_Import
-
-Output=Ausgabe
-
-Exceptions=Ausnahmen
-
-Program_output=Programmausgabe
-
-grouping_may_not_work_for_this_entry=Dieser_Eintrag_unterst\u00FCtzt_m\u00F6glicherweise_keine_Gruppierung
-
-crossreferenced_entries_included=Inklusive_querverwiesenen_Eintr\u00E4gen
-
-Display_version=Version_anzeigen
-
-Override_default_font_settings=Standardschrifteinstellungen_\u00FCberschreiben
-
-Mac_file_dialog=Mac_Dateidialog
-
-Use_native_file_dialog=Plattformabh\u00E4ngigen_Dateidialog_verwenden
-
-XMP-annotated_PDF=PDF_mit_XMP-Anmerkungen
-PDF_and_PS_links=PDF_und_PS-Links
-Use_Regular_Expression_Search=Suche_mit_regul\u00e4rem_Ausdruck_benutzen
-Help_on_Regular_Expression_Search=Hilfe_zur_Suche_mit_regul\u00e4rem_Ausdruck
-writeXMP=XMP_schreiben
-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.
-Select_external_application=Externe_Anwendung_ausw\u00e4hlen
-Show_last_names_only=Zeige_nur_Nachnamen
-Help_on_Preview_Settings=Hilfe_zu_den_Einstellungen_der_Vorschau
-Writing_XMP_metadata...=XMP-Metadaten_werden_geschrieben...
-Writing_XMP_metadata_for_selected_entries...=XMP-Metadaten_f\u00fcr_ausgew\u00e4hlte_Eintr\u00e4ge_werden_geschrieben...
-Skipped_-_No_PDF_linked=\u00dcbersprungen_-_Kein_PDF_verlinkt
-Finished_writing_XMP_for_%0_file_(%1_skipped,_%2_errors).=Schreiben_der_XMP-Metadaten_f\u00fcr_Datei_%0_beendet_(%1_\u00fcbersprungen,_%2_Fehler).
-Grouping_may_not_work_for_this_entry.=Gruppierung_f\u00fcr_diesen_Eintrag_evtl._nicht_m\u00f6glich.
-Write_BibtexEntry_as_XMP-metadata_to_PDF.=BibTeX-Eintrag_als_XMP-Metadaten_ins_PDF_schreiben.
-write_XMP=schreibe_XMP
-New_field_value=Neuer_Feldwert
-Overwrite_existing_field_values=Bestehende_Feldwerte_\u00fcberschreiben
-Include_entries=Eintr\u00e4ge_einschlie\u00dfen
-Selected_entries=Ausgew\u00e4hlte_Eintr\u00e4ge
-
-Fetch_CiteSeer_by_ID=CiteSeer_mittels_ID_abrufen
-Push_entries_to_external_application_(%0)=Eintr\u00e4ge_in_externe_Anwendung_einf\u00fcgen_(%0)
-Write_XMP=XMP_schreiben
-
-Writing_XMP=Schreibe_XMP
-
-HTML_table=HTML-Tabelle
-
-Set/clear_fields=Felder_setzen/l\u00f6schen
-
-Clear_fields=Felder_l\u00f6schen
-Set_fields=Felder_setzen
-
-HTML_table_(with_Abstract_&_BibTeX)=HTML-Tabelle_(mit_Abstract_&_BibTeX)
-
-OpenOffice_Calc=OpenOffice_Calc
-OpenDocument_Spreadsheet=OpenDocument-Tabelle
-
-Skipped_entry.=Eintrag_\u00fcbersprungen.
-Error_occured_when_parsing_entry=Fehler_beim_Analysieren_des_Eintrags
-Operation_canceled.\n=Vorgang_abgebrochen.\n
-Error_while_writing=Fehler_beim_Schreiben
-Skipped_-_PDF_does_not_exist=\u00dcbersprungen_-_PDF_exisitert_nicht
-Use_custom_icon_theme=Angepasstes_Icon-Theme_verwenden
-Custom_icon_theme=Pers\u00f6nliches_Icon-Theme
-Custom_icon_theme_file=Datei_des_pers\u00f6nlichen_Icon-Themes
-Unable_to_read_icon_theme_file=Datei_des_pers\u00f6nlichen_Icon-Themes_nicht_lesbar
-Unable_to_read_default_icon_theme.=Datei_des_Standard-Icon-Themes_nicht_lesbar.
-Could_not_find_image_file=Bilddatei_nicht_gefunden.
-Set_field=Setze_Feld
-No_entries_selected.=Keine_Eintr\u00e4ge_ausgew\u00e4hlt.
-Link_from_new_entries.=Link_von_neuen_Eintr\u00e4gen.
-Link_from_new_entry=Link_von_neuem_Eintrag.
-Link_from_entries.=Link_von_Eintr\u00e4gen.
-Link_from_entry=Link_von_Eintrag.
-exists.Overwrite?=ist_vorhanden._\u00dcberschreiben?
-File_exists=Datei_ist_vorhanden
-No_file_associated=Keine_Datei_zugeordnet
-Exported_%0_entries_to_file=%0_Eintr\u00e4ge_wurden_exportiert_in_die_Datei
-Formatter_Name=Name_des_Formatierers
-Format_String=Formatier-Ausdruck
-Help_on_Name_Formatting=Hilfe_zum_Namens-Formatierer
-Special_Name_Formatters=Spezielle_Namens-Formatierer
-Name_formatter=Namens-Formatierer
-Deselect_all_duplicates=Auswahl_der_Duplikate_aufheben
-Error_exporting_to_clipboard=Fehler_beim_Exportieren_in_die_Zwischenablage
-
-
-Generate_keys_for_imported_entries=Keys_f\u00fcr_importierte_Eintr\u00e4ge_generieren
-Fetch_ArXiv.org=ArXiv.org_abrufen
-Looking_for_pdf...=Suche_nach_pdf...
-Correct_the_entry,_and_reopen_editor_to_display/edit_source.=Korrigiere_den_Eintrag_und_\u00f6ffne_den_Eintragseditor_um_den_BibTeX-Quelltext_zu_zeigen/bearbeiten
-
-Field_to_filter=Feld_f\u00fcr_Filter
-XMP_Export_Privacy_Settings=Sicherheits-Einstellungen_f\u00fcr_den_XMP-Export
-
+Save_all_open_databases=Alle_ge\u00f6ffneten_Dateien_speichern
+
+
+Include=Einbeziehen
+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_'Datei'_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
+%0_directory_is_not_set_or_does_not_exist!=%0-Verzeichnis_ist_nicht_angegeben_oder_existiert_nicht!
+%0_directory_is_'%1':=%0-Verzeichnis_ist_'%1':
+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_while_writing_XMP_%0=Fehler_beim_Schreiben_von_XMP_%0
+Error_writing_XMP_to_'%0'...=Fehler_beim_Schreiben_von_XMP_in_'%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
+Invalid_URL:_=Ung\u00fcltige_URL:_
+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_
+Drog_PDF=
+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.
 
-XMP_metadata=XMP-Metadaten
+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.
+Copy_files_to_%0.=Kopiere_Dateien_nach_%0.
+Move_files_to_%0.=Verschiebe_Dateien_nach_%0.
+Leave_file_in_its_current_directory.=Datei_im_aktuellen_Verzeichnis_lassen.
+Copy_file_to_%0.=Kopiere_Datei_nach_%0.
+Move_file_to_%0.=Verschiebe_Datei_nach_%0.
+Extension=Erweiterung
+Application=Anwendung
+Icon=Icon
+Path_to_%0_not_defined=Pfad_zu_%0_nicht_definiert
+
+Error:_=Fehler:_
+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=Zeige_Datei-Spalte
+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
+Cannot_rename_for_several_entries.=Mehrere_Eintr\u00e4ge_k\u00f6nnen_nicht_umbenannt_werden.
+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=Hauptverzeichnis_f\u00fcr_%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=Hauptverzeichnis_f\u00fcr_externe_Dateien_setzen
+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
diff --git a/src/resource/JabRef_du.properties b/src/resource/JabRef_du.properties
index cba32d2..2307808 100644
--- a/src/resource/JabRef_du.properties
+++ b/src/resource/JabRef_du.properties
@@ -1,9 +1,7 @@
 #!
-#! created/edited by Gert Renckens, Dutch translation v0.12, last update: 20061102 (e-mail: gert (dot) renckens (at) student (dot) uhasselt (dot) be)
+#! created/edited by Popeye version 0.54 (popeye.sourceforge.net)
 #! encoding:ISO-8859-1
 
-!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.=Dit_is_een_eenvoudige_kopieer_en_plak_dialoog._Laad_of_plak_eerst_wat_tekst_in_het_invoerveld._Hierna,_kan_u_tekst_markeren_en_deze_toekennen_aan_een_bibtex_veld.
-
 %0_contains_the_Regular_Expression_<b>%1</b>=%0_bevat_de_regular_expression_<b>%1</b>
 
 %0_contains_the_term_<b>%1</b>=%0_bevat_de_term_<b>%1</b>
@@ -40,12 +38,6 @@ A_CiteSeer_fetch_operation_is_currently_in_progress.=Een_CiteSeer_ophaal-operati
 
 A_CiteSeer_import_operation_is_currently_in_progress.=Een_CiteSeer_importeer-operatie_is_momenteel_in_werking.
 
-A_string_with_that_label_already_exists=Een_constante_met_dat_label_bestaat_al
-
-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
 
 Abbreviation=Afkorting
@@ -84,36 +76,26 @@ Add_Subgroup=Voeg_subgroep_toe
 
 Add_to_group=Voeg_toe_aan_groep
 
-Added_entry=Toegevoegde_entry
-
-Added_group=Toegevoegde_groep
-
 Added_group_"%0".=Toegevoegde_groep_"%0".
 
 Added_new=Nieuwe_toegevoegd
 
 Added_string=Toegevoegde_constante
 
-Additionally,_entries_whose_<b>%0</b>_field_does_not_contain_<b>%1</b>_can_be_assigned_manually_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._This_process_adds_the_term_<b>%1</b>_to_each_entry's_<b>%0</b>_field._Entries_can_be_removed_manually_from_this_group_by_selecting_them_then_using_the_context_menu._This_process_removes_the_term_<b>%1</b>_from_each_entry's_<b>%0</b>_field.=Bijkomstig, entries_waarvan_het_<b>%0</b>_veld_niet_<b>%1</b>_bevatten_ [...]
+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
 
-Advanced_options_for_setting...=Geavanceerde_opties_om_in_te_stellen...
-
 All_Entries=Alle_Entries
 
 All_entries=Alle_entries
 
-All_entries_of_this_type_will_be_declared_typeless._Continue?=Alle_entries_van_dit_type_zullen_zonder_type_gedeclareerd_worden._Verder_gaan?
-
 All_fields=Alle_velden
 
 All_subgroups_(recursively)=Alle_subgroepen_(recursief)
 
 Allow_editing_in_table_cells=Sta_aanpassingen_in_tabel_cellen_toe
 
-Always_save_database_ordered_by_author_name=Sla_database_altijd_op_geordend_op_auteursnaam
-
 and=en
 
 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
@@ -124,8 +106,6 @@ 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
@@ -134,8 +114,6 @@ Apply=Toepassen
 
 Arguments_passed_on_to_running_JabRef_instance._Shutting_down.=Argumenten_doorgegeven_aan_de_draaiende_JabRef_instantie._Wordt_nu_afgesloten.
 
-Assign_entries_based_on:=Entries_toekennen_gebaseerd_op:
-
 Assign_entry_selection_exclusively_to_this_group=Ken_entry_selectie_exclusief_aan_deze_groep_toe
 
 Assign_new_file=Ken_nieuw_bestand_toe
@@ -158,8 +136,6 @@ 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
@@ -182,10 +158,6 @@ Autoset_%0_links._Allow_overwriting_existing_links.=Automatisch_%0_snelkoppeling
 
 Autoset_%0_links._Do_not_overwrite_existing_links.=Automatisch_%0_snelkoppelingen_instellen._Overschrijven_van_bestaande_snelkoppelingen_niet_toestaan.
 
-Autosetting_%0_field...=%0_veld_automatisch_aan_het_instellen...
-
-AUX_File_import=AUX_Bestand_importeren
-
 AUX_file_import=AUX_bestand_importeren
 
 Available_export_formats=Beschikbare_exporteer_formaten
@@ -204,10 +176,6 @@ Backup_old_file_when_saving=Maak_reservekopie_van_oud_bestand_bij_het_opslaan
 
 Bibkey_to_filename_conversion=BibTeX-sleutel_naar_bestandsnaam_conversie
 
-Biblioscape_Tag_file=Biblioscape_Tag_bestand
-
-BibTeX=BibTeX
-
 BibTeX_key=BibTeX-sleutel
 
 BibTeX_key_is_unique.=BibTeX-sleutel_is_uniek
@@ -218,12 +186,8 @@ BibTeX_source=BibTeX-broncode
 
 BibTeXML=BibTeXML
 
-BibTeXML_File=BibTeXML_Bestand
-
 Binding=Binding
 
-Broken_link=Foutieve_snelkoppeling
-
 Browse=Bladeren
 
 by=door
@@ -236,8 +200,6 @@ Cannot_add_entries_to_group_without_generating_keys._Generate_keys_now?=Kan_entr
 
 Cannot_merge_this_change=Kan_deze_verandering_niet_samenvoegen
 
-Cannot_move_group=Kan_groep_niet_verplaatsen
-
 Cannot_move_group_"%0"_down.=Kan_groep_"%0"_niet_naar_beneden_verplaatsen
 
 Cannot_move_group_"%0"_left.=Kan_groep_"%0"_niet_naar_links_verplaatsen
@@ -292,8 +254,6 @@ 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.
 
-Citation_import_from_CiteSeer_failed.=Citaat_van_CiteSeer_importeren_is_mislukt.
-
 Cite_command_(for_Emacs/WinEdt)=Cite-commando_(voor_Emacs/WinEdt)
 
 CiteSeer_Error=CiteSeer_Foutmelding
@@ -308,8 +268,6 @@ CiteSeer_Import_Fields=CiteSeer_Importeer_Velden
 
 CiteSeer_Transfer=CiteSeer_Overdracht
 
-CiteSeer_Warning=CiteSeer_Waarschuwing
-
 Class_name=Klassenaam
 
 Clear=Wissen
@@ -318,27 +276,14 @@ clear_all_groups=Wis_alle_groepen
 
 Clear_field=Wis_velden
 
-Clear_highlight=Wis_selectie
-
-Clear_highlighted=Wis_geselecteerde
-
-Clear_highlighted_groups=Wis_geselecteerde_groepen
-
-Clear_inputarea=Wis_invoergebied
+Clear_fields=Velden_wissen
 
-Clear_search=Wis_zoek
+Clear_highlight=Wis_selectie
 
 Close=Sluiten
 
-Close_database=Sluit_database
-
 Close_dialog=Sluit_dialoog
 
-# The following lines correspond to names of key bindings:
-Close_entry_editor=Sluit_entry_editor
-
-Close_preamble_editor=Sluit_inleiding_editor
-
 Close_the_current_database=Sluit_de_huidige_database
 
 Close_the_help_window=Sluit_het_help_venster
@@ -359,8 +304,6 @@ Command_line_id=Commandoregel_id
 
 Complete_record=Vervolledig_record
 
-Completed_citation_import_from_CiteSeer.=Citaten_importeer-actie_van_CiteSeer_voltooid.
-
 Completed_Import_Fields_from_CiteSeer.=Velden_importeer-actie_van_CiteSeer_voltooid.
 
 Completed_import_from_CiteSeer.=Importeer-actie_van_CiteSeer_voltooid.
@@ -379,12 +322,8 @@ Copied_keys=Gekopieerde_BibTeX-sleutels
 
 Copy=Kopi\u00ebren
 
-Copy_\cite{BibTeX_key}=Kopieer_\cite{BibTeX-sleutel}
-
 Copy_BibTeX_key=Kopieer_BibTeX-sleutel
 
-Copy_to_clipboard=Kopieer_naar_klembord
-
 Could_not_call_executable=Kon_executable_niet_oproepen
 
 Could_not_connect_to_a_running_gnuserv_process._Make_sure_that_Emacs_or_XEmacs_is_running,<BR>and_that_the_server_has_been_started_(by_running_the_command_'gnuserv-start').=Kon_geen_verbinding_maken_met_een_draaiend_gnuserv_proces._Zorg_ervoor_dat_Emacs_of_XEmacs_draait,<BR>en_dat_de_server_gestart_is_(door_het_commando_'gnuserv-start'_te_draaien).
@@ -401,6 +340,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_image_file=Kan_fotobestand_niet_vinden
 
 Could_not_find_layout_file=Kon_layout_bestand_niet_vinden
 
@@ -428,13 +368,9 @@ Couldn't_parse_the_'citeseerurl'_field_of_the_following_entries=Kon_het_'citesee
 
 Create_group=Groep_aanmaken
 
-Created_group=Groep_aangemaakt
-
-Created_group_"%0".=Groep_"%0"_aangemaakte.
-
 Created_groups.=Groepen_aangemaakt.
 
-Curly_braces_{_and_}_must_be_balanced.=Gekrulde_haakjes_{_and_}_moeten_uitgebalanceerd_zijn.
+crossreferenced_entries_included=inclusief_kruisgerefereerde_entries
 
 Current_content=Huidige_inhoud
 
@@ -443,8 +379,8 @@ Current_value=Huidige_waarde
 Custom_entry_types=Externe_entry_types
 
 Custom_entry_types_found_in_file=Externe_entry_types_gevonden_in_bestand
-
-Custom_export=Externe_exportfilter
+Custom_icon_theme=Extern_icoonthema
+Custom_icon_theme_file=Extern_icoonthema_bestaan
 
 Custom_importers=Externe_importfilter
 
@@ -476,8 +412,6 @@ Default_grouping_field=Standaard_groeperingsveld
 
 Default_look_and_feel=Standaard_"look_and_feel"
 
-Default_owner=Standaard_eigenaar
-
 Default_pattern=Standaard_patroon
 
 Default_sort_criteria=Standaard_sorteercriteria
@@ -506,8 +440,6 @@ Delete_strings=Verwijder_constanten
 
 Deleted=Verwijderd
 
-Deleted_entry=Verwijderde_entry
-
 Delimit_fields_with_semicolon,_ex.=Scheid_velden_met_puntkomma,_bv.
 
 Descending=Afdalend
@@ -515,6 +447,7 @@ Descending=Afdalend
 Description=Beschrijving
 
 Deselect_all=Alle_selecties_ongedaan_maken
+Deselect_all_duplicates=
 
 Details=Details
 
@@ -534,6 +467,8 @@ Display_imported_entries_in_an_inspection_window_before_they_are_added.=Toon_ge\
 
 Display_only_entries_belonging_to_all_selected_groups.=Toon_alleen_entries_die_tot_alle_geselecteerde_groepen_behoren.
 
+Display_version=Display_versie
+
 Displaying_no_groups=Geen_groepen_tonend
 
 Do_not_abbreviate_names=Namen_niet_afkorten
@@ -562,18 +497,10 @@ Download_file=Download_bestand
 
 Downloading...=Downloading...
 
-Due_to_the_duplicate_BibTeX_key,_the_groups_assignment(s)_for_this_entryncannot_be_restored_correctly_when_reopening_this_database._It_is_recommendednthat_you_have_JabRef_generate_a_unique_key_now_to_prevent_this_problem.=Omwille_van_een_dubbele_BibTex-sleutel,_kan_de_groepen_toekenning(en)_for_deze_entry_niet_hersteld_worden_bij_het_opnieuw_openen_van_deze_database._Het_is_aangeraden_JabRef_nu_een_unieke_sleutel_te_laten_genereren_om_dit_probleem_te_voorkomen.
-
-dummy=dummy
-
-Duplicate_BibTeX_key=Dubbele_BibTeX-sleutel
-
 duplicate_BibTeX_key=dubbele_BibTeX-sleutel
 
 Duplicate_BibTeX_key.=Dubbele_BibTeX-sleutel.
 
-duplicate_BibTeX_key.=dubbele_BibTeX-sleutel.
-
 Duplicate_BibTeX_key._Grouping_may_not_work_for_this_entry.=Dubbele_BibTeX-sleutel._Groepering_kan_misschien_niet_werken_voor_deze_entry.
 
 Duplicate_Key_Warning=Waarschuwing:_dubbele_BibTeX-sleutel
@@ -600,24 +527,18 @@ Edit=Bewerken
 
 Edit_custom_export=Externe_exportfilter_bewerken
 
-Edit_entry=Entry_bewerken
-
 Edit_group=Groep_bewerken
 
 Edit_journal=Tijdschrift_bewerken
 
 Edit_preamble=Inleiding_bewerken
 
-Edit_strings=Constanten_bewerken
-
 empty_BibTeX_key=lege_BibTeX-sleutel
 
 Empty_BibTeX_key.=Lege_BibTeX-sleutel.
 
 Empty_BibTeX_key._Grouping_may_not_work_for_this_entry.=Lege_BibTeX-sleutel._Groepering_kan_misschien_niet_werken_voor_deze_entry.
 
-Empty_database=Lege_database
-
 empty_database=lege_database
 
 Enable_source_editing=Broncode_aanpassing_mogelijk_maken
@@ -642,23 +563,10 @@ entry=entry
 
 Entry_editor=Entry_editor
 
-# The following lines correspond to names of key bindings:
-Entry_editor,_next_entry=Entry_editor,_volgende_entry
-
-Entry_editor,_next_panel=Entry_editor,_volgend_paneel
-
-Entry_editor,_previous_entry=Entry_editor,_vorige_entry
-
-Entry_editor,_previous_panel=Entry_editor,_vorige_paneel
-
-Entry_editor,_store_field=Entry_editor,_veld_opslaan
-
 Entry_in_current_database=Entry_in_huidige_database
 
 Entry_in_import=Entry_in_importering
 
-Entry_is_incomplete=Entry_is_onvolledig
-
 Entry_preview=Entry_voorbeeld
 
 Entry_table=Entry_tabel
@@ -671,33 +579,29 @@ Entry_type_names_are_not_allowed_to_contain_white_space_or_the_following_charact
 
 Entry_types=Entrytypes
 
-EOF_in_mid-string=EOF_in_mid-string
-
 Error=Foutmelding
+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_line=Fout_in_regel
-
-Error_messages=Foutmeldingen
+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_writing=Foutmelding_bij_het_schrijven
 
-Existing_file=Bestaande_bestand
+Exceptions=Uitzonderingen
 
-exists._Overwrite?=bestaat_reeds._Overschrijven?
+Existing_file=Bestaande_bestand
 
 exists._Overwrite_file?=bestaat_reeds._Bestand_overschrijven?
+exists.Overwrite?=bestaat._Overschrijven?
 
 Exit=Afsluiten
 
 Expand_subtree=Subboom_uitklappen
 
-Explicit=Expliciet
-
 Export=Exporteren
 
 Export_entry_types=Entry_types_exporteren
@@ -710,12 +614,8 @@ Export_preferences_to_file=Instellingen_exporteren_naar_bestand
 
 Export_properties=Eigenschappen_exporteren
 
-Export_selected_to_clipboard=Exporteer_geselecteerde_naar_klembord
-
 Export_to_clipboard=Exporteer_naar_klembord
 
-Exported_database_to_file=Exporteer_database_naar_bestand
-
 Exporting=Exporteren...
 
 External_changes=Externe_wijzigingen
@@ -732,17 +632,11 @@ Fetch=Ophalen
 
 Fetch_Articles_Citing_your_Database=Haal_Artikels_Geciteerd_in_de_Database_op
 
-Fetch_Citations_from_CiteSeer=Haal_Citaten_van_CiteSeer_op
-
-Fetch_citations_from_CiteSeer=Haal_citaten_van_CiteSeer_op
-
 Fetch_CiteSeer=Ophalen_van_CiteSeer
 
-Fetch_Medline=Ophalen_van_Medline
-
-fetch_Medline=ophalen_van_Medline
+Fetch_CiteSeer_by_ID=Ophalen_van_CiteSeer_op_ID
 
-Fetch_Medline_by_author=Ophalen_van_Medline_op_auteur
+Fetch_Medline=Ophalen_van_Medline
 
 Fetch_Medline_by_ID=Ophalen_van_Medline_op_ID
 
@@ -752,8 +646,6 @@ Fetching_Citations=Citaten_aan_het_Ophalen
 
 Fetching_Identifiers=Identificatienummers_aan_het_Ophalen
 
-Fetching_Medline...=Aan_het_Ophalen_van_Medline...
-
 Fetching_Medline_by_ID...=Aan_het_Ophalen_van_Medline_op_ID...
 
 Fetching_Medline_by_id_...=Aan_het_Ophalen_van_Medline_op_id...
@@ -769,13 +661,11 @@ Field_content=Veld_inhoud
 
 Field_name=Veldnaam
 
-Field_names_are_not_allowed_to_contain_white_space_or_the_following_characters=Veldnamen_mogen_geen_witruimtes_of_de_volgende_tekens_bevatten
-
 Field_sizes=Veld_groottes
 
-Field_to_group_by=Veld_te_groeperen_op
+Field_to_filter=
 
-Field_to_search=Veld_te_zoeken
+Field_to_group_by=Veld_te_groeperen_op
 
 Fields=Velden
 
@@ -786,11 +676,10 @@ file=vestand
 File_'%0'_not_found=Bestand_'%0'_niet_gevonden
 
 File_changed=Bestand_veranderd
+File_exists=Bestand_bestaat
 
 File_extension=Bestandsextensie
 
-File_has_been_updated_externally._Are_you_sure_you_want_to_save?=Het_bestand_is_extern_geupdate._Verdergaan_met_opslaan?
-
 File_not_found=Bestand_niet_gevonden
 
 File_updated_externally=Bestand_extern_geupdate
@@ -801,11 +690,8 @@ Files_opened=Bestanden_geopend
 
 Filter=Filter
 
-Find_duplicates=Dubbels_vinden
-
-Finished_autosetting_%0_field._Entries_changed:_%1.=Automatisch_instellen_van_%0_velden_voltooid._Aantal_veranderde_entries:_%1.
-
 Finished_synchronizing_%0_links._Entries_changed%c_%1.=Synchroniseren_van_%0_snelkoppelingen_voltooid._Aantal_veranderde_entries%c_%1.
+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.
 
@@ -813,6 +699,8 @@ Fit_table_horizontally_on_screen=Pas_tabel_horizontaal_aan_op_het_scherm
 
 Float=Float
 
+Float_marked_entries=Gemarkeerde_entries_bovenaan_tonen
+
 Font_Family=Lettertype_Type
 
 Font_Preview=Lettertype_Voorbeeld
@@ -826,8 +714,10 @@ FontSelector=Lettertype_selecteren
 for=voor
 
 Format_of_author_and_editor_names=Formaat_van_de_auteur-_en_editornamen
+Format_String=
 
 Format_used=Formaat_gebruikt
+Formatter_Name=
 
 Formatter_not_found=Formateerder_niet_gevonden
 
@@ -849,6 +739,8 @@ Generate_keys=Genereer_sleutels
 
 Generate_keys_before_saving_(for_entries_without_a_key)=Genereer_sleutels_voor_het_opslaan_(voor_entries_zonder_een_sleutel)
 
+Generate_keys_for_imported_entries=
+
 Generate_now=Genereer_nu
 
 Generated_BibTeX_key_for=Gegenereerde_BibTeX-sleutel_voor
@@ -863,12 +755,10 @@ Gray_out_non-hits=Maak_niet_gevonden_items_grijs
 
 Gray_out_non-matching_entries=Maak_entries_die_niet_overeenkomen_grijs
 
-Group_definitions_have_been_converted_to_JabRef_1.7_format.=De_groep_definities_zijn_geconverteerd_naar_het_JabRef_1.7_formaat.
-
-Group_name=Groepnaam
-
 Group_properties=Groepeigenschappen
 
+grouping_may_not_work_for_this_entry=groepering_werkt_misschien_niet_voor_deze_entry
+
 Groups=Groepen
 
 Harvard_RTF=Harvard_RTF
@@ -877,11 +767,11 @@ 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
+Help_on_Preview_Settings=Help_over_Voorbeeld_Instellingen
+Help_on_Regular_Expression_Search=Help_over_Regular_Expression_Zoekopdracht
 
 Hide_non-hits=Verberg_niet_gevonden_objecten
 
@@ -891,18 +781,16 @@ 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_groups_that_contain_entries_contained_in_any_currently_selected_group=Markeer_groepen_die_entries_bevatten_die_zich_bevinden_in_elke_huidige_geselecteerde_groep
-
 Highlight_overlapping_groups=Markeer_overlappende_groepen
 
 Hint%c_To_search_specific_fields_only,_enter_for_example%c<p><tt>author%esmith_and_title%eelectrical</tt>=Hint%c_Om_specifieke_velden_alleen_te_zoeken,_geef_bijvoorbeeld_in%c<p><tt>auteur%esmith_en_titel%eelectrical</tt>
 
 HTML=HTML
 
+HTML_table=HTML_tabel
+
+HTML_table_(with_Abstract_&_BibTeX)=HTML_tabel_(met_Abstract_&_BibTeX)
+
 Ignore=Negeren
 
 Illegal_type_name=Verkeerde_typenaam
@@ -911,32 +799,20 @@ Immediate_subgroups=Directe_subgroepen
 
 Import=Importeren
 
-Import_and_append=Importeren_en_bijvoegen
-
 Import_and_keep_old_entry=Importeren_en_oude_entry_behouden
 
 Import_and_remove_old_entry=Importeren_en_oude_entry_verwijderen
 
 Import_cancelled.=Importering_geannuleerd
 
-Import_Data_from_CiteSeer=Importeer_Data_van_CiteSeer
-
 Import_Data_from_CiteSeer_Database=Importeer_Data_van_CiteSeer_Database
 
-Import_database=Importeer_database
-
 Import_entries=Importeer_entries
 
 Import_entry_types=Importeer_entry_types
 
 Import_failed=Importering_mislukt
 
-Import_Fields_from_CiteSeer=Importeer_Velden_van_CiteSeer
-
-Import_fields_from_CiteSeer=Importeer_velden_van_CiteSeer
-
-Import_fields_from_CiteSeer_Database=Importeer_velden_van_CiteSeer_Database
-
 Import_Fields_from_CiteSeer_Database=Importeer_Velden_van_CiteSeer_Database
 
 Import_file=Importeer_bestand
@@ -945,8 +821,6 @@ Import_group_definitions=Importeer_groep_definities
 
 Import_name=Importeer_naam
 
-Import_plain_text=Importeer_onopgemaakte_tekst
-
 Import_preferences=Instellingen_importeren
 
 Import_preferences_from_file=Importeer_instellingen_van_bestand
@@ -963,8 +837,6 @@ Imported_entries=Ge\u00efmporteerde_entries
 
 Imported_entry_types=Ge\u00efmporteerde_entry_types
 
-Imported_file=Ge\u00efmporteerd_bestand
-
 Imported_from_database=Ge\u00efmporteerd_van_database
 
 ImportFormat_class=ImportFormat_Klasse
@@ -978,8 +850,7 @@ Importing_in_unknown_format=Aan_het_Importeren_in_onbekend_formaat
 In_JabRef,_use_pairs_of_#_characters_to_indicate_a_string.=In_JabRef,_gebruik_paren_van_#_tekens_om_een_constante_aan_te_duiden.
 
 Include_abstracts=Abstracts_insluiten
-
-Include_subgroups=Subgroepen_insluiten
+Include_entries=Entries_insluiten
 
 Include_subgroups\:_When_selected,_view_entries_contained_in_this_group_or_its_subgroups=Subgroepen_insluiten\:_Wanneer_geselecteerd,_toon_entries_in_deze_groep_of_in_zijn_subgroepen
 
@@ -989,8 +860,6 @@ Incremental_search=Incrementeel_zoeken
 
 Incremental_search_failed._Repeat_to_search_from_top.=Incrementeel_zoeken_mislukt._Herhaal_om_te_zoeken_vanaf_het_begin.
 
-Independent=Onafhankelijk
-
 Independent_group\:_When_selected,_view_only_this_group's_entries=Onafhankelijke_groep\:_Wanneer_geselecteerd,_toon_enkel_de_entries_van_deze_groep
 
 Initially_show_groups_tree_expanded=Initieel,_toon_alle_bomen_van_de_groepen_uitgeklapt
@@ -1011,8 +880,6 @@ insert_string_=voeg_constante_in_
 
 Insert_URL=voeg_URL_in
 
-INSPEC=INSPEC
-
 integrity=integriteit
 
 # Integrity check is a process that checks for indications of wrongly filled out bibtex fields. "Scan" is the button that starts the check.
@@ -1020,8 +887,6 @@ Integrity_check=Integriteitscontrole
 
 Intersection=Doorsnede
 
-Intersection_with_supergroups=Doorsnede_met_subgroepen
-
 Invalid_BibTeX_key=Ongeldige_BibTeX-sleutel
 
 Invalid_date_format=Ongeldig_datumformaat
@@ -1032,8 +897,6 @@ Inverted=Ge\u00efnverteerd
 
 is_a_standard_type.=is_een_standaard_type.
 
-ISI=ISI
-
 ISO_abbreviation=ISO_afkorting
 
 Item_list_for_field=Item_lijst_voor_veld
@@ -1048,10 +911,6 @@ Journal_list_preview=Tijdschriftenlijst_voorbeeld
 
 Journal_name=Tijdschrift_naam
 
-Journal_names=Tijdschrift_namen
-
-JStor_file=JStor_bestand
-
 Keep=Behouden
 
 Keep_both=Beide_behouden
@@ -1078,8 +937,6 @@ Language=Taal
 
 Last_modified=Laatst_gewijzigd
 
-Latex_AUX_file=LateX_AUX_bestand
-
 LaTeX_AUX_file=LaTeX_AUX-bestand
 
 Left=Links
@@ -1097,8 +954,9 @@ Load_session=Sessie_laden
 Loading_session...=Sessie_aan_het_laden...
 
 Look_and_feel="Look_and_feel"
+Looking_for_pdf...=
 
-lower=lager
+Mac_file_dialog=Mac_bestandsdialoog
 
 Main_layout_file=Hoofd_layoutbestand
 
@@ -1108,8 +966,6 @@ Main_PS_directory=Hoofd_PS-map
 
 Manage=Beheren
 
-Manage_content_selectors=Beheer_inhoud_selectors
-
 Manage_custom_exports=Beheer_externe_exportfilters
 
 Manage_custom_imports=Beheer_externe_importfilters
@@ -1129,16 +985,10 @@ Marked_selected=Markering_geselecteerd
 
 Medline_entries_fetched=Medline_entries_opgehaald
 
-Medline_XML=Medline_XML
-
-Medline_XML_File=Medline_XML_Bestand
-
 Menu_and_label_font_size=Menu_en_label_lettertypegrootte
 
 Merged_external_changes=Voeg_externe_veranderingen_samen
 
-messages=berichten
-
 Messages=Berichten
 
 Messages_and_Hints=berichten_en_hints
@@ -1151,8 +1001,6 @@ Modified_group_"%0".=Gewijzigde_groep_"%0".
 
 Modified_groups=Gewijzigde_groepen
 
-Modified_groups_tree=Gewijzigde_groep_boom
-
 Modified_string=Gewijzigde_constante
 
 Modify=Wijzigen
@@ -1169,19 +1017,16 @@ Move_entries_in_group_selection_to_the_top=Verplaats_entries_in_de_groep_selecti
 
 move_group=verplaats_groep
 
-Move_matching_entries_to_the_top=Verplaats_overeenkomstige_entries_naar_de_top
-
 Move_string_down=Verplaats_constante_naar_beneden
 
 Move_string_up=Verplaats_constante_naar_boven
 
 Move_up=Verplaats_naar_boven
 
-Moved_Group=Verplaatste_Groep
-
 Moved_group_"%0".=Verplaatste_Groep_"%0".
 
 Name=Naam
+Name_formatter=
 
 Natbib_style=Natbib_stijl
 
@@ -1191,52 +1036,25 @@ New=Nieuw
 
 new=nieuw
 
-New_article=Nieuwe_entry_'article'
-
 New_BibTeX_database=Nieuwe_BibTeX-database
 
 New_BibTeX_entry=Nieuwe_BibTeX-entry
 
 New_BibTeX_subdatabase=Nieuwe_BibTeX_subdatabase
 
-New_book=Nieuwe_entry_'book'
-
 New_content=Nieuwe_inhoud
 
-New_database=Nieuwe_database
-
 New_database_created.=Nieuwe_database_aangemaakt.
-
-New_entry=Nieuwe_entry
-
-New_entry...=Nieuwe_entry...
-
-New_entry_from_plain_text=Nieuwe_entry_van_onopgemaakte_tekst
+New_field_value=Nieuwe_veld_waarde
 
 New_file=Nieuw_bestand
 
 New_group=Nieuwe_groep
 
-New_inbook=Nieuwe_entry_'inbook'
-
-New_mastersthesis=Nieuwe_entry_'masterthesis'
-
-New_phdthesis=Nieuwe_entry_'phdthesis'
-
-New_proceedings=Nieuwe_entry_'proceedings'
-
 New_string=Nieuwe_constante
 
-New_subdatabase=Nieuwe_subdatabase
-
-New_subdatabase_based_on_AUX_file=Nieuwe_subdatabase_gebaseerd_op_AUX_bestand
-
-New_unpublished=Nieuwe_entry_'unpublished'
-
 Next_entry=Volgende_entry
 
-Next_tab=Volgend_tabblad
-
 No_%0_found=Geen_%0_gevonden
 
 No_actual_changes_found.=Geen_actuele_veranderingen_gevonden.
@@ -1256,10 +1074,10 @@ No_entries_imported.=Geen_entries_ge\u00efmporteerd.
 No_entries_or_multiple_entries_selected.=Geen_entries_of_meerdere_entries_geselecteerd.
 
 No_entries_selected=Geen_entries_geselecteerd
+No_entries_selected.=Geen_entries_geselecteerd.
 
 No_exceptions_have_ocurred.=Geen_uitzonderingen_zijn_voorgekomen.
-
-No_file_extension._Could_not_find_viewer_for_file.=Geen_bestandsextensie._Kon_geen_viewer_voor_het_bestand_vinden.
+No_file_associated=Geen_bestand_geassocieerd
 
 No_GUI._Only_process_command_line_options.=Geen_GUI._Alleen_proces_commandoregel_opties.
 
@@ -1277,10 +1095,6 @@ No_saved_session_found.=Geen_opgeslagen_sessie_gevonden.
 
 No_url_defined=Geen_URL_gedefinieerd
 
-non-Mac_only=enkel_niet-Mac
-
-Normal=Normaal
-
 not=niet
 
 not_found=niet_gevonden
@@ -1289,8 +1103,6 @@ Not_saved_(empty_session)=Niet_opgeslagen
 
 Note_that_the_entry_causing_the_problem_has_been_selected.=Merk_op_dat_de_entry_die_het_probleem_veroorzaakt_geselecteerd_werd.
 
-Note_that_the_new_definitions_will_not_be_compatible_with_previous_JabRef_versions.=Merk_op_dat_de_nieuwe_definities_niet_compatibel_zijn_met_voorgaande_JabRef_versies.
-
 Note_that_you_must_specify_the_fully_qualified_class_name_for_the_look_and_feel,=Merk_op_dat_u_de_volledig_gekwalificeerde_klassenaam_voor_de_"look_and_feel"_moet_specificeren,
 
 Nothing_to_redo=Niets_om_te_herstellen
@@ -1310,8 +1122,6 @@ One_or_more_keys_will_be_overwritten._Continue?=E\u00e9n_of_meerdere_sleutels_zu
 
 Open=Openen
 
-open=openen
-
 Open_BibTeX_database=Open_BibTeX-database
 
 Open_database=Open_database
@@ -1327,12 +1137,15 @@ Open_PDF_or_PS=Open_PDF_of_PS
 Open_right-click_menu_with_Ctrl+left_button=Open_rechtsklik-menu_met_Ctrl_+_linkse_muisknop
 
 Open_URL_or_DOI=Open_URL_of_DOI
+OpenDocument_Spreadsheet=OpenDocument_Spreadsheet
 
 Opened_database=Geopende_database
 
 Opening=Aan_het_openen
 
 Opening_preferences...=Instellingen_aan_het_openen
+OpenOffice_Calc=OpenOffice_Calc
+Operation_canceled.\n=Operatie_geannuleerd.\n
 
 Optional_fields=Optionele_velden
 
@@ -1342,20 +1155,21 @@ or=of
 
 out_of=van
 
-Output_or_export_file=Geef_uitvoer_of_exporteer_bestand
+Output=Uitvoer
 
-Overlapping_groups=Overlappende_groepen
+Output_or_export_file=Geef_uitvoer_of_exporteer_bestand
 
 Override=Wijzigen
 
 Override_default_file_directories=Wijzig_standaard_bestandsmappen
 
+Override_default_font_settings=Wijzig_standaard_lettertypeinstellingen
+
 override_the_bibtex_key_by_the_selected_text=wijzig_de_BibTeX-sleutel_door_de_geselecteerde_tekst
+Overwrite_existing_field_values=Overschrijf_bestaande_veld_waarden
 
 Overwrite_keys=Overschrijf_sleutels
 
-Ovid=Ovid
-
 pairs_processed=paren_verwerkt
 
 Paste=Plakken
@@ -1364,8 +1178,6 @@ paste_entries=plak_entries
 
 paste_entry=plak_entry
 
-Paste_from_clipboard=plak_vanuit_klembord
-
 Pasted=Geplakt
 
 Path_to_HTML_viewer=Pad_naar_HTML-viewer
@@ -1378,26 +1190,16 @@ Path_to_PS_viewer=Pad_naar_PS-viewer
 
 Path_to_WinEdt.exe=Pad_naar_WinEdt.exe
 
-Paths_to_external_programs=Paden_naar_externe_programma's
-
 PDF_directory=PDF_map
 
-PDF_links=PDF_snelkoppelingen
-
 Personal_journal_list=Persoonlijke_tijdschriften_lijst
 
 Pick_titles=Kies_titels
 
-Plain_right_menu="Plain_rechtse_menu
-
-Plain_text=Onopgemaakte_tekst
-
 Plain_text_import=Onopgemaakte_tekst_importeren
 
 Please_check_your_network_connection_to_this_machine.=Controleer_uw_netwerkverbinding_naar_deze_machine.
 
-Please_define_BibTeX_key_first=Definieer_de_BibTeX-sleutel_eerst_a.u.b.
-
 Please_enter_a_name_for_the_group.=Geef_a.u.b._een_naam_voor_de_groep.
 
 Please_enter_a_search_term._For_example,_to_search_all_fields_for_<b>Smith</b>,_enter%c<p><tt>smith</tt><p>To_search_the_field_<b>Author</b>_for_<b>Smith</b>_and_the_field_<b>Title</b>_for_<b>electrical</b>,_enter%c<p><tt>author%esmith_and_title%eelectrical</tt>=Geef_a.u.b._een_zoekterm._Bijvoorbeeld,_om_alle_velden_te_doorzoeken_naar_<b>Smith</b>,_geef_in:%c<p><tt>smith</tt><p>Om_het_veld_<b>Author</b>_te_doorzoeken_naar_<b>Smith</b>_en_het_veld_<b>Title</b>_naar_<b>electrical</b>,_geef [...]
@@ -1424,54 +1226,37 @@ Possible_duplicate_of_existing_entry._Click_to_resolve.=Mogelijk_duplicaat_van_b
 
 Preamble=Inleiding
 
-Preamble_editor,_store_changes=Inleiding_editor,_sla_veranderingen_op
-
 Preferences=Instellingen
 
-Preferences_recorded=Instellingen_opgeslagen
-
 Preferences_recorded.=Instellingen_opgeslagen.
 
-Preserve_formatting_of_non-BibTeX_fields=Behoud_formattering_van_niet-BibTeX_velden
-
 Preview=Voorbeeld
 
 Previous_entry=Vorige_entry
 
-Previous_tab=Vorige_tabblad
-
 Primary_sort_criterion=Primair_sorteercriterium
 
 Problem_with_parsing_entry=Probleem_met_entry_ontleding
 
-PS_directory=PS_map
+Program_output=Programma_uitvoer
 
-PS_links=PS_snelkoppelingen
+PS_directory=PS_map
+Push_entries_to_external_application_(%0)=Stuur_entries_naar_externe_applicatie_(%0)
 
 Push_selection_to_Emacs=Stuur_selectie_naar_Emacs
 
-push_selection_to_lyx=Stuur_selectie_naar_lyx
-
 Push_selection_to_LyX/Kile=Stuur_selectie_naar_LyX/Kile
 
 Push_selection_to_WinEdt=Stuur_selectie_naar_WinEdt
 
 Push_to_LatexEditor=Stuur_selectie_naar_LaTeXEditor
 
-Push_to_LyX=Stuur_selectie_naar_LyX
-
-Push_to_WinEdt=Stuur_selectie_naar_WinEdt
-
 Pushed_citations_to_Emacs=Citaten_naar_Emacs_gestuurd
 
 Pushed_citations_to_WinEdt=Citaten_naar_WinEdt_gestuurd
 
 Pushed_the_citations_for_the_following_rows_to=De_citaten_voor_de_volgende_rijen_gestuurd_naar
 
-Query_author(s)=Vraag_stellen_over_auteur(s)
-
-Quit=Afsluiten
-
 Quit_JabRef=JabRef_afsluiten
 
 Quit_synchronization=Synchronisatie_afsluiten
@@ -1482,12 +1267,8 @@ Really_delete_the_selected=Bent_u_zeker_over_het_verwijderen_van_deze
 
 Rearrange_tabs_alphabetically_by_title=Rangschik_tabbladen_alfabetisch_op_titel
 
-Recent_files=Recente_bestanden
-
 Redo=Herstellen
 
-Refer/Endnote=Refer/Endnote
-
 Reference_database=Referentie_database
 
 # The next two lines are used like in "References found: 1  Number of references to fetch?"
@@ -1497,8 +1278,6 @@ Refine_supergroup\:_When_selected,_view_entries_contained_in_both_this_group_and
 
 Refresh_view=Beeld_verversen
 
-Regexp=Regexp
-
 Regular_Expression=Regular_Expression
 
 Remember_these_entry_types?=Deze_entry_types_behouden?
@@ -1547,14 +1326,10 @@ Remove_old_entry=Verwijder_oude_entry
 
 Remove_selected_strings=Verwijder_geselecteerde_entries
 
-remove_string=verwijder_constante
-
 remove_string_=verwijder_constante_
 
 Removed_entry_type.=Entry_type_verwijderd
 
-Removed_group=Groep_verwijderd
-
 Removed_group_"%0".=Groep_"%0"_verwijderd.
 
 Removed_group_"%0"_and_its_subgroups.=Groep_"%0"_en_zijn_subgroepen_verwijderd.
@@ -1563,8 +1338,6 @@ Removed_string=Constante_verwijderd
 
 Renamed_string=Constante_hernoemd
 
-Repeat_incremental_search=Herhaal_incrementele_zoekopdracht
-
 Replace=Vervangen
 
 Replace_(regular_expression)=Vervang_(regular_expression)
@@ -1591,16 +1364,12 @@ Review_changes=Bekijk_veranderingen
 
 Right=Rechts
 
-RIS=RIS
-
 Save=Opslaan
 
 Save_before_closing=Opslaan_voor_afsluiten
 
 Save_database=Database_opslaan
 
-Save_database_as_...=Database_opslaan_als_...
-
 Save_entries_in_their_original_order=Sla_entries_in_hun_originele_volgorde_op
 
 Save_failed=Opslaan_mislukt
@@ -1613,10 +1382,6 @@ 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_...
-
-Save_session=Sessie_opslaan
-
 Saved_database=Database_opgeslagen
 
 Saved_selected_to=Geselecteerde_opgeslagen_naar
@@ -1629,8 +1394,6 @@ Saving_database=Database_aan_het_opslaan
 
 Scan=Doorzoeken
 
-SciFinder=SciFinder
-
 Search=Zoeken
 
 Search_All_Fields=Zoek_in_Alle_Velden
@@ -1643,24 +1406,16 @@ Search_expression=Zoek_expressie
 
 Search_for=Zoek_naar
 
-Search_General_Fields=Zoek_Algemene_Velden
-
 Search_general_fields=Zoek_algemene_velden
 
 Search_IEEEXplore=Zoek_IEEEXplore
 
-Search_Optional_Fields=Zoek_Optionele_Velden
-
 Search_optional_fields=Zoek_optionele_velden
 
-Search_Required_Fields=Zoek_Vereiste_Velden
-
 Search_required_fields=Zoek_vereiste_velden
 
 Search_Specified_Field(s)=Zoek_Gespecifieerde_Veld(en)
 
-Search_term=Zoek_term
-
 Searched_database._Global_number_of_hits=Database_doorzocht._Globaal_aantal_gevonden_resultaten
 
 Searched_database._Number_of_hits=Database_doorzocht._Aantal_gevonden_resultaten
@@ -1686,6 +1441,7 @@ Select_encoding=Selecteer_encodering
 Select_entries_in_group_selection=Selecteer_entries_in_groep_selectie
 
 Select_entry_type=Selecteer_entry_type
+Select_external_application=Selecteer_externe_applicatie
 
 Select_file_from_ZIP-archive=Selecteer_bestand_van_ZIP-archief
 
@@ -1693,20 +1449,21 @@ Select_format=Selecteer_formaat
 
 Select_matches=Selecteer_overeenkomsten
 
-Select_matching_entries=Selecteer_overeenkomstige_entries
-
 Select_new_ImportFormat_Subclass=Selecteer_nieuw_ImportFormat_Subklasse
 
 Select_the_tree_nodes_to_view_and_accept_or_reject_changes=Selecteer_de_boom_knopen_om_veranderingen_te_tonen_en_te_accepteren_of_afwijzen
+Selected_entries=Geselecteerde_entries
 
 Selector_enabled_fields=Selecteer_velden_die_in_werking_zijn
 
+Set/clear_fields=Velden_instellen/wissen
+Set_field=Veld_instellen
+Set_fields=Velden_instellen
+
 Set_general_fields=Algemene_velden_instellen
 
 Set_table_font=Tabel_lettertype_instellen
 
-Set_up_general_fields=Algemene_velden_instellen
-
 Settings=Instellingen
 
 Setup_selectors=Selectors_instellen
@@ -1721,8 +1478,6 @@ Show_'Firstname_Lastname'=Toon_'Voornaam_Familienaam'
 
 Show_'Lastname,_Firstname'=Toon_'Familienaam,_Voornaam'
 
-Show_abstract=Toon_abstract
-
 Show_BibTeX_source_by_default=Toon_standaard_BibTeX-broncode
 
 Show_BibTeX_source_panel=Toon_BibTeX-bronpaneel
@@ -1737,13 +1492,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_general_fields=Toon_algemene_velden
-
-Show_groups_matching_all=Toon_groepen_die_overeenkomen_met_alle
-
-Show_groups_matching_any=Toon_groepen_die_overeenkomen_met_elke
-
 Show_icons_for_groups=Toon_iconen_voor_groepen
+Show_last_names_only=Toon_enkel_laatste_namen
 
 Show_names_unchanged=Toon_namen_onveranderd
 
@@ -1753,8 +1503,6 @@ Show_one_more_row=Toon_\u00e9\u00e9n_rij_meer
 
 Show_optional_fields=Toon_optionele_velden
 
-Show_overlapping_groups=Toon_overlappende_groepen
-
 Show_PDF/PS_column=Toon_PDF/PS-kolom
 
 Show_required_fields=Toon_vereiste_velden
@@ -1767,40 +1515,34 @@ Show_warning_dialog_when_an_empty_BibTeX_key_is_entered=Toon_waarschuwingsdialoo
 
 Simple_HTML=Eenvoudige_HTML
 
-Sixpack=Sixpack
-
 Size=Grootte
 
-Size_of_groups_interface_(rows)=Grootte_van_groepenvenster_(rijen)
-
 Skip=Overslaan
+Skipped_-_No_PDF_linked=Overgeslagen_-_Geen_PDF_gelinkt
+Skipped_-_PDF_does_not_exist=Overgeslagen_-_PDF_bestaat_niet
+Skipped_entry.=Overgeslagen_entry.
 
 Sort_alphabetically=Alphabetisch_sorteren
 
 Sort_Automatically=Automatisch_sorteren
 
-Sort_options=Sorteer_opties
-
 sort_subgroups=subgroepen_sorteren
 
-Sorted_all_subgroups_recursively=Alle_subgroepen_recursief_gesorteerd
-
 Sorted_all_subgroups_recursively.=Alle_subgroepen_recursief_gesorteerd.
 
-Sorted_immediate_subgroups=Onmiddellijke_subgroepen_sorteren
-
 Sorted_immediate_subgroups.=Onmiddellijke_subgroepen_sorteren.
 
 source_edit=broncode_aanpassen
+Special_Name_Formatters=
 
 Special_table_columns=Speciale_tabelkolommen
 
-Start=Starten
-
 Start_incremental_search=Start_incrementele_zoekopdracht
 
 Start_search=Start_zoeken
 
+Starting_import=Importeren_aan_het_starten
+
 Statically_group_entries_by_manual_assignment=Groepeer_entries_statisch_door_manuele_toekenning
 
 Status=Status
@@ -1809,8 +1551,6 @@ Stop=Stop
 
 Store=Opslaan
 
-Store_fields_with_double_braces,_and_remove_extra_braces_when_loading.<BR>Double_braces_signal_that_BibTeX_should_preserve_character_case.=Sla_velden_met_dubbele_haakjes_op,_en_verwijder_extra_haakjes_bij_het_laden.<BR>Dubbele_haakjes_wijzen_erop_dat_BibTeX_de_grootte_van_de_tekens_moet_behouden.
-
 Store_journal_abbreviations=Tijdschrift_afkortingen_opslaan
 
 Store_string=Constante_opslaan
@@ -1821,20 +1561,14 @@ Stored_definition_for_type=Definitie_voor_type_opslaan
 
 Stored_entry=Entry_opgeslagen
 
-Stored_entry.=Entry_opgeslagen.
-
 Strings=Constanten
 
 Strings_for_database=Constanten_voor_database
 
-subdatabase_from_aux=subdatabase_van_aux
-
 Subdatabase_from_aux=Subdatabase_van_aux
 
 Suggest=Voorstellen
 
-Switch_preview_layout=Toon_voorbeeld_layout
-
 #### These lines were changed:
 Switches_between_full_and_abbreviated_journal_name_if_the_journal_name_is_known.=Schakelt_tussen_volledige_en_afgekorte_tijdschriftnaam_als_het_tijdschrift_gekend_is.
 
@@ -1842,8 +1576,6 @@ Synchronize_%0_links=Synchroniseer_%0_snelkoppelingen
 
 Synchronizing_%0_links...=%0_snelkoppelingen_aan_het_synchroniseren
 
-Table=Tabel
-
 Table_appearance=Tabel_uiterlijk
 
 Table_background_color=Tabel_achtergrondkleur
@@ -1872,10 +1604,6 @@ The_file<BR>'%0'<BR>has_been_modified<BR>externally!=Het_bestand<BR>'%0'<BR>werd
 
 The_group_"%0"_already_contains_the_selection.=De_groep_"%0"_bevat_reeds_de_selectie.
 
-The_group_"%0"_does_not_support_the_adding_of_entries.=De_groep_"%0"_ondersteunt_het_toevoegen_van_entries_niet.
-
-The_group_"%0"_does_not_support_the_removal_of_entries.=De_groep_"%0"_ondersteunt_het_verwijderen_van_entries_niet.
-
 The_label_of_the_string_can_not_be_a_number.=Het_label_van_een_constante_mag_geen_nummer_zijn.
 
 The_label_of_the_string_can_not_contain_spaces.=Het_label_van_een_constante_mag_geen_spaties_bevatten.
@@ -1900,12 +1628,8 @@ 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_action_will_modify_the_"%0"_field_of_your_entries.nThis_could_cause_undesired_changes_to_your_entries,_so_itnis_recommended_that_you_change_the_field_in_your_groupndefinition_to_"keywords"_or_a_non-standard_name.nnDo_you_still_want_to_continue?=Deze_actie_zal_het_"%0"_veld_van_uw_entries_veranderen._Dit_kan_ongewenste_wijzigingen_aan_uw_entries_veroorzaken,_dus_is_het_aangeraden_dat_u_het_veld_in_uw_groepdefinitie_naar_"keywords"_of_een_niet-standaard_naam_verandert._Wilt_u_nog_stee [...]
-
 this_button_will_update=deze_knop_zal_update_uitvoeren
 
-this_button_will_update_the_column_width_settings<BR>to_match_the_current_widths_in_your_table=deze_knop_zal_een_update_uitvoeren_van_de_kolombreedte_instellingen<BR>om_overeen_te_komen_met_de_huidige_breedtes_in_uw_tabel
-
 This_entry_is_incomplete=Deze_entry_is_onvolledig
 
 This_entry_type_cannot_be_removed.=Dit_entry_type_kan_niet_verwijderd_worden.
@@ -1922,14 +1646,10 @@ 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._First_load_or_paste_some_text_into_the_text_input_area._After_that,_you_can_mark_text_and_assign_it_to_a_bibtex_field.=Dit_is_een_simpele_kopieer_en_plak_dialoog._Laad_of_plak_eerst_wat_tekst_in_het_tekst_invoerveld._Hierna,_kan_u_tekst_markeren_en_deze_toekennen_aan_een_BibTeX-veld.
-
 This_is_a_simple_copy_and_paste_dialog_for_import_some_fields_from_normal_text.=Dit_is_een_simpele_kopieer_en_plak_dialoog_om_enkele_velden_vanuit_normale_tekst_te_importeren.
 
 This_makes_JabRef_look_up_each_%0_link_and_check_if_the_file_exists._If_not,_you_will_be_given_options<BR>to_resolve_the_problem.=Dit_zorgt_ervoor_dat_JabRef_elke_%0_snelkoppeling_op_zoekt_en_controleert_of_het_bestand_bestaat._Indien_dit_niet_het_geval_is,_zullen_u_opties_gegeven_worden<BR>om_het_probleem_op_te_lossen.
 
-This_operation_cannot_work_on_multiple_rows.=Deze_operatie_kan_niet_werken_op_meerdere_rijen.
-
 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_one_or_more_entries_to_be_selected.=Deze_operatie_vereist_dat_een_of_meer_entries_geselecteerd_zijn.
@@ -1938,22 +1658,12 @@ To_set_up,_go_to_<B>Tools_->_Manage_journal_abbreviations</B>=Om_in_te_stellen,_
 
 Toggle_abbreviation=Toon_afkorting
 
-Toggle_entry_preview=Toon_entry_voorbeeld
-
-Toggle_groups_interface=Toon_groepenvenster
-
-Toggle_search_panel=Toon_zoekpaneel
-
-Tools=Extra's
-
 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
-
 unable_to_access_LyX-pipe=kan_geen_toegang_krijgen_tot_LyX-pipe
 
 Unable_to_create_graphical_interface=kan_grafische_interface_niet_aanmaken
@@ -1961,6 +1671,8 @@ 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_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
 
@@ -1968,8 +1680,6 @@ Undo=Ongedaan_maken
 
 Union=Unie
 
-unknown_bibtex_entries=onbekende_BibTeX-entries
-
 Unknown_bibtex_entries=Onbekende_BibTeX-entries
 
 unknown_edit=onbekende_aanpassing
@@ -1988,8 +1698,6 @@ Unmarked_selected=Markering_van_geselecteerde_ongedaan_maken
 
 Unpack_EndNote_filter_set=EndNote_filter_set_uitpakken
 
-Unpacked_file=Uitgepakt_bestand
-
 Unpacked_file.=Uitgepakt_bestand.
 
 Unsupported_version_of_class_%0:_%1=Niet_ondersteunde_versie_van_klasse_%0:_%1
@@ -2004,26 +1712,20 @@ Updated_group_selection=Groep_selectie_geupdate
 
 Updating_entries...=Entries_aan_het_updaten...
 
-UPPER=BOVENSTE
-
-Upper_Each_First=Elke_Eerste_Bovenste
-
-Upper_first=Bovenste_eerst
-
 usage=gebruik
 
 Use_antialiasing_font=Gebruik_antialiasing_lettertype
-
-Use_antialiasing_font_in_table=Gebruik_antialiasing_lettertype_in_tabel
+Use_custom_icon_theme=Gebruik_extern_icoonthema
 
 Use_inspection_window_also_when_a_single_entry_is_imported.=Gebruik_inspectievenster_ook_wanneer_een_enkele_entry_ge\u00efmporteerd_wordt
 
+Use_native_file_dialog=Gebruik_"native_bestandsdialoog
+
 Use_other_look_and_feel=Gebruik_andere_"look_and_feel"
+Use_Regular_Expression_Search=Gebruik_Regular_Expression_Zoekopdracht
 
 Use_regular_expressions=Gebruik_regular_expressions
 
-Use_the_following_delimiter=Gebruik_het_volgend_scheidingsteken
-
 Use_the_following_delimiter_character(s)=Gebruik_volgende_teken(s)_als_scheidingsteken
 
 Uses_default_application=Gebruikt_standaard_applicatie
@@ -2036,8 +1738,6 @@ verify_that_LyX_is_running_and_that_the_lyxpipe_is_valid=verifieer_dat_LyX_draai
 
 View=Beeld
 
-Visible_fields=Zichtbare_velden
-
 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
@@ -2057,9 +1757,20 @@ When_adding/removing_keywords,_separate_them_by=Wanneer_u_sleutelwoorden_toevoeg
 with=met
 
 Word=Woord
+Write_BibtexEntry_as_XMP-metadata_to_PDF.=Schrijf_BibTeX-entry_als_XMP-metadata_naar_PDF.
+Write_XMP=Schrijf_XMP
+
+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...
 
 Wrong_file_format=Verkeerd_bestandsformaat
 
+XMP-annotated_PDF=XMP_geannoteerde_PDF
+XMP_Export_Privacy_Settings=
+
+XMP_metadata=XPM_metadata
+
 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_cleared_this_field._Original_value=U_heeft_dit_veld_gewist._Originele_waarde
@@ -2070,118 +1781,165 @@ You_must_enter_an_integer_value_in_the_text_field_for=U_moet_een_gehele_waarde_i
 
 You_must_fill_in_a_name_for_the_entry_type.=U_moet_een_naam_invullen_voor_het_entry_type.
 
-You_must_provide_a_name,_a_search_string_and_a_field_name_for_this_group.=U_moet_een_naam_geven,_een_zoek_waarde_en_een_veldnaam_voor_deze_groep.
-
 You_must_restart_JabRef_for_the_new_key_bindings_to_work_properly.=U_moet_JabRef_herstarten_zodat_de_nieuwe_sneltoetsen_correct_kunnen_werken.
 
-You_must_select_a_row_to_perform_this_operation.=U_moet_een_rij_selecteren_om_deze_operatie_uit_te_voeren.
-
 You_must_select_at_least_one_row_to_perform_this_operation.=U_moet_minstens_\u00e9\u00e9n_rij_selecteren_om_deze_operatie_uit_te_voeren.
 
 You_must_set_both_BibTeX_key_and_%0_directory=U_moet_de_BibTeX-sleutel_en_%0_map_instellen
 
-You_must_set_both_bibtex_key_and_PDF_directory=U_moet_de_BibTeX-sleutel_en_PDF_map_instellen
-
 Your_new_key_bindings_have_been_stored.=Uw_nieuwe_sneltoetsen_zijn_opgeslagen.
 
-Float_marked_entries=Gemarkeerde_entries_bovenaan_tonen
-
-Starting_import=Importeren_aan_het_starten
-
-Output=Uitvoer
-
-Exceptions=Uitzonderingen
-
-Program_output=Programma_uitvoer
-
-grouping_may_not_work_for_this_entry=groepering_werkt_misschien_niet_voor_deze_entry
-
-crossreferenced_entries_included=inclusief_kruisgerefereerde_entries
-
-Display_version=Display_versie
-
-Override_default_font_settings=Wijzig_standaard_lettertypeinstellingen
-
-Mac_file_dialog=Mac_bestandsdialoog
-
-Use_native_file_dialog=Gebruik_"native_bestandsdialoog
-
-XMP-annotated_PDF=XMP_geannoteerde_PDF
-PDF_and_PS_links=PDF_en_PS_snelkoppelingen
-Use_Regular_Expression_Search=Gebruik_Regular_Expression_Zoekopdracht
-Help_on_Regular_Expression_Search=Help_over_Regular_Expression_Zoekopdracht
-writeXMP=schrijfXMP
-Will_write_XMP-metadata_to_the_PDFs_linked_from_selected_entries.=Zal_XPM_metadata_naar_de_PDFs_gelinkt_vanuit_geselecteerde_entries_schrijven.
-Select_external_application=Selecteer_externe_applicatie
-Show_last_names_only=Toon_enkel_laatste_namen
-Help_on_Preview_Settings=Help_over_Voorbeeld_Instellingen
-Writing_XMP_metadata...=XPM_metadata_aan_het_schrijven...
-Writing_XMP_metadata_for_selected_entries...=XPM_metadata_voor_geselecteerde_entries_aan_het_schrijven...
-Skipped_-_No_PDF_linked=Overgeslagen_-_Geen_PDF_gelinkt
-Finished_writing_XMP_for_%0_file_(%1_skipped,_%2_errors).=XPM_schrijven_voor_%0_bestand_voltooid_(%1_overgeslagen,_%2_fouten).
-Grouping_may_not_work_for_this_entry.=Groepering_kan_misschien_niet_werken_voor_deze_entry.
-Write_BibtexEntry_as_XMP-metadata_to_PDF.=Schrijf_BibTeX-entry_als_XMP-metadata_naar_PDF.
-write_XMP=schrijf_XMP
-New_field_value=Nieuwe_veld_waarde
-Overwrite_existing_field_values=Overschrijf_bestaande_veld_waarden
-Include_entries=Entries_insluiten
-Selected_entries=Geselecteerde_entries
-
-Fetch_CiteSeer_by_ID=Ophalen_van_CiteSeer_op_ID
-Push_entries_to_external_application_(%0)=Stuur_entries_naar_externe_applicatie_(%0)
-Write_XMP=Schrijf_XMP
-
-Writing_XMP=XMP_aan_het_schrijven
-
-HTML_table=HTML_tabel
-
-Set/clear_fields=Velden_instellen/wissen
-
-Clear_fields=Velden_wissen
-Set_fields=Velden_instellen
-
-HTML_table_(with_Abstract_&_BibTeX)=HTML_tabel_(met_Abstract_&_BibTeX)
-OpenOffice_Calc=OpenOffice_Calc
-OpenDocument_Spreadsheet=OpenDocument_Spreadsheet
-Skipped_entry.=Overgeslagen_entry.
-Error_occured_when_parsing_entry=Foutmelding_bij_het_ontleden_van_de_entry
-Operation_canceled.\n=Operatie_geannuleerd.\n
-Error_while_writing=Foutmelding_bij_het_schrijven
-Skipped_-_PDF_does_not_exist=Overgeslagen_-_PDF_bestaat_niet
-Use_custom_icon_theme=Gebruik_extern_icoonthema
-Custom_icon_theme=Extern_icoonthema
-Custom_icon_theme_file=Extern_icoonthema_bestaan
-Unable_to_read_icon_theme_file=Kan_icoonthema_bestand_niet_lezen
-Unable_to_read_default_icon_theme.=Kan_standaard_icoonthema_niet_lezen.
-Could_not_find_image_file=Kan_fotobestand_niet_vinden
-Set_field=Veld_instellen
-No_entries_selected.=Geen_entries_geselecteerd.
-Link_from_new_entries.=Snelkoppeling_van_nieuwe_entries.
-Link_from_new_entry=Snelkoppeling_van_nieuwe_entry
-Link_from_entries.=Snelkoppeling_van_entries.
-Link_from_entry=Snelkoppeling_van_entry
-exists.Overwrite?=bestaat._Overschrijven?
-File_exists=Bestand_bestaat
-No_file_associated=Geen_bestand_geassocieerd
-Exported_%0_entries_to_file=
-Formatter_Name=
-Format_String=
-Help_on_Name_Formatting=
-Special_Name_Formatters=
-Name_formatter=
-Deselect_all_duplicates=
-Error_exporting_to_clipboard=
-
-Generate_keys_for_imported_entries=
-Looking_for_pdf...=
-
-Correct_the_entry,_and_reopen_editor_to_display/edit_source.=
-Fetch_ArXiv.org=
-
-Field_to_filter=
-XMP_Export_Privacy_Settings=
-
-
+Save_all_open_databases=
+
+Include=
+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=
+%0_directory_is_not_set_or_does_not_exist!=
+%0_directory_is_'%1':=
+Writing_XMP_to_'%0'...=
+Wrote_XMP_to_'%0'.=
+Error_writing_XMP_to_file:_%0=
+Error_while_writing_XMP_%0=
+Error_writing_XMP_to_'%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=
+Invalid_URL:_=
+This_operation_requires_at_least_one_entry.=
+Write_XMP-metadata=
+Write_XMP-metadata_for_all_PDFs_in_current_database?=
+No_XMP_metadata_found_in_=
+Drog_PDF=
+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.=
 
-XMP_metadata=XPM_metadata
+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.=
+Copy_files_to_%0.=
+Move_files_to_%0.=
+Leave_file_in_its_current_directory.=
+Copy_file_to_%0.=
+Move_file_to_%0.=
+Extension=
+Application=
+Icon=
+
+Path_to_%0_not_defined=
+
+Error:_=
+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=
+Cannot_rename_for_several_entries.=
+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\:_=
+This_will_move_all_external_links_from_the_'pdf'_and_'ps'_fields_into_the_'%0'_field._Proceed?=
+Upgrade_external_links=
+Upgraded_links.=
+
+Do_you_want_JabRef_to_do_the_following_operations?=
+Upgrade_file=
+
+
+Finished_autosetting_external_links.=
+No_files_found.=
+Target_file_cannot_be_a_directory.=
+This_entry_has_no_BibTeX_key._Generate_key_now?=
+
+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=
diff --git a/src/resource/JabRef_en.properties b/src/resource/JabRef_en.properties
index 665faf7..e81aec3 100644
--- a/src/resource/JabRef_en.properties
+++ b/src/resource/JabRef_en.properties
@@ -2,8 +2,6 @@
 #! created/edited by Popeye version 0.54 (popeye.sourceforge.net)
 #! encoding:ISO-8859-1
 
-!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.=!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.
-
 %0_contains_the_Regular_Expression_<b>%1</b>=%0%0 contains_the_Regular_Expression_<b>%1</b>
 
 %0_contains_the_term_<b>%1</b>=%0 contains_the_term_<b>%1</b>
@@ -40,12 +38,6 @@ A_CiteSeer_fetch_operation_is_currently_in_progress.=A_CiteSeer_fetch_operation_
 
 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
 
 Abbreviation=Abbreviation
@@ -84,10 +76,6 @@ Add_Subgroup=Add_subgroup
 
 Add_to_group=Add_to_group
 
-Added_entry=Added_entry
-
-Added_group=Added_group
-
 Added_group_"%0".=Added_group_"%0".
 
 Added_new=Added_new
@@ -98,22 +86,16 @@ Additionally,_entries_whose_<b>%0</b>_field_does_not_contain_<b>%1</b>_can_be_as
 
 Advanced=Advanced
 
-Advanced_options_for_setting...=Advanced_options_for_setting...
-
 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
 
-Always_save_database_ordered_by_author_name=Always_save_database_ordered_by_author_name
-
 and= and
 
 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.
@@ -124,8 +106,6 @@ 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
@@ -134,8 +114,6 @@ Apply=Apply
 
 Arguments_passed_on_to_running_JabRef_instance._Shutting_down.=Arguments_passed_on_to_running_JabRef_instance._Shutting_down.
 
-Assign_entries_based_on:=Assign_entries_based_on:
-
 Assign_entry_selection_exclusively_to_this_group=Assign_entry_selection_exclusively_to_this_group
 
 Assign_new_file=Assign_new_file
@@ -158,8 +136,6 @@ Autodetect_format=Autodetect_format
 
 Autogenerate_BibTeX_key=Autogenerate_BibTeX_key
 
-Autogenerate_BibTeX_keys=Autogenerate_BibTeX_keys
-
 Autogenerate_groups=Autogenerate_groups
 
 autogenerate_keys=autogenerate_keys
@@ -182,10 +158,6 @@ Autoset_%0_links._Allow_overwriting_existing_links.=Autoset_%0_links._Allow_over
 
 Autoset_%0_links._Do_not_overwrite_existing_links.=Autoset_%0_links._Do_not_overwrite_existing_links.
 
-Autosetting_%0_field...=Autosetting_%0_field...
-
-AUX_File_import=generate_subdatabase_from_aux
-
 AUX_file_import=AUX_file_import
 
 Available_export_formats=Available_export_formats
@@ -204,10 +176,6 @@ Backup_old_file_when_saving=Backup_old_file_when_saving
 
 Bibkey_to_filename_conversion=Bibkey_to_filename_conversion
 
-Biblioscape_Tag_file=Biblioscape_Tag_file
-
-BibTeX=BibTeX
-
 BibTeX_key=BibTeX_key
 
 BibTeX_key_is_unique.=BibTeX_key_is_unique.
@@ -218,12 +186,8 @@ BibTeX_source=BibTeX_source
 
 BibTeXML=BibTeXML
 
-BibTeXML_File=BibTeXML_File
-
 Binding=Binding
 
-Broken_link=Broken_link
-
 Browse=Browse
 
 by=by
@@ -236,8 +200,6 @@ Cannot_add_entries_to_group_without_generating_keys._Generate_keys_now?=Cannot_a
 
 Cannot_merge_this_change=Cannot_merge_this_change
 
-Cannot_move_group=Cannot_move_group
-
 Cannot_move_group_"%0"_down.=Cannot_move_group_"%0"_down.
 
 Cannot_move_group_"%0"_left.=Cannot_move_group_"%0"_left.
@@ -290,8 +252,6 @@ 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.
 
-Citation_import_from_CiteSeer_failed.=Citation_import_from_CiteSeer_failed.
-
 Cite_command_(for_Emacs/WinEdt)=Cite_command_(for_Emacs/WinEdt)
 
 CiteSeer_Error=CiteSeer_Error
@@ -306,8 +266,6 @@ CiteSeer_Import_Fields=CiteSeer_Import_Fields
 
 CiteSeer_Transfer=CiteSeer_Transfer
 
-CiteSeer_Warning=CiteSeer_Warning
-
 Class_name=Class_name
 
 Clear=Clear
@@ -315,28 +273,14 @@ Clear=Clear
 clear_all_groups=clear_all_groups
 
 Clear_field=Clear_field
+Clear_fields=Clear_fields
 
 Clear_highlight=Clear_highlight
 
-Clear_highlighted=Clear_highlighted
-
-Clear_highlighted_groups=Clear_highlighted_groups
-
-Clear_inputarea=Clear_text_input_area
-
-Clear_search=Clear_search
-
 Close=Close
 
-Close_database=Close_database
-
 Close_dialog=Close_dialog
 
-# The following lines correspond to names of key bindings:
-Close_entry_editor=Close_entry_editor
-
-Close_preamble_editor=Close_preamble_editor
-
 Close_the_current_database=Close_the_current_database
 
 Close_the_help_window=Close_the_help_window
@@ -357,8 +301,6 @@ Command_line_id=Command_line_id
 
 Complete_record=Complete_record
 
-Completed_citation_import_from_CiteSeer.=Completed_citation_import_from_CiteSeer.
-
 Completed_Import_Fields_from_CiteSeer.=Completed_Import_Fields_from_CiteSeer.
 
 Completed_import_from_CiteSeer.=Completed_import_from_CiteSeer.
@@ -377,12 +319,8 @@ Copied_keys=Copied_keys
 
 Copy=Copy
 
-Copy_\cite{BibTeX_key}=Copy_cite\{BibTeX_key}
-
 Copy_BibTeX_key=Copy_BibTeX_key
 
-Copy_to_clipboard=Copy_to_clipboard
-
 Could_not_call_executable=Could_not_call_executable
 
 Could_not_connect_to_a_running_gnuserv_process._Make_sure_that_Emacs_or_XEmacs_is_running,<BR>and_that_the_server_has_been_started_(by_running_the_command_'gnuserv-start').=Could_not_connect_to_a_running_gnuserv_process._Make_sure_that_Emacs_or_XEmacs_is_running,<BR>and_that_the_server_has_been_started_(by_running_the_command_'gnuserv-start').
@@ -398,6 +336,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_image_file=Could_not_find_image_file
 
 Could_not_find_layout_file=Could_not_find_layout_file
 
@@ -423,13 +362,9 @@ Couldn't_parse_the_'citeseerurl'_field_of_the_following_entries=Couldn't_parse_t
 
 Create_group=Create_group
 
-Created_group=Created_group
-
-Created_group_"%0".=Created_group_"%0".
-
 Created_groups.=Created_groups.
 
-Curly_braces_{_and_}_must_be_balanced.=Curly_braces_{_and_}_must_be_balanced.
+crossreferenced_entries_included=crossreferenced_entries_included
 
 Current_content=Current_content
 
@@ -438,8 +373,8 @@ Current_value=Current_value
 Custom_entry_types=Custom_entry_types
 
 Custom_entry_types_found_in_file=Custom_entry_types_found_in_file
-
-Custom_export=Custom_export
+Custom_icon_theme=Custom_icon_theme
+Custom_icon_theme_file=Custom_icon_theme_file
 
 Custom_importers=Custom_importers
 
@@ -471,8 +406,6 @@ Default_grouping_field=Default_grouping_field
 
 Default_look_and_feel=Default_look_and_feel
 
-Default_owner=Default_owner
-
 Default_pattern=Default_pattern
 
 Default_sort_criteria=Default_sort_criteria
@@ -499,8 +432,6 @@ Delete_strings=Delete_strings
 
 Deleted=Deleted
 
-Deleted_entry=Deleted_entry
-
 Delimit_fields_with_semicolon,_ex.=Delimit_fields_with_semicolon,_ex.
 
 Descending=Descending
@@ -508,6 +439,7 @@ Descending=Descending
 Description=Description
 
 Deselect_all=Deselect_all
+Deselect_all_duplicates=Deselect_all_duplicates
 
 Details=Details
 
@@ -526,6 +458,7 @@ Display_help_on_command_line_options=Display_help_on_command_line_options
 Display_imported_entries_in_an_inspection_window_before_they_are_added.=Display_imported_entries_in_an_inspection_window_before_they_are_added.
 
 Display_only_entries_belonging_to_all_selected_groups.=Display_only_entries_belonging_to_all_selected_groups.
+Display_version=Display_version
 
 Displaying_no_groups=Displaying_no_groups
 
@@ -555,18 +488,10 @@ Download_file=Download_file
 
 Downloading...=Downloading...
 
-Due_to_the_duplicate_BibTeX_key,_the_groups_assignment(s)_for_this_entryncannot_be_restored_correctly_when_reopening_this_database._It_is_recommendednthat_you_have_JabRef_generate_a_unique_key_now_to_prevent_this_problem.=Due_to_the_duplicate_BibTeX_key,_the_groups_assignment(s)_for_this_entryncannot_be_restored_correctly_when_reopening_this_database._It_is_recommendednthat_you_have_JabRef_generate_a_unique_key_now_to_prevent_this_problem.
-
-dummy=dummy
-
-Duplicate_BibTeX_key=duplicate_BibTeX_key
-
 duplicate_BibTeX_key=duplicate_BibTeX_key
 
 Duplicate_BibTeX_key.=Duplicate_BibTeX_key.
 
-duplicate_BibTeX_key.=duplicate_BibTeX_key.
-
 Duplicate_BibTeX_key._Grouping_may_not_work_for_this_entry.=Duplicate_BibTeX_key._Grouping_may_not_work_for_this_entry.
 
 Duplicate_Key_Warning=Duplicate_Key_Warning
@@ -593,24 +518,18 @@ Edit=Edit
 
 Edit_custom_export=Edit_custom_export
 
-Edit_entry=Edit_entry
-
 Edit_group=Edit_Group
 
 Edit_journal=Edit_journal
 
 Edit_preamble=Edit_preamble
 
-Edit_strings=Edit_strings
-
 empty_BibTeX_key=empty_BibTeX_key
 
 Empty_BibTeX_key.=Empty_BibTeX_key.
 
 Empty_BibTeX_key._Grouping_may_not_work_for_this_entry.=Empty_BibTeX_key._Grouping_may_not_work_for_this_entry.
 
-Empty_database=Empty_database
-
 empty_database=empty_database
 
 Enable_source_editing=Enable_source_editing
@@ -635,23 +554,10 @@ entry=entry
 
 Entry_editor=Entry_editor
 
-# The following lines correspond to names of key bindings:
-Entry_editor,_next_entry=Entry_editor,_next_entry
-
-Entry_editor,_next_panel=Entry_editor,_next_panel
-
-Entry_editor,_previous_entry=Entry_editor,_previous_entry
-
-Entry_editor,_previous_panel=Entry_editor,_previous_panel
-
-Entry_editor,_store_field=Entry_editor,_store_field
-
 Entry_in_current_database=Entry_in_current_database
 
 Entry_in_import=Entry_in_import
 
-Entry_is_incomplete=Entry_is_incomplete
-
 Entry_preview=Entry_preview
 
 Entry_table=Entry_table
@@ -664,34 +570,29 @@ Entry_type_names_are_not_allowed_to_contain_white_space_or_the_following_charact
 
 Entry_types=Entry_types
 
-EOF_in_mid-string=EOF_in_mid-string
-
 Error=Error
+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_line=Error_in_line
-
-Error_messages=Error_messages
+Error_occured_when_parsing_entry=Error_occurred_when_parsing_entry
 
 Error_opening_file=Error_opening_file
 
 Error_setting_field=Error_setting_field
+Error_while_writing=Error_while_writing
+Exceptions=Exceptions
 
 Existing_file=Existing_file
 
-exists._Overwrite?=exists._Overwrite?
-
 exists._Overwrite_file?=exists._Overwrite_file?
+exists.Overwrite?=exists._Overwrite?
 
 Exit=Exit
 
 Expand_subtree=Expand_subtree
 
-Explicit=Explicit
-
-#previous entry not translated. To view it, open Group interface and click on the "new group" button
+#previousentrynottranslated.Toviewit,openGroupinterfaceandclickonthe"newgroup"button
 Export=Export
 
 Export_entry_types=Export_entry_types
@@ -704,12 +605,8 @@ Export_preferences_to_file=Export_preferences_to_file
 
 Export_properties=Export_properties
 
-Export_selected_to_clipboard=Export_selected_to_clipboard
-
 Export_to_clipboard=Export_to_clipboard
 
-Exported_database_to_file=Exported_database_to_file
-
 Exporting=Exporting
 
 External_changes=External_changes
@@ -726,18 +623,11 @@ Fetch=Fetch
 
 Fetch_Articles_Citing_your_Database=Fetch_Articles_Citing_your_Database
 
-Fetch_Citations_from_CiteSeer=Fetch_Citations_from_CiteSeer
-
-Fetch_citations_from_CiteSeer=Fetch_citations_from_CiteSeer
-
 Fetch_CiteSeer=Fetch_CiteSeer
+Fetch_CiteSeer_by_ID=Fetch_CiteSeer_by_ID
 
 Fetch_Medline=Fetch_Medline
 
-fetch_Medline=fetch_Medline
-
-Fetch_Medline_by_author=Fetch_Medline_by_author
-
 Fetch_Medline_by_ID=Fetch_Medline_by_ID
 
 Fetched_all_citations_from_target_database.=Fetched_all_citations_from_target_database.
@@ -746,8 +636,6 @@ Fetching_Citations=Fetching_Citations
 
 Fetching_Identifiers=Fetching_Identifiers
 
-Fetching_Medline...=Fetching_Medline...
-
 Fetching_Medline_by_ID...=Fetching_Medline_by_ID...
 
 Fetching_Medline_by_id_...=Fetching_Medline_by_id_...
@@ -758,19 +646,16 @@ Field=Field
 
 field=field
 
-# Integrity check is a process that checks for indications of wrongly filled out bibtex fields. "Scan" is the button that starts the check.
+#Integritycheckisaprocessthatchecksforindicationsofwronglyfilledoutbibtexfields."Scan"isthebuttonthatstartsthecheck.
 Field_content=Field_content
 
 Field_name=Field_name
 
-Field_names_are_not_allowed_to_contain_white_space_or_the_following_characters=Field_names_are_not_allowed_to_contain_white_space_or_the_following_characters
-
 Field_sizes=Field_sizes
+Field_to_filter=Field_to_filter
 
 Field_to_group_by=Field_to_group_by
 
-Field_to_search=Field_to_search
-
 Fields=Fields
 
 File=File
@@ -780,11 +665,10 @@ file=file
 File_'%0'_not_found=File_'%0'_not_found
 
 File_changed=File_changed
+File_exists=File_exists
 
 File_extension=File_extension
 
-File_has_been_updated_externally._Are_you_sure_you_want_to_save?=File_has_been_updated_externally._Are_you_sure_you_want_to_save?
-
 File_not_found=File_not_found
 
 File_updated_externally=File_updated_externally
@@ -795,17 +679,15 @@ Files_opened=Files_opened
 
 Filter=Filter
 
-Find_duplicates=Find_duplicates
-
-Finished_autosetting_%0_field._Entries_changed:_%1.=Finished_autosetting_%0_field._Entries_changed:_%1.
-
 Finished_synchronizing_%0_links._Entries_changed%c_%1.=Finished_synchronizing_%0_links._Entries_changed%c_%1.
+Finished_writing_XMP_for_%0_file_(%1_skipped,_%2_errors).=Finished_writing_XMP_for_%0_file_(%1_skipped,_%2_errors).
 
 First_select_the_entries_you_want_keys_to_be_generated_for.=First_select_the_entries_you_want_keys_to_be_generated_for.
 
 Fit_table_horizontally_on_screen=Fit_table_horizontally_on_screen
 
 Float=Float
+Float_marked_entries=Float_marked_entries
 
 Font_Family=Font_Family
 
@@ -820,8 +702,10 @@ FontSelector=FontSelector
 for=for
 
 Format_of_author_and_editor_names=Format_of_author_and_editor_names
+Format_String=Format_String
 
 Format_used=Format_used
+Formatter_Name=Formatter_Name
 
 Formatter_not_found=Formatter_not_found
 
@@ -842,6 +726,7 @@ Generate_BibTeX_key=Generate_BibTeX_key
 Generate_keys=Generate_keys
 
 Generate_keys_before_saving_(for_entries_without_a_key)=Generate_keys_before_saving_(for_entries_without_a_key)
+Generate_keys_for_imported_entries=Generate_keys_for_imported_entries
 
 Generate_now=Generate_now
 
@@ -857,12 +742,10 @@ Gray_out_non-hits=Gray_out_non-hits
 
 Gray_out_non-matching_entries=Gray_out_non-matching_entries
 
-Group_definitions_have_been_converted_to_JabRef_1.7_format.=Group_definitions_have_been_converted_to_JabRef_1.7_format.
-
-Group_name=Group_name
-
 Group_properties=Group_properties
 
+grouping_may_not_work_for_this_entry=grouping_may_not_work_for_this_entry
+
 Groups=Groups
 
 Harvard_RTF=Harvard_RTF
@@ -871,11 +754,11 @@ 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
+Help_on_Preview_Settings=Help_on_Preview_Settings
+Help_on_Regular_Expression_Search=Help_on_Regular_Expression_Search
 
 Hide_non-hits=Hide_non-hits
 
@@ -885,17 +768,13 @@ 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_groups_that_contain_entries_contained_in_any_currently_selected_group=Highlight_groups_that_contain_entries_contained_in_any_currently_selected_group
-
 Highlight_overlapping_groups=Highlight_overlapping_groups
 
 Hint%c_To_search_specific_fields_only,_enter_for_example%c<p><tt>author%esmith_and_title%eelectrical</tt>=Hint%c_To_search_specific_fields_only,_enter_for_example%c<p><tt>author%esmith_and_title%eelectrical</tt>
 
 HTML=HTML
+HTML_table=HTML_table
+HTML_table_(with_Abstract_&_BibTeX)=HTML_table_(with_Abstract_&_BibTeX)
 
 Ignore=Ignore
 
@@ -905,34 +784,20 @@ Immediate_subgroups=Immediate_subgroups
 
 Import=Import
 
-Import_and_append=Import_and_append
-
 Import_and_keep_old_entry=Import_and_keep_old_entry
 
 Import_and_remove_old_entry=Import_and_remove_old_entry
 
 Import_cancelled.=Import_cancelled.
 
-Import_Data_from_CiteSeer=Import_Data_from_CiteSeer
-
 Import_Data_from_CiteSeer_Database=Import_Data_from_CiteSeer_Database
 
-Import_database=Import_database
-
 Import_entries=Import_entries
 
 Import_entry_types=Import_entry_types
 
 Import_failed=Import_failed
 
-Import_Fields_from_CiteSeer=Import_Fields_from_CiteSeer
-
-# I have reformulated the following lines, because the 1st person form is not suitable:
-# (Folgende_URL_konnte_nicht_analysiert_werden)
-Import_fields_from_CiteSeer=Import_fields_from_CiteSeer
-
-Import_fields_from_CiteSeer_Database=Import_fields_from_CiteSeer_Database
-
 Import_Fields_from_CiteSeer_Database=Import_Fields_from_CiteSeer_Database
 
 Import_file=Import_file
@@ -941,8 +806,6 @@ Import_group_definitions=Import_group_definitions
 
 Import_name=Import_name
 
-Import_plain_text=Import_fields_from_plain_text
-
 Import_preferences=Import_preferences
 
 Import_preferences_from_file=Import_preferences_from_file
@@ -959,8 +822,6 @@ Imported_entries=Imported_entries
 
 Imported_entry_types=Imported_entry_types
 
-Imported_file=Imported_file
-
 Imported_from_database=Imported_from_database
 
 ImportFormat_class=ImportFormat_class
@@ -974,8 +835,7 @@ Importing_in_unknown_format=Importing_in_unknown_format
 In_JabRef,_use_pairs_of_#_characters_to_indicate_a_string.=In_JabRef,_use_pairs_of_#_characters_to_indicate_a_string.
 
 Include_abstracts=Include_abstracts
-
-Include_subgroups=Include_subgroups
+Include_entries=Include_entries
 
 Include_subgroups\:_When_selected,_view_entries_contained_in_this_group_or_its_subgroups=Include_subgroups:_When_selected,_view_entries_contained_in_this_group_or_its_subgroups
 
@@ -985,8 +845,6 @@ Incremental_search=Incremental_search
 
 Incremental_search_failed._Repeat_to_search_from_top.=Incremental_search_failed._Repeat_to_search_from_top.
 
-Independent=Independent
-
 Independent_group\:_When_selected,_view_only_this_group's_entries=Independent_group:_When_selected,_view_only_this_group's_entries
 
 Initially_show_groups_tree_expanded=Initially_show_groups_tree_expanded
@@ -1007,17 +865,13 @@ insert_string_=insert_string_
 
 Insert_URL=Insert_URL
 
-INSPEC=INSPEC
-
 integrity=integrity
 
-# Integrity check is a process that checks for indications of wrongly filled out bibtex fields. "Scan" is the button that starts the check.
+#Integritycheckisaprocessthatchecksforindicationsofwronglyfilledoutbibtexfields."Scan"isthebuttonthatstartsthecheck.
 Integrity_check=Integrity_check
 
 Intersection=Intersection
 
-Intersection_with_supergroups=Intersection_with_supergroups
-
 Invalid_BibTeX_key=Invalid_BibTeX_key
 
 Invalid_date_format=Invalid_date_format
@@ -1028,8 +882,6 @@ Inverted=Inverted
 
 is_a_standard_type.=is_a_standard_type.
 
-ISI=ISI
-
 ISO_abbreviation=ISO_abbreviation
 
 Item_list_for_field=Item_list_for_field
@@ -1044,10 +896,6 @@ Journal_list_preview=Journal_list_preview
 
 Journal_name=Journal_name
 
-Journal_names=Journal_names
-
-JStor_file=JStor_file
-
 Keep=Keep
 
 Keep_both=Keep_both
@@ -1066,7 +914,7 @@ Key_pattern=Key_pattern
 
 keys_in_database=keys_in_database
 
-#not translated. To view it, use menu "Tools|New BibTeX file from AUx file", and launch the action on a non-existant aux file.
+#nottranslated.Toviewit,usemenu"Tools|NewBibTeXfilefromAUxfile",andlaunchtheactiononanon-existantauxfile.
 Keyword=Keyword
 
 Label=Label
@@ -1075,8 +923,6 @@ Language=Language
 
 Last_modified=Last_modified
 
-Latex_AUX_file=LaTeX_AUX_file
-
 LaTeX_AUX_file=LaTeX_AUX_file
 
 Left=Left
@@ -1094,8 +940,9 @@ Load_session=Load_session
 Loading_session...=Loading_session...
 
 Look_and_feel=Look_and_feel
+Looking_for_pdf...=Looking_for_pdf...
 
-lower=lower
+Mac_file_dialog=Mac_file_dialog
 
 Main_layout_file=Main_layout_file
 
@@ -1105,8 +952,6 @@ Main_PS_directory=Main_PS_directory
 
 Manage=Manage
 
-Manage_content_selectors=Manage_content_selectors
-
 Manage_custom_exports=Manage_custom_exports
 
 Manage_custom_imports=Manage_custom_imports
@@ -1125,16 +970,10 @@ Marked_selected=Marked_selected
 
 Medline_entries_fetched=Medline_entries_fetched
 
-Medline_XML=Medline_XML
-
-Medline_XML_File=Medline_XML_File
-
 Menu_and_label_font_size=Menu_and_label_font_size
 
 Merged_external_changes=Merged_external_changes
 
-messages=messages
-
 Messages=Messages
 
 Messages_and_Hints=Hints_and_Warnings
@@ -1147,8 +986,6 @@ Modified_group_"%0".=Modified_group_"%0".
 
 Modified_groups=Modified_groups
 
-Modified_groups_tree=Modified_groups_tree
-
 Modified_string=Modified_string
 
 Modify=Modify
@@ -1165,19 +1002,16 @@ Move_entries_in_group_selection_to_the_top=Move_entries_in_group_selection_to_th
 
 move_group=move_group
 
-Move_matching_entries_to_the_top=Move_matching_entries_to_the_top
-
 Move_string_down=Move_string_down
 
 Move_string_up=Move_string_up
 
 Move_up=Move_up
 
-Moved_Group=Moved_Group
-
 Moved_group_"%0".=Moved_group_"%0".
 
 Name=Name
+Name_formatter=Name_formatter
 
 Natbib_style=Natbib_style
 
@@ -1187,52 +1021,25 @@ New=New
 
 new=new
 
-New_article=New_article
-
 New_BibTeX_database=New_BibTeX_database
 
 New_BibTeX_entry=New_BibTeX_entry
 
 New_BibTeX_subdatabase=New_BibTeX_subdatabase
 
-New_book=New_book
-
 New_content=New_content
 
-New_database=New_database
-
 New_database_created.=New_database_created.
-
-New_entry=New_entry
-
-New_entry...=New_entry...
-
-New_entry_from_plain_text=New_entry_from_plain_text
+New_field_value=New_field_value
 
 New_file=New_file
 
 New_group=New_group
 
-New_inbook=New_inbook
-
-New_mastersthesis=New_mastersthesis
-
-New_phdthesis=New_phdthesis
-
-New_proceedings=New_proceedings
-
 New_string=New_string
 
-New_subdatabase=New_subdatabase
-
-New_subdatabase_based_on_AUX_file=New_subdatabase_based_on_AUX_file
-
-New_unpublished=New_unpublished
-
 Next_entry=Next_entry
 
-Next_tab=Next_tab
-
 No_%0_found=No_%0_found
 
 No_actual_changes_found.=No_actual_changes_found.
@@ -1252,10 +1059,10 @@ No_entries_imported.=No_entries_imported.
 No_entries_or_multiple_entries_selected.=No_entries_or_multiple_entries_selected.
 
 No_entries_selected=No_entries_selected
+No_entries_selected.=No_entries_selected.
 
 No_exceptions_have_ocurred.=No_exceptions_have_ocurred.
-
-No_file_extension._Could_not_find_viewer_for_file.=No_file_extension._Could_not_find_viewer_for_file.
+No_file_associated=No_file_associated
 
 No_GUI._Only_process_command_line_options.=No_GUI._Only_process_command_line_options.
 
@@ -1273,10 +1080,6 @@ No_saved_session_found.=No_saved_session_found.
 
 No_url_defined=No_url_defined
 
-non-Mac_only=non-Mac_only
-
-Normal=Normal
-
 not=not
 
 not_found=not_found
@@ -1285,15 +1088,13 @@ Not_saved_(empty_session)=Not_saved_(empty_session)
 
 Note_that_the_entry_causing_the_problem_has_been_selected.=Note_that_the_entry_causing_the_problem_has_been_selected.
 
-Note_that_the_new_definitions_will_not_be_compatible_with_previous_JabRef_versions.=Note_that_the_new_definitions_will_not_be_compatible_with_previous_JabRef_versions.
-
 Note_that_you_must_specify_the_fully_qualified_class_name_for_the_look_and_feel,=Note_that_you_must_specify_the_fully_qualified_class_name_for_the_look_and_feel,
 
 Nothing_to_redo=Nothing_to_redo
 
 Nothing_to_undo=Nothing_to_undo
 
-# The next is used like in "References found: 1  Number of references to fetch?"
+#Thenextisusedlikein"Referencesfound:1Numberofreferencestofetch?"
 Number_of_references_to_fetch?=Number_of_references_to_fetch?
 
 occurences=occurences
@@ -1306,8 +1107,6 @@ One_or_more_keys_will_be_overwritten._Continue?=One_or_more_keys_will_be_overwri
 
 Open=Open
 
-open=open
-
 Open_BibTeX_database=Open_BibTeX_database
 
 Open_database=Open_database
@@ -1323,6 +1122,7 @@ Open_PDF_or_PS=Open_PDF_or_PS
 Open_right-click_menu_with_Ctrl+left_button=Open_right-click_menu_with_Ctrl+left_button
 
 Open_URL_or_DOI=Open_URL_or_DOI
+OpenDocument_Spreadsheet=OpenDocument_Spreadsheet
 
 Opened_database=Opened_database
 
@@ -1330,6 +1130,9 @@ Opening=Opening
 
 Opening_preferences...=Opening_preferences...
 
+OpenOffice_Calc=OpenOffice_Calc
+Operation_canceled.\n=Operation_canceled.\n
+
 Optional_fields=Optional_fields
 
 Options=Options
@@ -1337,21 +1140,21 @@ Options=Options
 or=or
 
 out_of=out_of
+Output=Output
 
 Output_or_export_file=Output_or_export_file
 
-Overlapping_groups=Overlapping_groups
-
 Override=Override
 
 Override_default_file_directories=Override_default_file_directories
 
+Override_default_font_settings=Override_default_font_settings
+
 override_the_bibtex_key_by_the_selected_text=override_the_bibtex_key_by_the_selected_text
+Overwrite_existing_field_values=Overwrite_existing_field_values
 
 Overwrite_keys=Overwrite_keys
 
-Ovid=Ovid
-
 pairs_processed=pairs_processed
 
 Paste=Paste
@@ -1360,8 +1163,6 @@ paste_entries=paste_entries
 
 paste_entry=paste_entry
 
-Paste_from_clipboard=Paste_from_clipboard
-
 Pasted=Pasted
 
 Path_to_HTML_viewer=Path_to_HTML_viewer
@@ -1374,26 +1175,16 @@ Path_to_PS_viewer=Path_to_PS_viewer
 
 Path_to_WinEdt.exe=Path_to_WinEdt.exe
 
-Paths_to_external_programs=Paths_to_external_programs
-
 PDF_directory=PDF_directory
 
-PDF_links=PDF_links
-
 Personal_journal_list=Personal_journal_list
 
 Pick_titles=Pick_titles
 
-Plain_right_menu=Plain_right_menu
-
-Plain_text=Plain_text
-
 Plain_text_import=Plain_text_import
 
 Please_check_your_network_connection_to_this_machine.=Please_check_your_network_connection_to_this_machine.
 
-Please_define_BibTeX_key_first=Please_define_BibTeX_key_first
-
 Please_enter_a_name_for_the_group.=Please_enter_a_name_for_the_group.
 
 Please_enter_a_search_term._For_example,_to_search_all_fields_for_<b>Smith</b>,_enter%c<p><tt>smith</tt><p>To_search_the_field_<b>Author</b>_for_<b>Smith</b>_and_the_field_<b>Title</b>_for_<b>electrical</b>,_enter%c<p><tt>author%esmith_and_title%eelectrical</tt>=Please_enter_a_search_term._For_example,_to_search_all_fields_for_<b>Smith</b>,_enter%c<p><tt>smith</tt><p>To_search_the_field_<b>Author</b>_for_<b>Smith</b>_and_the_field_<b>Title</b>_for_<b>electrical</b>,_enter%c<p><tt>author% [...]
@@ -1420,54 +1211,36 @@ Possible_duplicate_of_existing_entry._Click_to_resolve.=Possible_duplicate_of_ex
 
 Preamble=Preamble
 
-Preamble_editor,_store_changes=Preamble_editor,_store_changes
-
 Preferences=Preferences
 
-Preferences_recorded=Preferences_recorded
-
 Preferences_recorded.=Preferences_recorded.
 
-Preserve_formatting_of_non-BibTeX_fields=Preserve_formatting_of_non-BibTeX_fields
-
 Preview=Preview
 
 Previous_entry=Previous_entry
 
-Previous_tab=Previous_tab
-
 Primary_sort_criterion=Primary_sort_criterion
 
 Problem_with_parsing_entry=Problem_with_parsing_entry
+Program_output=Program_output
 
 PS_directory=PS_directory
-
-PS_links=PS_links
+Push_entries_to_external_application_(%0)=Push_entries_to_external_application_(%0)
 
 Push_selection_to_Emacs=Push_selection_to_Emacs
 
-push_selection_to_lyx=push_selection_to_LyX
-
 Push_selection_to_LyX/Kile=Push_selection_to_LyX/Kile
 
 Push_selection_to_WinEdt=Push_selection_to_WinEdt
 
 Push_to_LatexEditor=Push_to_LatexEditor
 
-Push_to_LyX=Push_to_LyX
-
-Push_to_WinEdt=Push_to_WinEdt
-
 Pushed_citations_to_Emacs=Pushed_citations_to_Emacs
 
 Pushed_citations_to_WinEdt=Pushed_citations_to_WinEdt
 
 Pushed_the_citations_for_the_following_rows_to=Pushed_the_citations_for_the_following_rows_to
 
-Query_author(s)=Query_author(s)
-
-Quit=Quit
-
 Quit_JabRef=Quit_JabRef
 
 Quit_synchronization=Quit_synchronization
@@ -1478,23 +1251,17 @@ Really_delete_the_selected=Really_delete_the_selected
 
 Rearrange_tabs_alphabetically_by_title=Rearrange_tabs_alphabetically_by_title
 
-Recent_files=Recent_files
-
 Redo=Redo
 
-Refer/Endnote=Refer/Endnote
-
 Reference_database=Reference_database
 
-# The next two lines are used like in "References found: 1  Number of references to fetch?"
+#Thenexttwolinesareusedlikein"Referencesfound:1Numberofreferencestofetch?"
 References_found=References_found
 
 Refine_supergroup\:_When_selected,_view_entries_contained_in_both_this_group_and_its_supergroup=Refine_supergroup:_When_selected,_view_entries_contained_in_both_this_group_and_its_supergroup
 
 Refresh_view=Refresh_view
 
-Regexp=Regexp
-
 Regular_Expression=Regular_Expression
 
 Remember_these_entry_types?=Remember_these_entry_types?
@@ -1543,14 +1310,10 @@ Remove_old_entry=Remove_old_entry
 
 Remove_selected_strings=Remove_selected_strings
 
-remove_string=remove_string
-
 remove_string_=remove_string_
 
 Removed_entry_type.=Removed_entry_type.
 
-Removed_group=Removed_group
-
 Removed_group_"%0".=Removed_group_"%0".
 
 Removed_group_"%0"_and_its_subgroups.=Removed_group_"%0"_and_its_subgroups.
@@ -1559,8 +1322,6 @@ Removed_string=Removed_string
 
 Renamed_string=Renamed_string
 
-Repeat_incremental_search=Repeat_incremental_search
-
 Replace=Replace
 
 Replace_(regular_expression)=Replace_(regular_expression)
@@ -1587,16 +1348,12 @@ Review_changes=Review_changes
 
 Right=Right
 
-RIS=RIS
-
 Save=Save
 
 Save_before_closing=Save_before_closing
 
 Save_database=Save_database
 
-Save_database_as_...=Save_database_as_...
-
 Save_entries_in_their_original_order=Save_entries_in_their_original_order
 
 Save_failed=Save_failed
@@ -1609,10 +1366,6 @@ 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_...
-
-Save_session=Save_session
-
 Saved_database=Saved_database
 
 Saved_selected_to=Saved_selected_to
@@ -1625,8 +1378,6 @@ Saving_database=Saving_database
 
 Scan=Scan
 
-SciFinder=SciFinder
-
 Search=Search
 
 Search_All_Fields=Search_All_Fields
@@ -1639,24 +1390,16 @@ Search_expression=Search_expression
 
 Search_for=Search_for
 
-Search_General_Fields=Search_General_Fields
-
 Search_general_fields=Search_general_fields
 
 Search_IEEEXplore=Search_IEEEXplore
 
-Search_Optional_Fields=Search_Optional_Fields
-
 Search_optional_fields=Search_optional_fields
 
-Search_Required_Fields=Search_Required_Fields
-
 Search_required_fields=Search_required_fields
 
 Search_Specified_Field(s)=Search_Specified_Field(s)
 
-Search_term=Search_term
-
 Searched_database._Global_number_of_hits=Searched_database._Global_number_of_hits
 
 Searched_database._Number_of_hits=Searched_database._Number_of_hits
@@ -1682,6 +1425,7 @@ Select_encoding=Select_encoding
 Select_entries_in_group_selection=Select_entries_in_group_selection
 
 Select_entry_type=Select_entry_type
+Select_external_application=Select_external_application
 
 Select_file_from_ZIP-archive=Select_file_from_ZIP-archive
 
@@ -1689,20 +1433,20 @@ Select_format=Select_format
 
 Select_matches=Select_matches
 
-Select_matching_entries=Select_matching_entries
-
 Select_new_ImportFormat_Subclass=Select_new_ImportFormat_Subclass
 
 Select_the_tree_nodes_to_view_and_accept_or_reject_changes=Select_the_tree_nodes_to_view_and_accept_or_reject_changes
+Selected_entries=Selected_entries
 
 Selector_enabled_fields=Selector_enabled_fields
+Set/clear_fields=Set/clear_fields
+Set_field=Set_field
+Set_fields=Set_fields
 
 Set_general_fields=Set_general_fields
 
 Set_table_font=Set_table_font
 
-Set_up_general_fields=Set_up_general_fields
-
 Settings=Settings
 
 Setup_selectors=Setup_selectors
@@ -1717,8 +1461,6 @@ Show_'Firstname_Lastname'=Show_'Firstname_Lastname'
 
 Show_'Lastname,_Firstname'=Show_'Lastname,_Firstname'
 
-Show_abstract=Show_abstract
-
 Show_BibTeX_source_by_default=Show_BibTeX_source_by_default
 
 Show_BibTeX_source_panel=Show_BibTeX_source_panel
@@ -1733,13 +1475,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_general_fields=Show_general_field
-
-Show_groups_matching_all=Show_groups_matching_all
-
-Show_groups_matching_any=Show_groups_matching_any
-
 Show_icons_for_groups=Show_icons_for_groups
+Show_last_names_only=Show_last_names_only
 
 Show_names_unchanged=Show_names_unchanged
 
@@ -1749,8 +1486,6 @@ Show_one_more_row=Show_one_more_row
 
 Show_optional_fields=Show_optional_field
 
-Show_overlapping_groups=Show_overlapping_groups
-
 Show_PDF/PS_column=Show_PDF/PS_column
 
 Show_required_fields=Show_required_fields
@@ -1763,39 +1498,33 @@ Show_warning_dialog_when_an_empty_BibTeX_key_is_entered=Show_warning_dialog_when
 
 Simple_HTML=Simple_HTML
 
-Sixpack=Sixpack
-
 Size=Size
 
-Size_of_groups_interface_(rows)=Size_of_groups_interface_(rows)
-
 Skip=Skip
+Skipped_-_No_PDF_linked=Skipped_-_No_PDF_linked
+Skipped_-_PDF_does_not_exist=Skipped_-_PDF_does_not_exist
+
+Skipped_entry.=Skipped_entry.
 
 Sort_alphabetically=Sort_alphabetically
 
 Sort_Automatically=Sort_automatically
 
-Sort_options=Sort_options
-
 sort_subgroups=sort_subgroups
 
-Sorted_all_subgroups_recursively=Sorted_all_subgroups_recursively
-
 Sorted_all_subgroups_recursively.=Sorted_all_subgroups_recursively.
 
-Sorted_immediate_subgroups=Sorted_immediate_subgroups
-
 Sorted_immediate_subgroups.=Sorted_immediate_subgroups.
 
 source_edit=source_edit
+Special_Name_Formatters=Special_Name_Formatters
 
 Special_table_columns=Special_table_columns
 
-Start=Start
-
 Start_incremental_search=Start_incremental_search
 
 Start_search=Start_search
+Starting_import=Starting_import
 
 Statically_group_entries_by_manual_assignment=Statically_group_entries_by_manual_assignment
 
@@ -1805,8 +1534,6 @@ Stop=Stop
 
 Store=Store
 
-Store_fields_with_double_braces,_and_remove_extra_braces_when_loading.<BR>Double_braces_signal_that_BibTeX_should_preserve_character_case.=Store_fields_with_double_braces,_and_remove_extra_braces_when_loading.<BR>Double_braces_signal_that_BibTeX_should_preserve_character_case.
-
 Store_journal_abbreviations=Store_journal_abbreviations
 
 Store_string=Store_string
@@ -1817,28 +1544,20 @@ Stored_definition_for_type=Stored_definition_for_type
 
 Stored_entry=Stored_entry
 
-Stored_entry.=Stored_entry.
-
 Strings=Strings
 
 Strings_for_database=Strings_for_database
 
-subdatabase_from_aux=bibtex_from_LaTex_aux
-
 Subdatabase_from_aux=Subdatabase_from_aux
 
 Suggest=Suggest
 
-Switch_preview_layout=Switch_preview_layout
-
 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
 
 Synchronizing_%0_links...=Synchronizing_%0_links...
 
-Table=Table
-
 Table_appearance=Table_appearance
 
 Table_background_color=Table_background_color
@@ -1867,10 +1586,6 @@ The_file<BR>'%0'<BR>has_been_modified<BR>externally!=The_file<BR>'%0'<BR>has_bee
 
 The_group_"%0"_already_contains_the_selection.=The_group_"%0"_already_contains_the_selection.
 
-The_group_"%0"_does_not_support_the_adding_of_entries.=The_group_"%0"_does_not_support_the_adding_of_entries.
-
-The_group_"%0"_does_not_support_the_removal_of_entries.=The_group_"%0"_does_not_support_the_removal_of_entries.
-
 The_label_of_the_string_can_not_be_a_number.=The_label_of_the_string_can_not_be_a_number.
 
 The_label_of_the_string_can_not_contain_spaces.=The_label_of_the_string_can_not_contain_spaces.
@@ -1895,12 +1610,8 @@ 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_action_will_modify_the_"%0"_field_of_your_entries.nThis_could_cause_undesired_changes_to_your_entries,_so_itnis_recommended_that_you_change_the_field_in_your_groupndefinition_to_"keywords"_or_a_non-standard_name.nnDo_you_still_want_to_continue?=This_action_will_modify_the_"%0"_field_of_your_entries.nThis_could_cause_undesired_changes_to_your_entries,_so_itnis_recommended_that_you_change_the_field_in_your_groupndefinition_to_"keywords"_or_a_non-standard_name.nnDo_you_still_want_to_continue?
-
 this_button_will_update=this_button_will_update
 
-this_button_will_update_the_column_width_settings<BR>to_match_the_current_widths_in_your_table=this_button_will_update_the_column_width_settings<BR>to_match_the_current_widths_in_your_table
-
 This_entry_is_incomplete=This_entry_is_incomplete
 
 This_entry_type_cannot_be_removed.=This_entry_type_cannot_be_removed.
@@ -1917,14 +1628,10 @@ 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._First_load_or_paste_some_text_into_the_text_input_area._After_that,_you_can_mark_text_and_assign_it_to_a_bibtex_field.=This_is_a_simple_copy_and_paste_dialog._First_load_or_paste_some_text_into_the_text_input_area._After_that,_you_can_mark_text_and_assign_it_to_a_bibtex_field.
-
 This_is_a_simple_copy_and_paste_dialog_for_import_some_fields_from_normal_text.=This_is_a_simple_copy_and_paste_dialog_for_import_some_fields_from_normal_text.
 
 This_makes_JabRef_look_up_each_%0_link_and_check_if_the_file_exists._If_not,_you_will_be_given_options<BR>to_resolve_the_problem.=This_makes_JabRef_look_up_each_%0_link_and_check_if_the_file_exists._If_not,_you_will_be_given_options<BR>to_resolve_the_problem.
 
-This_operation_cannot_work_on_multiple_rows.=This_operation_cannot_work_on_multiple_rows.
-
 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_one_or_more_entries_to_be_selected.=This_operation_requires_one_or_more_entries_to_be_selected.
@@ -1933,22 +1640,12 @@ To_set_up,_go_to_<B>Tools_->_Manage_journal_abbreviations</B>=To_set_up,_go_to_<
 
 Toggle_abbreviation=Toggle_abbreviation
 
-Toggle_entry_preview=Toggle_entry_preview
-
-Toggle_groups_interface=Toggle_groups_interface
-
-Toggle_search_panel=Toggle_search_panel
-
-Tools=Tools
-
 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
-
 unable_to_access_LyX-pipe=unable_to_access_LyX-pipe
 
 Unable_to_create_graphical_interface=Unable_to_create_graphical_interface
@@ -1956,6 +1653,8 @@ 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_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
 
@@ -1963,8 +1662,6 @@ Undo=Undo
 
 Union=Union
 
-unknown_bibtex_entries=unknown_bibtex_entries
-
 Unknown_bibtex_entries=Unknown_bibtex_entries
 
 unknown_edit=unknown_edit
@@ -1983,8 +1680,6 @@ Unmarked_selected=Unmarked_selected
 
 Unpack_EndNote_filter_set=Unpack_EndNote_filter_set
 
-Unpacked_file=Unpacked_file
-
 Unpacked_file.=Unpacked_file.
 
 Unsupported_version_of_class_%0:_%1=Unsupported_version_of_class_%0:_%1
@@ -1999,27 +1694,19 @@ Updated_group_selection=Updated_group_selection
 
 Updating_entries...=Updating_entries...
 
-UPPER=UPPER
-
-Upper_Each_First=Upper_Each_First
-
-Upper_first=Upper_first
-
 usage=usage
 
 Use_antialiasing_font=Use_antialiasing_font
-
-Use_antialiasing_font_in_table=Use_antialiasing_font_in_table
+Use_custom_icon_theme=Use_custom_icon_theme
 
 Use_inspection_window_also_when_a_single_entry_is_imported.=Use_inspection_window_also_when_a_single_entry_is_imported.
+Use_native_file_dialog=Use_native_file_dialog
 
 Use_other_look_and_feel=Use_other_look_and_feel
+Use_Regular_Expression_Search=Use_Regular_Expression_Search
 
 Use_regular_expressions=Use_Regular_Expressions
 
-#the previous entry is translated in the menu "Tools" but is not in the file Menu_fr.properties!!!
-Use_the_following_delimiter=Use_the_following_delimiter
-
 Use_the_following_delimiter_character(s)=Use_the_following_delimiter_character(s)
 
 Uses_default_application=Uses_default_application
@@ -2032,8 +1719,6 @@ verify_that_LyX_is_running_and_that_the_lyxpipe_is_valid=verify_that_LyX_is_runn
 
 View=View
 
-Visible_fields=Visible_fields
-
 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
@@ -2053,9 +1738,19 @@ When_adding/removing_keywords,_separate_them_by=When_adding/removing_keywords,_s
 with=with
 
 Word=Word
+Write_BibtexEntry_as_XMP-metadata_to_PDF.=Write_BibtexEntry_as_XMP-metadata_to_PDF.
+
+Write_XMP=Write_XMP
+Writing_XMP=Writing_XMP
+Writing_XMP_metadata...=Writing_XMP_metadata...
+Writing_XMP_metadata_for_selected_entries...=Writing_XMP_metadata_for_selected_entries...
 
 Wrong_file_format=Wrong_file_format
 
+XMP-annotated_PDF=XMP-annotated_PDF
+XMP_Export_Privacy_Settings=XMP_Export_Privacy_Settings
+XMP_metadata=XMP_metadata
+
 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_cleared_this_field._Original_value=You_have_cleared_this_field._Original_value
@@ -2066,105 +1761,165 @@ You_must_enter_an_integer_value_in_the_text_field_for=You_must_enter_an_integer_
 
 You_must_fill_in_a_name_for_the_entry_type.=You_must_fill_in_a_name_for_the_entry_type.
 
-You_must_provide_a_name,_a_search_string_and_a_field_name_for_this_group.=You_must_provide_a_name,_a_search_string_and_a_field_name_for_this_group.
-
 You_must_restart_JabRef_for_the_new_key_bindings_to_work_properly.=You_must_restart_JabRef_for_the_new_key_bindings_to_work_properly.
 
-You_must_select_a_row_to_perform_this_operation.=You_must_select_a_row_to_perform_this_operation.
-
 You_must_select_at_least_one_row_to_perform_this_operation.=You_must_select_at_least_one_row_to_perform_this_operation.
 
 You_must_set_both_BibTeX_key_and_%0_directory=You_must_set_both_BibTeX_key_and_%0_directory
 
-You_must_set_both_bibtex_key_and_PDF_directory=You_must_set_both_bibtex_key_and_PDF_directory
-
 Your_new_key_bindings_have_been_stored.=Your_new_key_bindings_have_been_stored.
-Float_marked_entries=Float_marked_entries
-Starting_import=Starting_import
-Output=Output
-Exceptions=Exceptions
-Program_output=Program_output
-
-grouping_may_not_work_for_this_entry=grouping_may_not_work_for_this_entry
-
-crossreferenced_entries_included=crossreferenced_entries_included
-Display_version=Display_version
-
-Override_default_font_settings=Override_default_font_settings
 
-Mac_file_dialog=Mac_file_dialog
-Use_native_file_dialog=Use_native_file_dialog
+Save_all_open_databases=Save_all_open_databases
+
+Include=Include
+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
+%0_directory_is_not_set_or_does_not_exist!=%0_directory_is_not_set_or_does_not_exist!
+%0_directory_is_'%1':=%0_directory_is_'%1':
+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_while_writing_XMP_%0=Error_while_writing_XMP_%0
+Error_writing_XMP_to_'%0'...=Error_writing_XMP_to_'%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
+Invalid_URL:_=Invalid_URL:_
+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_
+Drog_PDF=Drog_PDF
+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.
 
-XMP-annotated_PDF=XMP-annotated_PDF
-PDF_and_PS_links=PDF_and_PS_links
-Use_Regular_Expression_Search=Use_Regular_Expression_Search
-Help_on_Regular_Expression_Search=Help_on_Regular_Expression_Search
-writeXMP=writeXMP
+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.
-Select_external_application=Select_external_application
-Show_last_names_only=Show_last_names_only
-Help_on_Preview_Settings=Help_on_Preview_Settings
-Writing_XMP_metadata...=Writing_XMP_metadata...
-Writing_XMP_metadata_for_selected_entries...=Writing_XMP_metadata_for_selected_entries...
-Skipped_-_No_PDF_linked=Skipped_-_No_PDF_linked
-Finished_writing_XMP_for_%0_file_(%1_skipped,_%2_errors).=Finished_writing_XMP_for_%0_file_(%1_skipped,_%2_errors).
-
-Grouping_may_not_work_for_this_entry.=Grouping_may_not_work_for_this_entry.
-Write_BibtexEntry_as_XMP-metadata_to_PDF.=Write_BibtexEntry_as_XMP-metadata_to_PDF.
-write_XMP=write_XMP
-New_field_value=New_field_value
-Overwrite_existing_field_values=Overwrite_existing_field_values
-Include_entries=Include_entries
-Selected_entries=Selected_entries
-Fetch_CiteSeer_by_ID=Fetch_CiteSeer_by_ID
-Push_entries_to_external_application_(%0)=Push_entries_to_external_application_(%0)
-
-Write_XMP=Write_XMP
-Writing_XMP=Writing_XMP
-HTML_table=HTML_table
-Set/clear_fields=Set/clear_fields
-Clear_fields=Clear_fields
-Set_fields=Set_fields
-HTML_table_(with_Abstract_&_BibTeX)=HTML_table_(with_Abstract_&_BibTeX)
-
-OpenOffice_Calc=OpenOffice_Calc
-OpenDocument_Spreadsheet=OpenDocument_Spreadsheet
-
-Skipped_entry.=Skipped_entry.
-Error_occured_when_parsing_entry=Error_occurred_when_parsing_entry
-Operation_canceled.\n=Operation_canceled.\n
-Error_while_writing=Error_while_writing
-Skipped_-_PDF_does_not_exist=Skipped_-_PDF_does_not_exist
-Use_custom_icon_theme=Use_custom_icon_theme
-Custom_icon_theme=Custom_icon_theme
-Custom_icon_theme_file=Custom_icon_theme_file
-Unable_to_read_icon_theme_file=Unable_to_read_icon_theme_file
-Unable_to_read_default_icon_theme.=Unable_to_read_default_icon_theme.
-Could_not_find_image_file=Could_not_find_image_file
-Set_field=Set_field
-No_entries_selected.=No_entries_selected.
-Link_from_new_entries.=Link_from_new_entries.
-Link_from_new_entry=Link_from_new_entry
-Link_from_entries.=Link_from_entries.
-Link_from_entry=Link_from_entry
-exists.Overwrite?=exists._Overwrite?
-File_exists=File_exists
-No_file_associated=No_file_associated
-
-Exported_%0_entries_to_file=Exported_%0_entries_to_file
-Formatter_Name=Formatter_Name
-Format_String=Format_String
-Help_on_Name_Formatting=Help_on_Name_Formatting
-Special_Name_Formatters=Special_Name_Formatters
-Name_formatter=Name_formatter
-Deselect_all_duplicates=Deselect_all_duplicates
-Error_exporting_to_clipboard=Error_exporting_to_clipboard
-Generate_keys_for_imported_entries=Generate_keys_for_imported_entries
-Fetch_ArXiv.org=Fetch_ArXiv.org
-Looking_for_pdf...=Looking_for_pdf...
-Correct_the_entry,_and_reopen_editor_to_display/edit_source.=Correct_the_entry,_and_reopen_editor_to_display/edit_source.
-Field_to_filter=Field_to_filter
-XMP_Export_Privacy_Settings=XMP_Export_Privacy_Settings
-
-Do_not_write_the_following_fields_to_XMP_Metadata\:=Do_not_write_the_following_fields_to_XMP_Metadata:
-XMP_metadata=XMP_metadata
\ No newline at end of file
+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.
+Copy_files_to_%0.=Copy_files_to_%0.
+Move_files_to_%0.=Move_files_to_%0.
+Leave_file_in_its_current_directory.=Leave_file_in_its_current_directory.
+Copy_file_to_%0.=Copy_file_to_%0.
+Move_file_to_%0.=Move_file_to_%0.
+Extension=Extension
+Application=Application
+Icon=Icon
+
+Path_to_%0_not_defined=Path_to_%0_not_defined
+
+Error\:_=Error:_
+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
+Cannot_rename_for_several_entries.=Cannot_rename_for_several_entries.
+Rename_to_match_citekey=Rename_to_match_citekey
+
+Unable_to_open_file.=Unable_to_open_file.
+Define_'%0'=Define_'%0'
+Change_file_type=Change_file_type
+Undefined_file_type=Undefined_file_type
+
+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_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.
+
+Do_you_want_JabRef_to_do_the_following_operations?=Do_you_want_JabRef_to_do_the_following_operations?
+Upgrade_file=Upgrade_file
+
+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
diff --git a/src/resource/JabRef_fr.properties b/src/resource/JabRef_fr.properties
index c0021a1..cbd1618 100644
--- a/src/resource/JabRef_fr.properties
+++ b/src/resource/JabRef_fr.properties
@@ -1,8 +1,6 @@
 #!
 #! created/edited by Popeye version 0.54 (popeye.sourceforge.net)
 #! encoding:ISO-8859-1
-
-!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.=!Ceci_est_simplement_une_fen\u00eatre_de_copier-coller._Commencez_par_charger_ou_coller_du_texte_dans_la_zone_de_saisie_de_texte._Ensuite,_vous_pouvez_s\u00e9lectionner_des_portions_de_texte_et_les_attribuer_\u00e0_des_champs_BibTeX.
 %0_contains_the_Regular_Expression_<b>%1</b>=%0 contient_l'expression_r\u00e9guli\u00e8re_<b>%1</b>
 %0_contains_the_term_<b>%1</b>=%0 contient_le_terme_<b>%1</b>
 %0_doesn't_contain_the_Regular_Expression_<b>%1</b>=%0_ne_contient_pas_l'expression_r\u00e9guli\u00e8re_<b>%1</b>
@@ -18,12 +16,10 @@
 <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
 Abbreviation=Abr\u00e9viation
 About_JabRef=A_propos_de_JabRef
@@ -32,45 +28,36 @@ Accept=Valider
 Accept_change=Accepter_la_modification
 Action=Action
 Add=Ajouter
-Add_a_(compiled)_custom_ImportFormat_class_from_a_class_path._\nThe_path_need_not_be_on_the_classpath_of_JabRef.=Ajouter_une_classe_ImportFormat_personnalis\u00e9e_(compil\u00e9e)_\u00e0_partir_d'un_chemin_de_classe._\nLe_chemin_n'a_pas_besoin_d'\u00eatre_dans_le_chemin_de_classe_de_JabRef.
-Add_a_(compiled)_custom_ImportFormat_class_from_a_Zip-archive.\nThe_Zip-archive_need_not_be_on_the_classpath_of_JabRef.=Ajouter_une_classe_ImportFormat_personnalis\u00e9e_(compil\u00e9e)_\u00e0_partir_d'une_archive_ZIP._\nL'archive_ZIP_n'a_pas_besoin_d'\u00eatre_dans_le_chemin_de_classe_de_JabRef.
+Add_a_(compiled)_custom_ImportFormat_class_from_a_class_path._\nThe_path_need_not_be_on_the_classpath_of_JabRef.=Ajouter_une_classe_ImportFormat_personnalis\u00e9e_(compil\u00e9e)_\u00e0_partir_d'un_chemin_de_classe._\nLe_chemin_n'a_pas_besoin_d'\u00EAtre_dans_le_chemin_de_classe_de_JabRef.
+Add_a_(compiled)_custom_ImportFormat_class_from_a_Zip-archive.\nThe_Zip-archive_need_not_be_on_the_classpath_of_JabRef.=Ajouter_une_classe_ImportFormat_personnalis\u00e9e_(compil\u00e9e)_\u00e0_partir_d'une_archive_ZIP._\nL'archive_ZIP_n'a_pas_besoin_d'\u00EAtre_dans_le_chemin_de_classe_de_JabRef.
 add_entries_to_group=ajouter_des_entr\u00e9es_au_groupe
 Add_entry_selection_to_this_group=Ajouter_les_entr\u00e9es_s\u00e9lectionn\u00e9es_\u00e0_ce_groupe
 Add_from_folder=Ajouter_\u00e0_partir_du_r\u00e9pertoire
-
 Add_from_jar=Ajouter_\u00e0_partir_de_jar
 add_group=ajouter_un_groupe
 Add_Group=Ajouter_un_groupe
 Add_new=Ajouter_nouvelle
 Add_Subgroup=Ajouter_un_sous-groupe
 Add_to_group=Ajouter_au_groupe
-Added_entry=Entr\u00E9e_ajout\u00E9e
-Added_group=Groupe_ajout\u00e9
 Added_group_"%0".=Groupe_"%0"_ajout\u00e9.
 Added_new=Nouvel_ajout
 Added_string=Cha\u00EEne_ajout\u00E9e
-Additionally,_entries_whose_<b>%0</b>_field_does_not_contain_<b>%1</b>_can_be_assigned_manually_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._This_process_adds_the_term_<b>%1</b>_to_each_entry's_<b>%0</b>_field._Entries_can_be_removed_manually_from_this_group_by_selecting_them_then_using_the_context_menu._This_process_removes_the_term_<b>%1</b>_from_each_entry's_<b>%0</b>_field.=De_plus,_des_entr\u00e9es_dont_le_champ_<b>%0</b>_ne_contient_pas_<b>%1 [...]
+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
-Advanced_options_for_setting...=Options_avanc\u00e9es_pour_la_configuration...
 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_similaires_seront_consid\u00E9r\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
-Always_save_database_ordered_by_author_name=Toujours_enregistrer_la_base_avec_l'ordre_auteur_nom
 and=_et
 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
 Apply=Appliquer
-
 Arguments_passed_on_to_running_JabRef_instance._Shutting_down.=Arguments_transmis_\u00e0_l'instance_JabRef_active.
-Assign_entries_based_on:=Attribuer_les_entr\u00E9es_selon_:
 Assign_entry_selection_exclusively_to_this_group=Assigner_les_entr\u00e9es_s\u00e9lectionn\u00e9es_uniquement_\u00e0_ce_groupe
 Assign_new_file=Assigner_un_nouveau_fichier
 Assign_the_original_group's_entries_to_this_group?=Assigner_les_entr\u00e9es_originales_du_groupe_\u00e0_ce_groupe_?
@@ -78,11 +65,10 @@ 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".
 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._La_d\u00e9finition_automatique_fonctionne_si_un_fichier_%0_dans_votre_r\u00e9pertoire_%0_ou_dans_un_sous-r\u00e9pertoire<BR>porte_le_m\u00eame_nom_que_la_clef_d'une_entr\u00e9e_BibTeX,_l'extension_en_plus.
+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._La_d\u00e9finition_automatique_fonctionne_si_un_fichier_%0_dans_votre_r\u00e9pertoire_%0_ou_dans_un_sous-r\u00e9pertoire<BR>porte_le_m\u00EAme_nom_que_la_clef_d'une_entr\u00e9e_BibTeX,_l'extension_en_plus.
 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
 Automatically_create_groups=Cr\u00E9er_automatiquement_des_groupes
@@ -94,8 +80,6 @@ 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.
-Autosetting_%0_field...=Auto-param\u00e9trage_du_champ_%0...
-AUX_File_import=G\u00E9n\u00E9rer_un_fichier_BibTeX_\u00E0_partir_de_fichier_AUX
 AUX_file_import=Importation_de_fichier_AUX
 Available_export_formats=Formats_d'exportation_disponibles
 Available_fields=Champs_BibTeX_disponibles
@@ -105,27 +89,22 @@ Background_color_for_optional_fields=Couleur_d'arri\u00e8re-plan_pour_les_champs
 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
 Bibkey_to_filename_conversion=Conversion_de_la_clef_BibTeX_en_nom_de_fichier
-Biblioscape_Tag_file=Biblioscape_Tag
-BibTeX=BibTeX
 BibTeX_key=Clef_BibTeX
 BibTeX_key_is_unique.=La_clef_BibTeX_est_unique.
 BibTeX_key_not_set._Enter_a_name_for_the_downloaded_file=Clef_BibTeX_ind\u00E9finie._Entrer_un_nom_pour_le_fichier_t\u00E9l\u00E9charg\u00E9
 BibTeX_source=Source_BibTeX
 BibTeXML=BibTeXML
-BibTeXML_File=BibTeXML
 Binding=Affectation
-Broken_link=Lien_rompu
 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_add_entries_to_group_without_generating_keys._Generate_keys_now?=Les_entr\u00e9es_ne_peuvent_pas_\u00EAtre_ajout\u00e9es_au_groupe_sans_g\u00e9n\u00e9rer_des_clefs._Voulez-vous_g\u00e9n\u00e9rer_des_clefs_maintenant_?
 Cannot_merge_this_change=Cette_modification_ne_peut_pas_\u00EAtre_fusionn\u00E9e
-Cannot_move_group=Le_groupe_"%0"_ne_peut_pas_\u00eatre_d\u00e9plac\u00e9
-Cannot_move_group_"%0"_down.=Le_groupe_"%0"_ne_peut_pas_\u00eatre_d\u00e9plac\u00e9_vers_le_bas.
-Cannot_move_group_"%0"_left.=Le_groupe_"%0"_ne_peut_pas_\u00eatre_d\u00e9plac\u00e9_vers_la_gauche.
-Cannot_move_group_"%0"_right.=Le_groupe_"%0"_ne_peut_pas_\u00eatre_d\u00e9plac\u00e9_vers_la_droite.
-Cannot_move_group_"%0"_up.=Le_groupe_"%0"_ne_peut_pas_\u00eatre_d\u00e9plac\u00e9_vers_le_haut
+Cannot_move_group_"%0"_down.=Le_groupe_"%0"_ne_peut_pas_\u00EAtre_d\u00e9plac\u00e9_vers_le_bas.
+Cannot_move_group_"%0"_left.=Le_groupe_"%0"_ne_peut_pas_\u00EAtre_d\u00e9plac\u00e9_vers_la_gauche.
+Cannot_move_group_"%0"_right.=Le_groupe_"%0"_ne_peut_pas_\u00EAtre_d\u00e9plac\u00e9_vers_la_droite.
+Cannot_move_group_"%0"_up.=Le_groupe_"%0"_ne_peut_pas_\u00EAtre_d\u00e9plac\u00e9_vers_le_haut
 case_insensitive=insensible_\u00e0_la_casse
 case_sensitive=sensible_\u00e0_la_casse
 Case_sensitive=Sensible_\u00e0_la_casse
@@ -148,8 +127,6 @@ 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
-Citation_import_from_CiteSeer_failed.=L'importation_des_citations_depuis_CiteSeer_a_\u00E9chou\u00E9e.
-
 Cite_command_(for_Emacs/WinEdt)=Commande_de_citation_(pour_Emacs/WinEdt)_
 CiteSeer_Error=Erreur_CiteSeer
 CiteSeer_Fetch_Error=Erreur_de_recherche_sur_CiteSeer
@@ -157,21 +134,14 @@ 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
-CiteSeer_Warning=Avertissement_CiteSeer
 Class_name=Nom_de_classe
 Clear=Vider
 clear_all_groups=Vider_tous_les_groupes
 Clear_field=Vider_le_champ
+Clear_fields=Vider_les_champs
 Clear_highlight=Vider_surlignements
-Clear_highlighted=Vider_surlign\u00e9s
-Clear_highlighted_groups=Vider_les_groupes_surlign\u00e9s
-Clear_inputarea=Vider_la_zone_de_saisie
-Clear_search=Effacer_la_recherche
 Close=Fermer
-Close_database=Fermer_la_base
 Close_dialog=Fermer_la_fen\u00EAtre
-Close_entry_editor=Fermer_l'\u00E9diteur_d'entr\u00E9e
-Close_preamble_editor=Fermer_l'\u00E9diteur_de_pr\u00E9ambule
 Close_the_current_database=Fermer_la_base_courante
 Close_the_help_window=Fermer_la_fen\u00EAtre_d'aide
 Close_window=Fermer_la_fen\u00EAtre
@@ -182,7 +152,6 @@ Color_for_marking_incomplete_entries=Couleur_pour_marque_les_entr\u00e9es_incomp
 Column_width=Largeur_de_colonne
 Command_line_id=Identifiant_de_la_ligne_de_commande
 Complete_record=Compl\u00E9ter_l'enregistrement
-Completed_citation_import_from_CiteSeer.=Importation_des_citations_depuis_CiteSeer_termin\u00E9e.
 Completed_Import_Fields_from_CiteSeer.=Importation_des_champs_depuis_CiteSeer_termin\u00E9e.
 Completed_import_from_CiteSeer.=Importation_depuis_CiteSeer_termin\u00e9e.
 Contained_in=Contenu_dans
@@ -192,9 +161,7 @@ Copied_cell_contents=Contenu_des_cellules_copi\u00e9
 Copied_key=Clef_copi\u00E9e
 Copied_keys=Clefs_copi\u00E9es
 Copy=Copier
-Copy_\cite{BibTeX_key}=Copier_\cite{clef_BibTeX}
 Copy_BibTeX_key=Copier_la_clef_BibTeX
-Copy_to_clipboard=Copier_le_texte_vers_le_presse-papiers
 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
@@ -203,29 +170,27 @@ Could_not_export_entry_types=L'exportation_des_types_d'entr\u00e9es_a_\u00e9chou
 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_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_parse_number_of_hits=Le_nombre_de_r\u00e9sultats_n'a_pas_pu_\u00eatre_trait\u00e9
+Could_not_parse_number_of_hits=Le_nombre_de_r\u00e9sultats_n'a_pas_pu_\u00EAtre_trait\u00e9
 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_'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_save_file=Le_fichier_n'a_pas_pu_\u00EAtre_sauvegard\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
-Created_group=Groupe_cr\u00E9\u00E9
-Created_group_"%0".=Groupe_"%0"_cr\u00e9\u00e9.
 Created_groups.=Groupes_cr\u00E9\u00E9s.
-Curly_braces_{_and_}_must_be_balanced.=Les_accolades_{_et_}_doivent_\u00EAtre_\u00E9quilibr\u00E9es.
+crossreferenced_entries_included=Entr\u00e9es_avec_r\u00e9f\u00e9rences_crois\u00e9es_incluses
 Current_content=Contenu_actuel
 Current_value=Valeur_actuelle_
 Custom_entry_types=Types_d'entr\u00E9es_personnalis\u00E9es
 Custom_entry_types_found_in_file=Types_d'entr\u00E9es_personnalis\u00E9es_trouv\u00E9es_dans_le_fichier
-Custom_export=Exportation_personnalis\u00E9e
+Custom_icon_theme=Th\u00e8me_d'ic\u00f4nes_personnalis\u00e9
+Custom_icon_theme_file=Fichier_de_th\u00e8me_d'ic\u00f4nes_personnalis\u00e9
 Custom_importers=Filtres_d'importation_personnalis\u00e9s
 Customize_entry_types=Personnaliser_les_types_d'entr\u00E9es
 Customize_key_bindings=Personnaliser_les_affectations_de_touches
@@ -241,7 +206,6 @@ Default=D\u00E9faut
 Default_encoding=Encodage_par_d\u00E9faut_
 Default_grouping_field=Champ_par_d\u00E9faut_pour_les_groupes_
 Default_look_and_feel=Apparence_par_d\u00E9faut_
-Default_owner=Propri\u00E9taire_par_d\u00E9faut
 Default_pattern=Mod\u00E8le_par_d\u00E9faut
 Default_sort_criteria=Crit\u00e8re_de_tri_par_d\u00e9faut
 defined.=d\u00E9fini(e).
@@ -255,11 +219,11 @@ Delete_multiple_entries=Effacer_plusieurs_entr\u00E9es
 Delete_rows=Supprimer_des_lignes
 Delete_strings=Supprimer_les_cha\u00EEnes
 Deleted=Supprim\u00E9
-Deleted_entry=Supprimer_l'entr\u00E9e
 Delimit_fields_with_semicolon,_ex.=D\u00E9limiter_les_champs_par_des_points-virgules,_ex.
 Descending=Descendant
 Description=Description
 Deselect_all=Tout_d\u00e9s\u00e9lectionner
+Deselect_all_duplicates=D\u00e9s\u00e9lectionner_tous_les_doublons
 Details=D\u00E9tails
 Disable_entry_editor_when_multiple_entries_are_selected=D\u00E9sactiver_l'\u00E9diteur_en_cas_de_s\u00E9lections_multiples
 Disable_this_confirmation_dialog=D\u00E9sactiver_cette_demande_de_confirmation
@@ -267,8 +231,9 @@ Disable_this_warning_dialog=D\u00E9sactiver_ce_message_d'avertissement
 Display_all_entries_belonging_to_one_or_more_of_the_selected_groups.=Afficher_toutes_les_entr\u00E9es_appartenant_\u00E0_au_moins_un_des_groupes_s\u00E9lectionn\u00E9s.
 Display_all_error_messages=Afficher_tous_les_messages_d'erreur
 Display_help_on_command_line_options=Afficher_l'aide_sur_les_options_de_la_ligne_de_commande
-Display_imported_entries_in_an_inspection_window_before_they_are_added.=Afficher_les_entr\u00e9es_import\u00e9es_dans_une_fen\u00eatre_d'inspection_avant_de_les_ajouter.
+Display_imported_entries_in_an_inspection_window_before_they_are_added.=Afficher_les_entr\u00e9es_import\u00e9es_dans_une_fen\u00EAtre_d'inspection_avant_de_les_ajouter.
 Display_only_entries_belonging_to_all_selected_groups.=Afficher_uniquement_les_entr\u00E9es_appartenant_\u00E0_tous_les_groupes_s\u00E9lectionn\u00E9s.
+Display_version=Afficher_la_version
 Displaying_no_groups=Pas_de_groupes_\u00E0_afficher
 Do_not_abbreviate_names=Ne_pas_abr\u00e9ger_les_noms
 Do_not_autoset=Ne_pas_d\u00e9finir_automatiquement.
@@ -283,12 +248,8 @@ Download=T\u00E9l\u00E9chargement
 Download_completed=T\u00E9l\u00E9chargement_termin\u00E9
 Download_file=T\u00E9l\u00E9charger_le_fichier
 Downloading...=T\u00E9l\u00E9chargement...
-Due_to_the_duplicate_BibTeX_key,_the_groups_assignment(s)_for_this_entryncannot_be_restored_correctly_when_reopening_this_database._It_is_recommendednthat_you_have_JabRef_generate_a_unique_key_now_to_prevent_this_problem.=A_cause_de_la_clef_BibTeX_dupliqu\u00e9e,_les_assignations_de_groupes_de_cette_entr\u00e9e_ne_pourront_pas_\u00eatre_restaur\u00e9e_correctement_\u00e0_la_r\u00e9ouverture_de_cette_base_de_donn\u00e9es._Il_est_recommand\u00e9_de_demand\u00e9_\u00e0_JabRef_de_g\u00e9n\u0 [...]
-dummy=nul
-Duplicate_BibTeX_key=Dupliquer_la_clef_BibTeX
 duplicate_BibTeX_key=Clef_BibTeX_dupliqu\u00E9e
 Duplicate_BibTeX_key.=Dupliquer_la_clef_BibTeX.
-duplicate_BibTeX_key.=dupliquer_la_clef_BibTeX.
 Duplicate_BibTeX_key._Grouping_may_not_work_for_this_entry.=Clef_BibTeX_dupliqu\u00e9e._Les_groupes_pourraient_ne_pas_fonctionner_pour_cette_entr\u00e9e.
 Duplicate_Key_Warning=Avertissement_:_Clef_dupliqu\u00e9e
 Duplicate_pairs_found=Doublons_trouv\u00E9s
@@ -302,15 +263,12 @@ 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_group=Editer_le_groupe
 Edit_journal=Editer_le_journal
 Edit_preamble=Editer_le_pr\u00E9ambule
-Edit_strings=Editer_les_cha\u00EEnes
 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
 empty_database=base_vide
 Enable_source_editing=Autoriser_l'\u00e9dition_du_source
 Endnote=Endnote
@@ -323,43 +281,34 @@ entries_have_undefined_BibTeX_key=Des_entr\u00e9es_ont_des_clef_BibTeX_non_d\u00
 entries_into_new_database=entr\u00E9es_dans_la_nouvelle_base
 entry=entr\u00E9e
 Entry_editor=Editeur_d'entr\u00E9e
-Entry_editor,_next_entry=Editeur_d'entr\u00E9e,_entr\u00E9e_suivante
-Entry_editor,_next_panel=Editeur_d'entr\u00E9e,_fen\u00EAtre_suivante
-Entry_editor,_previous_entry=Editeur_d'entr\u00E9e,_entr\u00E9e_pr\u00E9c\u00E9dente
-Entry_editor,_previous_panel=Editeur_d'entr\u00E9e,_fen\u00EAtre_pr\u00E9c\u00E9dente
-Entry_editor,_store_field=Editeur_d'entr\u00E9e,_sauver_le_champ
 Entry_in_current_database=Entr\u00e9e_dans_la_base_de_donn\u00e9es_actuelle
 Entry_in_import=Entr\u00e9e_dans_l'importation
-Entry_is_incomplete=L'entr\u00E9e_est_incompl\u00E8te
 Entry_preview=Aper\u00E7u_de_l'entr\u00E9e
 Entry_table=Table_des_entr\u00E9es
 Entry_table_columns=Colonnes_de_la_table_des_entr\u00E9es
 Entry_type=Type_d'entr\u00E9e
 Entry_type_names_are_not_allowed_to_contain_white_space_or_the_following_characters=Les_noms_de_type_d'entr\u00E9e_ne_peuvent_pas_contenir_d'espace_et_les_caract\u00E8res_suivants
 Entry_types=Types_d'entr\u00E9es
-EOF_in_mid-string=Fin_de_fichier_au_milieu_d'une_cha\u00EEne
 Error=Erreur
-##Error:_check_your_External_viewer_settings_in_Preferences=Erreur_:_v\u00e9rifier_les_param\u00e9trage_de_votre_visionneur_externe_dans_les_Options
+Error_exporting_to_clipboard=Erreur_lors_de_l'exportation_vers_le_presse-papiers
 Error_in_field=Erreur_dans_le_champ
-Error_in_line=Erreur_\u00E0_la_ligne
-Error_messages=Messages_d'erreur
+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_writing=Erreur_lors_de_l'\u00e9criture
+Exceptions=Exceptions
 Existing_file=Fichier_existant
-exists._Overwrite?=existe._Ecraser_le_fichier_?
 exists._Overwrite_file?=existe._Ecraser_le_fichier_?
+exists.Overwrite?=existe._Ecraser_?
 Exit=Quitter
 Expand_subtree=D\u00e9velopper_le_sous-arbre
-Explicit=Explicite
 Export=Exporter
 Export_entry_types=Exporter_les_types_d'entr\u00e9es
 Export_name=Nom_de_l'exportation
 Export_preferences=Exporter_les_pr\u00E9f\u00E9rences
 Export_preferences_to_file=Exporter_les_pr\u00E9f\u00E9rences_vers_un_fichier
 Export_properties=Propri\u00E9t\u00E9s_de_l'exportation
-Export_selected_to_clipboard=Exporter_la_s\u00E9lection_vers_le_presse-papiers
 Export_to_clipboard=Exporter_vers_le_presse-papiers
-Exported_database_to_file=Base_export\u00E9e_dans_le_fichier
 Exporting=Exportation_en_cours
 External_changes=Modifications_externes
 External_files=Fichiers_externes
@@ -368,17 +317,13 @@ External_viewer_called=Editeur_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_Citations_from_CiteSeer=Rechercher_des_citations_depuis_CiteSeer
-Fetch_citations_from_CiteSeer=Rechercher_des_citations_depuis_CiteSeer
 Fetch_CiteSeer=Recherche_CiteSeer
+Fetch_CiteSeer_by_ID=Recherche_CiteSeer_par_ID
 Fetch_Medline=Recherche_Medline
-fetch_Medline=recherche_Medline
-Fetch_Medline_by_author=Rechercher_sur_Medline_par_auteur
 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
 Fetching_Identifiers=Recherche_des_identifiants
-Fetching_Medline...=Recherche_Medline_en_cours...
 Fetching_Medline_by_ID...=Recherche_sur_Medline_par_ID...
 Fetching_Medline_by_id_...=Recherche_sur_Medline_par_id...
 Fetching_Medline_by_term_...=Recherche_sur_Medline_par_terme...
@@ -386,29 +331,27 @@ 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_champ_ne_peuvent_pas_contenir_d'espace_et_les_caract\u00E8res_suivants
 Field_sizes=Tailles_des_champs
+Field_to_filter=Champ_vers_filtre
 Field_to_group_by=Champ_\u00E0_grouper_par
-Field_to_search=Champ_pour_la_recherche
 Fields=Champs
 File=Fichier
 file=fichier
 File_'%0'_not_found=Fichier_'%0'_non_trouv\u00e9
 File_changed=Fichier_chang\u00e9
+File_exists=Le_fichier_existe
 File_extension=Extension_de_fichier
-File_has_been_updated_externally._Are_you_sure_you_want_to_save?=Le_fichier_a_\u00E9t\u00E9_mis_\u00E0_jour_externalement._Etes-vous_certain_de_vouloir_l'enregistrer_?
 File_not_found=Fichier_non_trouv\u00E9
 File_updated_externally=Fichier_mis_\u00E0_jour_externalement
 filename=nom_de_fichier
 Files_opened=Fichiers_ouverts
-
 Filter=Filtre
-Find_duplicates=Chercher_les_doublons
-Finished_autosetting_%0_field._Entries_changed:_%1.=Auto-param\u00e9trage_du_champ_%0_termin\u00e9._Entr\u00e9es_chang\u00e9es_:_%1.
 Finished_synchronizing_%0_links._Entries_changed%c_%1.=Synchronisation_des_liens_%0_termin\u00e9e._Entr\u00e9es_modifi\u00e9es%c_%1.
+Finished_writing_XMP_for_%0_file_(%1_skipped,_%2_errors).=Fin_de_l'\u00e9criture_des_XMP_pour_%0_fichiers_(%1_pass\u00e9s,_%2_erreurs).
 First_select_the_entries_you_want_keys_to_be_generated_for.=Commencez_par_s\u00E9lectionner_les_entr\u00E9es_pour_lesquelles_vous_voulez_que_des_clefs_soient_g\u00E9n\u00E9r\u00E9es.
 Fit_table_horizontally_on_screen=Ajuster_horizontalement_la_table_\u00E0_l'\u00E9cran
 Float=Flottante
+Float_marked_entries=Entr\u00e9es_marqu\u00e9es_flottantes
 Font_Family=Famille_de_police
 Font_Preview=Pr\u00E9visualisation_de_la_police
 Font_Size=Taille_de_police
@@ -416,7 +359,9 @@ Font_Style=Style_de_police
 FontSelector=S\u00E9lecteur_de_police
 for=pour
 Format_of_author_and_editor_names=Format_des_noms_d'auteurs_et_d'\u00E9diteurs
+Format_String=Cha\u00EEne_de_format
 Format_used=Format_utilis\u00E9
+Formatter_Name=Nom_de_formateur
 Formatter_not_found=Formateur_non_trouv\u00E9
 found=trouv\u00E9
 found_in_aux_file=trouv\u00E9es_dans_le_fichier_aux
@@ -427,6 +372,7 @@ Generate=Cr\u00E9er
 Generate_BibTeX_key=Cr\u00E9er_la_clef_BibTeX
 Generate_keys=G\u00e9n\u00e9rer_les_clefs
 Generate_keys_before_saving_(for_entries_without_a_key)=G\u00e9n\u00e9rer_les_clefs_avant_de_sauver_(pour_les_entr\u00e9es_sans_clef)
+Generate_keys_for_imported_entries=G\u00e9n\u00e9rer_les_clefs_pour_les_entr\u00e9es_import\u00e9es
 Generate_now=G\u00e9n\u00e9rer_maintenant
 Generated_BibTeX_key_for=Cr\u00E9ation_termin\u00E9e_de_la_clef_BibTeX_pour
 Generating_BibTeX_key_for=Cr\u00E9ation_en_cours_d'une_clef_BibTeX_pour
@@ -434,50 +380,40 @@ Grab=Rechercher
 Gray_out_entries_not_in_group_selection=Griser_les_entr\u00E9es_hors_de_la_s\u00E9lection
 Gray_out_non-hits=Griser_les_entr\u00E9es_non_correspondantes
 Gray_out_non-matching_entries=Griser_les_entr\u00E9es_non_correspondantes
-Group_definitions_have_been_converted_to_JabRef_1.7_format.=Les_d\u00E9finitions_des_groupes_ont_\u00E9t\u00E9_converties_au_format_JabRef_1.7
-Group_name=Nom_du_groupe_
 Group_properties=Propri\u00E9t\u00E9s_du_groupe
-Grouping_may_not_work_for_this_entry.=La_gestion_des_groupes_pourrait_ne_pas_fonctionner_pour_cette_entr\u00e9e.
+grouping_may_not_work_for_this_entry=Les_groupes_pourraient_ne_pas_fonctionner_pour_cette_entr\u00e9e.
 Groups=Groupes
 Harvard_RTF=Harvard_RTF
 Have_you_chosen_the_correct_package_path?=Avez-vous_choisi_le_bon_chemin_pour_le_paquetage_?
 Help=Aide
-Help_contents=Contenu_de_l'aide
 Help_on_groups=Aide_sur_les_groupes
 Help_on_key_patterns=Aide_sur_le_param\u00E9trage_des_clefs
+Help_on_Preview_Settings=Aide_sur_les_param\u00e8tres_de_l'aper\u00E7u
+Help_on_Regular_Expression_Search=Aide_sur_la_recherche_d'une_expression_r\u00e9guli\u00e8re
 Hide_non-hits=Masquer_les_entr\u00E9es_non_correspondantes
 Hide_non-matching_entries=Masquer_les_entr\u00E9es_non_correspondantes
-
 Hierarchical_context=Type_de_hi\u00e9rarchie
 Highlight=Surlign\u00E9e
-Highlight_groups_matching_all_selected_entries=Surligner_les_groupes_correspondant_\u00e0_toutes_les_entr\u00e9es_s\u00e9lectionn\u00e9es
-Highlight_groups_matching_any_selected_entry=Surligner_les_groupes_correspondant_\u00e0_au_moins_une_des_entr\u00e9es_s\u00e9lectionn\u00e9es
-Highlight_groups_that_contain_entries_contained_in_any_currently_selected_group=Surligner_les_groupes_qui_contiennent_des_entr\u00e9es_contenues_dans_n'importe_quel_groupe_s\u00e9lectionn\u00e9
 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)
 Ignore=Ignorer
 Illegal_type_name=Nom_de_type_ill\u00e9gal
 Immediate_subgroups=Sous-groupes_directs
 Import=Importer
-Import_and_append=Importer_et_joindre
 Import_and_keep_old_entry=Importer_et_conserver_l'ancienne_entr\u00e9e
 Import_and_remove_old_entry=Importer_et_supprimer_l'ancienne_entr\u00e9e
 Import_cancelled.=Importation_interrompue.
-Import_Data_from_CiteSeer=Importer_les_donn\u00E9es_depuis_CiteSeer
 Import_Data_from_CiteSeer_Database=Importer_les_donn\u00E9es_depuis_la_base_CiteSeer
-Import_database=Importer_une_base
 Import_entries=Importer_les_entr\u00E9es
 Import_entry_types=Types_d'entr\u00e9es_import\u00e9s
 Import_failed=L'importation_a_\u00e9chou\u00e9e
-Import_Fields_from_CiteSeer=Importer_les_champs_depuis_CiteSeer
-Import_fields_from_CiteSeer=Importation_des_champs_\u00E0_partir_de_CiteSeer
-Import_fields_from_CiteSeer_Database=Importation_des_champs_\u00E0_partir_de_la_base_CiteSeer
 Import_Fields_from_CiteSeer_Database=Importer_les_champs_depuis_la_base_CiteSeer
 Import_file=Fichier_\u00E0_importer
 Import_group_definitions=Importer_les_d\u00E9finitions_de_groupe
 Import_name=nom_Import
-Import_plain_text=Importer_des_champs_\u00E0_partir_de_texte_brut
 Import_preferences=Importer_les_pr\u00E9f\u00E9rences
 Import_preferences_from_file=Importer_les_pr\u00E9f\u00E9rences_depuis_un_fichier
 Import_strings=Importer_les_cha\u00EEnes
@@ -486,7 +422,6 @@ Import_word_selector_definitions=Importer_les_d\u00E9finitions_des_s\u00E9lecteu
 Imported_database=Base_import\u00E9e
 Imported_entries=Entr\u00E9es_import\u00E9es
 Imported_entry_types=Types_d'entr\u00e9es_import\u00e9s
-Imported_file=Fichier_import\u00E9
 Imported_from_database=Import\u00e9_\u00e0_partir_de_la_base_de_donn\u00e9es
 ImportFormat_class=Classe_ImportFormat
 Importing=Importation_en_cours
@@ -494,12 +429,11 @@ Importing_file=Importation_de_fichier_en_cours
 Importing_in_unknown_format=Importation_dans_un_format_inconnu
 In_JabRef,_use_pairs_of_#_characters_to_indicate_a_string.=Dans_JabRef,_utiliser_une_paire_de_#_pour_d\u00E9limiter_une_cha\u00EEne.
 Include_abstracts=Inclure_les_r\u00e9sum\u00e9s
-Include_subgroups=Inclure_les_sous-groupes
+Include_entries=Entr\u00e9es_affect\u00e9es
 Include_subgroups\:_When_selected,_view_entries_contained_in_this_group_or_its_subgroups=Inclut_les_sous-groupes_\:_Quand_s\u00e9lectionn\u00e9,_afficher_les_entr\u00e9es_contenues_dans_ce_groupe_ou_ses_sous-groupes
 Incremental=Incr\u00E9mentale
 Incremental_search=Recherche_incr\u00E9mentale
 Incremental_search_failed._Repeat_to_search_from_top.=La_recherche_incr\u00E9mentale_n'a_pas_abouti._R\u00E9p\u00E9ter_depuis_le_d\u00E9but.
-Independent=Ind\u00E9pendant
 Independent_group\:_When_selected,_view_only_this_group's_entries=Groupe_ind\u00e9pendant_\:_Quand_s\u00e9lectionn\u00e9,_afficher_uniquement_les_entr\u00e9es_de_ce_groupe
 Initially_show_groups_tree_expanded=Afficher_au_d\u00e9part_l'arbre_des_groupes_d\u00e9velopp\u00e9
 Input=Attribution_des_champs
@@ -510,17 +444,14 @@ Insert_selected_citations_into_LyX/Kile=Envoyer_les_citations_s\u00e9lectionn\u0
 Insert_selected_citations_into_WinEdt=Envoyer_les_citations_s\u00E9lectionn\u00E9es_dans_&WinEdt
 insert_string_=ins\u00e9rer_la_cha\u00eene
 Insert_URL=Ins\u00E9rer_l'URL
-INSPEC=INSPEC
 integrity=int\u00e9grit\u00e9
 Integrity_check=V\u00e9rification_d'int\u00e9grit\u00e9
 Intersection=Intersection
-Intersection_with_supergroups=_Intersection_avec_super-groupes
 Invalid_BibTeX_key=Clef_BibTeX_invalide
 Invalid_date_format=Format_de_date_invalide
 Invalid_URL=URL_invalide
 Inverted=Compl\u00E9mentaire
 is_a_standard_type.=est_un_type_standard.
-ISI=ISI
 ISO_abbreviation=Abr\u00e9viation_ISO
 Item_list_for_field=Liste_des_choix_pour_le_champ
 JabRef_help=Aide_de_JabRef
@@ -528,8 +459,6 @@ JabRef_preferences=Pr\u00E9f\u00E9rences_pour_JabRef
 Journal_abbreviations=Abr\u00e9viations_de_journaux
 Journal_list_preview=Pr\u00e9visualisation_de_la_liste_des_journaux
 Journal_name=Nom_du_journal
-Journal_names=Noms_de_journaux
-JStor_file=JStor
 Keep=Garder
 Keep_both=Garder_les_deux
 Keep_lower=Garder_celui_du_bas
@@ -543,7 +472,6 @@ Keyword=Mot-clef
 Label=Nom_du_champ
 Language=Langue_
 Last_modified=Dernier_modifi\u00e9
-Latex_AUX_file=Fichier_LaTeX_AUX
 LaTeX_AUX_file=Fichier_LaTeX_AUX
 Left=Gauche
 License=Licence
@@ -553,12 +481,12 @@ Listen_for_remote_operation_on_port=Ecouter_le_port_pour_des_op\u00e9rations_\u0
 Load_session=Charger_la_session
 Loading_session...=Chargement_de_la_session...
 Look_and_feel=Apparence
-lower=minuscule
+Looking_for_pdf...=Recherche_de_pdf...
+Mac_file_dialog=S\u00e9lectionneur_de_fichiers_Mac
 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_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
@@ -568,18 +496,14 @@ 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
-Medline_XML=Medline_XML
-Medline_XML_File=Medline_XML
 Menu_and_label_font_size=Taille_de_police_pour_les_menus_et_les_champs_
 Merged_external_changes=Fusionner_les_modifications_externes
-messages=messages
 Messages=Messages
 Messages_and_Hints=Avertissements_et_Suggestions
 Miscellaneous=Divers
 Modification_of_field=Modification_du_champ
 Modified_group_"%0".=Groupe_"%0"_modifi\u00e9.
 Modified_groups=Groupes_modifi\u00e9s
-Modified_groups_tree=Arborescence_des_groupes_modifi\u00e9e
 Modified_string=Cha\u00EEne_modifi\u00E9e
 Modify=Modifier
 modify_group=Modifier_le_groupe
@@ -588,40 +512,26 @@ 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_group=d\u00e9placer_le_groupe
-Move_matching_entries_to_the_top=D\u00E9placer_en_haut_les_entr\u00E9es_correspondant_aux_crit\u00E8res_de_recherche
 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=Groupe_d\u00e9plac\u00e9
 Moved_group_"%0".=Groupe_"%0"_d\u00e9plac\u00e9.
 Name=Nom
+Name_formatter=Formateur_de_nom
 Natbib_style=Style_Natbib
 nested_aux_files=fichiers_AUX_imbriqu\u00E9s
 New=Nouveau
 new=nouveau
-New_article=Nouveau_'article'
 New_BibTeX_database=Nouvelle_base_BibTeX
 New_BibTeX_entry=Nouvelle_entr\u00E9e_BibTeX
 New_BibTeX_subdatabase=Nouveau_fichier_BibTeX
-New_book=Nouveau_'book'
 New_content=Nouveau_contenu
-New_database=Nouvelle_base
 New_database_created.=Nouvelle_base_cr\u00E9\u00E9e.
-New_entry=Nouvelle_entr\u00E9e
-New_entry...=Nouvelle_entr\u00E9e...
-New_entry_from_plain_text=Nouvelle_entr\u00E9e_depuis_texte_brut
+New_field_value=Nouvelle_valeur_du_champ
 New_file=Nouveau_fichier
 New_group=Nouveau_groupe
-New_inbook=Nouveau_'inbook'
-New_mastersthesis=Nouveau_'mastersthesis'
-New_phdthesis=Nouveau_'phdthesis'
-New_proceedings=Nouveau_'proceedings'
 New_string=Nouvelle_cha\u00EEne
-New_subdatabase=Nouveau_fichier
-New_subdatabase_based_on_AUX_file=Nouveau_fichier_BibTeX_depuis_fichier_AUX
-New_unpublished=Nouveau_'unpublished'
 Next_entry=Entr\u00E9e_suivante
-Next_tab=Onglet_suivant
 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_!
@@ -632,23 +542,21 @@ No_entries_found._Please_make_sure_you_are_using_the_correct_import_filter.=Pas_
 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_extension._Could_not_find_viewer_for_file.=Pas_d'extension_de_fichier._L'afficheur_de_ce_fichier_n'a_pas_pu_\u00eatre_trouv\u00e9.
+No_file_associated=Pas_de_fichier_associ\u00e9
 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_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_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_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
-non-Mac_only=Uniquement_pour_les_non-Mac
-Normal=Normale
 not=non
 not_found=non_trouv\u00E9
 Not_saved_(empty_session)=Pas_de_sauvegarde_(session_vide)
 Note_that_the_entry_causing_the_problem_has_been_selected.=Noter_que_l'entr\u00E9e_responsable_du_probl\u00E8me_a_\u00E9t\u00E9_s\u00E9lectionn\u00E9e.
-Note_that_the_new_definitions_will_not_be_compatible_with_previous_JabRef_versions.=Notez_que_les_nouvelles_d\u00E9finitions_ne_seront_pas_compatibles_avec_les_pr\u00E9c\u00E9dentes_versions_de_JabRef.
 Note_that_you_must_specify_the_fully_qualified_class_name_for_the_look_and_feel,=Notez_que_vous_devez_sp\u00E9cifier_le_nom_de_classe_complet_pour_l'apparence,
 Nothing_to_redo=Rien_\u00E0_r\u00E9p\u00E9ter
 Nothing_to_undo=Rien_\u00E0_annuler
@@ -658,7 +566,6 @@ OK=OK
 Ok=Ok
 One_or_more_keys_will_be_overwritten._Continue?=Une_ou_plusieurs_clefs_seront_\u00e9cras\u00e9es._Continuer_?
 Open=Cliquer_pour_ouvrir_le
-open=ouvre
 Open_BibTeX_database=Ouvrir_une_base_BibTeX
 Open_database=Ouvrir_une_base
 Open_editor_when_a_new_entry_is_created=Ouvrir_l'\u00E9diteur_quand_une_nouvelle_entr\u00E9e_est_cr\u00E9\u00E9e
@@ -667,41 +574,39 @@ Open_last_edited_databases_at_startup=Ouvrir_les_fichiers_de_la_derni\u00E8re_se
 Open_PDF_or_PS=Ouvrir_PDF_ou_PS
 Open_right-click_menu_with_Ctrl+left_button=D\u00E9rouler_le_menu_contextuel_avec_Ctrl+clic_gauche
 Open_URL_or_DOI=Ouvrir_URL_ou_DOI
+OpenDocument_Spreadsheet=Tableur_OpenDocument
 Opened_database=Base_ouverte
 Opening=Ouverture_en_cours
 Opening_preferences...=Ouverture_des_pr\u00E9f\u00E9rences_en_cours...
+OpenOffice_Calc=OpenOffice_Calc
+Operation_canceled.\n=Op\u00e9ration_annul\u00e9e.\n
 Optional_fields=Champs_optionnels
 Options=Options
 or=ou
 out_of=sur
+Output=Sortie
 Output_or_export_file=Fichier_de_sortie_ou_d'exportation
-Overlapping_groups=Groupes_se_chevauchant
 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_existing_field_values=Ecraser_les_valeurs_existantes_du_champ
 Overwrite_keys=Ecraser_les_clefs
-Ovid=Ovid
 pairs_processed=paires_trait\u00E9es
 Paste=Coller
 paste_entries=Coller_les_entr\u00E9es
 paste_entry=Coller_l'entr\u00E9e
-Paste_from_clipboard=Coller_le_texte_depuis_le_presse-papiers
 Pasted=Coll\u00E9
 Path_to_HTML_viewer=Chemin_du_visionneur_HTML_
 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_WinEdt.exe=Chemin_de_WinEdt.exe_
-Paths_to_external_programs=Chemins_vers_les_programmes_externes.
 PDF_directory=R\u00e9pertoire_PDF
-PDF_links=Liens_PDF
 Personal_journal_list=Liste_personnelle_de_journaux
 Pick_titles=S\u00e9lectionnez_des_titres[?]
-Plain_right_menu=Menu_droit_brut_[?]
-Plain_text=Texte_brut
 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_define_BibTeX_key_first=SVP,_commencez_par_d\u00E9finir_la_clef_BibTeX
 Please_enter_a_name_for_the_group.=SVP,_entrez_un_nom_pour_le_groupe.
 Please_enter_a_search_term._For_example,_to_search_all_fields_for_<b>Smith</b>,_enter%c<p><tt>smith</tt><p>To_search_the_field_<b>Author</b>_for_<b>Smith</b>_and_the_field_<b>Title</b>_for_<b>electrical</b>,_enter%c<p><tt>author%esmith_and_title%eelectrical</tt>=SVP,_entrez_un_terme_\u00e0_recherche._Par_exemple,_pour_rechercher_<b>Smith</b>_dans_tout_les_champs,_entrez %c<p><tt>smith</tt><p>Pour_rechercher_<b>Smith</b>_dans_le_champ_<b>Author</b>_et_<b>\u00e9lectrique</b>_dans_le_c [...]
 Please_enter_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
@@ -715,46 +620,32 @@ 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.
 Preamble=Pr\u00E9ambule
-Preamble_editor,_store_changes=Editeur_de_pr\u00E9ambule,_sauver_les_changements
 Preferences=Pr\u00E9f\u00E9rences
-Preferences_recorded=Pr\u00E9f\u00E9rences_enregistr\u00E9es
 Preferences_recorded.=Pr\u00E9f\u00E9rences_enregistr\u00E9es.
-Preserve_formatting_of_non-BibTeX_fields=Pr\u00E9server_le_format_des_champs_non-BibTeX
 Preview=Aper\u00E7u
 Previous_entry=Entr\u00E9e_pr\u00E9c\u00E9dente
-Previous_tab=Onglet_pr\u00E9c\u00E9dent
 Primary_sort_criterion=Crit\u00e8re_de_tri_principal
 Problem_with_parsing_entry=Probl\u00E8me_de_traitement_d'une_entr\u00E9e
+Program_output=Sortie_du_programme
 PS_directory=R\u00e9pertoire_PS
-PS_links=Liens_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=Envoyer_la_s\u00e9lection_dans_LyX
 Push_selection_to_LyX/Kile=Envoyer_la_s\u00E9lection_dans_LyX/Kile
 Push_selection_to_WinEdt=Envoyer_la_s\u00E9lection_dans_WinEdt
-Push_to_LatexEditor=Envoyer_vers_l'\u00e9diteur_LaTeX
-Push_to_LyX=Envoyer_vers_LyX
-Push_to_WinEdt=Envoyer_vers_WinEdt
+Push_to_LatexEditor=Envoyer_vers_LaTeXEditor
 Pushed_citations_to_Emacs=Envoyer_les_citations_dans_Emacs
 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
-Query_author(s)=Requ\u00EAte_sur_les_auteurs
-Quit=Quitter
 Quit_JabRef=Quitter_JabRef
 Quit_synchronization=Quitter_la_synchronisation
 Raw_source=Texte_brut
 Really_delete_the_selected=Voulez-vous_vraiment_supprimer_cette
-
-
 Rearrange_tabs_alphabetically_by_title=Classer_les_onglets_par_ordre_alphab\u00e9tique
-Recent_files=Fichiers_r\u00E9cents
 Redo=R\u00E9p\u00E9ter
-Refer/Endnote=Refer/Endnote
 Reference_database=Base_de_r\u00E9f\u00E9rence
 References_found=R\u00E9f\u00E9rences_trouv\u00E9es
 Refine_supergroup\:_When_selected,_view_entries_contained_in_both_this_group_and_its_supergroup=Raffine_le_super-groupe_\:_Quand_s\u00e9lectionn\u00e9,_afficher_les_entr\u00e9es_contenues_\u00e0_la_fois_dans_ce_groupe_et_son_super-groupe
 Refresh_view=Rafra\u00EEchir_la_vue
-Regexp=Exp._R\u00E9g.
 Regular_Expression=Expression_r\u00E9guli\u00E8re
 Remember_these_entry_types?=Se_souvenir_de_ces_types_d'entr\u00E9es_?
 Remote_operation=Acc\u00e8s_\u00e0_distance
@@ -779,15 +670,12 @@ remove_group_and_subgroups=supprimer_le_groupe_et_les_sous-groupes
 Remove_group_and_subgroups=Supprimer_le_groupe_et_les_sous-groupes
 Remove_old_entry=Supprimer_l'ancienne_entr\u00e9e
 Remove_selected_strings=Supprimer_les_cha\u00EEnes_s\u00E9lectionn\u00E9es
-remove_string=enlever_la_cha\u00EEne
 remove_string_=enlever_la_cha\u00eene_
 Removed_entry_type.=Type_d'entr\u00E9e_supprim\u00E9.
-Removed_group=Groupe_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
 Renamed_string=Cha\u00eene_renomm\u00e9e
-Repeat_incremental_search=R\u00E9p\u00E9ter_la_recherche_incr\u00E9mentale
 Replace=Remplacer
 Replace_(regular_expression)=Remplacer_(expression_r\u00e9guli\u00e8re)_
 Replace_string=Remplacer_la_cha\u00EEne
@@ -801,44 +689,35 @@ Revert_to_original_source=R\u00E9tablir_le_contenu_initial
 Review=V\u00e9rification
 Review_changes=Revoir_les_changements
 Right=Droite
-RIS=RIS
 Save=Sauver
 Save_before_closing=Sauvegarde_avant_fermeture
 Save_database=Sauvegarder_la_base
-Save_database_as_...=Sauvegarder_la_base_sous_...
-Save_entries_in_their_original_order=Sauvegarder_les_entr\u00e9es_dans_leur_ordre_original
+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_dans_l'ordre_par_d\u00e9faut_de_la_table
-Save_ordered_by_author/editor/year=Sauver_selon_author/editor/year
-Save_selected_as_...=Sauvegarder_la_s\u00E9lection_sous_...
-Save_session=Sauvegarder_la_session
+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
 Saved_database=Base_sauvegard\u00E9e
 Saved_selected_to=Sauvegarder_la_s\u00E9lection_de
 Saved_session=Session_sauvegard\u00E9e
 Saving=Enregistrement_en_cours
 Saving_database=Sauvegarde_de_la_base_en_cours
 Scan=D\u00E9marrer
-SciFinder=SciFinder
 Search=Recherche
 Search_All_Fields=Recherche_dans_tous_les_champs
 Search_all_fields=Recherche_dans_tous_les_champs
 Search_error=Erreur_de_recherche
 Search_expression=Expression_\u00E0_rechercher_
 Search_for=Rechercher
-Search_General_Fields=Recherche_dans_les_champs_g\u00E9n\u00E9raux
 Search_general_fields=Recherche_dans_les_champs_g\u00E9n\u00E9raux
 Search_IEEEXplore=Recherche_IEEEXplore
-Search_Optional_Fields=Recherche_dans_les_champs_optionnels
 Search_optional_fields=Recherche_dans_les_champs_optionnels
-Search_Required_Fields=Recherche_dans_les_champs_requis
 Search_required_fields=Recherche_dans_les_champs_requis
 Search_Specified_Field(s)=Recherche_dans_les_champs_sp\u00E9cifi\u00E9s
-Search_term=Rechercher_le_terme
 Searched_database._Global_number_of_hits=Recherche_effectu\u00e9e._Nombre_total_de_r\u00e9sultats
 Searched_database._Number_of_hits=Recherche_effectu\u00E9e._Nombre_de_r\u00E9sultats_trouv\u00E9s
-Searching_for_%0_file=Recherche_du_fichier_%0
+Searching_for_%0_file=Recherche_de_%0
 Searching_for_duplicates...=Recherche_des_doublons_en_cours...
 Secondary_sort_criterion=Crit\u00E8re_secondaire_de_tri
 Select=S\u00E9lectionner
@@ -849,16 +728,19 @@ Select_Classpath_of_New_Importer=S\u00e9lectionner_le_chemin_de_classe_du_nouvea
 Select_encoding=S\u00e9lectionner_l'encodage
 Select_entries_in_group_selection=S\u00E9lectionner_les_entr\u00E9es_dans_la_s\u00E9lection
 Select_entry_type=S\u00E9lectionner_un_type_d'entr\u00E9e
+Select_external_application=S\u00e9lectionner_une_application_externe
 Select_file_from_ZIP-archive=S\u00e9lectionner_un_fichier_depuis_une_archive_ZIP
 Select_format=S\u00E9lectionner_le_format
 Select_matches=S\u00E9lectionner_les_correspondances
-Select_matching_entries=S\u00E9lection_des_entr\u00E9es_correspondant_aux_crit\u00E8res_de_recherche
 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
+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_table_font=D\u00E9finir_la_police_de_la_table
-Set_up_general_fields=Configurer_les_champs_g\u00E9n\u00E9raux
 Settings=Param\u00E8tres
 Setup_selectors=G\u00E9rer_les_s\u00E9lecteurs
 Short_form=Forme_courte
@@ -866,7 +748,6 @@ Shortcut=Raccourci
 Show/edit_BibTeX_source=Montrer/\u00E9diter_le_source_BibTeX
 Show_'Firstname_Lastname'=Ordre_d'affichage_'Pr\u00E9nom_Nom'
 Show_'Lastname,_Firstname'=Ordre_d'affichage_'Nom,_Pr\u00E9nom'
-Show_abstract=Montrer_le_r\u00E9sum\u00E9
 Show_BibTeX_source_by_default=Par_d\u00E9faut,_afficher_l'onglet_Source_BibTeX
 Show_BibTeX_source_panel=Afficher_l'onglet_"Source_BibTeX"
 Show_CiteSeer_column=Afficher_la_colonne_CiteSeer
@@ -874,60 +755,50 @@ 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_general_fields=Montrer_les_champs_g\u00E9n\u00E9raux
-Show_groups_matching_all=Montrer_les_groupes_correspondants_\u00e0_tous
-Show_groups_matching_any=Montrer_les_groupes_correspondants_\u00e0_n'importe_quel
 Show_icons_for_groups=Afficher_les_ic\u00f4nes_pour_les_groupes
+Show_last_names_only=Afficher_uniquement_les_noms_propres
 Show_names_unchanged=Ordre_des_noms_inchang\u00E9
 Show_one_less_rows=Afficher_une_ligne_de_moins
 Show_one_more_row=Afficher_une_ligne_de_plus
 Show_optional_fields=Montrer_les_champs_optionnels
-Show_overlapping_groups=Montrer_les_groupes_se_chevauchant
 Show_PDF/PS_column=Afficher_la_colonne_PDF/PS
 Show_required_fields=Montrer_les_champs_requis
 Show_URL/DOI_column=Afficher_la_colonne_URL/DOI
 Show_warning_dialog_when_a_duplicate_BibTeX_key_is_entered=Afficher_un_message_d'avertissement_quand_une_clef_BibTeX_d\u00E9j\u00E0_existante_est_entr\u00E9e
-Show_warning_dialog_when_an_empty_BibTeX_key_is_entered=Afficher_une_fen\u00eatre_d'avertissement_quand_une_clef_BibTeX_vide_est_entr\u00e9e
+Show_warning_dialog_when_an_empty_BibTeX_key_is_entered=Afficher_une_fen\u00EAtre_d'avertissement_quand_une_clef_BibTeX_vide_est_entr\u00e9e
 Simple_HTML=HTML_(simple)
-Sixpack=Sixpack
 Size=Taille
-Size_of_groups_interface_(rows)=Taille_de_l'interface_des_groupes_(lignes)
 Skip=Passer
+Skipped_-_No_PDF_linked=Saut\u00e9_-_Pas_de_PDF_li\u00e9
+Skipped_-_PDF_does_not_exist=Omis_-_Le_PDF_n'existe_pas
+Skipped_entry.=Entr\u00e9e_omise
 Sort_alphabetically=Classer_alphab\u00e9tiquement
 Sort_Automatically=Trier_automatiquement
-Sort_options=Options_du_tri
 sort_subgroups=trier_les_sous-groupes
-Sorted_all_subgroups_recursively=Tous_les_sous-groupes_r\u00e9cursivement_tri\u00e9s
 Sorted_all_subgroups_recursively.=Tous_les_sous-groupes_r\u00e9cursivement_tri\u00e9s.
-Sorted_immediate_subgroups=Sous-groupes_directs_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
-Start=D\u00E9marrer
 Start_incremental_search=D\u00E9marrer_la_recherche_incr\u00E9mentale
 Start_search=D\u00e9buter_la_recherche
+Starting_import=D\u00e9but_d'importation
 Statically_group_entries_by_manual_assignment=Grouper_manuellement_les_entr\u00E9es
 Status=Etat
-Stop=Arr\u00eat
+Stop=Arr\u00EAt
 Store=Enregistrer
-Store_fields_with_double_braces,_and_remove_extra_braces_when_loading.<BR>Double_braces_signal_that_BibTeX_should_preserve_character_case.=Enregistrer_les_champs_avec_des_doubles_accolades_et_supprimer_les_accolades_suppl\u00e9mentaires_au_chargement._<BR>Les_doubles_accolades_signalent_que_BibTeX_doit_pr\u00e9server_la_casse_des_caract\u00e8res.
 Store_journal_abbreviations=Stocker_les_abr\u00e9viations_de_journaux
 Store_string=Enregistrer_la_cha\u00EEne
 Store_the_following_fields_with_braces_around_capital_letters=Stocker_les_champs_suivants_avec_des_accolades_autour_des_lettres_capitales_
 Stored_definition_for_type=D\u00E9finition_pour_le_type_enregistr\u00E9
 Stored_entry=Entr\u00E9e_enregistr\u00E9e
-Stored_entry.=Entr\u00E9e_stock\u00E9e.
 Strings=Cha\u00EEne
 Strings_for_database=Cha\u00EEnes_pour_la_base
-subdatabase_from_aux=BibTeX_\u00E0_partir_de_LaTex_aux
 Subdatabase_from_aux=BibTeX_\u00E0_partir_de_LaTex_aux
 Suggest=Sugg\u00E9rer
-Switch_preview_layout=Pr\u00E9visualiser_la_mise_en_page
-
 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
 Synchronizing_%0_links...=Synchronisation_des_liens_%0...
-Table=Table
 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
@@ -942,8 +813,6 @@ The_CiteSeer_fetch_operation_returned_zero_results.=La_recherche_CiteSeer_n'a_re
 the_field_<b>%0</b>=le_champ_<b>%0</b>
 The_file<BR>'%0'<BR>has_been_modified<BR>externally!=Le_fichier<BR>'%0'<BR>a_\u00e9t\u00e9_modifi\u00e9_<BR>externalement !
 The_group_"%0"_already_contains_the_selection.=Le_groupe_"%0"_contient_d\u00e9j\u00e0_la_s\u00e9lection.
-The_group_"%0"_does_not_support_the_adding_of_entries.=Le_groupe_"%0"_ne_supporte_pas_l'ajout_des_entr\u00e9es.
-The_group_"%0"_does_not_support_the_removal_of_entries.=Le_groupe_"%0"_ne_supporte_pas_la_suppression_des_entr\u00e9es.
 The_label_of_the_string_can_not_be_a_number.=L'intitul\u00E9_de_la_cha\u00EEne_ne_peut_\u00EAtre_un_nombre.
 The_label_of_the_string_can_not_contain_spaces.=Un_nom_de_cha\u00eene_ne_peut_pas_contenir_d'espaces.
 The_label_of_the_string_can_not_contain_the_'#'_character.=Le_nom_de_la_cha\u00eene_ne_peut_pas_contenir_le_caract\u00e8re_'#'.
@@ -953,44 +822,36 @@ The_search_is_case_insensitive.=La_recherche_n'est_pas_sensible_\u00e0_la_casse.
 The_search_is_case_sensitive.=La_recherche_est_sensible_\u00e0_la_casse.
 The_string_has_been_removed_locally=La_cha\u00EEne_a_\u00E9t\u00E9_supprim\u00E9e_localement
 The_type_name_can_not_contain_spaces.=Le_nom_d'un_type_ne_peut_pas_contenir_d'espaces.
-The_URL_field_appears_to_be_empty_on_entry_number_=Le_champ_URL_semble_\u00eatre_vide_pour_l'entr\u00e9e_num\u00e9ro_
+The_URL_field_appears_to_be_empty_on_entry_number_=Le_champ_URL_semble_\u00EAtre_vide_pour_l'entr\u00e9e_num\u00e9ro_
 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_action_will_modify_the_"%0"_field_of_your_entries.nThis_could_cause_undesired_changes_to_your_entries,_so_itnis_recommended_that_you_change_the_field_in_your_groupndefinition_to_"keywords"_or_a_non-standard_name.nnDo_you_still_want_to_continue?=Cette_action_modifiera_le_champ_"%0"_de_vos_entr\u00e9es._Cela_pourrait_causer_des_changements_involontaires_dans_vos_entr\u00e9es,_aussi_il_n'est_pas_recommand\u00e9_que_vous_changiez_ce_champ_dans_votre_d\u00e9finition_de_groupe_par_"keywor [...]
 this_button_will_update=Ce_bouton_sera_mis_\u00e0_jour
-this_button_will_update_the_column_width_settings<BR>to_match_the_current_widths_in_your_table=ce_bouton_mettra_\u00E0_jour_les_param\u00E8tres_des_largeurs_des_colonnes<BR>pour_retenir_les_largeurs_actuelles_de_votre_table
 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_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_based_on_manual_assignment._Entries_can_be_assigned_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._Entries_can_be_removed_from_this_group_by_selecting_them_then_using_the_context_menu._Every_entry_assigned_to_this_group_must_have_a_unique_key._The_key_may_be_changed_at_any_time_as_long_as_it_remains_unique.=Ce_groupe_contient_des_entr\u00e9es_bas\u00e9es_sur_un_ajout_manuel._Des_entr\u00e9es_peuvent_\u00EAtre_ajout\u00e9es [...]
 This_group_contains_entries_in_which=Ce_groupe_contient_des_entr\u00e9es_pour_lesquelles
 This_group_contains_entries_in_which_any_field_contains_the_regular_expression_<b>%0</b>=Ce_groupe_contient_des_entr\u00e9es_dans_lesquelles_un_champ_contient_l'expression_r\u00e9guli\u00e8re_<b>%0</b> 
 This_group_contains_entries_in_which_any_field_contains_the_term_<b>%0</b>=Ce_groupe_contient_des_entr\u00e9es_dans_lesquelles_un_champ_contient_le_terme_<b>%0</b> 
 This_group_contains_entries_whose_<b>%0</b>_field_contains_the_keyword_<b>%1</b>=Ce_groupe_contient_des_entr\u00e9es_dont_le_champ_<b>%0</b>_contient_le_mot-clef_<b>%1</b> 
 This_group_contains_entries_whose_<b>%0</b>_field_contains_the_regular_expression_<b>%1</b>=Ce_groupe_contient_des_entr\u00e9es_dont_le_champ_<b>%0</b>_contient_l'expression_r\u00e9guli\u00e8re_<b>%1</b> 
-This_is_a_simple_copy_and_paste_dialog._First_load_or_paste_some_text_into_the_text_input_area._After_that,_you_can_mark_text_and_assign_it_to_a_bibtex_field.=Cette_fen\u00EAtre_fonctionne_par_copier-coller._Commencer_par_charger_ou_coller_du_texte_dans_la_zone_de_saisie_du_texte._Ensuite,_vous_pouvez_s\u00E9lectionner_le_texte_et_attribuer_\u00E0_un_champ_BibTeX.
-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_is_a_simple_copy_and_paste_dialog_for_import_some_fields_from_normal_text.=Ceci_est_simplement_une_fen\u00EAtre_de_copier-coller_pour_importer_certains_champs_\u00e0_partir_d'un_texte_normal
 This_makes_JabRef_look_up_each_%0_link_and_check_if_the_file_exists._If_not,_you_will_be_given_options<BR>to_resolve_the_problem.=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_cannot_work_on_multiple_rows.=Cette_op\u00E9ration_ne_peut_pas_\u00EAtre_effectu\u00E9e_sur_plusieurs_lignes.
 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_one_or_more_entries_to_be_selected.=Cette_op\u00e9ration_n\u00e9cessite_qu'une_ou_plusieurs_entr\u00e9es_soient_s\u00e9lectionn\u00e9es.
 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
-Tools=Outils
 Try_different_encoding=Essayer_un_encodage_diff\u00e9rent
 Type=Type
 Type_set_to_'other'=Type_configur\u00E9_comme_'other'_(autre)
-Unabbreviate_journal_names_of_the_selected_entries=D\u00e9velopper_les_noms_de_journaux_des_entr\u00e9es_s\u00e9lectionn\u00e9es
 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
+Unable_to_read_default_icon_theme.=Impossilbe_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
 Undo=Annuler
 Union=Union
-unknown_bibtex_entries=entr\u00e9es_BibTeX_inconnues
 Unknown_bibtex_entries=Entr\u00E9es_BibTeX_inconnues
 unknown_edit=\u00e9dition_inconnue
 unknown_entry_type=type_d'entr\u00E9e_inconnue
@@ -1000,7 +861,6 @@ Unmark_entries=D\u00E9s\u00E9tiqueter_des_entr\u00E9es
 Unmark_entry=D\u00E9s\u00E9tiqueter_l'entr\u00E9e
 Unmarked_selected=D\u00E9s\u00E9tiquetage_de_la_s\u00E9lection
 Unpack_EndNote_filter_set=D\u00E9compacter_la_s\u00E9rie_de_filtres_EndNote
-Unpacked_file=Fichier_d\u00e9compact\u00e9
 Unpacked_file.=Fichier_d\u00e9compact\u00e9.
 Unsupported_version_of_class_%0:_%1=Version_non_support\u00e9e_de_la_classe_%0_:_%1
 untitled=sans_titre
@@ -1008,141 +868,199 @@ 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...
-UPPER=MAJUSCULE
-Upper_Each_First=Chaque_Premi\u00E8re_Lettre_En_Majuscule
-Upper_first=Premi\u00E8re_lettre_en_majuscule
 usage=usage
 Use_antialiasing_font=Utiliser_une_police_liss\u00e9e
-Use_antialiasing_font_in_table=Utiliser_une_police_liss\u00E9e_dans_la_table
-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_custom_icon_theme=Utiliser_un_th\u00e8me_d'ic\u00f4nes_personnalis\u00e9
+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=Rechercher_l'expression_r\u00e9guli\u00e8re
 Use_regular_expressions=Utiliser_les_expressions_r\u00E9guli\u00E8res
-Use_the_following_delimiter=Utiliser_le_d\u00E9limiteur_suivant
 Use_the_following_delimiter_character(s)=Utiliser_le(s)_caract\u00e8re(s)_de_s\u00E9paration_suivant(s)
 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
-Visible_fields=Champs_visibles
-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_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_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_
 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
+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
 Wrong_file_format=Format_de_fichier_incorrect
+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
 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_cleared_this_field._Original_value=Vous_avez_vid\u00e9_ce_champ._Valeur_originale
 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.
-You_must_provide_a_name,_a_search_string_and_a_field_name_for_this_group.=Vous_devez_fournir_un_nom,_une_cha\u00EEne_\u00E0_rechercher_et_un_nom_de_champ_pour_ce_groupe.
 You_must_restart_JabRef_for_the_new_key_bindings_to_work_properly.=Vous_devez_relancer_JabRef_pour_que_les_nouvelles_affectations_des_touches_soient_activ\u00E9es
-You_must_select_a_row_to_perform_this_operation.=Vous_devez_s\u00E9lectionner_une_ligne_pour_effectuer_cette_op\u00E9ration.
 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
-You_must_set_both_bibtex_key_and_PDF_directory=You_must_set_both_bibtex_key_and_PDF_directory
 Your_new_key_bindings_have_been_stored.=Votre_nouvelle_affectation_de_touche_a_\u00E9t\u00E9_sauvegard\u00E9e
-Float_marked_entries=Entr\u00e9es_marqu\u00e9es_flottantes
-Starting_import=D\u00e9but_d'importation
-Output=Sortie
-Exceptions=Exceptions
-Program_output=Sortie_du_programme
+Save_all_open_databases=Sauvegarder_toutes_les_bases_ouvertes
+Include=Inclure
+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...=Sauvergarde_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_connection_\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
 
-grouping_may_not_work_for_this_entry=Les_groupes_pourraient_ne_pas_fonctionner_pour_cette_entr\u00e9e.
+Waiting_for_ArXiv...=Attente_de_ArXiv...
+Processing_=Traitement_de_
+Error_while_fetching_from_OIA2:_=Erreur_lors_d'une_recherche_sur_OIA2_:_
 
-crossreferenced_entries_included=Entr\u00e9es_avec_r\u00e9f\u00e9rences_crois\u00e9es_incluses
+No_entries_found_for_the_search_string_'%0'=Pas_d'entr\u00E9e_pour_la_cha\u00EEne_de_recherche_'%0'
 
-Display_version=Afficher_la_version
 
-Override_default_font_settings=Se_substituer_aux_param\u00e8tres_de_police_par_d\u00e9faut
 
-Mac_file_dialog=S\u00e9lectionneur_de_fichiers_Mac
-Use_native_file_dialog=Utiliser_le_s\u00e9lectionneur_de_fichiers_natif
 
-XMP-annotated_PDF=PDF_avec_annotations_XMP
-PDF_and_PS_links=Liens_PDF_et_PS
-Use_Regular_Expression_Search=Rechercher_l'expression_r\u00e9guli\u00e8re
-Help_on_Regular_Expression_Search=Aide_sur_la_recherche_d'une_expression_r\u00e9guli\u00e8re
+The_chosen_encoding_'%0'_could_not_encode_the_following_characters:_=L'encodage_'%0'_choisi_ne_peut_pas_encoder_les_caract\u00e8res_suivant_:_
+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\u00e9ta-donn\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\u00e9ta-donn\u00e9es_XMP_trouv\u00e9es_dans_le_PDF:_%0
+Link_to_PDF_%0=Lien_vers_PDF_%0
+%0_directory_is_not_set_or_does_not_exist!=Le_r\u00e9pertoire_%0_n'est_pas_param\u00e9tr\u00e9_ou_n'existe_pas_!
+%0_directory_is_'%1':=Le_r\u00e9pertoire_%0_est_'%1'_:
+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_while_writing_XMP_%0=Erreur_lors_de_l'\u00e9criture_des_XMP_%0
+Error_writing_XMP_to_'%0'...=Erreur_lors_de_l'\u00e9criture_des_XMP_dans_'%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
+Invalid_URL:_=URL_invalide_:_
+This_operation_requires_at_least_one_entry.=Cette_op\u00e9ration_n\u00e9cessite_au_moins_une_entr\u00e9e.
+Write_XMP-metadata=Ecrire_les_m\u00e9ta-donn\u00e9es_XMP
+Write_XMP-metadata_for_all_PDFs_in_current_database?=Ecrire_les_m\u00e9ta-donn\u00e9es_XMP_pour_tous_les_PDFs_dans_la_base_courante_?
+No_XMP_metadata_found_in_=Pas_de_m\u00e9ta-donn\u00e9es_XMP_trouv\u00e9es_dans_
+Drog_PDF=xxx
+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.
 
-writeXMP=Ecrire_XMP
-write_XMP=Ecrire_XMP
+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
-Select_external_application=S\u00e9lectionner_une_application_externe
-Show_last_names_only=Afficher_uniquement_les_noms_propres
-Help_on_Preview_Settings=Aide_sur_les_param\u00e8tres_de_l'aper\u00E7u
-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
-Skipped_-_No_PDF_linked=Saut\u00e9_-_Pas_de_PDF_li\u00e9
-Finished_writing_XMP_for_%0_file_(%1_skipped,_%2_errors).=Fin de l'\u00e9criture des XMP pour_%0_fichiers_(%1_pass\u00e9s,_%2_erreurs).
+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
 
-Write_BibtexEntry_as_XMP-metadata_to_PDF.=Ecrire_l'entr\u00e9e_BibTeX_comme_des_m\u00e9tadonn\u00e9es_XMP_dans_un_PDF
-New_field_value=Nouvelle_valeur_du_champ
-Overwrite_existing_field_values=Ecraser_les_valeurs_existantes_du_champ
-Include_entries=Entr\u00e9es_affect\u00e9es
-Selected_entries=Les_entr\u00e9es_s\u00e9lectionn\u00e9es
+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
+Copy_files_to_%0.=Copier_les_fichiers_vers_%0.
+Move_files_to_%0.=D\u00e9placer_les_fichiers_vers_%0.
+Leave_file_in_its_current_directory.=Laisser_le_fichier_dans_son_r\u00e9pertoire_courant
+Copy_file_to_%0.=Copier_le_fichier_vers_%0.
+Move_file_to_%0.=D\u00e9placer_le_fichier_vers_%0.
+Extension=Extension
+Application=Application
+Icon=Ic\u00f4ne
 
-Fetch_CiteSeer_by_ID=Recherche_CiteSeer_par_ID
-Push_entries_to_external_application_(%0)=Envoyer_les_entr\u00e9es_vers_l'application_externe_(%0)
-Write_XMP=Ecrire_XMP
+Path_to_%0_not_defined=Chemin_vers_%0_non_d\u00E9fini
 
-Writing_XMP=Ecriture_XMP
+Error\:_=Erreur_:_
+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.
 
-HTML_table=Tableau_HTML
+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.
 
-Set/clear_fields=Configurer/vider_les_champs
+File_'%0'_is_already_open.=Le fichier_'%0'_est_d\u00E9j\u00E0_ouvert.
 
-Clear_fields=Vider_les_champs
-Set_fields=Configurer_les_champs
+File_has_been_updated_externally._What_do_you_want_to_do?=Le_fichier_a_\u00E9t\u00E9_mis_\u00E0_jour_externalement._Que_voulez-vous_faire_?
 
-HTML_table_(with_Abstract_&_BibTeX)=Tableau_HTML_(avec_R\u00e9sum\u00e9_&_BibTeX)
+Entry_has_no_citekey=L'entr\u00E9e_n'a_pas_de_clef_BibTeX
+Cannot_rename_for_several_entries.=Renommage_impossible_pour_plusieurs_entr\u00E9es
+Rename_to_match_citekey=Renommer_pour_correspondre_\u00E0_la_clef_BibTeX
 
-OpenOffice_Calc=OpenOffice_Calc
-OpenDocument_Spreadsheet=Tableur_OpenDocument
+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_?
 
-Skipped_entry.=Entr\u00e9e_omise
-Error_occured_when_parsing_entry=Une_erreur_est_survenue_pendant_le_traitement_de_l'entr\u00e9e
-Operation_canceled.\n=Op\u00e9ration_annul\u00e9e.\n
-Error_while_writing=Erreur_lors_de_l'\u00e9criture
-Skipped_-_PDF_does_not_exist=Omis_-_Le_PDF_n'existe_pas
-Use_custom_icon_theme=Utiliser_un_th\u00e8me_d'ic\u00f4nes_personnalis\u00e9
-Custom_icon_theme=Th\u00e8me_d'ic\u00f4nes_personnalis\u00e9
-Custom_icon_theme_file=Fichier_de_th\u00e8me_d'ic\u00f4nes_personnalis\u00e9
-Unable_to_read_icon_theme_file=Impossible_de_lire_le_fichier_de_th\u00e8me_d'ic\u00f4nes
-Unable_to_read_default_icon_theme.=Impossilbe_de_lire_le_th\u00e8me_d'ic\u00f4nes_par_d\u00e9faut
-Could_not_find_image_file=Le_fichier_image_n'a_pas_\u00e9t\u00e9_trouv\u00e9
-Set_field=Configurer_le_champ
-No_entries_selected.=Pas_d'entr\u00e9es_s\u00e9lectionn\u00e9es.
-Link_from_new_entries.=Lien_\u00e0_partir_de_nouvelles_entr\u00e9es
-Link_from_new_entry=Lien_\u00e0_partir_d'une_nouvelle_entr\u00e9e
-Link_from_entries.=Lien_\u00e0_partir_d'entr\u00e9es.
-Link_from_entry=Lien_\u00e0_partir_d'une_entr\u00e9e
-exists.Overwrite?=existe._Ecraser_?
-File_exists=Le_fichier_existe
-No_file_associated=Pas_de_fichier_associ\u00e9
-Exported_%0_entries_to_file=%0_entr\u00e9es_export\u00e9es_vers_le_fichier
-Formatter_Name=Nom_de_formateur
-Format_String=Cha\u00EEne_de_format
-Help_on_Name_Formatting=Aide_sur_le_formatage_des_noms
-Special_Name_Formatters=Formateurs_de_nom_sp\u00e9ciaux
-Name_formatter=Formateur_de_nom
-Deselect_all_duplicates=D\u00e9s\u00e9lectionner_tous_les_doublons
-Error_exporting_to_clipboard=Erreur_lors_de_l'exportation_vers_le_presse-papiers
-Generate_keys_for_imported_entries=G\u00e9n\u00e9rer_les_clefs_pour_les_entr\u00e9es_import\u00e9es
-Looking_for_pdf...=Recherche_de_pdf...
+Upgrade_external_links=Mettre_\u00E0_jour_les_liens_externes
+Upgraded_links.=Liens_mis_\u00E0_jour.
 
-Correct_the_entry,_and_reopen_editor_to_display/edit_source.=Corrigez_l'entr\u00e9e_et_r\u00e9-ouvrir_l'\u00e9diteur_pour_afficher/\u00e9diter_la source.
-Fetch_ArXiv.org=Recherche_ArXiv.org
+Change_file_type=Changer_le_type_de_fichier
+Define_'%0'=Definir_'%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
 
-Field_to_filter=Champ_vers_filtre
-XMP_Export_Privacy_Settings=Param\u00E8tres_de_confidentialit\u00e9_pour_l'exportation_XMP
+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
 
-Do_not_write_the_following_fields_to_XMP_Metadata\:=Ne_pas_\u00e9crire_les_champs_suivants_dans_les_m\u00e9ta-donn\u00e9es_XMP_\:
 
-XMP_metadata=M\u00e9tadonn\u00e9es_XMP
+Finished_autosetting_external_links.=La_d\u00E9finition_automatique_des_liens_externes_est_termin\u00E9e.
+No_files_found.=Fichiers_non_trouv\u00E9s.
+Target_file_cannot_be_a_directory.=Le_fichier_cible_ne_peut_pas_\u00EAtre_un_r\u00E9pertoire.
+This_entry_has_no_BibTeX_key._Generate_key_now?=Cette_entr\u00E9e_n'a_pas_de_clef_BibTeX._En_g\u00E9n\u00E9rer_une_maintenant_?
+
+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=
+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...
diff --git a/src/resource/JabRef_it.properties b/src/resource/JabRef_it.properties
index 1c8d569..f0daf49 100644
--- a/src/resource/JabRef_it.properties
+++ b/src/resource/JabRef_it.properties
@@ -1,8 +1,6 @@
 #!
 #! created/edited by Popeye version 0.54 (popeye.sourceforge.net)
 #! encoding:ISO-8859-1
-
-!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.=!Questo_\u00e8_un_semplice_dialogo_taglia_e_copia._Prima_inserisci_o_incolla_del_testo_nell'area_di_input._Quindi_puoi_evidenziare_il_testo_ed_assegnarlo_ad_un_campo_BibTeX.
 %0_contains_the_Regular_Expression_<b>%1</b>=%0_contiene_l'Espressione_Regolare_<b>%1</b>
 %0_contains_the_term_<b>%1</b>=%0_contiene_il_termine_<b>%1</b>
 %0_doesn't_contain_the_Regular_Expression_<b>%1</b>=%0_non_contiene_l'Espressione_Regolare_<b>%1</b>
@@ -21,9 +19,6 @@
 _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_questo_nome_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
 Abbreviation=Abbreviazione
 About_JabRef=Informazioni_su_JabRef
@@ -43,32 +38,25 @@ Add_Group=Aggiungi_un_gruppo
 Add_new=Aggiungi_nuovo
 Add_Subgroup=Aggiungi_un_sottogruppo
 Add_to_group=Aggiungi_al_gruppo
-Added_entry=Aggiunta_voce
-Added_group=Aggiunto_gruppo
 Added_group_"%0".=Aggiunto_gruppo_"%0".
 Added_new=Aggiunto_nuovo
 Added_string=Aggiunta_stringa
 Additionally,_entries_whose_<b>%0</b>_field_does_not_contain_<b>%1</b>_can_be_assigned_manually_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._This_process_adds_the_term_<b>%1</b>_to_each_entry's_<b>%0</b>_field._Entries_can_be_removed_manually_from_this_group_by_selecting_them_then_using_the_context_menu._This_process_removes_the_term_<b>%1</b>_from_each_entry's_<b>%0</b>_field.=Inoltre,_le_voci_il_cui_campo_<b>%0</b>_non_contiene_<b>%1</b>_possono_ [...]
 Advanced=Avanzate
-Advanced_options_for_setting...=Opzioni_di_configurazione_avanzate...
 All_Entries=Tutte_le_voci
 All_entries=Tutte_le_voci
-All_entries_of_this_type_will_be_declared_typeless._Continue?=Tutte_le_voci_simili_saranno_coonsiderate_"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
-Always_save_database_ordered_by_author_name=Salva_sempre_il_database_ordinato_per_nome_dell'autore
 and=e
 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
 Apply=Applica
 Arguments_passed_on_to_running_JabRef_instance._Shutting_down.=Argomenti_passati_all'istanza_attiva_di_JabRef._Chiusura_in_corso.
-Assign_entries_based_on:=Assegna_le_voci_in_base_a:
 Assign_entry_selection_exclusively_to_this_group=Assegna_le_voci_selezionate_esclusivamente_a_questo_gruppo
 Assign_new_file=Assegna_un_nuovo_file
 Assign_the_original_group's_entries_to_this_group?=Assegnare_le_voci_originali_del_gruppo_a_questo_gruppo?_
@@ -80,7 +68,6 @@ Attempt_to_autoset_%0_links_for_your_entries._Autoset_works_if_a_%0_file_in_your
 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
 Automatically_create_groups=Crea_automaticamente_i_gruppi
@@ -92,8 +79,6 @@ 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.
-Autosetting_%0_field...=Definizione_automatica_del_campo_%0...
-AUX_File_import=importa_file_AUX
 AUX_file_import=Importa_file_AUX
 Available_export_formats=Formati_di_esportazione_disponibili
 Available_fields=Campi_BibTeX_disponibili
@@ -103,17 +88,13 @@ 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
 Bibkey_to_filename_conversion=Conversione_della_chiave_BibTeX_in_nome_del_file
-Biblioscape_Tag_file=File_di_tag_Biblioscape
-BibTeX=BibTeX
 BibTeX_key=Chiave_BibTeX
 BibTeX_key_is_unique.=La_chiave_BibTeX_\u00e8_unica.
 BibTeX_key_not_set._Enter_a_name_for_the_downloaded_file=Chiave_BibTeX_non_definita._Inserire_un_nome_per_il_file_scaricato
 BibTeX_source=Sorgente_BibTeX
 BibTeXML=BibTeXML
-BibTeXML_File=File_BibTeXML
 # Usually used the english word.
 Binding=Binding
-Broken_link=Collegamento_interrotto
 Browse=Sfoglia
 # Unsure how to translate out of context
 by=da
@@ -121,9 +102,6 @@ Calling_external_viewer...=Chiamata_a_visualizzatore_esterno...
 Cancel=Annulla
 Cannot_add_entries_to_group_without_generating_keys._Generate_keys_now?=Le_voci_non_possono_essere_inserite_in_un_gruppo_se_prive_di_chiave._Generare_le_chiavi_ora?
 Cannot_merge_this_change=Questa_modifica_non__pu\u00f2_essere_incorporata
-# discrepancy with the french. According to that tanslation should read:
-# Cannot_move_group=Impossibile_spostare_il_gruppo_"%0"
-Cannot_move_group=Impossibile_spostare_il_gruppo
 Cannot_move_group_"%0"_down.=Impossibile_spostare_il_gruppo_"%0"_in_gi\u00f9
 Cannot_move_group_"%0"_left.=Impossibile_spostare_il_gruppo_"%0"_a_sinistra
 Cannot_move_group_"%0"_right.=Impossibile_spostare_il_gruppo_"%0"_a_destra
@@ -151,7 +129,6 @@ 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
-Citation_import_from_CiteSeer_failed.=L'importazione_delle_citazioni_da_CiteSeer_\u00e8_fallita
 Cite_command_(for_Emacs/WinEdt)=Comando_di_citazione_(per_Emacs/WinEdt)
 CiteSeer_Error=Errore_CiteSeer
 CiteSeer_Fetch_Error=Errore_nel_recupero_da_CiteSeer
@@ -159,22 +136,16 @@ 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
-CiteSeer_Warning=Avvertimento_CiteSeer
 Class_name=Nome_della_classe
 Clear=Svuota
 clear_all_groups=svuota_tutti_i_gruppi
 Clear_field=Svuota_il_campo
+
+Clear_fields=Annulla_i_campi
 # Unsure the translation below
 Clear_highlight=Rimuovi_l'evidenziazione
-Clear_highlighted=Svuota_evidenziati
-Clear_highlighted_groups=Svuota_i_gruppi_evidenziati
-Clear_inputarea=Svuota_l'area_di_input
-Clear_search=Cancella_la_ricerca
 Close=Chiudi
-Close_database=Chiudi_il_database
 Close_dialog=Chiudi_la_finestra_di_dialogo
-Close_entry_editor=Chiudi_la_modifica_della_voce
-Close_preamble_editor=Chiudi_la_modifica_del_preambolo
 Close_the_current_database=Chiudi_il_database_corrente
 Close_the_help_window=Chiudi_la_finestra_di_aiuto
 Close_window=Chiudi_la_finestra
@@ -186,7 +157,6 @@ Column_width=Larghezza_della_colonna
 Command_line_id=Identificativo_della_riga_di_comando
 # Not sure: "Registrazione completa" ?
 Complete_record=Completa_la_registrazione
-Completed_citation_import_from_CiteSeer.=Importazione_delle_citazioni_da_CiteSeer_completa.
 Completed_Import_Fields_from_CiteSeer.=Importazione_dei_campi_da_CiteSeer_completa.
 Completed_import_from_CiteSeer.=Importazione_da_CiteSeer_completa
 Contained_in=Contenuto_in
@@ -196,9 +166,7 @@ Copied_cell_contents=Contenuto_delle_celle_copiato
 Copied_key=Chiave_BibTeX_copiata
 Copied_keys=Chiavi_BibTeX_copiate
 Copy=Copia
-Copy_\cite{BibTeX_key}=Copia_\cite{chiave_BibTeX}
 Copy_BibTeX_key=Copia_chiave_BibTeX
-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
@@ -207,6 +175,7 @@ Could_not_export_entry_types=Non_\u00e8_possibile_l'esportazione_dei_tipi_di_voc
 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_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
@@ -219,15 +188,14 @@ Could_not_save_file=Impossibile_salvare_il_file
 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
-Created_group=Gruppo_creato
-Created_group_"%0".=Creato_gruppo_"%0".
 Created_groups.=Gruppi_creati
-Curly_braces_{_and_}_must_be_balanced.=Le_parentesi_graffe_{_e_}_devono_essere_bilanciate
+crossreferenced_entries_included=Incluse_le_voci_con_riferimenti_incrociati
 Current_content=Contenuto_corrente
 Current_value=Valore_corrente
 Custom_entry_types=Tipi_di_voce_personalizzati
 Custom_entry_types_found_in_file=Tipi_di_voce_personalizzati_trovati_nel_file
-Custom_export=Esportazione_personalizzata
+Custom_icon_theme=Tema_di_icone_personalizzato
+Custom_icon_theme_file=File_di_tema_di_icone_personalizzato
 Custom_importers=Importazioni_personalizzate
 Customize_entry_types=Personalizza_tipi_di_voce
 Customize_key_bindings=Personalizza_combinazioni_di_tasti
@@ -243,7 +211,6 @@ Default=Predefinito
 Default_encoding=Codifica_predefinita
 Default_grouping_field=Campo_di_raggruppamento_predefinito
 Default_look_and_feel="Look-and-Feel"_predefinito
-Default_owner=Proprietario_predefinito
 Default_pattern=Modello_predefinito
 Default_sort_criteria=Criterio_di_ordinamento_predefinito
 # or "definita"?. In Italian the gender of the adjective must match that of the name
@@ -258,11 +225,11 @@ Delete_multiple_entries=Cancella_pi\u00f9_voci
 Delete_rows=Cancella_voci
 Delete_strings=Cancella_stringhe
 Deleted=Cancellato
-Deleted_entry=Voce_cancellata
 Delimit_fields_with_semicolon,_ex.=Campi_delimitati_da_punto_e_virgola,_ex.
 Descending=Discendente
 Description=Descrizione
 Deselect_all=Deseleziona_tutto
+Deselect_all_duplicates=Deseleziona_tutti_i_duplicati
 Details=Dettagli
 Disable_entry_editor_when_multiple_entries_are_selected=Disabilita_la_modifica_in_caso_di_selezioni_multiple
 Disable_this_confirmation_dialog=Disabilita_la_richiesta_di_conferma
@@ -272,6 +239,8 @@ Display_all_error_messages=Mostra_tutti_i_messaggi_di_errore
 Display_help_on_command_line_options=Mostra_l'aiuto_sulle_opzioni_della_riga_di_comando
 Display_imported_entries_in_an_inspection_window_before_they_are_added.=Mostra_le_voci_importate_in_una_finestra_d'anteprima_prima_di_aggiungerle.
 Display_only_entries_belonging_to_all_selected_groups.=Mostra_solo_le_voci_appartenenti_a_tutti_i_gruppi_selezionati.
+
+Display_version=Versione
 Displaying_no_groups=Nessun_gruppo_da_visualizzare
 Do_not_abbreviate_names=Non_abbreviare_i_nomi
 Do_not_autoset=Non_effettuare_definizioni_automatiche
@@ -286,12 +255,8 @@ Download=Download
 Download_completed=Download_terminato
 Download_file=Scarica_il_file
 Downloading...=Download_in_corso...
-Due_to_the_duplicate_BibTeX_key,_the_groups_assignment(s)_for_this_entryncannot_be_restored_correctly_when_reopening_this_database._It_is_recommendednthat_you_have_JabRef_generate_a_unique_key_now_to_prevent_this_problem.=A_causa_della_chiave_BibTeX_duplicata,_le_assegnazioni_dei_gruppi_di_questa_voce_non_possono_essere_ripristinate_correttamente_alla_riapertura_del_database._Si_raccomanda_di_far_generare_a_JabRef_una_chiave_univoca_per_prevenire_questo_problema.
-dummy=dummy
-Duplicate_BibTeX_key=Chiave_BibTeX_duplicata
 duplicate_BibTeX_key=chiave_BibTeX_duplicata
 Duplicate_BibTeX_key.=Chiave_BibTeX_duplicata.
-duplicate_BibTeX_key.=chiave_BibTeX_duplicata.
 Duplicate_BibTeX_key._Grouping_may_not_work_for_this_entry.=Chiave_BibTeX_duplicata._I_raggruppamenti_potrebbero_non_essere_corretti_per_questa_voce.
 Duplicate_Key_Warning=Attenzione:_chiave_duplicata
 Duplicate_pairs_found=Trovati_doppioni
@@ -306,17 +271,13 @@ 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_group=Modifica_il_gruppo
 Edit_journal=Modifica_la_rivista
 Edit_preamble=Modifica_il_preambolo
-Edit_strings=Modifica_le_stringhe
 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
 empty_database=database_vuoto
-# missing underscore?
 Enable_source_editing=Abilita_la_modifica_del_codice_sorgente
 Endnote=Endnote
 Enter_URL=Immettere_l'URL
@@ -328,43 +289,34 @@ 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_editor,_next_entry=Modifica_voci,_voce_successiva
-Entry_editor,_next_panel=Modifica_voci,_pannello_successivo
-Entry_editor,_previous_entry=Modifica_voci,_voce_precedente
-Entry_editor,_previous_panel=Modifica_voci,_pannello_precedente
-Entry_editor,_store_field=Modifica_voci,_salva_campo
 Entry_in_current_database=Voce_nel_database_corrente
 Entry_in_import=Voce_nell'importazione
-Entry_is_incomplete=Voce_incompleta
 Entry_preview=Anteprima_della_voce
 Entry_table=Tabella_delle_voci
 Entry_table_columns=Colonne_della_tabella_delle_voci
 Entry_type=Tipo_di_voce
 Entry_type_names_are_not_allowed_to_contain_white_space_or_the_following_characters=I_nomi_dei_tipi_di_voce_non_possono_contenere_spazi_o_i_caratteri_seguenti
 Entry_types=Tipi_di_voce
-EOF_in_mid-string=EOF_nella_stringa
 Error=Errore
+Error_exporting_to_clipboard=Errore_durante_l'esportazione_negli_appunti
 Error_in_field=Errore_nel_campo
-Error_in_line=Errore_nella_linea
-Error_messages=Messaggi_di_errore
+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_writing=Errore_durante_la_scrittura
+Exceptions=Eccezioni
 Existing_file=File_esistente
-exists._Overwrite?=esiste._Sovrascrivere?
 exists._Overwrite_file?=esiste._Sovrascrivere_il_file?
+exists.Overwrite?=esiste._Sovrascrivere?
 Exit=Uscita
 Expand_subtree=Espandere_il_sotto-albero
-# Esplicita?
-Explicit=Esplicito
 Export=Esporta
 Export_entry_types=Esporta_tipo_di_voce
 Export_name=Esporta_nome
 Export_preferences=Esporta_preferenze
 Export_preferences_to_file=Esporta_preferenze_in_un_file
 Export_properties=Esporta_propriet\u00e0
-Export_selected_to_clipboard=Esporta_la_selezione_negli_appunti
 Export_to_clipboard=Esporta_negli_appunti
-Exported_database_to_file=Database_esportato_in_un_file
 Exporting=Esportazione_in_corso
 External_changes=Modifiche_esterne
 External_files=File_esterni
@@ -374,17 +326,14 @@ Failed_to_read_groups_data_(unsupported_version:_%0)=La_lettura_dei_dati_dei_gru
 Fetch=Recupera
 # what does it means?
 Fetch_Articles_Citing_your_Database=Recupera_gli_articoli_che_citano_il_tuo_database
-Fetch_Citations_from_CiteSeer=Recupera_Citazioni_da_CiteSeer
-Fetch_citations_from_CiteSeer=Recupera_citazioni_da_CiteSeer
 Fetch_CiteSeer=Recupera_da_CiteSeer
+
+Fetch_CiteSeer_by_ID=Ricerca_su_CiteSeer_per_ID
 Fetch_Medline=Recupera_da_Medline
-fetch_Medline=recupera_da_Medline
-Fetch_Medline_by_author=Recupera_da_Medline_per_autore
 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
 Fetching_Identifiers=Recupero_degli_identificatori_in_corso
-Fetching_Medline...=Recupero_da_Medline_in_corso...
 Fetching_Medline_by_ID...=Recupero_da_Medline_per_ID...
 Fetching_Medline_by_id_...=Recupero_da_Medline_per_id...
 Fetching_Medline_by_term_...=Recupero_da_Medline_per_termine...
@@ -392,29 +341,29 @@ 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_iseguenti_caratteri
 Field_sizes=Dimensioni_dei_campi
+
+Field_to_filter=Campi_da_filtrare
 Field_to_group_by=Campo_di_raggruppamento
-Field_to_search=Campo_da_ricercare
 Fields=Campi
 File=File
 file=file
 File_'%0'_not_found=File_'%0'_non_trovato
 File_changed=File_modificato
+File_exists=Il_file_esiste
 File_extension=Estensione_del_file
-File_has_been_updated_externally._Are_you_sure_you_want_to_save?=Il_file_\u00e8_stato_aggiornato_esternamente._Salvare_ugualmente?
 File_not_found=File_non_trovato
 File_updated_externally=File_aggiornato_esternamente
 filename=nome_del_file
 Files_opened=File_aperti
 Filter=Filtro
-Find_duplicates=Cerca_duplicati
-Finished_autosetting_%0_field._Entries_changed:_%1.=Assegnazione_automatica_del_campo_%0_terminata._Voce_cambiata:_%1.
 ## 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_for_%0_file_(%1_skipped,_%2_errors).=Terminata_la_scrittura_di_metadati_XMP_per_%0_file_(%1_saltati,_%2_errori).
 First_select_the_entries_you_want_keys_to_be_generated_for.=Selezionare_dapprima_le_voci_per_le_quali_si_vogliono_generare_le_chiavi.
 Fit_table_horizontally_on_screen=Adatta_la_tabella_allo_schermo_orizontalmente
 Float=Galleggiante
+Float_marked_entries=Voci_evidenziate_sempre_in_alto
 Font_Family=Famiglia_di_font
 Font_Preview=Anteprima_font
 Font_Size=Dimensione_font
@@ -422,7 +371,9 @@ Font_Style=Stile_font
 FontSelector=Selettore_dei_font
 for=per
 Format_of_author_and_editor_names=Formato_dei_nomi_di_autori_e_curatori
+Format_String=Stringa_di_formattazione
 Format_used=Formato_utilizzato
+Formatter_Name=Nome_della_formattazione
 Formatter_not_found=Formattazione_non_trovata
 found=trovato
 found_in_aux_file=trovate_nel_file_AUX
@@ -433,6 +384,9 @@ Generate=Genera
 Generate_BibTeX_key=Genera_la_chiave_BibTeX
 Generate_keys=Genera_le_chiavi
 Generate_keys_before_saving_(for_entries_without_a_key)=Genera_le_chiavi_prima_di_salvare_(per_le_voci_senza_chiave)
+
+
+Generate_keys_for_imported_entries=Genera_chiavi_per_le_voci_importate
 Generate_now=Genera_ora
 Generated_BibTeX_key_for=Generata_la_chiave_BibTeX_per
 Generating_BibTeX_key_for=Generazione_in_corso_della_chiave_BibTeX_per
@@ -441,49 +395,44 @@ Grab=Assegna
 Gray_out_entries_not_in_group_selection=Evidenzia_in_grigio_le_voci_fuori_dai_gruppi_selezionati
 Gray_out_non-hits=Disattiva_le_voci_non_corrispondenti
 Gray_out_non-matching_entries=Disattiva_le_voci_non_corrispondenti
-Group_definitions_have_been_converted_to_JabRef_1.7_format.=Le_definizioni_dei_gruppi_sono_state_convertite_nel_formato_JabRef_1.7.
-Group_name=Nome_del_gruppo
 Group_properties=Propriet\u00e0_del_gruppo
+
+grouping_may_not_work_for_this_entry=Il_raggruppamento_potrebbe_non_funzionare_per_queste_voci
 Groups=Gruppi
 Harvard_RTF=Harvard_RTF
 Have_you_chosen_the_correct_package_path?=Il_classpath_\u00e8_corretto?
 Help=Aiuto
-Help_contents=Contenuti_dell'aiuto
 Help_on_groups=Aiuto_sui_gruppi
 Help_on_key_patterns=Aiuto_sulla_composizione_delle_chiavi
+Help_on_Preview_Settings=Aiuto_sui_parametri_di_anteprima
+Help_on_Regular_Expression_Search=Aiuto_sulla_ricerca_di_un'espressione_regolare
 Hide_non-hits=Nascondi_le_voci_non_corrispondenti
 Hide_non-matching_entries=Nascondi_le_voci_non_corrispondenti
 ## 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_groups_that_contain_entries_contained_in_any_currently_selected_group=Evidenzia_i_gruppi_contenenti_voci_contenute_in_uno_qualsiasi_dei_gruppi_selezionati
 Highlight_overlapping_groups=Evidenzia_gruppi_con_voci_in__comune
 Hint%c_To_search_specific_fields_only,_enter_for_example%c<p><tt>author%esmith_and_title%eelectrical</tt>=Suggerimento%c_Per_ricercare_in_un_campo_specifico_digitare,_per_esempio%c<p><tt>author%esmith_and_title%eelectrical</tt>
 HTML=HTML
+
+HTML_table=Tabella_HTML
+
+HTML_table_(with_Abstract_&_BibTeX)=Tabella_HTML_(con_riassunto_e_BibTeX)
 Ignore=Ignora
 Illegal_type_name=Nome_di_tipo_illegale
 Immediate_subgroups=Sottogruppi_diretti
 Import=Importa
-Import_and_append=Importa_e_aggiungi
 Import_and_keep_old_entry=Importa_e_mantieni_le_vecchie_voci
 Import_and_remove_old_entry=Importa_e_rimuovi_le_vecchie_voci
 Import_cancelled.=Importazione_interrotta.
-Import_Data_from_CiteSeer=Importa_dati_da_CiteSeer
 Import_Data_from_CiteSeer_Database=Importa_dati_dal_database_CiteSeer
-Import_database=Importa_un_database
 Import_entries=Importa_voci
 Import_entry_types=Importa_tipi_di_voci
 Import_failed=Importazione_fallita
-Import_Fields_from_CiteSeer=Importa_Campi_da_CiteSeer
-Import_fields_from_CiteSeer=Importa_campi_da_CiteSeer
-Import_fields_from_CiteSeer_Database=Importa_campi_dal_Database_CiteSeer
 Import_Fields_from_CiteSeer_Database=Importa_Campi_dal_Database_CiteSeer
 Import_file=Importa_file
 Import_group_definitions=Importa_definizioni_di_gruppo
 Import_name=Importa_nome
-Import_plain_text=Importa_campi_da_testo
 Import_preferences=Importa_preferenze
 Import_preferences_from_file=Importa_preferenze_da_un_file
 Import_strings=Importa_stringhe
@@ -492,7 +441,6 @@ Import_word_selector_definitions=Importa_le_definizioni_per_la_selezione_di_paro
 Imported_database=Database_importato
 Imported_entries=Voci_importate
 Imported_entry_types=Tipi_di_voce_impotati
-Imported_file=File_importato
 Imported_from_database=Importato_dal_database
 ImportFormat_class=Classe_ImportFormat
 Importing=Importazione_in_corso
@@ -500,12 +448,11 @@ Importing_file=Importazione_del_file_in_corso
 Importing_in_unknown_format=Importazione_in_formato_sconosciuto
 In_JabRef,_use_pairs_of_#_characters_to_indicate_a_string.=In_JabRef,_utilizzare_una_coppia_di_caratteri_#_per_delimitare_una_stringa.
 Include_abstracts=Includi_il_riassunto
-Include_subgroups=Includi_i_sottogruppi
+Include_entries=Includi_voci
 Include_subgroups\:_When_selected,_view_entries_contained_in_this_group_or_its_subgroups=Includi_i_sottogruppi:_Quando_selezionato,_mostra_le_voci_contenute_in_questo_gruppo_e_nei_suoi_sottogruppi
 Incremental=Incrementale
 Incremental_search=Ricerca_incrementale
 Incremental_search_failed._Repeat_to_search_from_top.=Ricerca_incrementale_fallita._Ripetere_la_ricerca_dall'inizio.
-Independent=Indipendente
 Independent_group\:_When_selected,_view_only_this_group's_entries=Gruppo_indipendente:_Quando_selezionato,_mostra_solo_le_voci_di_questo_gruppo
 Initially_show_groups_tree_expanded=Inizialmente_mostra_l'albero_dei_gruppi_espanso
 Input=Attribuzione_dei_campi
@@ -516,17 +463,14 @@ Insert_selected_citations_into_LyX/Kile=Inserisci_le_citazioni_selezionate_in_Ly
 Insert_selected_citations_into_WinEdt=Inserisci_le_citazioni_selezionate_in_WinEdt
 insert_string_=Inserisci_stringa_
 Insert_URL=Inserisci_URL
-INSPEC=INSPEC
 integrity=Integrit\u00e0
 Integrity_check=Verifica_di_integrit\u00e0
 Intersection=Intersezione
-Intersection_with_supergroups=Intersezione_con_sottogruppi
 Invalid_BibTeX_key=Chiave_BibTeX_non_valida
 Invalid_date_format=Formato_data_non_valido
 Invalid_URL=URL_non_valido
 Inverted=Complemantare
 is_a_standard_type.=\u00e8_un_tipo_standard
-ISI=ISI
 ISO_abbreviation=Abbreviazione_ISO
 Item_list_for_field=Lista_di_campi
 JabRef_help=Aiuto_di_JabRef
@@ -534,8 +478,6 @@ JabRef_preferences=Preferenze_JabRef
 Journal_abbreviations=Abbreviazioni_riviste
 Journal_list_preview=Anteprima_della_lista_delle_riviste
 Journal_name=Nome_della_rivista
-Journal_names=Nomi_delle_riviste
-JStor_file=File_JStor
 Keep=Mantieni
 Keep_both=Mantieni_entrambi
 Keep_lower=Mantieni_quello_sotto
@@ -550,7 +492,6 @@ Keyword=Parola_Chiave
 Label=Etichetta
 Language=Lingua
 Last_modified=Ultimo_modificato
-Latex_AUX_file=File_AUX_LaTeX
 LaTeX_AUX_file=File_AUX_LaTeX
 Left=Sinistra
 License=Licenza
@@ -560,33 +501,30 @@ Listen_for_remote_operation_on_port=Porta_in_ascolto_per_operazioni_remote
 Load_session=Carica_sessione
 Loading_session...=Caricamento_sessione...
 Look_and_feel=Aspetto
-lower=minuscolo
+Looking_for_pdf...=Ricerca_del_file_pdf...
+
+Mac_file_dialog=Finestra_di_dialogo_file_Mac
 Main_layout_file=File_di_layout_principale
 Main_PDF_directory=Cartella_file_PDF_principale
 Main_PS_directory=Cartella_file_PS_principale
 Manage=Gestione
-Manage_content_selectors=Gestione_dei_selettore_dei_contenuti
 Manage_custom_exports=Gestione_delle_esportazioni_personalizzate
 Manage_custom_imports=Gestione_delle_importazioni_personalizzate
-Manage_journal_abbreviations=Gestione_abbreviazioni_riviste
+Manage_journal_abbreviations=Gestione_delle_abbreviazioni_delle_riviste
 Mark_entries=Contrassegna_voci
 Mark_entry=Contrassegna_voce
 Mark_new_entries_with_addition_date=Contrassegna_le_nuove_voci_con_la_data_di_aggiunta
 Mark_new_entries_with_owner_name=Contrassegna_le_nuove_voci_con_il_nome_del_proprietario
 Marked_selected=Contrassegna_la_selezione
 Medline_entries_fetched=Voci_Medline_recuperate
-Medline_XML=Medline_XML
-Medline_XML_File=File_Medline_XML
 Menu_and_label_font_size=Dimensione_del_font_di_menu_ed_etichette
 Merged_external_changes=Incorpora_modifiche_esterne
-messages=messaggi
 Messages=Messaggi
 Messages_and_Hints=Avvertimenti_e_Suggerimenti
 Miscellaneous=Varie
 Modification_of_field=Modifica_del_campo
 Modified_group_"%0".=Gruppo_"%0"_modificato.
 Modified_groups=Gruppi_modificati
-Modified_groups_tree=Albero_dei_gruppi_modificati
 Modified_string=Stringa_modificata
 Modify=Modifica
 modify_group=Modifica_gruppo
@@ -595,40 +533,26 @@ Move=Sposta
 Move_down=Sposta_in_gi\u00f9
 Move_entries_in_group_selection_to_the_top=Sposta_le_voci_selezionate_in_su
 move_group=sposta_gruppo
-Move_matching_entries_to_the_top=Sposta_in_alto_le_voci_corrispondenti
 Move_string_down=Sposta_la_stringa_in_gi\u00f9
 Move_string_up=Sposta_la_stringa_in_su
 Move_up=Sposta_in_su
-Moved_Group=Gruppo_spostato
 Moved_group_"%0".=Spostato_gruppo_"%0".
 Name=Nome
+Name_formatter=Formattazione_dei_nomi
 Natbib_style=Stile_Natbib
 nested_aux_files=File_AUX_nidificati
 New=Nuovo
 new=nuovo
-New_article=Nuova_voce_'article'
 New_BibTeX_database=Nuovo_database_BibTeX
 New_BibTeX_entry=Nuova_voce_BibTeX
 New_BibTeX_subdatabase=Nuovo_subdatabase_BibTeX
-New_book=Nuova_voce_'book'
 New_content=Nuovo_contenuto
-New_database=Nuovo_database
 New_database_created.=Nuovo_database_creato
-New_entry=Nuova_voce
-New_entry...=Nuova_voce...
-New_entry_from_plain_text=Nuova_voce_da_testo
+New_field_value=Nuovo_valore_del_campo
 New_file=Nuovo_file
 New_group=Nuovo_gruppo
-New_inbook=Nuova_voce_'inbook'
-New_mastersthesis=Nuova_voce_'masterthesis'
-New_phdthesis=Nuova_voce_'phdthesis'
-New_proceedings=Nuova_voce_'proceedings'
 New_string=Nuova_stringa
-New_subdatabase=Nuovo_subdatabase
-New_subdatabase_based_on_AUX_file=Nuovo_subdatabase_da_file_AUX
-New_unpublished=Nuova_voce_'unpublished'
 Next_entry=Voce_successiva
-Next_tab=Scheda_successiva
 No_%0_found=Nessun_%0_trovato
 No_actual_changes_found.=Nessun_cambiamento_trovato.
 no_base-bibtex-file_specified=nessun_database_BibTeX_specificato!
@@ -639,8 +563,9 @@ No_entries_found._Please_make_sure_you_are_using_the_correct_import_filter.=Ness
 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_extension._Could_not_find_viewer_for_file.=Nessuna_estensione_del_file._Impossibile_trovare_un'applicazione_per_visualizzare_il_file
+No_file_associated=Nessun_file_associato
 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.
@@ -649,13 +574,10 @@ No_pdf_or_ps_defined,_and_no_file_matching_Bibtex_key_found=Nessun_PDF_o_PS_defi
 No_references_found=Nessun_riferimento_trovato
 No_saved_session_found.=Nessuna_sessione_salvata_trovata.
 No_url_defined=Nessun_URL_trovato
-non-Mac_only=Solo_sistemi_non-Mac
-Normal=Normale
 not=no
 not_found=non_trovato
 Not_saved_(empty_session)=Non_salvato_(sessione_vuota)
 Note_that_the_entry_causing_the_problem_has_been_selected.=Nota:_la_voce_responsabile_del_problema_\u00e8_stata_selezionata.
-Note_that_the_new_definitions_will_not_be_compatible_with_previous_JabRef_versions.=Nota:_le_nuove_definizioni_non_saranno_compatibili_con_precedenti_versioni_di_JabRef.
 Note_that_you_must_specify_the_fully_qualified_class_name_for_the_look_and_feel,=Nota:_\u00e8_necessario_specificare_il_nome_di_classe_completo_per_il_"Look-and-Feel",
 Nothing_to_redo=Niente_da_ripetere
 Nothing_to_undo=Niente_da_annullare
@@ -665,7 +587,6 @@ OK=OK
 Ok=Ok
 One_or_more_keys_will_be_overwritten._Continue?=Una_o_pi\u00f9_chiavi_saranno_sovrascritte._Continuare?
 Open=Apri
-open=apri
 Open_BibTeX_database=Apri_database_BibTeX
 Open_database=Apri_database
 Open_editor_when_a_new_entry_is_created=Apri_per_modifiche_quando_una_nuova_voce_viene_creata
@@ -674,45 +595,44 @@ Open_last_edited_databases_at_startup=All'avvio_apri_i_database_aperti_nella_ses
 Open_PDF_or_PS=Apri__PDF_o_PS
 Open_right-click_menu_with_Ctrl+left_button=Mostra_il_menu_contestuale_con_Ctrl_+_pulsante_sinistro
 Open_URL_or_DOI=Apri_URL_o_DOI
+OpenDocument_Spreadsheet=Foglio_elettronico_OpenDocument
 Opened_database=Database_aperto
 Opening=Apertura_in_corso
 Opening_preferences...=Apertura_delle_preferenze_in_corso...
+
+
+OpenOffice_Calc=OpenOffice_Calc
+Operation_canceled.\n=Operazione_annullata.\n
 Optional_fields=Campi_opzionali
 Options=Opzioni
 or=o
 out_of=di
+Output=Output
 Output_or_export_file=File_di_salvataggio_o_esportazione
-Overlapping_groups=Gruppi_con_voci_in_comune
 ##_check
 Override=Sovrascrivi
 Override_default_file_directories=Alternative_alle_cartelle_di_file_predefinite
+Override_default_font_settings=Ignora_le_impostazioni_dei_font_predefinite
 ##_check
 override_the_bibtex_key_by_the_selected_text=Sovrascrivi_la_chiave_BibTeX_con_il_testo_selezionato
+Overwrite_existing_field_values=Sovrascrivi_i_valori_esistenti_del_campo
 ##_check
 Overwrite_keys=Sovrascrivi_chiavi
-Ovid=Ovid
 pairs_processed=coppie_elaborate
 Paste=Incolla
 paste_entries=incolla_voci
 paste_entry=incolla_voce
-Paste_from_clipboard=Incolla_dagli_appunti
 Pasted=Incollato
 Path_to_HTML_viewer=Percorso_per_il_visualizzatore_HTML
 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
 Path_to_WinEdt.exe=Percorso_per_WinEdt.exe
-Paths_to_external_programs=Percorsi_per_programmi_esterni
 PDF_directory=Cartella_dei_file_PDF
-PDF_links=Collegamenti_PDF
 Personal_journal_list=Lista_di_riviste_personale
 Pick_titles=Scegli_titoli
-##_check
-Plain_right_menu=Menu
-Plain_text=Solo_testo
 Plain_text_import=Importazione_da_solo_testo
 Please_check_your_network_connection_to_this_machine.=Verificare_la_connessione_di_rete_di_questa_macchina.
-Please_define_BibTeX_key_first=Definire_in_primo_luogo_la_chiave_BibTeX
 Please_enter_a_name_for_the_group.=Immettere_un_nome_per_il_gruppo
 Please_enter_a_search_term._For_example,_to_search_all_fields_for_<b>Smith</b>,_enter%c<p><tt>smith</tt><p>To_search_the_field_<b>Author</b>_for_<b>Smith</b>_and_the_field_<b>Title</b>_for_<b>electrical</b>,_enter%c<p><tt>author%esmith_and_title%eelectrical</tt>=Immettere_un_termine_di_ricerca._Per_esempio,_per_ricercare_in_tutti_i_campi_<b>Smith</b>,_imettere%c<p><tt>smith</tt><p>_Per_ricercare_nel_campo_<b>Author</b>_il_termine_<b>Smith</b>_e_nel_campo_<b>Title</b>_il_termine_<b>electr [...]
 Please_enter_a_semicolon_or_comma_separated_list_of_Medline_IDs_(numbers).=Immettere_una_lista_di_ID_Medline_(numerici)_separati_da_virgola_o_punto_e_virgola
@@ -726,45 +646,33 @@ 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.
 Preamble=Preambolo
-##_check
-Preamble_editor,_store_changes=Modifica_del_preambolo,_salvare_i_cambiamenti
 Preferences=Preferenze
-Preferences_recorded=Preferenze_registrate
 Preferences_recorded.=Preferenze_registrate.
-Preserve_formatting_of_non-BibTeX_fields=Preserva_il_formato_dei_campi_non-BibTeX
 Preview=Anteprima
 Previous_entry=Voce_precedente
-Previous_tab=Scheda_precedente
 Primary_sort_criterion=Criterio_di_ordinamento_principale
 Problem_with_parsing_entry=Problema_di_analisi_di_una_voce
+Program_output=Output_del_programma
 PS_directory=Cartella_dei_file_PS
-PS_links=Collegamenti_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=Invia_la_selezione_a_LyX
 Push_selection_to_LyX/Kile=Invia_la_selezione_a_LyX/Kile
 Push_selection_to_WinEdt=Invia_la_selezione_a_WinEdt
 Push_to_LatexEditor=Invia_a_LaTeXEditor
-Push_to_LyX=Invia_a_LyX
-Push_to_WinEdt=Invia_a_WinEdt
 Pushed_citations_to_Emacs=Citazioni_inviate_a_Emacs
 Pushed_citations_to_WinEdt=Citazioni_inviate_a_WinEdt
 Pushed_the_citations_for_the_following_rows_to=Inviate_le_citazioni_delle_righe_seguenti_a
-Query_author(s)=Interrogazione_per_autori
-Quit=Esci
 Quit_JabRef=Chiudi_JabRef
 Quit_synchronization=Chiudi_sincronizzazione
 ##check
 Raw_source=Solo_testo
 Really_delete_the_selected=Sicuri_di_voler_cancellare:_
 Rearrange_tabs_alphabetically_by_title=Ordina_alfabeticamente_le_schede
-Recent_files=File_recenti
 Redo=Ripeti
-Refer/Endnote=Refer/Endnote
 Reference_database=Database_di_riferimenti
 References_found=Riferimenti_trovati
 Refine_supergroup\:_When_selected,_view_entries_contained_in_both_this_group_and_its_supergroup=Perfeziona_il_super-gruppo:_Quando_selezionato,_mostra_le_voci_contenute_sia_in_questo_gruppo_sia_nel_suo_super-gruppo
 Refresh_view=Aggiorna_la_vista
-Regexp=Regexp
 Regular_Expression=Espressione_regolare
 Remember_these_entry_types?=Ricordare_questo_tipo_di_voce?
 Remote_operation=Accesso_remoto
@@ -790,16 +698,12 @@ remove_group_and_subgroups=rimuovi_gruppo_e_sottogruppi
 Remove_group_and_subgroups=Rimuovi_gruppo_e_sottogruppi
 Remove_old_entry=Rimuovi_vecchia_voce
 Remove_selected_strings=Rimuovi_le_stringhe_selezionate
-remove_string=rimuovi_stringa
 remove_string_=rimuovi_stringa_
 Removed_entry_type.=Tipo_di_voce_rimosso.
-##Check:_"Rimosso_gruppo"?
-Removed_group=Gruppo_rimosso
 Removed_group_"%0".=Rimosso_gruppo_"%0".
 Removed_group_"%0"_and_its_subgroups.=Rimosso_gruppo_"%0"_e_suoi_sottogruppi.
 Removed_string=Stringa_rimossa
 Renamed_string=Stringa_rinominata
-Repeat_incremental_search=Ripeti_la_ricerca_incrementale
 Replace=Sostituisci
 Replace_(regular_expression)=Sostituisci_(espressione_regolare)
 Replace_string=Sostituisci_stringa
@@ -814,19 +718,15 @@ Revert_to_original_source=Ripristina_il_contenuto_iniziale
 Review=Rivedi
 Review_changes=Rivedi_le_modifiche
 Right=Destra
-RIS=RIS
 Save=Salva
 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...
-Save_session=Salva_sessione
 Saved_database=Database_salvato
 Saved_selected_to=Salvata_la_selezione_in
 Saved_session=Sessione_salvata
@@ -834,22 +734,17 @@ Saving=Salvataggio_in_corso
 Saving_database=Salvataggio_del_database_in_corso
 ##_check
 Scan=Scansione
-SciFinder=SciFinder
 Search=Ricerca
 Search_All_Fields=Ricerca_in_tutti_i_campi
 Search_all_fields=Ricerca_in_tutti_i_campi
 Search_error=Errore_di_ricerca
 Search_expression=Espressione_di_ricerca
 Search_for=Ricerca
-Search_General_Fields=Ricerca_nei_campi_generali
 Search_general_fields=Ricerca_nei_campi_generali
 Search_IEEEXplore=Ricerca_IEEEXplore
-Search_Optional_Fields=Ricerca_nei_campi_opzionali
 Search_optional_fields=Ricerca_nei_campi_opzionali
-Search_Required_Fields=Ricerca_nei_campi_obbligatori
 Search_required_fields=Ricerca_nei_campi_obbligatori
 Search_Specified_Field(s)=Ricerca_nei_campi_specificati
-Search_term=Ricerca_il_termine
 Searched_database._Global_number_of_hits=Ricerca_effettuata._Numero_totale_di_risultati
 Searched_database._Number_of_hits=Ricerca_effettuata._Numero_di_risultati_trovati
 Searching_for_%0_file=Ricerca_file_%0
@@ -863,17 +758,21 @@ Select_Classpath_of_New_Importer=Seleziona_il_classpath_del_nuovo_filtro_di_impo
 Select_encoding=Seleziona_la_codifica
 Select_entries_in_group_selection=Seleziona_le_voci_nella_selezione_dei_gruppi
 Select_entry_type=Seleziona_un_tipo_di_voce
+Select_external_application=Seleziona_un'applicazione_esterna
 Select_file_from_ZIP-archive=Seleziona_un_file_da_un_archivio_Zip
 Select_format=Seleziona_il_formato
 Select_matches=Seleziona_le_corrispondenze
-Select_matching_entries=Seleziona_voci_corrispondenti_ai_criteri_di_ricerca
 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
+
+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_table_font=Definisci_i_font_della_tabella
-Set_up_general_fields=Definizione_dei_campi_generali
 Settings=Parametri
 ##_check
 Setup_selectors=Definisci_i_selettori
@@ -882,7 +781,6 @@ Shortcut=Scorciatoia
 Show/edit_BibTeX_source=Mostra/Modifica_codice_sorgente_BibTeX
 Show_'Firstname_Lastname'=Mostra_'Nome_Cognome'
 Show_'Lastname,_Firstname'=Mostra_'Cognome,_Nome'
-Show_abstract=Mostra_riassunto
 Show_BibTeX_source_by_default=Mostra_il_codice_sorgente_BibTeX_per_impostazione_predefinita
 Show_BibTeX_source_panel=Mostra_la_scheda_"Sorgente_BibTeX"
 Show_CiteSeer_column=Mostra_Colonna_CiteSeer
@@ -890,63 +788,52 @@ 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_general_fields=Mostra_i_campi_generali
-##check
-Show_groups_matching_all=Mostra_i_gruppi_corrispondenti_a_tutte
-##check
-Show_groups_matching_any=Mostra_i_gruppi_corrispondenti
 Show_icons_for_groups=Mostra_le_icone_per_i_gruppi
+Show_last_names_only=Mostra_solo_i_cognomi
 Show_names_unchanged=Mostra_i_nomi_immodificati
 Show_one_less_rows=Mostra_una_riga_in_meno
 Show_one_more_row=Mostra_una_riga_in_pi\u00f9
 Show_optional_fields=Mostra_i_campi_opzionali
-Show_overlapping_groups=Mostra_i_gruppi_con_righe_in_comune
 Show_PDF/PS_column=Mostra_colonna_PDF/PS
 Show_required_fields=Mostra_i_campi_obbligatori
 Show_URL/DOI_column=Mostra_colonna_URL/DOI
 Show_warning_dialog_when_a_duplicate_BibTeX_key_is_entered=Mostra_un_messaggio_di_avverimento_quando_viene_immessa_una_chiave_BibTeX_gi\u00e0_esistente
 Show_warning_dialog_when_an_empty_BibTeX_key_is_entered=Mostra_un_messaggio_di_avverimento_quando_viene_immessa_una_chiave_BibTeX_vuota
 Simple_HTML=HTML_semplice
-Sixpack=Sixpack
 Size=Dimensione
-Size_of_groups_interface_(rows)=Dimensione_dell'interfaccia_dei_gruppi_(righe)
 Skip=Salta
+Skipped_-_No_PDF_linked=Saltato_-_Nessun_file_PDF_collegato
+Skipped_-_PDF_does_not_exist=Saltato_-_Il_file_PDF_non_esiste
+
+Skipped_entry.=Voce_saltata
 Sort_alphabetically=Ordina_alfabeticamente
 Sort_Automatically=Ordina_automaticamente
-Sort_options=Opzioni_di_ordinamento
 sort_subgroups=ordina_i_sottogruppi
-Sorted_all_subgroups_recursively=Ordina_tutti_i_sottogruppi_ricorsivamente
 Sorted_all_subgroups_recursively.=Ordina_tutti_i_sottogruppi_ricorsivamente.
-Sorted_immediate_subgroups=Ordinati_i_sottogruppi_immediati
 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
-Start=Inizia
 Start_incremental_search=Inizia_la_ricerca_incrementale
 Start_search=Inizia_la_ricerca
+Starting_import=Inizio_importazione
 Statically_group_entries_by_manual_assignment=Raggruppa_manualmente_le_voci
 Status=Stato
 Stop=Arresta
 Store=Registra
-Store_fields_with_double_braces,_and_remove_extra_braces_when_loading.<BR>Double_braces_signal_that_BibTeX_should_preserve_character_case.=Registra_i_campi_con_parentesi_graffe_addizionali_e_rimuovi_al_caricamento.<BR>Le_parentisi_graffe_addizionali_indicano_che_BibTeX_deve_preservare_maiuscole_e_minuscole.
 Store_journal_abbreviations=Registra_le_abbreviazioni_delle_riviste
 Store_string=Registra_la_stringa
 Store_the_following_fields_with_braces_around_capital_letters=Registra_i_seguenti_campi_con_lettere_maiuscole_tra_parentesi_graffe_addizionali
 Stored_definition_for_type=Definizione_di_tipo_registrata
 Stored_entry=Voce_registrata
-Stored_entry.=Voce_registrata.
 Strings=Stringa
 Strings_for_database=Stringhe_per_il_database
-subdatabase_from_aux=subdatabase_da_file_LaTeX_AUX
 Subdatabase_from_aux=Subdatabase_da_file_LaTeX_AUX
 Suggest=Suggerisci
-##_Check
-Switch_preview_layout=Alterna_schema_di_anteprima
 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
 Synchronizing_%0_links...=Sincronizzazione_di_%0_collegamenti_in_corso...
-Table=Tabella
 Table_appearance=Aspetto_della_tabella
 Table_background_color=Colore_di_sfondo_della_tabella
 Table_grid_color=Colore_della_griglia_della_tabella
@@ -961,8 +848,6 @@ The_CiteSeer_fetch_operation_returned_zero_results.=La_ricerca_CiteSeer_non_ha_f
 the_field_<b>%0</b>=il_campo_<b>%0</b>
 The_file<BR>'%0'<BR>has_been_modified<BR>externally!=Il_file_<BR>'%0'<BR>_\u00e8_stato_modificato_da_un'applicazione_esterna
 The_group_"%0"_already_contains_the_selection.=Il_gruppo_"%0"_contiene_gi\u00e0_la_selezione.
-The_group_"%0"_does_not_support_the_adding_of_entries.=Il_gruppo_"%0"_non_consente_aggiunte_di_voci.
-The_group_"%0"_does_not_support_the_removal_of_entries.=Il_gruppo_"%0"_non_consente_rimozione_di_voci.
 The_label_of_the_string_can_not_be_a_number.=L'etichetta_della_stringa_non_pu\u00f2_essere_un_numero.
 The_label_of_the_string_can_not_contain_spaces.=L'etichetta_della_stringa_non_pu\u00f2_contenere_spazi.
 The_label_of_the_string_can_not_contain_the_'#'_character.=L'etichetta_della_stringa_non_pu\u00f2_contenere_il_carattere_'#'
@@ -975,10 +860,7 @@ The_type_name_can_not_contain_spaces.=Il_nome_di_un_tipo_di_voce_non_pu\u00f2_co
 The_URL_field_appears_to_be_empty_on_entry_number_=Il_campo_URL_sembra_essere_vuoto_per_la_voce_numero_
 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
-##Check
-This_action_will_modify_the_"%0"_field_of_your_entries.nThis_could_cause_undesired_changes_to_your_entries,_so_itnis_recommended_that_you_change_the_field_in_your_groupndefinition_to_"keywords"_or_a_non-standard_name.nnDo_you_still_want_to_continue?=Questa_azione_modificher\u00e0_il_campo_"%0"_delle_voci_del_database._Questo_potrebbe_causare_cambiamenti_indesiderati_alle_voci,_non_\u00e8_perci\u00f2_raccommandato_cambiare_il_campo_nella_definizione_dei_gruppi_in_"keywords"_o_in_un_nome_n [...]
 this_button_will_update=questo_bottone_aggiorner\u00e0
-this_button_will_update_the_column_width_settings<BR>to_match_the_current_widths_in_your_table=questo_bottone_aggiorner\u00e0_le_impostazioni_della_larghezza_delle_colonne<BR>con_i_valori_correnti_di_larghezza_delle_colonne
 This_entry_is_incomplete=La_voce_\u00e8_incompleta
 This_entry_type_cannot_be_removed.=Questo_tipo_di_voce_non_pu\u00f2_essere_eliminato.
 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 [...]
@@ -987,30 +869,24 @@ This_group_contains_entries_in_which_any_field_contains_the_regular_expression_<
 This_group_contains_entries_in_which_any_field_contains_the_term_<b>%0</b>=Questo_gruppo_contiene_voci_in_cui_uno_dei_campi_contiene_il_termine_<b>%0</b>
 This_group_contains_entries_whose_<b>%0</b>_field_contains_the_keyword_<b>%1</b>=Questo_gruppo_contiene_voci_in_cui_il_campo_<b>%0</b>__contiene_la_keyword_<b>%1</b>
 This_group_contains_entries_whose_<b>%0</b>_field_contains_the_regular_expression_<b>%1</b>=Questo_gruppo_contiene_voci_in_cui_il_campo_<b>%0</b>__contiene_l'espressione_regolare_<b>%1</b>
-This_is_a_simple_copy_and_paste_dialog._First_load_or_paste_some_text_into_the_text_input_area._After_that,_you_can_mark_text_and_assign_it_to_a_bibtex_field.=Questo_\u00e8_un_semplice_dialogo_taglia_e_copia._Prima_inserisci_o_incolla_del_testo_nell'area_di_input._Quindi_puoi_evidenziare_il_testo_ed_assegnarlo_ad_un_campo_BibTeX.
 This_is_a_simple_copy_and_paste_dialog_for_import_some_fields_from_normal_text.=Questo_\u00e8_un_semplice_dialogo_taglia_e_copia_per_importare_dei_campi_da_testo_normale
 This_makes_JabRef_look_up_each_%0_link_and_check_if_the_file_exists._If_not,_you_will_be_given_options<BR>to_resolve_the_problem.=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_cannot_work_on_multiple_rows.=Questa_operazione_non_pu\u00f2_essere_effettuata_su_righe_multiple
 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_one_or_more_entries_to_be_selected.=Per_questa_operazione_una_o_pi\u00f9_voci_devono_essere_selezionate
-To_set_up,_go_to_<B>Tools_->_Manage_journal_abbreviations</B>=Per_configurare_vedi_<B>Strumenti_->_Gestisci_le_abbreviazioni_delle_riviste</B>
+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
-Tools=Strumenti
 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
 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_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
 Undo=Annulla
 Union=Unione
-unknown_bibtex_entries=voci_BibTeX_sconosciute
 Unknown_bibtex_entries=Voci_BibTeX_sconosciute
 ##_check
 unknown_edit=modifica_sconosciuta
@@ -1021,7 +897,6 @@ Unmark_entries=Rimuovi_i_contrassegni_dalle_voci
 Unmark_entry=Rimuovi_il_contrassegno_dalla_voce
 Unmarked_selected=Rimuovi_i_contrassegni_dalla_selezione
 Unpack_EndNote_filter_set=Scompattare_i_filtri_EndNote
-Unpacked_file=File_scompattato
 Unpacked_file.=File_scompattato.
 Unsupported_version_of_class_%0:_%1=Versione_non_supportata_della_classe_%0:_%1
 untitled=senza_titolo
@@ -1030,24 +905,20 @@ 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...
-##check_MAIUSCOLA?
-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_antialiasing_font_in_table=Usa_font_con_antialising_nella_tabella
+Use_custom_icon_theme=Utilizza_un_tema_di_icone_personalizzato
 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=Utilizza_il_delimitatore_seguente
 Use_the_following_delimiter_character(s)=Utilizza_i_caratteri_di_delimitazione_seguenti
 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
-Visible_fields=Campi_visibili
 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
@@ -1060,112 +931,184 @@ What_do_you_want_to_do?=Cosa_vuoi_fare?
 When_adding/removing_keywords,_separate_them_by=All'aggiunta/rimozione_di_keyword_separarle_con
 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
+
+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
 Wrong_file_format=Formato_di_file_errato
+
+XMP-annotated_PDF=PDF_con_annotazioni_XMP
+XMP_Export_Privacy_Settings=Impostazioni_per_la_riservatezza_dei_dati_XMP_esportati
+
+XMP_metadata=Metadati_XMP
 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_cleared_this_field._Original_value=Il_campo_\u00e8_stato_annullato._Valore_originale
 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.
-You_must_provide_a_name,_a_search_string_and_a_field_name_for_this_group.=fornire_un_nome,_una_stringa_di_ricerca_e_un_nome_di_campo_per_questo_gruppo.
 You_must_restart_JabRef_for_the_new_key_bindings_to_work_properly.=Riavviare_Jabref_per_rendere_operative_le_nuove_assegnazioni_di_tasti.
-You_must_select_a_row_to_perform_this_operation.=Selezionare_una_riga_per_effettuare_questa_operazione
 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
-You_must_set_both_bibtex_key_and_PDF_directory=Definire_sia_la_chiave_BibTex,_sia_la_cartella_PDF
 Your_new_key_bindings_have_been_stored.=La_nuova_assegnazione_di_tasti_\u00e8_stata_salvata.
-Float_marked_entries=Voci_evidenziate_sempre_in_alto
-Starting_import=Inizio_importazione
-Output=Output
-Exceptions=Eccezioni
-Program_output=Output_del_programma
 
-grouping_may_not_work_for_this_entry=Il_raggruppamento_potrebbe_non_funzionare_per_queste_voci
-crossreferenced_entries_included=Incluse_le_voci_con_riferimenti_incrociati
-Grouping_may_not_work_for_this_entry.=Il_raggruppamento_potrebbe_non_funzionare_per_queste_voci
+Save_all_open_databases=Salva_tutti_i_database_aperti
 
-Display_version=Versione
-Override_default_font_settings=Ignora_le_impostazioni_dei_font_predefinite
+Include=Includi
+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
 
-Mac_file_dialog=Finestra_di_dialogo_file_Mac
-Use_native_file_dialog=Usa_finestra_di_dialogo_File_nativa
+Link=Collegamento
+File_type=Tipo_di_file
+Edit_file_link=Modifica_il_collegamento_al_file
 
-XMP-annotated_PDF=PDF_con_annotazioni_XMP
-PDF_and_PS_links=Collegamenti_PDF_e_PS
-Use_Regular_Expression_Search=Ricerca_l'espressione_regolare
-Help_on_Regular_Expression_Search=Aiuto_sulla_ricerca_di_un'espressione_regolare
-writeXMP=Scrivi_XMP
-Select_external_application=Seleziona_un'applicazione_esterna
-Show_last_names_only=Mostra_solo_i_cognomi
-Help_on_Preview_Settings=Aiuto_sui_parametri_di_anteprima
-Writing_XMP_metadata...=Scrittura_dei_metadati_XMP...
-Writing_XMP_metadata_for_selected_entries...=Scrittura_dei_metadati_XMP_per_le_voci_selezionate
-Skipped_-_No_PDF_linked=Saltato_-_Nessun_file_PDF_collegato
-Finished_writing_XMP_for_%0_file_(%1_skipped,_%2_errors).=Terminata_la_scrittura_di_metadati_XMP_per_%0_file_(%1_saltati,_%2_errori).
-Write_BibtexEntry_as_XMP-metadata_to_PDF.=Scrivi_voce_BibTeX_come_metadati_XMP_in_un_file_PDF.
-write_XMP=Scrivi_XMP
+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
+%0_directory_is_not_set_or_does_not_exist!=La_cartella_%0_non_\u00e8_definita_o_non_esite!
+%0_directory_is_'%1':=La_cartella_%0_\u00e8_'%1':
+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_while_writing_XMP_%0=Errore_durante_la_scrittura_dei_metadati_XMP_%0_
+Error_writing_XMP_to_'%0'...=Errore_durante_la_scrittura_dei_metadati_XMP_in_%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
+Invalid_URL:_=URL_non_valido:_
+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_
+# ???? below: Drog ???
+Drog_PDF=
+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
-New_field_value=Nuovo_valore_del_campo
-Overwrite_existing_field_values=Sovrascrivi_i_valori_esistenti_del_campo
-Include_entries=Includi_voci
-Selected_entries=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
 
-Fetch_CiteSeer_by_ID=Ricerca_su_CiteSeer_per_ID
-Push_entries_to_external_application_(%0)=Invia_le_voci_selezionate_all'applicazione_esterna_(%0)
-Write_XMP=Scrivi_XMP
+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
+Copy_files_to_%0.=Copia_i_file_in_%0.
+Move_files_to_%0.=Sposta_i_file_in_%0.
+Leave_file_in_its_current_directory.=Lascia_il_file_nella_cartella_corrente
+Copy_file_to_%0.=Copia_il_file_in_%0.
+Move_file_to_%0.=Sposta_il_file_in_%0.
+Extension=Estensione
+Application=Applicazione
+Icon=Icona
 
-Writing_XMP=Scrittura_XMP
+Path_to_%0_not_defined=Percorso_per_%0_non_definito
 
-HTML_table=Tabella_HTML
+Error:_=Errore:_
+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'.
 
-Set/clear_fields=Imposta/annulla_i_campi
+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.
 
-Clear_fields=Annulla_i_campi
-Set_fields=Imposta_i_campi
+File_'%0'_is_already_open.=Il_file_'%0'__\u00e8_gi\u00e0_aperto.
 
-HTML_table_(with_Abstract_&_BibTeX)=Tabella_HTML_(con_riassunto_e_BibTeX)
+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
+Cannot_rename_for_several_entries.=Impossibile_rinominare_pi\u00f9_di_una_voce
+Rename_to_match_citekey=Rinomina_concordemente_alla_chiave_BibTeX
 
-OpenOffice_Calc=OpenOffice_Calc
-OpenDocument_Spreadsheet=Foglio_elettronico_OpenDocument
+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
 
-Skipped_entry.=Voce_saltata
-Error_occured_when_parsing_entry=Errore_durante_l'elaborazione_della_voce
-Operation_canceled.\n=Operazione_annullata.\n
-Error_while_writing=Errore_durante_la_scrittura
-Skipped_-_PDF_does_not_exist=Saltato_-_Il_file_PDF_non_esiste
-Use_custom_icon_theme=Utilizza_un_tema_di_icone_personalizzato
-Custom_icon_theme=Tema_di_icone_personalizzato
-Custom_icon_theme_file=File_di_tema_di_icone_personalizzato
-Unable_to_read_icon_theme_file=Impossibile_leggere_il_file_di_tema_di_icone
-Unable_to_read_default_icon_theme.=Impossibile_leggere_il_file_di_tema_di_icone_predefinito
-Could_not_find_image_file=Il_file_di_immagini_non_\u00e8_stato_trovato
-Set_field=Imposta_il_campo
-No_entries_selected.=Nessuna_voce_selezionata
-Link_from_new_entries.=Collegamento_da_nuove_voci.
-Link_from_new_entry=Collegamento_da_nuova_voce
-Link_from_entries.=Collegamento_da_voci.
-Link_from_entry=Collegamento_da_voce
-exists.Overwrite?=esiste._Sovrascrivere?
-File_exists=Il_file_esiste
-No_file_associated=Nessun_file_associato
-Exported_%0_entries_to_file=%0_voci_esportate_nel_file
-Formatter_Name=Nome_della_formattazione
-Format_String=Stringa_di_formattazione
-Help_on_Name_Formatting=Aiuto_sulla_formattazione_dei_nomi
-Special_Name_Formatters=Formattazioni_speciali_dei_nomi
-Name_formatter=Formattazione_dei_nomi
-Deselect_all_duplicates=Deseleziona_tutti_i_duplicati
-Error_exporting_to_clipboard=Errore_durante_l'esportazione_negli_appunti
+Error\:_=Errore:_
+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.
 
+Do_you_want_JabRef_to_do_the_following_operations?=Vuoi_che_JabRef_esegua_le_operazioni_seguenti?
+Upgrade_file=Aggiornamento_del_file
 
-Generate_keys_for_imported_entries=Genera_chiavi_per_le_voci_importate
-Looking_for_pdf...=Ricerca_del_file_pdf...
-Correct_the_entry,_and_reopen_editor_to_display/edit_source.=Correggi_la_voce_e_riapri_la_scheda_"Sorgente_BibTeX"_per_visualizzare/modificare_il_codice_sorgente_BibTeX.
-Fetch_ArXiv.org=Recupera_da_ArXiv.org
+Finished_autosetting_external_links.=Impostazione_automatica_dei_collegamenti_esterni_terminata.
+No_files_found.=Nessun_file_trovato.
+Target_file_cannot_be_a_directory.=L'oggetto_deve_essere_un_file,_non_una_cartella.
+This_entry_has_no_BibTeX_key._Generate_key_now?=Questa_voce_\u00e8_priva_di_una_chiave_BibTeX._Generarla_ora?
 
-Field_to_filter=Campi_da_filtrare
-XMP_Export_Privacy_Settings=Impostazioni_per_la_riservatezza_dei_dati_XMP_esportati
+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
 
-Do_not_write_the_following_fields_to_XMP_Metadata\:=Non_scrivere_i_dati_dei_campi_seguenti_nei_metadati_XMP:
+Searching_for_files=Ricerca_dei_file
 
-XMP_metadata=Metadati_XMP
diff --git a/src/resource/JabRef_no.properties b/src/resource/JabRef_no.properties
index 2b3e61f..24a4ad6 100644
--- a/src/resource/JabRef_no.properties
+++ b/src/resource/JabRef_no.properties
@@ -1,8 +1,6 @@
 #!
 #! created/edited by Popeye version 0.54 (popeye.sourceforge.net)
 #! encoding:ISO-8859-1
-
-!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.=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.
 %0_contains_the_Regular_Expression_<b>%1</b>=%0_inneholder_regul\u00e6ruttrykket_<b>%1</b>
 %0_contains_the_term_<b>%1</b>=%0_inneholder_uttrykket_<b>%1</b>
 %0_doesn't_contain_the_Regular_Expression_<b>%1</b>=%0_inneholder_ikke_regul\u00e6ruttrykket_<b>%1</b>
@@ -21,9 +19,6 @@
 _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=En_streng_med_det_navnet_finnes_allerede
-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
 Abbreviation=Forkortelse
 About_JabRef=Om_JabRef
@@ -44,32 +39,25 @@ Add_Group=Legg_til_gruppe
 Add_new=Legg_til_ny
 Add_Subgroup=Legg_til_undergruppe
 Add_to_group=Legg_til_i_gruppe
-Added_entry=La_til_enhet
-Added_group=La_til_gruppe
 Added_group_"%0".=La_til_gruppe_"%0".
 Added_new=La_til_ny
 Added_string=La_til_streng
 Additionally,_entries_whose_<b>%0</b>_field_does_not_contain_<b>%1</b>_can_be_assigned_manually_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._This_process_adds_the_term_<b>%1</b>_to_each_entry's_<b>%0</b>_field._Entries_can_be_removed_manually_from_this_group_by_selecting_them_then_using_the_context_menu._This_process_removes_the_term_<b>%1</b>_from_each_entry's_<b>%0</b>_field.=Dessuten,_enheter_hvis_<b>%0</b>-felt_ikke_inneholder_<b>%1</b>_kan_leg [...]
 Advanced=Avansert
-Advanced_options_for_setting...=Advanced_options_for_setting...
 All_Entries=Alle_enheter
 All_entries=Alle_enheter
-All_entries_of_this_type_will_be_declared_typeless._Continue?=Alle_enheter_av_denne_typen_vil_bli_erkl\u00E6rt_typel\u00F8se._Fortsette?
 All_fields=Alle_felter
 All_subgroups_(recursively)=Alle_undergrupper_(rekursivt)
 Allow_editing_in_table_cells=Tillat_redigering_av_celler_i_tabellen
-Always_save_database_ordered_by_author_name=Lagre_alltid_sortert_p\u00E5_forfatternavn
 and=og
 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=
 Apply=Utf\u00F8r
 Arguments_passed_on_to_running_JabRef_instance._Shutting_down.=Argumentene_sendt_til_allerede_aktiv_JabRef-instans._Avslutter.
-Assign_entries_based_on:=Assign_entries_based_on:
 Assign_entry_selection_exclusively_to_this_group=Legg_valgte_enheter_eksklusivt_til_denne_gruppen
 Assign_new_file=Tilordne_ny_fil
 Assign_the_original_group's_entries_to_this_group?=Legg_den_opprinnelige_gruppens_enheter_til_denne_gruppen?
@@ -81,7 +69,6 @@ Attempt_to_autoset_%0_links_for_your_entries._Autoset_works_if_a_%0_file_in_your
 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
 Automatically_create_groups=Generer_grupper_automatisk
@@ -93,8 +80,6 @@ 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.
-Autosetting_%0_field...=Setter_%0-felt_automatisk...
-AUX_File_import=AUX-import
 AUX_file_import=AUX-fil_import
 Available_export_formats=Tilgjengelige_eksportformater
 Available_fields=Tilgjengelige_felter
@@ -104,23 +89,18 @@ 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
 Bibkey_to_filename_conversion=
-Biblioscape_Tag_file=Biblioscape_tag-fil
-BibTeX=BibTeX
 BibTeX_key=
 BibTeX_key_is_unique.=BibTeX-n\u00F8kkelen_er_unik
 BibTeX_key_not_set._Enter_a_name_for_the_downloaded_file=BibTeX-n\u00F8kkel_er_ikke_satt._Angi_et_navn_for_den_nedlastede_filen
 BibTeX_source=BibTeX-kilde
 BibTeXML=BibTeXML
-BibTeXML_File=BibTeXML-fil
 Binding=Hurtigtast
-Broken_link=Ugyldig_link
 Browse=Bla_gjennom
 by=med
 Calling_external_viewer...=Kaller_opp_eksternt_program...
 Cancel=Avbryt
 Cannot_add_entries_to_group_without_generating_keys._Generate_keys_now?=Kan_ikke_legge_til_enheter_til_en_gruppe_uten_\u00e5_generere_n\u00f8kler._Vil_du_generer_n\u00f8kler_n\u00e5?
 Cannot_merge_this_change=Kan_ikke_inkorporere_denne_endringen
-Cannot_move_group=Kan_ikke_flytte_gruppen
 Cannot_move_group_"%0"_down.=Kan_ikke_flytte_gruppen_"%0"_ned.
 Cannot_move_group_"%0"_left.=Kan_ikke_flytte_gruppen_"%0"_til_venstre.
 Cannot_move_group_"%0"_right.=Kan_ikke_flytte_gruppen_"%0"_til_h\u00f8yre.
@@ -147,7 +127,6 @@ 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.
-Citation_import_from_CiteSeer_failed.=Import_av_referanser_fra_CiteSeer_mislyktes.
 
 Cite_command_(for_Emacs/WinEdt)=Kommando_for_referanser_(for_Emacs/WinEdt)
 CiteSeer_Error=CiteSeer-feil
@@ -156,22 +135,15 @@ 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
-CiteSeer_Warning=CiteSeer-advarsel
 Class_name=Klassenavn
 Clear=Opphev
 clear_all_groups=fjern_alle_grupper
 Clear_field=Slett_felt
+
+Clear_fields=Slett_felter
 Clear_highlight=Fjern_utheving
-Clear_highlighted=Fjern_utheving
-Clear_highlighted_groups=Fjern_utheving_av_grupper
-Clear_inputarea=Slett_inndata
-Clear_search=Opphev_s\u00F8k
 Close=Lukk
-Close_database=Lukk_database
 Close_dialog=Lukk_dialog
-# The following lines correspond to names of key bindings:
-Close_entry_editor=Lukk_enhetsskjema
-Close_preamble_editor=Lukk_preamble-skjema
 Close_the_current_database=Lukk_denne_databasen
 Close_the_help_window=Lukk_hjelpevinduet
 Close_window=Lukk_vindu
@@ -182,7 +154,6 @@ Color_for_marking_incomplete_entries=Farge_for_markering_av_ufullstendige_enhete
 Column_width=Kolonnebredde
 Command_line_id=Kommandolinje-id
 Complete_record=Komplett_form
-Completed_citation_import_from_CiteSeer.=Import_av_referanser_fra_CiteSeer_fullf\u00F8rt.
 Completed_Import_Fields_from_CiteSeer.=Fullf\u00F8rte_import_av_felter_fra_CiteSeer
 Completed_import_from_CiteSeer.=Fullf\u00F8rte_import_fra_CiteSeer
 Contained_in=Inneholdt_i
@@ -192,9 +163,7 @@ Copied_cell_contents=Kopierte_innhold_av_cellen
 Copied_key=Kopierte_n\u00F8kkel
 Copied_keys=Kopierte_n\u00F8kler
 Copy=Kopier
-Copy_\cite{BibTeX_key}=
 Copy_BibTeX_key=Kopier_BibTeX-n\u00F8kkel
-Copy_to_clipboard=Kopier
 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
@@ -204,6 +173,7 @@ 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_image_file=Kunne_ikke_finne_bilde
 Could_not_find_layout_file=Fant_ikke_layoutfil
 Could_not_import_entry_types=Kunne_ikke_importere_enhetstyper
 Could_not_import_preferences=Kunne_ikke_importere_innstillinger
@@ -217,15 +187,15 @@ Could_not_save_file=Kunne_ikke_lagre
 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
-Created_group=Opprettet_gruppe
-Created_group_"%0".=Opprettet_gruppe_"%0".
 Created_groups.=Opprettet_grupper.
-Curly_braces_{_and_}_must_be_balanced.=Kr\u00F8llparenteser_{_og_}_m\u00E5_v\u00E6re_balanserte.
+
+crossreferenced_entries_included=refererte_enheter_inkludert
 Current_content=N\u00E5v\u00E6rende_innhold
 Current_value=N\u00E5v\u00E6rende_verdi
 Custom_entry_types=Egendefinerte_enhetstyper
 Custom_entry_types_found_in_file=Fant_egendefinerte_enhetstyper_i_filen
-Custom_export=Eksterne_eksportfiltre
+Custom_icon_theme=Egendefinert_ikonsett
+Custom_icon_theme_file=Ikonsettfil
 Custom_importers=Egendefinerte_importformat
 Customize_entry_types=Tilpass_enhetstyper
 Customize_key_bindings=Sett_opp_hurtigtaster
@@ -241,7 +211,6 @@ Default=Tilbakestill
 Default_encoding=Standard_koding
 Default_grouping_field=Standardfelt_for_gruppering
 Default_look_and_feel=Standard_utseende
-Default_owner=Eier_av_nye_enheter
 Default_pattern=Default_pattern
 Default_sort_criteria=Standard_sorteringskriteria
 defined.=er_definert.
@@ -255,11 +224,11 @@ Delete_multiple_entries=Slett_flere_enheter
 Delete_rows=Slett_rader
 Delete_strings=Slett_strenger
 Deleted=Slettet
-Deleted_entry=Slettet_enhet
 Delimit_fields_with_semicolon,_ex.=Avgrens_felter_med_semikolon,_f.eks.
 Descending=Synkende
 Description=Beskrivelse
 Deselect_all=Velg_ingen
+Deselect_all_duplicates=Velg_bort_alle_duplikater
 Details=Details
 Disable_entry_editor_when_multiple_entries_are_selected=Sperr_enhetsskjema_n\u00E5r_flere_enheter_er_valgt
 Disable_this_confirmation_dialog=Deaktiver_denne_kontrolldialogen
@@ -269,6 +238,8 @@ Display_all_error_messages=
 Display_help_on_command_line_options=Vis_kommandolinjehjelp
 Display_imported_entries_in_an_inspection_window_before_they_are_added.=Vis_importerte_enheter_i_et_inspeksjonsvindu_f\u00F8r_de_legges_til.
 Display_only_entries_belonging_to_all_selected_groups.=Vis_kun_enheter_inneholdt_i_alle_valgte_grupper.
+
+Display_version=Vis_versjonsnummer
 Displaying_no_groups=Viser_ingen_grupper
 Do_not_abbreviate_names=Ikke_forkort_navn
 Do_not_autoset=Ikke_sett_linker_automatisk
@@ -283,12 +254,8 @@ Download=Last_ned
 Download_completed=Nedlasting_fullf\u00F8rt
 Download_file=Last_ned_fil
 Downloading...=Laster_ned...
-Due_to_the_duplicate_BibTeX_key,_the_groups_assignment(s)_for_this_entryncannot_be_restored_correctly_when_reopening_this_database._It_is_recommendednthat_you_have_JabRef_generate_a_unique_key_now_to_prevent_this_problem.=P\u00e5_grunn_av_den_ikke-unike_BibTeX-n\u00f8kkelen_kan_ikke_gruppetilordningen(e)_for_denne_enheten_gjenopprettes_riktig_n\u00e5r_databasen_\u00e5pnes_igjen._Det_anbefales_at_du_lar_JabRef_generere_en_unik_n\u00f8kkel_for_\u00e5_unng\u00e5_dette_problemet.
-dummy=dummy
-Duplicate_BibTeX_key=Ikke_unik_BibTeX-n\u00F8kkel
 duplicate_BibTeX_key=ikke_unik_BibTeX-n\u00F8kkel
 Duplicate_BibTeX_key.=Duplicate_BibTeX_key.
-duplicate_BibTeX_key.=ikke_unik_n\u00F8kkel.
 Duplicate_BibTeX_key._Grouping_may_not_work_for_this_entry.=BibTeX-n\u00F8kkelen_er_ikke_unik._Gruppering_kan_feile_for_denne_enheten.
 Duplicate_Key_Warning=Advarsel:_ikke_unik_n\u00F8kkel
 Duplicate_pairs_found=Duplikatpar_funnet
@@ -302,15 +269,12 @@ 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_group=Rediger_gruppe
 Edit_journal=Rediger_journal
 Edit_preamble=Rediger_'preamble'
-Edit_strings=Rediger_strenger
 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=Empty_database
 empty_database=tom_database
 Enable_source_editing=Tillat_redigering_av_kildekode
 Endnote=Endnote
@@ -323,44 +287,35 @@ entries_have_undefined_BibTeX_key=enheter_har_udefinert_BibTeX-n\u00f8kkel
 entries_into_new_database=enheter_i_ny_database
 entry=enhet
 Entry_editor=Enhetsskjema
-# The following lines correspond to names of key bindings:
-Entry_editor,_next_entry=Enhetsskjema,_neste_enhet
-Entry_editor,_next_panel=Enhetsskjema,_neste_panel
-Entry_editor,_previous_entry=Enhetsskjema,_forrige_enhet
-Entry_editor,_previous_panel=Enhetsskjema,_forrige_panel
-Entry_editor,_store_field=Enhetsskjema,_lagre_felt
 Entry_in_current_database=Enhet_i_eksisterende_database
 Entry_in_import=Enhet_i_import
-Entry_is_incomplete=Enheten_er_ufullstendig
 Entry_preview=Forh\u00E5ndsvisning
 Entry_table=Hovedtabell
 Entry_table_columns=Tabellkolonner
 Entry_type=Enhetstype
 Entry_type_names_are_not_allowed_to_contain_white_space_or_the_following_characters=Navn_p\u00E5_typer_kan_ikke_inneholde_opperom_eller_noen_av_de_f\u00F8lgende_tegnene
 Entry_types=Enhetstyper
-EOF_in_mid-string=EOF_in_mid-string
 Error=Feil
+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_line=Error_in_line
-Error_messages=
+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_writing=En_feil_oppsto_ved_skriving
+Exceptions=Feilinformasjon
 Existing_file=Eksisterende_fil
-exists._Overwrite?=eksisterer._Skriv_over?
 exists._Overwrite_file?=eksisterer._Erstatt_filen?
+exists.Overwrite?=eksisterer._Skriv_over?
 Exit=Avslutt
 Expand_subtree=\u00c5pne_forgrening
-Explicit=Explicit
 Export=Eksporter
 Export_entry_types=Eksporter_enhetstyper
 Export_name=Navn_p\u00E5_filter
 Export_preferences=Eksporter_innstillinger
 Export_preferences_to_file=Eksporter_innstillinger_til_fil
 Export_properties=Egenskaper_for_eksportfilter
-Export_selected_to_clipboard=Eksporter_valgte_enheter_til_utklippstavle
 Export_to_clipboard=Eksporter_til_utklippstavle
-Exported_database_to_file=Eksporterte_databasen_til_fil
 Exporting=Eksporterer
 External_changes=Eksterne_endringer
 External_files=Eksterne_filer
@@ -369,17 +324,14 @@ External_viewer_called=Eksternt_program_kalt_opp
 Failed_to_read_groups_data_(unsupported_version:_%0)=Kunne_ikke_lese_gruppedata_(ikke_st\u00f8ttet_versjon:_%0)
 Fetch=Hent
 Fetch_Articles_Citing_your_Database=Hent_publikasjoner_som_refererer_enheter_i_din_database
-Fetch_Citations_from_CiteSeer=Hent_referanser_fra_CiteSeer
-Fetch_citations_from_CiteSeer=Hent_refererende_publikasjoner_fra_CiteSeer
 Fetch_CiteSeer=Hent_CiteSeer
+
+Fetch_CiteSeer_by_ID=Hent_CiteSeer_ved_hjelp_av_ID
 Fetch_Medline=Hent_Medline
-fetch_Medline=hent_Medline
-Fetch_Medline_by_author=Fetch_Medline_by_author
 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
 Fetching_Identifiers=Henter_identifikatorer
-Fetching_Medline...=Henter_Medline...
 Fetching_Medline_by_ID...=Henter_Medline_ved_hjelp_av_ID...
 Fetching_Medline_by_id_...=Henter_Medline_ved_hjelp_av_id...
 Fetching_Medline_by_term_...=S\u00F8ker_i_Medline_...
@@ -388,29 +340,29 @@ 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_noen_av_de_f\u00F8lgende_tegnene
 Field_sizes=
+
+Field_to_filter=Felt_som_skal_filtreres
 Field_to_group_by=Grupperingsfelt
-Field_to_search=S\u00F8kefelt
 Fields=Felter
 File=Fil
 file=fil
 File_'%0'_not_found=Fant_ikke_filen_'%0'
 File_changed=Endret_fil
+File_exists=Filen_eksisterer
 File_extension=Etternavn_p\u00E5_filer
-File_has_been_updated_externally._Are_you_sure_you_want_to_save?=Filen_har_blitt_endret_eksternt._Er_du_sikker_p\u00E5_at_du_vil_lagre?
 File_not_found=Fant_ikke_filen
 File_updated_externally=Filen_har_blitt_endret_eksternt
 filename=filnavn
 Files_opened=Filer_\u00E5pnet
 
 Filter=Filter
-Find_duplicates=S\u00F8k_etter_duplikater
-Finished_autosetting_%0_field._Entries_changed:_%1.=Fullf\ufffdrte_automatisk_setting_av_%0-felt._Enheter_endret:_%1
 Finished_synchronizing_%0_links._Entries_changed%c_%1.=Fullf\u00f8rte_synkronisering_av_%0-linker._Enheter_endret%c_%1.
+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
 Float=Flyt
+Float_marked_entries=Sorter_merkede_enheter_\u00F8verst
 Font_Family=Familie
 Font_Preview=Forh\u00E5ndsvisning
 Font_Size=St\u00F8rrelse
@@ -418,7 +370,9 @@ Font_Style=Stil
 FontSelector=Fontvelger
 for=for
 Format_of_author_and_editor_names=Formatering_av_forfatter-_og_redakt\u00F8rnavn
+Format_String=Formatstreng
 Format_used=Format_brukt
+Formatter_Name=Navn_p\u00e5_formaterer
 Formatter_not_found=Ukjent_formaterer
 found=funnet
 found_in_aux_file=funnet_i_aux-fil
@@ -429,6 +383,8 @@ Generate=Generer
 Generate_BibTeX_key=Generere_BibTeX-n\u00F8kkel
 Generate_keys=Generer_n\u00F8kler
 Generate_keys_before_saving_(for_entries_without_a_key)=
+
+Generate_keys_for_imported_entries=Generer_n\u00f8kler_automatisk_for_importerte_enheter
 Generate_now=Generer_n\u00e5
 Generated_BibTeX_key_for=Genererte_BibTeX-n\u00F8kkel_for
 Generating_BibTeX_key_for=Genererer_BibTeX-n\u00F8kkel_for
@@ -436,49 +392,43 @@ Grab=Fang_hurtigtast
 Gray_out_entries_not_in_group_selection=Skraver_enheter_utenfor_valgte_grupper
 Gray_out_non-hits=Vis_ikke-treff_i-gr\u00E5tt
 Gray_out_non-matching_entries=Skraver_ikke-treff
-Group_definitions_have_been_converted_to_JabRef_1.7_format.=Gruppedefinisjoner_har_blitt_konvertert_til_JabRef_1.7-format.
-Group_name=Gruppenavn
 Group_properties=Gruppeegenskaper
+
+grouping_may_not_work_for_this_entry=gruppering_kan_feile_for_denne_enheten
 Groups=Gruppering
 Harvard_RTF=Harvard_RTF
 Have_you_chosen_the_correct_package_path?=
 Help=Hjelp
-Help_contents=Oversikt_over_hjelpefiler
 Help_on_groups=Hjelp_om_grupper
 Help_on_key_patterns=Hjelp_om_n\u00F8kkeloppskrifter
+Help_on_Preview_Settings=
+Help_on_Regular_Expression_Search=
 Hide_non-hits=Skjul_ikke-treff
 Hide_non-matching_entries=Gjem_ikke-treff
 
 Hierarchical_context=Gruppehierarki
 Highlight=Uthev
-Highlight_groups_matching_all_selected_entries=Uthev_grupper_som_inneholder_alle_valgte_enheter
-Highlight_groups_matching_any_selected_entry=Uthev_grupper_som_inneholder_minst_en_av_de_valgte_enhetene
-Highlight_groups_that_contain_entries_contained_in_any_currently_selected_group=Highlight_groups_that_contain_entries_contained_in_any_currently_selected_group
 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)
 Ignore=Ignorer
 Illegal_type_name=Ugyldig_typenavn
 Immediate_subgroups=N\u00e6rmeste_undergrupper
 Import=Importer
-Import_and_append=Importer_til_\u00E5pen_database
 Import_and_keep_old_entry=Importer_og_behold_den_gamle_enheten
 Import_and_remove_old_entry=Importer_og_fjern_den_gamle_enheten
 Import_cancelled.=Import_kansellert.
-Import_Data_from_CiteSeer=Importer_data_fra_CiteSeer
 Import_Data_from_CiteSeer_Database=Importer_data_fra_CiteSeer-database
-Import_database=Import_av_database
 Import_entries=Importer_enheter
 Import_entry_types=Importer_enhetstyper
 Import_failed=Import_mislyktes
-Import_Fields_from_CiteSeer=Importer_felter_fra_CiteSeer
-Import_fields_from_CiteSeer=Importer_felter_fra_CiteSeer
-Import_fields_from_CiteSeer_Database=Importer_felter_fra_CiteSeer-database
 Import_Fields_from_CiteSeer_Database=Importer_felter_fra_CiteSeer-database
 Import_file=Importer_fil
 Import_group_definitions=Importer_gruppedefinisjoner
 Import_name=Navn_p\u00e5_import
-Import_plain_text=Importer_fra_ren_tekst
 Import_preferences=Importer_innstillinger
 Import_preferences_from_file=Importer_innstillinger_fra_fil
 Import_strings=Importer_strenger
@@ -487,7 +437,6 @@ Import_word_selector_definitions=Importer_definisjoner_for_hurtigvelgere
 Imported_database=Importerte_database
 Imported_entries=Importerte_enheter
 Imported_entry_types=Importerte_enhetstyper
-Imported_file=Importerte_fil
 Imported_from_database=Importerte_fra_databasen
 ImportFormat_class=ImportFormat-klasse
 Importing=Importerer
@@ -495,12 +444,11 @@ Importing_file=Importerer_fil
 Importing_in_unknown_format=Importerer_ukjent_format
 In_JabRef,_use_pairs_of_#_characters_to_indicate_a_string.=I_JabRef_brukes_#-tegn_parvis_for_\u00E5_indikere_strenger.
 Include_abstracts=
-Include_subgroups=Inkluder_undergrupper
+Include_entries=Inkluder_enheter
 Include_subgroups\:_When_selected,_view_entries_contained_in_this_group_or_its_subgroups=Inkluder_undergrupper:_Vis_enheter_inneholdt_i_denne_gruppen_eller_en_undergruppe
 Incremental=Inkrementell
 Incremental_search=Inkrementelt_s\u00F8k
 Incremental_search_failed._Repeat_to_search_from_top.=Incremental_search_failed._Repeat_to_search_from_top.
-Independent=Uavhengig
 Independent_group\:_When_selected,_view_only_this_group's_entries=Uavhengig_gruppe:_Vis_bare_denne_gruppens_enheter
 Initially_show_groups_tree_expanded=Vis_gruppetreet_ekspandert_i_utgangspunktet
 Input=Inndata
@@ -511,17 +459,14 @@ Insert_selected_citations_into_LyX/Kile=Send_valgte_enheter_til_LyX/Kile
 Insert_selected_citations_into_WinEdt=Send_valgte_enheter_til_WinEdt
 insert_string_=sett_inn_streng_
 Insert_URL=Sett_inn_URL
-INSPEC=INSPEC
 integrity=integritet
 Integrity_check=Integritetssjekk
 Intersection=Snitt
-Intersection_with_supergroups=Snitt_med_supergrupper
 Invalid_BibTeX_key=Ugyldig_BibTeX-n\u00F8kkel
 Invalid_date_format=Ugyldig_datoformat
 Invalid_URL=Ugyldig_URL
 Inverted=Invertert
 is_a_standard_type.=er_en_standardtype.
-ISI=ISI
 ISO_abbreviation=ISO-forkortelse
 Item_list_for_field=Ordliste_for_felt
 JabRef_help=JabRef-hjelp
@@ -529,8 +474,6 @@ JabRef_preferences=JabRef-oppsett
 Journal_abbreviations=Journalforkortelser
 Journal_list_preview=Forh\u00e5ndsvisning_av_journalliste
 Journal_name=Journalnavn
-Journal_names=Journalnavn
-JStor_file=JStor-fil
 Keep=Behold
 Keep_both=Behold_begge
 Keep_lower=Behold_nederste
@@ -544,7 +487,6 @@ Keyword=N\u00F8kkelord
 Label=Navn
 Language=Spr\u00E5k
 Last_modified=Sist_endret
-Latex_AUX_file=LaTeX_AUX-fil
 LaTeX_AUX_file=LaTeX_AUX-fil
 Left=Venstre
 License=
@@ -554,12 +496,13 @@ Listen_for_remote_operation_on_port=
 Load_session=Gjenopprett_tilstand
 Loading_session...=Gjenoppretter_tilstand...
 Look_and_feel=Utseende
-lower=sm\u00E5
+Looking_for_pdf...=Ser_etter_pdf...
+
+Mac_file_dialog=Mac-fildialog
 Main_layout_file=Hoved-layoutfil
 Main_PDF_directory=Hovedkatalog_for_PDF-filer
 Main_PS_directory=Hovedkatalog_for_PS-filer
 Manage=Sett_opp
-Manage_content_selectors=Sett_opp_ordvelgere
 Manage_custom_exports=Sett_opp_eksterne_eksportfiltre
 Manage_custom_imports=
 Manage_journal_abbreviations=Sett_opp_journalforkortelser
@@ -569,18 +512,14 @@ Mark_new_entries_with_addition_date=
 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
-Medline_XML=Medline_XML
-Medline_XML_File=Medline_XML-fil
 Menu_and_label_font_size=St\u00F8rrelse_av_menyfonter
 Merged_external_changes=Inkorporerte_eksterne_endringer
-messages=beskjeder
 Messages=Meldinger
 Messages_and_Hints=Beskjeder_og_hint
 Miscellaneous=Diverse
 Modification_of_field=Endring_av_felt
 Modified_group_"%0".=Endret_gruppen_"%0".
 Modified_groups=Endrede_grupper
-Modified_groups_tree=Endret_gruppedefinisjoner
 Modified_string=Endret_streng
 Modify=Endre
 modify_group=endre_gruppe
@@ -589,40 +528,26 @@ Move=Flytt
 Move_down=Flytt_ned
 Move_entries_in_group_selection_to_the_top=Flytt_enheter_i_valgte_grupper_\u00F8verst
 move_group=flytt_gruppe
-Move_matching_entries_to_the_top=Flytt_treff_\u00F8verst
 Move_string_down=Flytt_streng_ned
 Move_string_up=Flytt_streng_opp
 Move_up=Flytt_opp
-Moved_Group=Flyttet_gruppe
 Moved_group_"%0".=Flyttet_gruppen_"%0".
 Name=Navn
+Name_formatter=Navneformaterer
 Natbib_style=Natbib-stil
 nested_aux_files=n\u00F8stede_aux-filer
 New=Ny
 new=ny
-New_article=Ny_'article'
 New_BibTeX_database=Ny_BibTeX-database
 New_BibTeX_entry=Ny_BibTeX-enhet
 New_BibTeX_subdatabase=Ny_BibTeX-deldatabase
-New_book=Ny_'book'
 New_content=Nytt_innhold
-New_database=Ny_database
 New_database_created.=Opprettet_ny_database.
-New_entry=Ny_enhet
-New_entry...=Ny_enhet...
-New_entry_from_plain_text=Ny_enhet_fra_ren_tekst
+New_field_value=Ny_verdi
 New_file=Ny_fil
 New_group=Ny_gruppe
-New_inbook=Ny_'inbook'
-New_mastersthesis=Ny_'mastersthesis'
-New_phdthesis=Ny_'phdthesis'
-New_proceedings=Ny_'proceedings'
 New_string=Ny_streng
-New_subdatabase=Ny_deldatabase
-New_subdatabase_based_on_AUX_file=Ny_deldatabase_basert_p\u00E5_AUX-fil
-New_unpublished=Ny_'unpublished'
 Next_entry=Neste_enhet
-Next_tab=Neste_tab
 No_%0_found=Fant_ingen_%0
 No_actual_changes_found.=Ingen_reelle_endringer_funnet.
 no_base-bibtex-file_specified=ingen_basis-bibtexfil_spesifisert
@@ -633,8 +558,9 @@ No_entries_found._Please_make_sure_you_are_using_the_correct_import_filter.=Inge
 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_extension._Could_not_find_viewer_for_file.=
+No_file_associated=Ingen_assosiert_fil
 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.
@@ -643,13 +569,10 @@ No_pdf_or_ps_defined,_and_no_file_matching_Bibtex_key_found=Ingen_pdf_eller_ps_d
 No_references_found=Ingen_referanser_funnet
 No_saved_session_found.=Fant_ingen_lagret_tilstand.
 No_url_defined=Ingen_url_er_definert
-non-Mac_only=ikke_for_Mac
-Normal=Normal
 not=ikke
 not_found=ikke_funnet
 Not_saved_(empty_session)=Tilstand_ikke_lagret_(ingen_filer_\u00E5pne)
 Note_that_the_entry_causing_the_problem_has_been_selected.=Legg_merke_til_at_enheten_som_skaper_problemet_har_blitt_valgt.
-Note_that_the_new_definitions_will_not_be_compatible_with_previous_JabRef_versions.=Merk_at_de_nye_definisjonene_ikke_vil_v\u00E6re_kompatible_med_tidligere_versjoner_av_JabRef.
 Note_that_you_must_specify_the_fully_qualified_class_name_for_the_look_and_feel,=Merk_at_du_m\u00E5_spesifisere_det_fullstendige_klassenavnet_for_utseendet,
 Nothing_to_redo=Ingenting_\u00E5_gjenta
 Nothing_to_undo=Ingenting_\u00E5_angre
@@ -660,7 +583,6 @@ OK=OK
 Ok=OK
 One_or_more_keys_will_be_overwritten._Continue?=En_eller_flere_n\u00f8kler_vil_bli_skrevet_over._Fortsett?
 Open=\u00C5pne
-open=open
 Open_BibTeX_database=\u00C5pne_BibTeX-database
 Open_database=\u00C5pne_database
 Open_editor_when_a_new_entry_is_created=Start_redigering_n\u00E5r_en_ny_enhet_opprettes
@@ -669,41 +591,41 @@ Open_last_edited_databases_at_startup=\u00C5pne_sist_viste_databaser_ved_oppstar
 Open_PDF_or_PS=\u00C5pne_PDF_eller_PS
 Open_right-click_menu_with_Ctrl+left_button=\u00C5pne_h\u00F8yreklikkmeny_med_Ctrl+venstre_knapp
 Open_URL_or_DOI=\u00C5pne_URL_eller_DOI
+OpenDocument_Spreadsheet=OpenDocument_Spreadsheet
 Opened_database=\u00C5pnet_database
 Opening=\u00C5pner
 Opening_preferences...=\u00C5pner_innstillinger...
+
+OpenOffice_Calc=OpenOffice_Calc
+Operation_canceled.\n=Operasjonen_avbrutt.\n
 Optional_fields=Valgfrie_felter
 Options=Valg
 or=eller
 out_of=ut_av
+Output=Output
 Output_or_export_file=Lagre_eller_eksporter_fil
-Overlapping_groups=Overlappende_grupper
 Override=Skriv_over
 Override_default_file_directories=
+
+Override_default_font_settings=Overstyr_standardfonter
 override_the_bibtex_key_by_the_selected_text=
+Overwrite_existing_field_values=Skriv_over_eksisterende_verdier
 Overwrite_keys=Skriv_over_n\u00F8kler
-Ovid=Ovid
 pairs_processed=par_revidert
 Paste=Lim_inn
 paste_entries=lim_inn
 paste_entry=lim_inn
-Paste_from_clipboard=Lim_inn
 Pasted=Limte_inn
 Path_to_HTML_viewer=Sti_til_HTML-leser
 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_WinEdt.exe=Sti_til_WinEdt.exe
-Paths_to_external_programs=Stier_til_eksterne_programmer
 PDF_directory=
-PDF_links=PDF-koblinger
 Personal_journal_list=Personlig_journalliste
 Pick_titles=Velg_titler
-Plain_right_menu=Plain_right_menu
-Plain_text=Ren_tekst
 Plain_text_import=Import_fra_ren_tekst
 Please_check_your_network_connection_to_this_machine.=Vennligst_sjekk_maskinens_nettverksforbindelse.
-Please_define_BibTeX_key_first=Vennligst_definer_BibTeX-n\u00F8kkel_f\u00F8rst
 Please_enter_a_name_for_the_group.=Skriv_inn_et_navn_for_gruppen.
 Please_enter_a_search_term._For_example,_to_search_all_fields_for_<b>Smith</b>,_enter%c<p><tt>smith</tt><p>To_search_the_field_<b>Author</b>_for_<b>Smith</b>_and_the_field_<b>Title</b>_for_<b>electrical</b>,_enter%c<p><tt>author%esmith_and_title%eelectrical</tt>=Skriv_inn_et_s\u00F8kebegrep._For_eksempel,_for_\u00E5_s\u00F8ke_i_alle_felter_etter_<b>Olsen</b>,_skriv%c<p><tt>olsen</tt><p>For_\u00E5_s\u00F8ke_i_<b>Author</b>-feltet_etter_<b>Olsen</b>_og_i_<b>Title</b>-feltet_etter_<b>electr [...]
 Please_enter_a_semicolon_or_comma_separated_list_of_Medline_IDs_(numbers).=Du_m\u00E5_oppgi_en_semikolon-_eller_kommaseparert_liste_av_Medline-IDer_(tall).
@@ -717,44 +639,33 @@ 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.
 Preamble=Preamble
-Preamble_editor,_store_changes=Preamble-skjema,_lagre_innhold
 Preferences=Oppsett
-Preferences_recorded=Lagret_innstillinger
 Preferences_recorded.=Lagret_oppsett.
-Preserve_formatting_of_non-BibTeX_fields=Bevar_formatering_av_ikke-standard_BibTeX-felter
 Preview=Forh\u00E5ndsvisning
 Previous_entry=Forrige_enhet
-Previous_tab=Forrige_tab
 Primary_sort_criterion=Prim\u00e6rt_sorteringskriterium
 Problem_with_parsing_entry=Problem_med_\u00E5_lese_enhet
+Program_output=Output_fra_program
 PS_directory=
-PS_links=PS-koblinger
+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=
 Push_selection_to_LyX/Kile=Send_valgte_enheter_til_LyX/Kile
 Push_selection_to_WinEdt=Send_valgte_til_WinEdt
 Push_to_LatexEditor=
-Push_to_LyX=Send_til_LyX
-Push_to_WinEdt=Send_til_WinEdt
 Pushed_citations_to_Emacs=Sendte_enheter_til_Emacs
 Pushed_citations_to_WinEdt=Sendte_referanser_til_WinEdt
 Pushed_the_citations_for_the_following_rows_to=Sendte_referanser_til_de_f\u00F8lgende_radene_til
-Query_author(s)=S\u00f8k_etter_forfatter(e)
-Quit=Avslutt
 Quit_JabRef=Avslutt_JabRef
 Quit_synchronization=Avslutt_synkronisering
 Raw_source=Kilde
 Really_delete_the_selected=Vil_du_slette_de_valgte
 Rearrange_tabs_alphabetically_by_title=
-Recent_files=Siste_filer
 Redo=Gjenta
-Refer/Endnote=Refer/Endnote
 Reference_database=Referansedatabase
 # The next two lines are used like in "References found: 1  Number of references to fetch?"
 References_found=Referanser_funnet
 Refine_supergroup\:_When_selected,_view_entries_contained_in_both_this_group_and_its_supergroup=Undergruppe:_Vis_enheter_inneholdt_b\u00e5de_i_denne_gruppen_og_gruppen_over
 Refresh_view=Oppdater
-Regexp=Regexp
 Regular_Expression=Regul\u00e6ruttrykk
 Remember_these_entry_types?=Husk_disse_enhetstypene?
 Remote_operation=
@@ -779,15 +690,12 @@ remove_group_and_subgroups=fjern_gruppe_og_undergrupper
 Remove_group_and_subgroups=Fjern_gruppe_og_undergrupper
 Remove_old_entry=Fjern_gammel_enhet
 Remove_selected_strings=Slett_valgte_strenger
-remove_string=slett_streng
 remove_string_=slett_streng_
 Removed_entry_type.=Slettet_enhetstype.
-Removed_group=Fjernet_gruppe
 Removed_group_"%0".=Fjernet_gruppen_"%0"
 Removed_group_"%0"_and_its_subgroups.=Fjernet_gruppen_"%0"_og_dens_undergrupper
 Removed_string=Fjernet_streng
 Renamed_string=Endret_navn_p\u00e5_streng
-Repeat_incremental_search=Gjenta_inkrementelt_s\u00F8k
 Replace=
 Replace_(regular_expression)=Erstatt_(regul\u00e6ruttrykk)
 Replace_string=Erstatt_streng
@@ -801,19 +709,15 @@ Revert_to_original_source=Resett_til_opprinnelig_kildekode
 Review=Kommentarer
 Review_changes=Se_over_endringer
 Right=H\u00f8yre
-RIS=RIS
 Save=Lagre
 Save_before_closing=Lagre_f\u00F8r_databasen_lukkes
 Save_database=Lagre_database
-Save_database_as_...=Lagre_database_som_...
 Save_entries_in_their_original_order=
 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=
 Save_ordered_by_author/editor/year=
-Save_selected_as_...=Lagre_valgte_som_...
-Save_session=Lagre_tilstand
 Saved_database=Lagret_database
 Saved_selected_to=Lagret_valgte_i
 Saved_session=Lagret_tilstand
@@ -821,22 +725,17 @@ Saving=Lagrer
 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
-SciFinder=SciFinder
 Search=S\u00F8k
 Search_All_Fields=S\u00F8k_i_alle_felter
 Search_all_fields=S\u00F8k_i_alle_felter
 Search_error=Feil_ved_s\u00F8k
 Search_expression=S\u00F8keuttrykk
 Search_for=S\u00F8k_etter
-Search_General_Fields=S\u00f8k_i_generelle_felter
 Search_general_fields=S\u00f8k_i_generelle_felter
 Search_IEEEXplore=
-Search_Optional_Fields=S\u00f8k_i_valgfrie_felter
 Search_optional_fields=S\u00f8k_i_valgfrie_felter
-Search_Required_Fields=S\u00f8k_i_n\u00f8dvendige_felter
 Search_required_fields=S\u00f8k_i_n\u00f8dvendige_felter
 Search_Specified_Field(s)=S\u00F8k_spesifiserte_felt(er)
-Search_term=S\u00F8kestreng
 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
@@ -850,16 +749,20 @@ Select_Classpath_of_New_Importer=Velg_classpath_for_nytt_importformat
 Select_encoding=Velg_koding
 Select_entries_in_group_selection=Velg_enheter_i_valgte_grupper
 Select_entry_type=Velg_enhetstype
+Select_external_application=Velg_ekstern_applikasjon
 Select_file_from_ZIP-archive=Velg_fil_fra_ZIP-fil
 Select_format=Velg_format
 Select_matches=Velg_treff
-Select_matching_entries=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
+
+Set/clear_fields=Sett/fjern_felter
+Set_field=Sett_felt
+Set_fields=Sett_felter
 Set_general_fields=Tilpass_generelle_felter
 Set_table_font=Velg_tabellfont
-Set_up_general_fields=Set_up_general_fields
 Settings=Innstillinger
 Setup_selectors=Sett_opp_ordlister
 Short_form=Kort_form
@@ -867,7 +770,6 @@ Shortcut=Snarvei
 Show/edit_BibTeX_source=Vis/rediger_BibTeX-kilde
 Show_'Firstname_Lastname'=Vis_'Fornavn_Etternavn'
 Show_'Lastname,_Firstname'=Vis_'Etternavn,_Fornavn'
-Show_abstract=Vis_abstract
 Show_BibTeX_source_by_default=Vis_BibTeX-kode_som_standard
 Show_BibTeX_source_panel=Vis_BibTeX-kilde-panel
 Show_CiteSeer_column=Vis_CiteSeer-kolonne
@@ -875,59 +777,51 @@ 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_general_fields=Vis_generelle_felter
-Show_groups_matching_all=Uthev_grupper_som_inneholder_alle
-Show_groups_matching_any=Uthev_grupper_som_inneholder_noen
 Show_icons_for_groups=Vis_ikoner_for_grupper
+Show_last_names_only=Vis_bare_etternavn
 Show_names_unchanged=Vis_navn_uforandret
 Show_one_less_rows=Vis_en_rad_mindre
 Show_one_more_row=Vis_en_rad_mer
 Show_optional_fields=Vis_valgfrie_felter
-Show_overlapping_groups=Vis_overlappende_grupper
 Show_PDF/PS_column=Vis_PDF/PS-kolonne
 Show_required_fields=Vis_n\u00F8dvendige_felter
 Show_URL/DOI_column=Vis_URL/DOI-kolonne
 Show_warning_dialog_when_a_duplicate_BibTeX_key_is_entered=Vis_advarsel_n\u00E5r_en_ikke_unik_BibTeX-n\u00F8kkel_skrives_inn
 Show_warning_dialog_when_an_empty_BibTeX_key_is_entered=Vis_dialogboks_med_advarsel_n\u00E5r_en_tom_BibTeX-n\u00F8kkel_skrives_inn
 Simple_HTML=Enkel_HTML
-Sixpack=Sixpack
 Size=St\u00f8rrelse
-Size_of_groups_interface_(rows)=
 Skip=
+Skipped_-_No_PDF_linked=
+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_options=Sortering
 sort_subgroups=sorter_undergrupper
-Sorted_all_subgroups_recursively=Sorterte_alle_undergrupper_rekursivt
 Sorted_all_subgroups_recursively.=Sorterte_alle_undergrupper_rekursivt.
-Sorted_immediate_subgroups=Sorterte_n\u00e6rmeste_undergrupper
 Sorted_immediate_subgroups.=Sorterte_n\u00e6rmeste_undergrupper.
 source_edit=redigering_av_kilde
+Special_Name_Formatters=Spesielle_navneformaterere
 Special_table_columns=Spesielle_kolonner
-Start=Start
 Start_incremental_search=Start_inkrementelt_s\u00F8k
 Start_search=Start_s\u00f8k
+Starting_import=Starter_import
 Statically_group_entries_by_manual_assignment=Grupper_enheter_statisk_ved_manuell_tildeling
 Status=Status
 Stop=Stopp
 Store=Lagre
-Store_fields_with_double_braces,_and_remove_extra_braces_when_loading.<BR>Double_braces_signal_that_BibTeX_should_preserve_character_case.=Lagre_felter_med_doble_kr\u00F8llparenteser,_og_fjern_ekstra_kr\u00F8llparenteser_ved_innlasting.<BR>Doble_kr\u00F8llparenteser_signaliserer_at_BibTeX_ikke_skal_bytte_store_og_sm\u00E5_bokstaver.
 Store_journal_abbreviations=Lagre_journalforkortelser
 Store_string=Lagre_streng
 Store_the_following_fields_with_braces_around_capital_letters=Lagre_de_f\u00f8lgende_feltene_med_kr\u00f8llparenteser_rundt_store_bokstaver
 Stored_definition_for_type=Lagret_typedefinisjon
 Stored_entry=Lagret_enhet
-Stored_entry.=Lagret_enhet.
 Strings=Strenger
 Strings_for_database=Strenger_for_database
-subdatabase_from_aux=underdatabase_fra_aux
 Subdatabase_from_aux=Deldatabase_fra_aux-fil
 Suggest=Foresl\u00E5
-Switch_preview_layout=Skift_layout_p\u00E5_forh\u00E5ndsvisning
 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
 Synchronizing_%0_links...=Synkroniserer_%0-linker...
-Table=Tabell
 Table_appearance=Tabelloppsett
 Table_background_color=Bakgrunnsfarge_for_tabell
 Table_grid_color=Farge_p\u00e5_linjer_i_tabell
@@ -942,8 +836,6 @@ The_CiteSeer_fetch_operation_returned_zero_results.=Nedlastingen_fra_CiteSeer_ga
 the_field_<b>%0</b>=feltet_<b>%0</b>
 The_file<BR>'%0'<BR>has_been_modified<BR>externally!=Filen<BR>'%0'<BR>har_blitt_endret<BR>eksternt!
 The_group_"%0"_already_contains_the_selection.=Gruppen_"%0"_inneholder_allerede_de_valgte_enhetene.
-The_group_"%0"_does_not_support_the_adding_of_entries.=Gruppen_"%0"_st\u00F8tter_ikke_tilordning_av_enheter.
-The_group_"%0"_does_not_support_the_removal_of_entries.=Gruppen_"%0"_st\u00F8tter_ikke_fjerning_av_enheter.
 The_label_of_the_string_can_not_be_a_number.=Navnet_p\u00E5_strengen_kan_ikke_v\u00E6re_et_tall.
 The_label_of_the_string_can_not_contain_spaces.=Navnet_p\u00E5_strengen_kan_ikke_inneholde_mellomrom.
 The_label_of_the_string_can_not_contain_the_'#'_character.=Navnet_p\u00E5_strengen_kan_ikke_inneholde_tegnet_'#'.
@@ -956,9 +848,7 @@ The_type_name_can_not_contain_spaces.=Typenavnet_kan_ikke_inneholde_mellomrom.
 The_URL_field_appears_to_be_empty_on_entry_number_=URL-feltet_ser_ut_til_\u00E5_v\u00e6re_tomt_for_enhet_nummer_
 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_action_will_modify_the_"%0"_field_of_your_entries.nThis_could_cause_undesired_changes_to_your_entries,_so_itnis_recommended_that_you_change_the_field_in_your_groupndefinition_to_"keywords"_or_a_non-standard_name.nnDo_you_still_want_to_continue?=
 this_button_will_update=denne_knappen_vil_oppdatere
-this_button_will_update_the_column_width_settings<BR>to_match_the_current_widths_in_your_table=denne_knappen_vil_oppdatere_kolonnebreddeinnstillingene<BR>til_\u00E5_samsvare_med_breddene_i_tabellen_for_\u00F8yeblikket
 This_entry_is_incomplete=Denne_enheten_er_ufullstendig
 This_entry_type_cannot_be_removed.=Denne_enhetstypen_kan_ikke_slettes.
 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 [...]
@@ -967,30 +857,24 @@ This_group_contains_entries_in_which_any_field_contains_the_regular_expression_<
 This_group_contains_entries_in_which_any_field_contains_the_term_<b>%0</b>=Denne_gruppen_inneholder_enheter_som_har_teksten_<b>%0</b>_i_et_hvilket_som_helst_felt
 This_group_contains_entries_whose_<b>%0</b>_field_contains_the_keyword_<b>%1</b>=Denne_gruppen_inneholder_enheter_hvis_<b>%0</b>-felt_inneholder_n\u00F8kkelordet_<b>%1</b>
 This_group_contains_entries_whose_<b>%0</b>_field_contains_the_regular_expression_<b>%1</b>=Denne_gruppen_inneholder_enheter_hvis_<b>%0</b>-felt_stemmer_med_regul\u00e6ruttrykket_<b>%1</b>
-This_is_a_simple_copy_and_paste_dialog._First_load_or_paste_some_text_into_the_text_input_area._After_that,_you_can_mark_text_and_assign_it_to_a_bibtex_field.=Dette_er_et_enkelt_klipp-og-lim-vindu._F\u00F8rst_last_inn_eller_kopier_tekst_til_inndatafeltet._Deretter_kan_du_merke_tekst_og_tildele_den_til_et_BibTeX-felt.
 This_is_a_simple_copy_and_paste_dialog_for_import_some_fields_from_normal_text.=Dette_er_et_enkelt_klipp-og-lim-vindu._F\u00F8rst_last_inn_eller_kopier_tekst_til_inndatafeltet._Deretter_kan_du_merke_tekst_og_tildele_den_til_et_BibTeX-felt.
 This_makes_JabRef_look_up_each_%0_link_and_check_if_the_file_exists._If_not,_you_will_be_given_options<BR>to_resolve_the_problem.=Dette_f\u00E5r_JabRef_til_\u00E5_unders\u00F8ke_hver_av_%0-linkene,_og_sjekke_om_filen_eksisterer._Hvis_ikke_vil_du_bli_gitt_valg<BR>for_\u00E5_l\u00F8se_problemet.
-This_operation_cannot_work_on_multiple_rows.=Denne_operasjonen_kan_ikke_brukes_p\u00E5_flere_rader_samtidig.
 This_operation_requires_all_selected_entries_to_have_BibTex_keys_defined.=
 This_operation_requires_one_or_more_entries_to_be_selected.=
 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
-Tools=Verkt\u00F8y
 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
 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\ufffd_utklippstavlen_som_BibTeX-enheter.
 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
 Undo=Angre
 Union=Union
-unknown_bibtex_entries=ukjente_BibTeX-enheter
 Unknown_bibtex_entries=Ukjente_BibTeX-enheter
 unknown_edit=ukjent_endring
 unknown_entry_type=ukjent_enhetstype
@@ -1000,7 +884,6 @@ Unmark_entries=Fjern_merking
 Unmark_entry=Fjern_merking
 Unmarked_selected=Fjernet_merking_fra_valgte_enheter
 Unpack_EndNote_filter_set=Pakk_ut_EndNote-filtersett
-Unpacked_file=Pakket_ut_fil
 Unpacked_file.=Pakket_ut_fil.
 Unsupported_version_of_class_%0:_%1=Ikke_st\u00F8ttet_versjon_av_klassen_%0:_%1
 untitled=uten_navn
@@ -1008,23 +891,20 @@ Up=Opp
 Update_to_current_column_widths=Bruk_n\u00E5v\u00E6rende_kolonnebredder
 Updated_group_selection=Updated_group_selection
 Updating_entries...=Oppdaterer_enheter...
-UPPER=STORE
-Upper_Each_First=Store_Forbokstaver_I_Alle_Ord
-Upper_first=Stor_forbokstav_i_f\u00F8rste_ord
 usage=bruk
 Use_antialiasing_font=Bruk_glattet_font
-Use_antialiasing_font_in_table=Bruk_glattet_font_i_tabell
+Use_custom_icon_theme=Bruk_egendefinert_ikonsett
 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=Bruk_f\u00F8lgende_skilletegn
 Use_the_following_delimiter_character(s)=Use_the_following_delimiter_character(s)
 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
-Visible_fields=Synlige_felter
 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
@@ -1036,113 +916,178 @@ What_do_you_want_to_do?=
 When_adding/removing_keywords,_separate_them_by=N\u00e5r_n\u00f8kkelord_legges_til_eller_fjernes_skill_dem_med
 with=med
 Word=Ord
+Write_BibtexEntry_as_XMP-metadata_to_PDF.=
+Write_XMP=Skriv_XMP
+
+Writing_XMP=Skriver_XMP
+Writing_XMP_metadata...=
+Writing_XMP_metadata_for_selected_entries...=
 Wrong_file_format=Feil_filformat
+
+XMP-annotated_PDF=XMP-annotert_PDF
+XMP_Export_Privacy_Settings=Innstillinger_for_XMP-eksport
+XMP_metadata=XMP-metadata
 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_cleared_this_field._Original_value=Du_har_slettet_dette_feltet._Original_verdi
 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\ufffd_skrive_et_heltall_i_tekstfeltet_for
 You_must_fill_in_a_name_for_the_entry_type.=Du_m\u00E5_velge_et_navn_for_enhetstypen.
-You_must_provide_a_name,_a_search_string_and_a_field_name_for_this_group.=Du_m\u00E5_oppgi_et_navn,_en_s\u00F8kestreng_og_et_feltnavn_for_denne_gruppen.
 You_must_restart_JabRef_for_the_new_key_bindings_to_work_properly.=Du_m\u00E5_starte_JabRef_p\u00E5_nytt_for_at_de_nye_hurtigtastene_skal_fungere.
-You_must_select_a_row_to_perform_this_operation.=Du_m\u00E5_velge_en_rad_for_\u00E5_kunne_bruke_denne_operasjonen.
 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
-You_must_set_both_bibtex_key_and_PDF_directory=You_must_set_both_bibtex_key_and_PDF_directory
 Your_new_key_bindings_have_been_stored.=Dine_nye_hurtigtaster_har_blitt_lagret.
-Float_marked_entries=Sorter_merkede_enheter_\u00F8verst
-Starting_import=Starter_import
-Output=Output
-Exceptions=Feilinformasjon
-Program_output=Output_fra_program
 
-grouping_may_not_work_for_this_entry=gruppering_kan_feile_for_denne_enheten
+Save_all_open_databases=
 
-crossreferenced_entries_included=refererte_enheter_inkludert
+Include=
+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=
 
-Display_version=Vis_versjonsnummer
+Link=
+File_type=
+Edit_file_link=
 
-Override_default_font_settings=Overstyr_standardfonter
+Path_to_LatexEditor_(LEd.exe)=
+Move_external_links_to_'file'_field=
+Push_selection_to_Vim=
+Pushed_citations_to_Vim=
 
-Mac_file_dialog=Mac-fildialog
-Use_native_file_dialog=Bruk_system-fildialog
+Waiting_for_ArXiv...=
+Processing_=
+Error_while_fetching_from_OIA2:_=
 
-XMP-annotated_PDF=XMP-annotert_PDF
-PDF_and_PS_links=PDF-_og_PS-lenker
-Use_Regular_Expression_Search=
-Help_on_Regular_Expression_Search=
-writeXMP=skrivXMP
+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=
+%0_directory_is_not_set_or_does_not_exist!=
+%0_directory_is_'%1':=
+Writing_XMP_to_'%0'...=
+Wrote_XMP_to_'%0'.=
+Error_writing_XMP_to_file:_%0=
+Error_while_writing_XMP_%0=
+Error_writing_XMP_to_'%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=
+Invalid_URL:_=
+This_operation_requires_at_least_one_entry.=
+Write_XMP-metadata=
+Write_XMP-metadata_for_all_PDFs_in_current_database?=
+No_XMP_metadata_found_in_=
+Drog_PDF=
+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=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.=
-Select_external_application=Velg_ekstern_applikasjon
-Show_last_names_only=Vis_bare_etternavn
-Help_on_Preview_Settings=
-Writing_XMP_metadata...=
-Writing_XMP_metadata_for_selected_entries...=
-Skipped_-_No_PDF_linked=
-Finished_writing_XMP_for_%0_file_(%1_skipped,_%2_errors).=
-Grouping_may_not_work_for_this_entry.=
-Write_BibtexEntry_as_XMP-metadata_to_PDF.=
-write_XMP=skriv_XMP
-New_field_value=Ny_verdi
-Overwrite_existing_field_values=Skriv_over_eksisterende_verdier
-Include_entries=Inkluder_enheter
-Selected_entries=Valgte_enheter
+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=
 
-Fetch_CiteSeer_by_ID=Hent_CiteSeer_ved_hjelp_av_ID
-Push_entries_to_external_application_(%0)=Send_enheter_til_eksternt_program_(%0)
-Write_XMP=Skriv_XMP
+Resolve_strings_for_all_fields_except=
+Resolve_strings_for_standard_BibTeX_fields_only=
+Leave_files_in_their_current_directory.=
+Copy_files_to_%0.=
+Move_files_to_%0.=
+Leave_file_in_its_current_directory.=
+Copy_file_to_%0.=
+Move_file_to_%0.=
+Extension=
+Application=
+Icon=
 
-Writing_XMP=Skriver_XMP
+Path_to_%0_not_defined=Sti_til_%0_ikke_definert
 
-HTML_table=HTML-tabell
-HTML_table_(with_Abstract_&_BibTeX)=HTML-tabell_(med_Abstract_&_BibTeX)
+Error:_=
+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.=
 
-Set/clear_fields=Sett/fjern_felter
+Show_file_column=
+This_database_was_written_using_an_older_version_of_JabRef.=
 
-Clear_fields=Slett_felter
-Set_fields=Sett_felter
+File_'%0'_is_already_open.=
 
-OpenOffice_Calc=OpenOffice_Calc
-OpenDocument_Spreadsheet=OpenDocument_Spreadsheet
+File_has_been_updated_externally._What_do_you_want_to_do?=
 
-Skipped_entry.=Hoppet_over_enhet.
-Error_occured_when_parsing_entry=En_feil_oppsto_ved_lesing_av_enhet
-Operation_canceled.\n=Operasjonen_avbrutt.\n
-Error_while_writing=En_feil_oppsto_ved_skriving
-Skipped_-_PDF_does_not_exist=Hoppet_over_-_PDF-filen_finnes_ikke
-Use_custom_icon_theme=Bruk_egendefinert_ikonsett
-Custom_icon_theme=Egendefinert_ikonsett
-Custom_icon_theme_file=Ikonsettfil
-Unable_to_read_icon_theme_file=Kunne_ikke_lese_ikonsettfil
-Unable_to_read_default_icon_theme.=Kunne_ikke_lese_standard_ikonsettfil.
-Could_not_find_image_file=Kunne_ikke_finne_bilde
-Set_field=Sett_felt
-No_entries_selected.=Ingen_enheter_valgt.
-Link_from_new_entries.=Lenk_fra_nye_enheter.
-Link_from_new_entry=Lenk_fra_ny_enhet
-Link_from_entries.=Lenk_fra_enheter.
-Link_from_entry=Lenk_fra_enhet
-exists.Overwrite?=eksisterer._Skriv_over?
-File_exists=Filen_eksisterer
-No_file_associated=Ingen_assosiert_fil
-Exported_%0_entries_to_file=Eksporterte_%0_enheter_til_fil
-Formatter_Name=Navn_p�_formaterer
-Format_String=Formatstreng
-Help_on_Name_Formatting=Hjelp_om_navneformatering
-Special_Name_Formatters=Spesielle_navneformaterere
-Name_formatter=Navneformaterer
-Deselect_all_duplicates=Velg_bort_alle_duplikater
-Error_exporting_to_clipboard=Feil_ved_eksport_til_utklippstavle
+Entry_has_no_citekey=
+Cannot_rename_for_several_entries.=
+Rename_to_match_citekey=
 
-Fetch_ArXiv.org=Hent_ArXiv.org
+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=
 
-Generate_keys_for_imported_entries=Generer_n\u00f8kler_automatisk_for_importerte_enheter
-Looking_for_pdf...=Ser_etter_pdf...
+Error\:_=
+This_will_move_all_external_links_from_the_'pdf'_and_'ps'_fields_into_the_'%0'_field._Proceed?=
+Upgrade_external_links=
+Upgraded_links.=
 
-Correct_the_entry,_and_reopen_editor_to_display/edit_source.=Korrigere_enheten,_og_�pne_enhetsskjemaet_p�_nytt_for_�_vise/redigere_kildekoden.
+Do_you_want_JabRef_to_do_the_following_operations?=
+Upgrade_file=
 
-Field_to_filter=Felt_som_skal_filtreres
-XMP_Export_Privacy_Settings=Innstillinger_for_XMP-eksport
 
-Do_not_write_the_following_fields_to_XMP_Metadata\:=Ikke_skriv_de_f�lgende_feltene_til_XMP-metadata:
-XMP_metadata=XMP-metadata
+Finished_autosetting_external_links.=
+No_files_found.=
+Target_file_cannot_be_a_directory.=
+This_entry_has_no_BibTeX_key._Generate_key_now?=
+
+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=
diff --git a/src/resource/Menu_de.properties b/src/resource/Menu_de.properties
index 3482cec..2c61a55 100644
--- a/src/resource/Menu_de.properties
+++ b/src/resource/Menu_de.properties
@@ -2,13 +2,13 @@
 #! created/edited by Popeye version 0.54 (popeye.sourceforge.net)
 #! encoding:ISO-8859-1
 
-Abbreviate_journal_names_(ISO)=Zeitschriftennamen_abk\u00fcrzen_(&ISO)
+Abbreviate_journal_names_(ISO)=Zeitschriftentitel_abk\u00fcrzen_(&ISO)
 
-Abbreviate_journal_names_(MEDLINE)=&Zeitschriftennamen_abk\u00fcrzen_(MEDLINE)
+Abbreviate_journal_names_(MEDLINE)=Zeitschriftentitel_abk\u00fcrzen_(&MEDLINE)
 
 About_JabRef=\u00DCber_&JabRef
 
-Append_database=Datei_&anh\u00E4ngen
+Append_database=Datei_&anh\u00e4ngen
 
 Autogenerate_BibTeX_keys=&BibTeX_keys_automatisch_generieren
 
@@ -18,7 +18,7 @@ Close_database=Datei_s&chlie\u00DFen
 
 Copy=&Kopieren
 
-Copy_\\cite{BibTeX_key}=\\c&ite{BibTeX_key}_kopieren
+Copy_\\cite{BibTeX_key}=\\&cite{BibTeX_key}_kopieren
 
 Copy_BibTeX_key=&BibTeX_key_kopieren
 
@@ -47,7 +47,7 @@ Export=&Exportieren
 
 Export_selected_entries_to_clipboard=&Ausgw\u00E4hlte_Eintr\u00E4ge_in_die_Zwischenablage_kopieren
 
-Fetch_citations_from_CiteSeer=Literaturangaben_von_&CiteSeer_abrufen
+Fetch_citations_from_CiteSeer=&Literaturangaben_von_CiteSeer_abrufen
 
 Fetch_CiteSeer=&CiteSeer_abrufen
 
@@ -82,7 +82,7 @@ Insert_selected_citations_into_LyX/Kile=Ausgew\u00E4hlte_Literaturangaben_in_&Ly
 
 Insert_selected_citations_into_WinEdt=&Ausgew\u00E4hlte_Literaturangaben_in_WinEdt_einf\u00FCgen
 
-Integrity_check=\u00DCberpr\u00FCfung_der_Integrit\u00E4t
+Integrity_check=\u00dcberpr\u00fcfung_der_&Integrit\u00e4t
 
 # Help
 JabRef_help=JabRef-&Hilfe
@@ -133,7 +133,7 @@ Recent_files=&Zuletzt_ge\u00F6ffnete_Dateien
 
 Redo=&Wiederholen
 
-Replace_string=&Ersetzen
+Replace_string=E&rsetzen
 
 Save_database=Datei_&speichern
 
@@ -141,16 +141,16 @@ Save_database_as_...=Datei_speichern_&unter_...
 
 Save_selected_as_...=Aus&wahl_speichern_unter_...
 
-Save_session=Sitzung_s&peichern
+Save_session=Sitzung_&speichern
 
 # Tools
 Search=&Suchen
 
-Search_IEEEXplore=IEEEXplore_abfragen
+Search_IEEEXplore=&IEEEXplore_abfragen
 
 Select_all=&Alle_ausw\u00E4hlen
 
-Set_up_general_fields=All&gemeine_Felder_festlegen
+Set_up_general_fields=Allgemeine_&Felder_festlegen
 
 Show_error_console=Fehlerkonsole_anzeigen
 
@@ -158,9 +158,9 @@ Sort_tabs=Tabs_&sortieren
 
 Switch_preview_layout=&Layout_der_Vorschau_wechseln
 
-Synchronize_PDF_links=PDF_Links_synchronisieren
+Synchronize_PDF_links=&PDF-Links_synchronisieren
 
-Synchronize_PS_links=PS_Links_synchronisieren
+Synchronize_PS_links=P&S_Links_synchronisieren
 
 # Export menu
 Tab-separated_file=Mit_&Tabulatoren_unterteilte_Datei
@@ -171,7 +171,7 @@ Toggle_groups_interface=&Gruppenansicht_ein-/ausblenden
 
 Tools=&Extras
 
-Unabbreviate_journal_names=Ab&k\u00fcrzung_der_Zeitschriften_aufheben
+Unabbreviate_journal_names=&Abk\u00fcrzung_der_Zeitschriften_aufheben
 
 # Edit
 Undo=&R\u00FCckg\u00E4ngig
@@ -180,20 +180,25 @@ Unmark_all=S\u00E4mtliche_Markierungen_au&fheben
 
 Unmark_entries=Markierung_a&ufheben
 
-Unpack_EndNote_filter_set=&EndNote_Filter-Set_entpacken
+Unpack_EndNote_filter_set=EndNote_Filter-Set_entpa&cken
 
 View=&Ansicht
 Web_search=&Internet
-Import_into_new_database=Importieren_in_neue_Datenbank
-Import_into_current_database=Importieren_in_aktuelle_Datenbank
+Import_into_new_database=&Importieren_in_neue_Datenbank
+Import_into_current_database=Importieren_in_aktuelle_&Datenbank
 
-Scan_database...=Datenbank_durchsuchen
+Scan_database...=&Datenbank_durchsuchen
 
-Push_entries_to_external_application_(%0)=Eintr\u00e4ge_in_externe_Anwendung_einf\u00fcgen
-Write_XMP-metadata_to_PDFs=XMP-Metadaten_in_PDFs_schreiben
+Push_entries_to_external_application_(%0)=&Eintr\u00e4ge_in_externe_Anwendung_einf\u00fcgen_(%0)
+Write_XMP-metadata_to_PDFs=&XMP-Metadaten_in_PDFs_schreiben
 
 
-Set/clear_fields=Felder_setzen/l\u00f6schen
-Export_selected_entries=Ausgew\u00e4hlte_Eintr\u00e4ge_exportieren
-Fetch_ArXiv.org=ArXiv.org_abrufen
-Sessions=Sitzungen
+
+Set/clear_fields=&Felder_setzen/l\u00f6schen
+Export_selected_entries=Ausgew\u00e4hlte_Eintr\u00e4ge_e&xportieren
+Fetch_ArXiv.org=&ArXiv.org_abrufen
+Sessions=S&itzungen
+Save_all=A&lle_speichern
+
+Upgrade_external_links=Externe_Links_aktualisieren
+Manage_external_file_types=Externe_Dateitypen_verwalten
diff --git a/src/resource/Menu_du.properties b/src/resource/Menu_du.properties
index b6b968f..2ce0614 100644
--- a/src/resource/Menu_du.properties
+++ b/src/resource/Menu_du.properties
@@ -1,5 +1,5 @@
 #!
-#! created/edited by Gert Renckens, Dutch translation v0.12, last update: 20061102 (e-mail: gert (dot) renckens (at) student (dot) uhasselt (dot) be)
+#! created/edited by Popeye version 0.54 (popeye.sourceforge.net)
 #! encoding:ISO-8859-1
 
 Abbreviate_journal_names_(ISO)=Kort_namen_van_tijdschriften_af_(ISO)
@@ -16,7 +16,7 @@ BibTeX=BibTeX
 
 Close_database=Sluit_database
 
-Copy=Kopi�ren
+Copy=Kopi\u00ebren
 
 Copy_\\cite{BibTeX_key}=Kopieer_\\cite{BibTeX-sleutel}
 
@@ -202,4 +202,10 @@ Export_selected_entries=
 
 Fetch_ArXiv.org=
 
-Sessions=
\ No newline at end of file
+Sessions=
+
+Save_all=
+
+Upgrade_external_links=
+
+Manage_external_file_types=
diff --git a/src/resource/Menu_en.properties b/src/resource/Menu_en.properties
index 34a7c68..45c6461 100644
--- a/src/resource/Menu_en.properties
+++ b/src/resource/Menu_en.properties
@@ -114,3 +114,8 @@ Set/clear_fields=Set/clear_fields
 Export_selected_entries=Export_selected_entries
 Fetch_ArXiv.org=Fetch_ArXiv.org
 Sessions=Sessions
+
+Save_all=Save_all
+
+Upgrade_external_links=Upgrade_external_links
+Manage_external_file_types=Manage_external_file_types
diff --git a/src/resource/Menu_fr.properties b/src/resource/Menu_fr.properties
index 1cf7b0b..11728f1 100644
--- a/src/resource/Menu_fr.properties
+++ b/src/resource/Menu_fr.properties
@@ -103,3 +103,7 @@ Export_selected_entries=Exporter_les_entr\u00E9es_s\u00E9lectionn\u00E9es
 
 Fetch_ArXiv.org=Recherche_ArXiv.org
 Sessions=Sessions
+Save_all=Sauvegarder_tout
+
+Upgrade_external_links=Mettre_\u00E0_jour_les_liens_externes
+Manage_external_file_types=G\u00E9rer_les_types_de_fichiers_externes
diff --git a/src/resource/Menu_it.properties b/src/resource/Menu_it.properties
index 92a9922..16ed491 100644
--- a/src/resource/Menu_it.properties
+++ b/src/resource/Menu_it.properties
@@ -48,9 +48,9 @@ Integrity_check=Verifica_di_integrit\u00e0
 # Help
 JabRef_help=&Aiuto_di_JabRef
 Load_session=&Carica_sessione
-Manage_content_selectors=&Gestisci_i_selettori_di_contenuti
-Manage_custom_exports=&Gestisci_le_esportazioni_personalizzate
-Manage_custom_imports=Gestisci_le_&importazioni_personalizzate
+Manage_content_selectors=&Gestione_dei_selettori_di_contenuti
+Manage_custom_exports=&Gestione_delle_esportazioni_personalizzate
+Manage_custom_imports=Gestione_delle_&importazioni_personalizzate
 Mark_entries=E&videnzia
 # File menu
 New_database=&Nuovo_database
@@ -97,17 +97,22 @@ Unabbreviate_journal_names=Espandi_nomi_delle_riviste_(MEDLINE)
 Undo=&Annulla
 Unmark_all=Rim&uovi_tutte_le_evidenziazioni
 Unmark_entries=&Rimuovi_evidenziazione
-Unpack_EndNote_filter_set=Decompattare_l'insieme_di_filtri_&EndNote
+Unpack_EndNote_filter_set=Estrai_i_filtri_&EndNote
 View=&Visualizza
 Web_search=&Internet
 Import_into_new_database=Importa_in_un_nuo&vo_database
 Import_into_current_database=Importa_nel_database_&corrente
 Scan_database...=Scansione_del_database...
+Push_entries_to_external_application_(%0)=Invia_le_voci_all'applicazione_esterna_(%0)
 
 Write_XMP-metadata_to_PDFs=Inserisci_metadati_XMP_nei_file_PDF
-Push_entries_to_external_application_(%0)=Invia_le_voci_all'applicazione_esterna_(%0)
 
 Set/clear_fields=Imposta/svuota_campi
-Export_selected_entries=Esporta_le_voci_selezionate 
+Export_selected_entries=Esporta_le_voci_selezionate
 Fetch_ArXiv.org=Recupera_da_ArXiv.org
-Sessions=Sessioni
\ No newline at end of file
+Sessions=Sessioni
+
+Save_all=Salva_tutti
+
+Upgrade_external_links=Aggiorna_i_collegamenti_esterni
+Manage_external_file_types=Gestione_dei_tipi_di_file_esterni
diff --git a/src/resource/Menu_no.properties b/src/resource/Menu_no.properties
index d38d620..f9ae512 100644
--- a/src/resource/Menu_no.properties
+++ b/src/resource/Menu_no.properties
@@ -98,7 +98,7 @@ Unmark_all=F&jern_merking_fra_alle
 Unmark_entries=&Fjern_merking
 Unpack_EndNote_filter_set=Pakk_ut_&EndNote-filtersett
 View=&Vis
-Web_search=Webs�k
+Web_search=Webs\u00f8k
 Import_into_new_database=Importer_til_ny_database
 Import_into_current_database=Importer_til_den_aktive_databasen
 
@@ -111,3 +111,7 @@ Set/clear_fields=Sett/fjern_felter
 Export_selected_entries=Eksporter_valgte_enheter
 Fetch_ArXiv.org=Hent_ArXiv.org
 Sessions=Tilstander
+Save_all=
+
+Upgrade_external_links=
+Manage_external_file_types=
diff --git a/src/resource/build.properties b/src/resource/build.properties
index a49600b..1236820 100644
--- a/src/resource/build.properties
+++ b/src/resource/build.properties
@@ -1,3 +1,3 @@
-builddate=January 30 2007
-build=436
-version=2.2
\ No newline at end of file
+builddate=June 29 2007
+build=83
+version=2.3b
\ No newline at end of file
diff --git a/src/resource/layout/harvard/harvard.article.layout b/src/resource/layout/harvard/harvard.article.layout
index 1f35b9e..16ba02f 100644
--- a/src/resource/layout/harvard/harvard.article.layout
+++ b/src/resource/layout/harvard/harvard.article.layout
@@ -1,5 +1,5 @@
-\format[RTFChars,AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\author} (\year)
-, '\format[RTFChars]{\title}', }{\\i \format[RTFChars]{\journal}}{
+\format[RTFChars,AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\author} (\year), 
+'\format[RTFChars]{\title}', }{\\i \format[RTFChars]{\journal}}{
 \begin{volume}
  }{\\b \volume}{
 \end{volume}
diff --git a/src/resource/layout/harvard/harvard.incollection.layout b/src/resource/layout/harvard/harvard.incollection.layout
index f393742..d052b2b 100644
--- a/src/resource/layout/harvard/harvard.incollection.layout
+++ b/src/resource/layout/harvard/harvard.incollection.layout
@@ -1,4 +1,4 @@
-\format[RTFChars,AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\author} (\year),
+\format[RTFChars,AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\author} (\year), 
 }{\format[RTFChars]{\title}}{
 \begin{editor}
 , }{\\i in }{\format[RTFChars,AuthorFirstFirst,AuthorAndsReplacer]{\editor}, ed.,
diff --git a/src/resource/layout/harvard/harvard.inproceedings.layout b/src/resource/layout/harvard/harvard.inproceedings.layout
index dbcf492..b064c14 100644
--- a/src/resource/layout/harvard/harvard.inproceedings.layout
+++ b/src/resource/layout/harvard/harvard.inproceedings.layout
@@ -1,4 +1,4 @@
-\format[RTFChars,AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\author} (\year),
+\format[RTFChars,AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\author} (\year), 
 \format[RTFChars]{\title}
 , }{\\i in }{
 \begin{editor}
diff --git a/src/resource/layout/harvard/harvard.layout b/src/resource/layout/harvard/harvard.layout
index 5bc0278..5155d71 100644
--- a/src/resource/layout/harvard/harvard.layout
+++ b/src/resource/layout/harvard/harvard.layout
@@ -1,4 +1,4 @@
-\format[AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer,RTFChars]{\author} (\year),
+\format[AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer,RTFChars]{\author} (\year), 
 '\format[RTFChars]{\title}'
 \begin{journal}
 , }{\\i \format[RTFChars]{\journal}} {\\b \volume}{
diff --git a/src/resource/layout/harvard/harvard.mastersthesis.layout b/src/resource/layout/harvard/harvard.mastersthesis.layout
index ad44617..6c7d086 100644
--- a/src/resource/layout/harvard/harvard.mastersthesis.layout
+++ b/src/resource/layout/harvard/harvard.mastersthesis.layout
@@ -1,4 +1,4 @@
-\format[RTFChars,AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\author} (\year),
+\format[RTFChars,AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\author} (\year), 
 '\format[RTFChars]{\title}'
 \begin{school}
 , Master's thesis, \school
diff --git a/src/resource/layout/harvard/harvard.phdthesis.layout b/src/resource/layout/harvard/harvard.phdthesis.layout
index 0cc528d..8ef6426 100644
--- a/src/resource/layout/harvard/harvard.phdthesis.layout
+++ b/src/resource/layout/harvard/harvard.phdthesis.layout
@@ -1,4 +1,4 @@
-\format[RTFChars,AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\author} (\year),
+\format[RTFChars,AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\author} (\year), 
 '\format[RTFChars]{\title}'
 \begin{school}
 , PhD thesis, \school
diff --git a/src/resource/layout/misq/misq.article.layout b/src/resource/layout/misq/misq.article.layout
new file mode 100644
index 0000000..c0e48d0
--- /dev/null
+++ b/src/resource/layout/misq/misq.article.layout
@@ -0,0 +1,18 @@
+\format[RTFChars,AuthorLastFirst,AuthorLastFirstAbbrCommas]{\author}
+ "\format[RTFChars]{\title}," }{\\i \format[RTFChars]{\journal}}{
+ (
+\begin{volume}
+\volume
+\end{volume}
+\begin{number}
+:\number
+\end{number}
+)
+\begin{year}
+, \year
+\end{year}
+\begin{pages}
+, pp. \pages
+\end{pages}.
+\\par
+\\par
diff --git a/src/resource/layout/misq/misq.begin.layout b/src/resource/layout/misq/misq.begin.layout
new file mode 100644
index 0000000..92c728c
--- /dev/null
+++ b/src/resource/layout/misq/misq.begin.layout
@@ -0,0 +1,3 @@
+{\\rtf1\\ansi\\ansicpg1251\\uc1\\deff0\\stshfdbch0\\stshfloch0\\stshfhich0\\stshfbi0\\deflang1049\\deflangfe1049{\\fonttbl{\\f0\\froman\\fcharset204\\fprq2{\\*\\panose 02020603050405020304}Times New Roman;}{\\f39\\froman\\fcharset0\\fprq2 Times New Roman;}
+{\\f37\\froman\\fcharset238\\fprq2 Times New Roman CE;}{\\f40\\froman\\fcharset161\\fprq2 Times New Roman Greek;}{\\f41\\froman\\fcharset162\\fprq2 Times New Roman Tur;}{\\f42\\froman\\fcharset177\\fprq2 Times New Roman (Hebrew);}
+{\\f43\\froman\\fcharset178\\fprq2 Times New Roman (Arabic);}{\\f44\\froman\\fcharset186\\fprq2 Times New Roman Baltic;}{\\f45\\froman\\fcharset163\\fprq2 Times New Roman (Vietnamese);}}{
diff --git a/src/resource/layout/misq/misq.book.layout b/src/resource/layout/misq/misq.book.layout
new file mode 100644
index 0000000..abaf0e2
--- /dev/null
+++ b/src/resource/layout/misq/misq.book.layout
@@ -0,0 +1,21 @@
+\begin{author}
+\format[RTFChars,AuthorLastFirst,AuthorLastFirstAbbrCommas]{\author} 
+\end{author}
+\begin{editor}
+, \format[RTFChars,AuthorLastFirst,AuthorLastFirstAbbrCommas]{\editor}, (eds.) 
+\end{editor}
+}{\\i \format[RTFChars]{\title}}{
+\begin{volume}
+, Vol. \volume
+\end{volume}
+\begin{publisher}
+, \format[RTFChars]{\publisher}
+\end{publisher}
+\begin{address}
+, \format[RTFChars]{\address}
+\end{address}
+\begin{year}
+, \format[RTFChars]{\year}
+\end{year}.
+\\par
+\\par
diff --git a/src/resource/layout/misq/misq.end.layout b/src/resource/layout/misq/misq.end.layout
new file mode 100644
index 0000000..a2950a1
--- /dev/null
+++ b/src/resource/layout/misq/misq.end.layout
@@ -0,0 +1 @@
+}}
\ No newline at end of file
diff --git a/src/resource/layout/harvard/harvard.layout b/src/resource/layout/misq/misq.layout
similarity index 66%
copy from src/resource/layout/harvard/harvard.layout
copy to src/resource/layout/misq/misq.layout
index 5bc0278..377c62b 100644
--- a/src/resource/layout/harvard/harvard.layout
+++ b/src/resource/layout/misq/misq.layout
@@ -1,13 +1,13 @@
-\format[AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer,RTFChars]{\author} (\year),
-'\format[RTFChars]{\title}'
+\format[RTFChars,AuthorLastFirst,AuthorLastFirstAbbrCommas]{\author} 
+"\format[RTFChars]{\title}"
 \begin{journal}
-, }{\\i \format[RTFChars]{\journal}} {\\b \volume}{
+, }{\\i \format[RTFChars]{\journal}} {\volume}{
 \end{journal}
 \begin{number}
 (\number)
 \end{number}
 \begin{editor}
-, }{\\i in }{\format[AuthorFirstFirst,AuthorAndsReplacer,RTFChars]{\editor}, ed.,
+, }{\\i in }{\format[RTFChars,AuthorLastFirst,AuthorLastFirstAbbrCommas]{\editor}, ed.,
 \end{editor}
 \begin{booktitle}
 '\format[RTFChars]{\booktitle}'
@@ -30,8 +30,11 @@
 \begin{note}
 , \note
 \end{note}
+\begin{year}
+, \year
+\end{year}
 \begin{pages}
-, \pages
+, pp. \pages
 \end{pages}.
 \\par
 \\par
diff --git a/src/resource/layout/misq/readme.txt b/src/resource/layout/misq/readme.txt
new file mode 100644
index 0000000..1ea7ab8
--- /dev/null
+++ b/src/resource/layout/misq/readme.txt
@@ -0,0 +1,13 @@
+
+******************************************************
+*******                                       ********
+*******  Readme: MIS Quarterly Export Filter  ********
+*******                                       ******** 
+*******           for JabRef                  ********
+*******                                       ********
+*******           version 1.0                 ********
+*******            2007-06-12                 ********
+*******                                       ******** 
+******************************************************
+
+Written by Matthias St�rmer - mstuermer[at]ethz.ch
\ No newline at end of file
diff --git a/src/txt/README b/src/txt/README
index 14e6756..f90b64c 100644
--- a/src/txt/README
+++ b/src/txt/README
@@ -1,6 +1,11 @@
 
-JabRef 2.2
-----------
+JabRef 2.3b
+-----------
+
+Beta notice:
+
+This is an early beta version of JabRef 2.3, and as such should be used
+primarily for testing purposes.
 
 
 Introduction:
@@ -30,7 +35,7 @@ box for details.
 
 Requirements:
 JabRef runs on any system equipped with the Java Virtual Machine
-(1.4.2 or newer), which can be downloaded at no cost from
+(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.
@@ -55,9 +60,8 @@ or, if you are using the Java Runtime Environment:
      jre -new -jar <path to jar> or
      jrew -new -jar <path to jar>
 
-We recommend running JabRef under the Java 5.0 JRE. If you do, you should add
-the option "-Dswing.aatext=true" before the "-jar" option, to activate
-antialiased text throughout the application.
+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:
@@ -81,19 +85,49 @@ appear in your chosen languages.
 
 Change log:
 
-2.2	- Added progress bar to indicate progress when synchronizing PS/PDF links.
+2.3b1   
+	- 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 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 sensible fields to be exported.
+          - 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.
+        - 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
@@ -106,7 +140,7 @@ Change log:
           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 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)
@@ -575,4 +609,4 @@ http://sourceforge.net/projects/jabref
 
 Corresponding authors:
 mortenalver _ users.sourceforge.net
-nbatada _ users.sourceforge.net
\ No newline at end of file
+nbatada _ users.sourceforge.net
diff --git a/src/txt/TODO b/src/txt/TODO
index cc1aad0..afd00e3 100644
--- a/src/txt/TODO
+++ b/src/txt/TODO
@@ -6,4 +6,33 @@ Chris:
   * Add build.xml target to export standalone XMPUtil for the CLI.
   * Plugin-Architecture for LayoutFormatters.
   * Allow search relativ to bibtex-file
-  
\ No newline at end of file
+  
+Morten:
+* Help information for external file links
+* Add "Copy all externally linked files for this set of entries"-feature. Basic functionality
+  in AccessLinksForEntries. 
+* //Enable icon customization of external file types.
+* //Problem with ArrayIndexOutOfRange exception in DuplicateSearch - solved?
+	// - strange performance bug in creation of duplicate resolver dialog?
+* // Fix Save/Export file dialog stuff
+
+* 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)
+       at javax.swing.plaf.basic.BasicFileChooserUI.installDefaults(Unknown Source)
+       at javax.swing.plaf.basic.BasicFileChooserUI.installUI(Unknown Source)
+       at javax.swing.plaf.metal.MetalFileChooserUI.installUI(Unknown Source)
+       at javax.swing.JComponent.setUI(Unknown Source)
+       at net.sf.jabref.JabRefFileChooser.setUI(Unknown Source)
+
diff --git a/src/windows/nsis/README.txt b/src/windows/nsis/README.txt
index 51f5de4..7e4bfa4 100644
--- a/src/windows/nsis/README.txt
+++ b/src/windows/nsis/README.txt
@@ -12,7 +12,6 @@ What is here?
 
   * dist
     * Should contain everything that is supposed to be shipped to the user.
-    * Run target win.installer.prepare to let this be created and filled.
   * launcher.nsi - Will create the exe-wrapper.
   * setup.nsi - Will create the installer.
   * fileassoc.nsh - Helper script to set file-associations
@@ -27,6 +26,7 @@ Requirements + Current Status
 	  * Display GPL [done]
 	  * Add file association for .bib (if desired) [done]
 	  * Install into custom start-menu location (if desired) [done]
+	  * Can only run as administrator [done, Uwe]
 	  * Install onto desktop (if desired)
 	  * Install onto quicklaunch (if desired)
 	
@@ -35,4 +35,9 @@ Requirements + Current Status
 	    * Allow to keep configuration
 	    
 	All:
-	  * Localization
\ No newline at end of file
+	  * Localization
+	  
+Credits
+
+	Uwe St�hr rewrote the installer and fixed a lot of issues with the old one.
+		  
\ No newline at end of file
diff --git a/src/windows/nsis/installer_languages/english.nsh b/src/windows/nsis/installer_languages/english.nsh
new file mode 100644
index 0000000..cc7d8b0
--- /dev/null
+++ b/src/windows/nsis/installer_languages/english.nsh
@@ -0,0 +1,37 @@
+!ifndef _JabRef_LANGUAGES_ENGLISH_NSH_
+!define _JabRef_LANGUAGES_ENGLISH_NSH_
+
+!ifdef JabRef_LANG
+  !undef JabRef_LANG
+!endif
+!define JabRef_LANG ${LANG_ENGLISH}
+
+LicenseLangString JabRefLicenseData ${JabRef_LANG} "${PRODUCT_LICENSE_FILE}"
+
+LangString WelcomePageText "${JabRef_LANG}" "This wizard will guide you through the installation of JabRef.\r\n\
+					     \r\n\
+					     $_CLICK"
+
+LangString FileTypeTitle "${JabRef_LANG}" "BibTeX-file"
+
+LangString SecAssociateBibTitle "${JabRef_LANG}" "Associate BibTeX-files"
+LangString SecDesktopTitle "${JabRef_LANG}" "Desktop icon"
+
+LangString SecAssociateBibDescription "${JabRef_LANG}" "Files with the extension .bib will automatically be opened with JabRef."
+LangString SecDesktopDescription "${JabRef_LANG}" "Puts JabRef icon on the desktop."
+
+LangString OpenIn "${JabRef_LANG}" "Open in JabRef"
+
+LangString NotAdmin "${JabRef_LANG}" "You must have administrator privileges to install JabRef!"
+
+LangString FinishPageMessage "${JabRef_LANG}" "Congratulations! JabRef has been installed successfully."
+LangString FinishPageRun "${JabRef_LANG}" "Launch JabRef"
+
+LangString UnNotAdminLabel "${JabRef_LANG}" "You must have administrator privileges to uninstall JabRef!"
+LangString UnReallyRemoveLabel "${JabRef_LANG}" "Are you sure you want to completely remove JabRef?"
+LangString UnRemoveSuccessLabel "${JabRef_LANG}" "JabRef was successfully removed from your computer."
+
+
+!undef JabRef_LANG
+
+!endif ; _JabRef_LANGUAGES_ENGLISH_NSH_
diff --git a/src/windows/nsis/installer_languages/french.nsh b/src/windows/nsis/installer_languages/french.nsh
new file mode 100644
index 0000000..4a8df21
--- /dev/null
+++ b/src/windows/nsis/installer_languages/french.nsh
@@ -0,0 +1,37 @@
+!ifndef _JabRef_LANGUAGES_FRENCH_NSH_
+!define _JabRef_LANGUAGES_FRENCH_NSH_
+
+!ifdef JabRef_LANG
+  !undef JabRef_LANG
+!endif
+!define JabRef_LANG ${LANG_FRENCH}
+
+LicenseLangString JabRefLicenseData ${JabRef_LANG} "${PRODUCT_LICENSE_FILE}"
+
+LangString WelcomePageText "${JabRef_LANG}" "Cet assistant va vous guider au cours de l'installation de JabRef.\r\n\
+                         \r\n\
+                         $_CLICK"
+
+LangString FileTypeTitle "${JabRef_LANG}" "Fichier BibTeX"
+
+LangString SecAssociateBibTitle "${JabRef_LANG}" "Association aux fichiers BibTeX"
+LangString SecDesktopTitle "${JabRef_LANG}" "Ic�ne du bureau"
+
+LangString SecAssociateBibDescription "${JabRef_LANG}" "Les fichiers ayant l'extension .bib seront automatiquement ouverts avec JabRef."
+LangString SecDesktopDescription "${JabRef_LANG}" "Ajoute l'ic�ne de JabRef sur le bureau."
+
+LangString OpenIn "${JabRef_LANG}" "Ouvert dans JabRef"
+
+LangString NotAdmin "${JabRef_LANG}" "Vous devez avoir les droits d'administration pour installer JabRef !"
+
+LangString FinishPageMessage "${JabRef_LANG}" "F�licitations ! JabRef a �t� correctement install�."
+LangString FinishPageRun "${JabRef_LANG}" "Lancer JabRef"
+
+LangString UnNotAdminLabel "${JabRef_LANG}" "Vous devez avoir les droits d'administration pour d�sinstaller JabRef !"
+LangString UnReallyRemoveLabel "${JabRef_LANG}" "Etes-vous s�r de vouloir d�sinstaller compl�tement JabRef ?"
+LangString UnRemoveSuccessLabel "${JabRef_LANG}" "JabRef a �t� correctement d�sinstall� de votre ordinateur."
+
+
+!undef JabRef_LANG
+
+!endif ; _JabRef_LANGUAGES_FRENCH_NSH_
diff --git a/src/windows/nsis/installer_languages/german.nsh b/src/windows/nsis/installer_languages/german.nsh
new file mode 100644
index 0000000..7acd00b
--- /dev/null
+++ b/src/windows/nsis/installer_languages/german.nsh
@@ -0,0 +1,37 @@
+!ifndef _JabRef_LANGUAGES_GERMAN_NSH_
+!define _JabRef_LANGUAGES_GERMAN_NSH_
+
+!ifdef JabRef_LANG
+  !undef JabRef_LANG
+!endif
+!define JabRef_LANG ${LANG_GERMAN}
+
+LicenseLangString JabRefLicenseData ${JabRef_LANG} "${PRODUCT_LICENSE_FILE}"
+
+LangString WelcomePageText "${JabRef_LANG}" "Dieser Assistent wird Sie durch die Installation von LyX begleiten.\r\n\
+					     \r\n\
+					     $_CLICK"
+
+LangString FileTypeTitle "${JabRef_LANG}" "BibTeX-Datei"
+
+LangString SecAssociateBibTitle "${JabRef_LANG}" "Dateizuordnung f�r BibTeX-Dateien"
+LangString SecDesktopTitle "${JabRef_LANG}" "Desktopsymbol"
+
+LangString SecAssociateBibDescription "${JabRef_LANG}" "Dateien mit der Endung .bib werden automatisch mit JabRef ge�ffnet."
+LangString SecDesktopDescription "${JabRef_LANG}" "Erstellt Verkn�pfung zu JabRef auf dem Desktop."
+
+LangString OpenIn "${JabRef_LANG}" "In JabRef �ffnen"
+
+LangString NotAdmin "${JabRef_LANG}" "Sie ben�tigen Administratorrechte um JabRef zu installieren!"
+
+LangString FinishPageMessage "${JabRef_LANG}" "Gl�ckwunsch! JabRef wurde erfolgreich installiert."
+LangString FinishPageRun "${JabRef_LANG}" "JabRef starten"
+
+LangString UnNotAdminLabel "${JabRef_LANG}" "Sie ben�tigen Administratorrechte um JabRef zu deinstallieren!"
+LangString UnReallyRemoveLabel "${JabRef_LANG}" "Sind Sie sicher, dass sie JabRef deinstallieren m�chten?"
+LangString UnRemoveSuccessLabel "${JabRef_LANG}" "JabRef wurde erfolgreich von ihrem Computer entfernt."
+
+
+!undef JabRef_LANG
+
+!endif ; _JabRef_LANGUAGES_GERMAN_NSH_
diff --git a/src/windows/nsis/installer_languages/italian.nsh b/src/windows/nsis/installer_languages/italian.nsh
new file mode 100644
index 0000000..d7761d0
--- /dev/null
+++ b/src/windows/nsis/installer_languages/italian.nsh
@@ -0,0 +1,37 @@
+!ifndef _JabRef_LANGUAGES_ITALIAN_NSH_
+!define _JabRef_LANGUAGES_ITALIAN_NSH_
+
+!ifdef JabRef_LANG
+  !undef JabRef_LANG
+!endif
+!define JabRef_LANG ${LANG_ITALIAN}
+
+LicenseLangString JabRefLicenseData ${JabRef_LANG} "${PRODUCT_LICENSE_FILE}"
+
+LangString WelcomePageText "${JabRef_LANG}" "Questa procedura ti guider� durante il processo di installazione di JabRef.\r\n\
+                         \r\n\
+                         $_CLICK"
+
+LangString FileTypeTitle "${JabRef_LANG}" "File BibTeX"
+
+LangString SecAssociateBibTitle "${JabRef_LANG}" "Associazione dei file BibTeX"
+LangString SecDesktopTitle "${JabRef_LANG}" "Icona del Desktop"
+
+LangString SecAssociateBibDescription "${JabRef_LANG}" "I file con estensione .bib saranno aperti automaticamente con JabRef."
+LangString SecDesktopDescription "${JabRef_LANG}" "Aggiungi l'icona di JabRef sul Desktop"
+
+LangString OpenIn "${JabRef_LANG}" "Apri con JabRef"
+
+LangString NotAdmin "${JabRef_LANG}" "Sono necessari privilegi di amministratore per installare JabRef!"
+
+LangString FinishPageMessage "${JabRef_LANG}" "Congratulazioni! L'installazione di JabRef � terminata con successo."
+LangString FinishPageRun "${JabRef_LANG}" "Avvia JabRef"
+
+LangString UnNotAdminLabel "${JabRef_LANG}" "Sono necessari privilegi di amministratore per disinstallare JabRef!"
+LangString UnReallyRemoveLabel "${JabRef_LANG}" "Sei sicuro di voler disinstallare completamente JabRef?"
+LangString UnRemoveSuccessLabel "${JabRef_LANG}" "JabRef � stato correttamente disinstallato dal computer."
+
+
+!undef JabRef_LANG
+
+!endif ; _JabRef_LANGUAGES_ITALIAN_NSH_
diff --git a/src/windows/nsis/setup.nsi b/src/windows/nsis/setup.nsi
index 89b50f4..3d38bb0 100644
--- a/src/windows/nsis/setup.nsi
+++ b/src/windows/nsis/setup.nsi
@@ -1,161 +1,270 @@
-# Auto-generated by EclipseNSIS Script Wizard
-# 29.12.2005 01:09:51
+# owner	JabRef Team
+# license	GPL version 2
+# author	Uwe St�hr
+# file version	1.0	date	18-01-2007
 
+; To compile this script NSIS 2.23 and newer are required
+; http://nsis.sourceforge.net/
+
+
+; Do a Cyclic Redundancy Check to make sure the installer
+; was not corrupted by the download.
+CRCCheck force
+
+; Make the installer as small as possible.
+SetCompressor lzma
+
+
+# general definitions
+; you only need to change this section for new releases
+VIProductVersion "2.2.0.0" ; file version for the installer in the scheme "x.x.x.x"
 !ifndef VERSION
 	!define VERSION "2.2"
 !endif
-
-!define EXENAME "JabRef-${VERSION}-Setup.exe"
-
 Name "JabRef ${VERSION}"
-
-!define REGKEY "SOFTWARE\$(^Name)"
+!define REGKEY "SOFTWARE\JabRef"
 !define COMPANY "JabRef Team"
-!define URL http://jabref.sourceforge.net/
+!define URL "http://jabref.sourceforge.net"
+!define PRODUCT_EXE "JabRef.exe"
+!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)"
+!define PRODUCT_LICENSE_FILE "dist\gpl.txt"
+
+
+# Variables
+Var StartmenuFolder
+Var CreateDesktopIcon
+Var Answer
+Var UserName
 
-# MUI defines
-!define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\modern-install-full.ico"
-!define MUI_FINISHPAGE_NOAUTOCLOSE
-!define MUI_STARTMENUPAGE_REGISTRY_ROOT HKLM
-!define MUI_STARTMENUPAGE_REGISTRY_KEY "Software\JabRef"
-!define MUI_STARTMENUPAGE_REGISTRY_VALUENAME StartMenuGroup
-!define MUI_STARTMENUPAGE_DEFAULT_FOLDER "JabRef ${VERSION}"
-!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall-full.ico"
-!define MUI_FINISHPAGE_RUN $INSTDIR/JabRef.exe
-!define MUI_UNFINISHPAGE_NOAUTOCLOSE
-!define MUI_COMPONENTSPAGE_SMALLDESC
 
 # Included files
-!include Sections.nsh
-!include MUI.nsh
-!include fileassoc.nsh
+!include "MUI.nsh"
+!include "fileassoc.nsh"
+!include "LogicLib.nsh"
 
-# Reserved Files
 
-# Variables
-Var StartMenuGroup
+# macros
+!macro IsUserAdmin Result UName
+
+ ClearErrors
+ UserInfo::GetName
+ IfErrors Win9x
+ Pop $0
+ StrCpy ${UName} $0
+ UserInfo::GetAccountType
+ Pop $1
+ ${if} $1 == "Admin"
+  StrCpy ${Result} "yes"
+ ${else}
+  StrCpy ${Result} "no"
+ ${endif}
+ Goto done
+
+ Win9x:
+  StrCpy ${Result} "yes"
+ done:
+
+!macroend
+
 
 # Installer pages
+; Remember the installer language
+!define MUI_LANGDLL_REGISTRY_ROOT "HKCU"
+!define MUI_LANGDLL_REGISTRY_KEY "${PRODUCT_UNINST_KEY}"
+!define MUI_LANGDLL_REGISTRY_VALUENAME "Installer Language"
+
+; let warning appear when installation is canceled
+!define MUI_ABORTWARNING
+
+; Icons for the installer program
+!define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\modern-install-full.ico"
+!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall-full.ico"
+
+; Welcome page
+!define MUI_WELCOMEPAGE_TEXT "$(WelcomePageText)"
 !insertmacro MUI_PAGE_WELCOME
-!insertmacro MUI_PAGE_LICENSE dist/GPL.txt
+
+; Show the license.
+!insertmacro MUI_PAGE_LICENSE "${PRODUCT_LICENSE_FILE}"
+
+; Specify the installation directory.
 !insertmacro MUI_PAGE_DIRECTORY
-!insertmacro MUI_PAGE_STARTMENU Application $StartMenuGroup
+
+; choose the components to install.
 !insertmacro MUI_PAGE_COMPONENTS
+
+; Specify where to install program shortcuts.
+!define MUI_STARTMENUPAGE_REGISTRY_ROOT "HKLM"
+!define MUI_STARTMENUPAGE_REGISTRY_KEY "${PRODUCT_UNINST_KEY}"
+!define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Start Menu Folder"
+!define MUI_STARTMENUPAGE_DEFAULTFOLDER "$(^Name)"
+!insertmacro MUI_PAGE_STARTMENU ${PRODUCT_NAME} $StartmenuFolder
+
+; Watch the components being installed.
 !insertmacro MUI_PAGE_INSTFILES
+
+; Finish page
+!define MUI_FINISHPAGE_RUN "$INSTDIR\${PRODUCT_EXE}"
+!define MUI_FINISHPAGE_TEXT "$(FinishPageMessage)"
+!define MUI_FINISHPAGE_RUN_TEXT "$(FinishPageRun)"
 !insertmacro MUI_PAGE_FINISH
 
+; The uninstaller
 !insertmacro MUI_UNPAGE_CONFIRM
 !insertmacro MUI_UNPAGE_INSTFILES
 
+
 # Installer languages
-!insertmacro MUI_LANGUAGE English
+!insertmacro MUI_LANGUAGE "English" # first language is the default language
+!insertmacro MUI_LANGUAGE "German"
+!insertmacro MUI_LANGUAGE "French"
+!insertmacro MUI_LANGUAGE "Italian"
+
+!include "installer_languages\english.nsh"
+!include "installer_languages\german.nsh"
+!include "installer_languages\french.nsh"
+!include "installer_languages\italian.nsh"
 
 # Installer attributes
-OutFile "${EXENAME}"
+OutFile JabRefSetup.exe
 InstallDir "$PROGRAMFILES\JabRef"
-CRCCheck on
-XPStyle on
-ShowInstDetails show
-VIProductVersion 1.3.0.0
+BrandingText "$(^Name) installer" ; appear at the bottom of the installer windows
+XPStyle on ; use XP style for installer windows
+InstallDirRegKey HKLM "${REGKEY}" Path
+LicenseData "$(JabRefLicenseData)"
+
+; creates file informations for the JabRefSetup.exe
 VIAddVersionKey ProductName "JabRef"
 VIAddVersionKey ProductVersion "${VERSION}"
 VIAddVersionKey CompanyName "${COMPANY}"
 VIAddVersionKey CompanyWebsite "${URL}"
+VIAddVersionKey FileDescription "JabRef installation program"
+VIAddVersionKey LegalCopyright "under the GPL version 2"
 VIAddVersionKey FileVersion ""
-VIAddVersionKey FileDescription ""
-VIAddVersionKey LegalCopyright ""
-InstallDirRegKey HKLM "${REGKEY}" Path
-ShowUninstDetails show
+
 
 # Installer sections
-Section -Main SEC0000
-    SetOutPath $INSTDIR
-    SetOverwrite on
-    File /r dist\*.*
-    WriteRegStr HKLM "${REGKEY}\Components" Main 1
+Section "!JabRef" SecCore
+ SectionIn RO
 SectionEnd
 
-Section "Associate .bib with JabRef" AssociateBib
-    !insertmacro APP_ASSOCIATE "bib" "JabRef.BibTeX" "BibTeX File" "$INSTDIR\JabRef.exe,0" "Open in JabRef" "$INSTDIR\JabRef.exe $\"%1$\""
+Section "$(SecAssociateBibTitle)" SecAssociateBib
+ !insertmacro APP_ASSOCIATE "bib" "JabRef.BibTeX" "$(FileTypeTitle)" "$INSTDIR\${PRODUCT_EXE},0" "$(OpenIn)" "$INSTDIR\${PRODUCT_EXE} $\"%1$\""
 SectionEnd
 
-LangString DESC_AssociateBib {LANG_ENGLISH} "Will associate files of extension .bib with JabRef."
+Section "$(SecDesktopTitle)" SecDesktop
+ StrCpy $CreateDesktopIcon "true"
+SectionEnd
 
+; section descriptions
 !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
-  !insertmacro MUI_DESCRIPTION_TEXT ${AssociateBib} $(DESC_AssociateBib)
+!insertmacro MUI_DESCRIPTION_TEXT ${SecAssociateBib} "$(SecAssociateBibDescription)"
+!insertmacro MUI_DESCRIPTION_TEXT ${SecDesktop} "$(SecDesktopDescription)"
 !insertmacro MUI_FUNCTION_DESCRIPTION_END
 
-Section "un.Associate .bib with JabRef" un.AssociateBib
-
-   !insertmacro APP_UNASSOCIATE "bib" "JabRef.BibTeX"
+Section "-Installation actions" SecInstallation
 
-SectionEnd
-
-
-
-Section -post SEC0001
-    WriteRegStr HKLM "${REGKEY}" Path $INSTDIR
-    WriteUninstaller $INSTDIR\uninstall.exe
-    !insertmacro MUI_STARTMENU_WRITE_BEGIN Application
-    SetOutPath $SMPROGRAMS\$StartMenuGroup
-    CreateShortCut "$SMPROGRAMS\$StartMenuGroup\Start $(^Name).lnk" $INSTDIR\JabRef.exe
-    CreateShortCut "$SMPROGRAMS\$StartMenuGroup\Uninstall $(^Name).lnk" $INSTDIR\uninstall.exe
-    !insertmacro MUI_STARTMENU_WRITE_END
-    WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" DisplayName "$(^Name)"
-    WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" DisplayVersion "${VERSION}"
-    WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" Publisher "${COMPANY}"
-    WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" URLInfoAbout "${URL}"
-    WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" DisplayIcon $INSTDIR\uninstall.exe
-    WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" UninstallString $INSTDIR\uninstall.exe
-    WriteRegDWORD HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" NoModify 1
-    WriteRegDWORD HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" NoRepair 1
+  ; create shortcuts for all users
+  SetShellVarContext all
+  ; copy files
+  SetOutPath "$INSTDIR"
+  SetOverwrite on
+  File /r dist\*.*
+  WriteRegStr HKLM "${REGKEY}\Components" Main 1
+  ; register JabRef
+  WriteRegStr HKLM "${REGKEY}" Path $INSTDIR
+  WriteUninstaller $INSTDIR\uninstall.exe
+  ; create shortcuts to startmenu
+  SetOutPath "$INSTDIR"
+  CreateDirectory "$SMPROGRAMS\$StartmenuFolder"
+  CreateShortCut "$SMPROGRAMS\$StartmenuFolder\$(^Name).lnk" "$INSTDIR\${PRODUCT_EXE}" "" "$INSTDIR\JabRef.exe"
+  CreateShortCut "$SMPROGRAMS\$StartmenuFolder\Uninstall $(^Name).lnk" "$INSTDIR\uninstall.exe"
+  ; create desktop icon
+  ${if} $CreateDesktopIcon == "true"
+   SetOutPath "$INSTDIR"
+   CreateShortCut "$DESKTOP\$(^Name).lnk" "$INSTDIR\${PRODUCT_EXE}" "" "$INSTDIR\${PRODUCT_EXE}" ;$(^Name).lnk
+  ${endif}
+  ; register information that appear in Windows' software listing
+  WriteRegStr HKLM "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)"
+  WriteRegStr HKLM "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${VERSION}"
+  WriteRegStr HKLM "${PRODUCT_UNINST_KEY}" "Publisher" "${COMPANY}"
+  WriteRegStr HKLM "${PRODUCT_UNINST_KEY}" "URLInfoAbout" "${URL}"
+  WriteRegStr HKLM "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR\${PRODUCT_EXE}"
+  WriteRegStr HKLM "${PRODUCT_UNINST_KEY}" "StartMenu" "$SMPROGRAMS\$StartmenuFolder"
+  WriteRegStr HKLM "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninstall.exe"
+  WriteRegDWORD HKLM "${PRODUCT_UNINST_KEY}" "NoModify" 0x00000001
+  WriteRegDWORD HKLM "${PRODUCT_UNINST_KEY}" "NoRepair" 0x00000001
        
 SectionEnd
 
-# Macro for selecting uninstaller sections
-!macro SELECT_UNSECTION SECTION_NAME UNSECTION_ID
-    Push $R0
-    ReadRegStr $R0 HKLM "${REGKEY}\Components" "${SECTION_NAME}"
-    StrCmp $R0 1 0 next${UNSECTION_ID}
-    !insertmacro SelectSection "${UNSECTION_ID}"
-    Goto done${UNSECTION_ID}
-next${UNSECTION_ID}:
-    !insertmacro UnselectSection "${UNSECTION_ID}"
-done${UNSECTION_ID}:
-    Pop $R0
-!macroend
 
 # Uninstaller sections
-Section /o un.Main UNSEC0000
-    Delete /REBOOTOK $INSTDIR\jabref.jar
-    Delete /REBOOTOK $INSTDIR\JabRef.exe
-    Delete /REBOOTOK $INSTDIR\GPL.txt
-    Delete /REBOOTOK $INSTDIR\Credits.txt
-    DeleteRegValue HKLM "${REGKEY}\Components" Main
-SectionEnd
+Section "un.JabRef" un.SecUnProgramFiles
 
-Section un.post UNSEC0001
-    DeleteRegKey HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)"
-    Delete /REBOOTOK "$SMPROGRAMS\$StartMenuGroup\Uninstall $(^Name).lnk"
-    Delete /REBOOTOK "$SMPROGRAMS\$StartMenuGroup\Start $(^Name).lnk"
-    Delete /REBOOTOK $INSTDIR\uninstall.exe
-    DeleteRegValue HKLM "${REGKEY}" StartMenuGroup
-    DeleteRegValue HKLM "${REGKEY}" Path
-    DeleteRegKey /ifempty HKLM "${REGKEY}\Components"
-    DeleteRegKey /ifempty HKLM "${REGKEY}"
-    RMDir /REBOOTOK $SMPROGRAMS\$StartMenuGroup
-    RMDir /REBOOTOK $INSTDIR
+  SectionIn RO
+  ; delete installation folder
+  RMDir /r $INSTDIR	
+  ; delete start menu entry
+  ReadRegStr $0 HKLM "${PRODUCT_UNINST_KEY}" "StartMenu"
+  RMDir /r "$0"
+  ; delete desktop icon
+  Delete "$DESKTOP\$(^Name).lnk"
+  ; delete registry entries
+  DeleteRegKey HKCU "${PRODUCT_UNINST_KEY}"
+  DeleteRegKey HKLM "${PRODUCT_UNINST_KEY}"
+  DeleteRegKey HKCR "Applications\${PRODUCT_EXE}"
+  DeleteRegValue HKCR ".bib" "JabRef.BibTeX_backup"
+  DeleteRegValue HKLM "Software\Classes\.bib" "JabRef.BibTeX_backup"
+  DeleteRegKey HKLM "${REGKEY}"
+  ; remove file association with .bib-files
+  !insertmacro APP_UNASSOCIATE "bib" "JabRef.BibTeX"
+  ; close uninstaller automatically
+  SetAutoClose true
+    
 SectionEnd
 
+
 # Installer functions
 Function .onInit
-    InitPluginsDir
+
+ InitPluginsDir
+  ; If the user does *not* have administrator privileges, abort
+  StrCpy $Answer ""
+  StrCpy $UserName ""
+  !insertmacro IsUserAdmin $Answer $UserName ; macro from LyXUtils.nsh
+  ${if} $Answer == "yes"
+   SetShellVarContext all ; set that e.g. shortcuts will be created for all users
+  ${else}
+   MessageBox MB_OK|MB_ICONSTOP "$(NotAdmin)"
+   Abort
+  ${endif}
+
 FunctionEnd
 
+
 # Uninstaller functions
 Function un.onInit
-    ReadRegStr $INSTDIR HKLM "${REGKEY}" Path
-    ReadRegStr $StartMenuGroup HKLM "${REGKEY}" StartMenuGroup
-    !insertmacro SELECT_UNSECTION Main ${UNSEC0000}
+	
+  ; If the user does *not* have administrator privileges, abort
+  StrCpy $Answer ""
+  !insertmacro IsUserAdmin $Answer $UserName
+  ${if} $Answer == "yes"
+   SetShellVarContext all
+  ${else}
+   MessageBox MB_OK|MB_ICONSTOP "$(UnNotAdminLabel)"
+   Abort
+  ${endif}
+  
+  ; ask if it should really be removed
+  MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "$(UnReallyRemoveLabel)" IDYES +2
+  Abort
+  
+FunctionEnd
+
+Function un.onUninstSuccess
+	
+  HideWindow
+  MessageBox MB_ICONINFORMATION|MB_OK "$(UnRemoveSuccessLabel)"
+  
 FunctionEnd
 

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