[jabref] 214/459: [svn-upgrade] Integrating new upstream version, jabref (2.6~beta2)

gregor herrmann gregoa at debian.org
Thu Sep 15 20:40:26 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 e6b79f891fe0708bd3f08a8a650ae9c9e0a121cf
Author: gregor herrmann <gregoa at debian.org>
Date:   Tue Dec 1 16:45:51 2009 +0000

    [svn-upgrade] Integrating new upstream version, jabref (2.6~beta2)
---
 .classpath                                         |   2 +-
 JabRef.ipr                                         | 188 ------
 JabRef.iws                                         | 655 ---------------------
 build.number                                       |   4 +-
 build.xml                                          |   8 +-
 src/{Jabref.iml => Jabref_trunk.iml}               | 191 +-----
 src/help/About.html                                |   1 +
 src/help/BaseFrameHelp.html                        |  21 +-
 src/help/CustomExports.html                        |   5 +
 src/help/EntryEditorHelp.html                      |  10 +-
 src/help/RevisionHistory.html                      | 104 +++-
 src/help/da/About.html                             |   1 +
 src/help/de/About.html                             |   1 +
 src/help/fr/About.html                             |   1 +
 src/help/fr/BaseFrameHelp.html                     |  27 +-
 src/help/fr/CustomExports.html                     |   9 +
 src/help/fr/EntryEditorHelp.html                   |   7 +-
 src/help/fr/RevisionHistory.html                   |  64 +-
 src/images/absIcon.png                             | Bin 0 -> 180 bytes
 src/images/add.png                                 | Bin 0 -> 455 bytes
 src/images/autumn.png                              | Bin 0 -> 307468 bytes
 src/images/completeItem.png                        | Bin 0 -> 458 bytes
 src/images/contents.png                            | Bin 0 -> 1073 bytes
 src/images/database_connect.png                    | Bin 0 -> 763 bytes
 src/images/database_save.png                       | Bin 0 -> 755 bytes
 src/images/document-save-as.png                    | Bin 0 -> 1337 bytes
 src/images/document-save.png                       | Bin 0 -> 1255 bytes
 src/images/doismall.png                            | Bin 0 -> 738 bytes
 src/images/duplicate.png                           | Bin 0 -> 359 bytes
 src/images/edit-copy.png                           | Bin 0 -> 979 bytes
 src/images/edit-cut.png                            | Bin 0 -> 985 bytes
 src/images/edit-delete.png                         | Bin 0 -> 1339 bytes
 src/images/edit-find.png                           | Bin 0 -> 1347 bytes
 src/images/edit-paste.png                          | Bin 0 -> 956 bytes
 src/images/edit-redo.png                           | Bin 0 -> 909 bytes
 src/images/edit-undo.png                           | Bin 0 -> 957 bytes
 src/images/editor.png                              | Bin 0 -> 1196 bytes
 src/images/emacs.png                               | Bin 0 -> 267 bytes
 src/images/emblem-web-small.png                    | Bin 0 -> 960 bytes
 src/images/emblem-web.png                          | Bin 0 -> 1419 bytes
 src/images/fileclose.png                           | Bin 0 -> 238 bytes
 src/images/fileclose2.png                          | Bin 0 -> 250 bytes
 src/images/filenew.png                             | Bin 0 -> 968 bytes
 src/images/fileopen.png                            | Bin 0 -> 1123 bytes
 src/images/genIcon.png                             | Bin 0 -> 180 bytes
 src/images/go-down.png                             | Bin 0 -> 1216 bytes
 src/images/go-next.png                             | Bin 0 -> 1203 bytes
 src/images/go-previous.png                         | Bin 0 -> 1157 bytes
 src/images/go-up.png                               | Bin 0 -> 1092 bytes
 src/images/groupIncluding.png                      | Bin 0 -> 105 bytes
 src/images/groupRefining.png                       | Bin 0 -> 160 bytes
 src/images/grouping_morten.png                     | Bin 0 -> 875 bytes
 src/images/groupsHighlightAll.png                  | Bin 0 -> 280 bytes
 src/images/groupsHighlightAny.png                  | Bin 0 -> 276 bytes
 src/images/help-about.png                          | Bin 0 -> 986 bytes
 src/images/help-browser.png                        | Bin 0 -> 1541 bytes
 src/images/integrity.png                           | Bin 0 -> 748 bytes
 src/images/lyx2.png                                | Bin 0 -> 927 bytes
 src/images/mark.png                                | Bin 0 -> 928 bytes
 src/images/messageFail.png                         | Bin 0 -> 937 bytes
 src/images/messageInfo.png                         | Bin 0 -> 978 bytes
 src/images/messageWarn.png                         | Bin 0 -> 1014 bytes
 src/images/optIcon.png                             | Bin 0 -> 200 bytes
 src/images/pdf-new.png                             | Bin 0 -> 936 bytes
 src/images/pdf.png                                 | Bin 0 -> 349 bytes
 src/images/postscript.png                          | Bin 0 -> 233 bytes
 src/images/preamble.png                            | Bin 0 -> 266 bytes
 src/images/preferences.png                         | Bin 0 -> 1381 bytes
 src/images/remove.png                              | Bin 0 -> 288 bytes
 src/images/reqIcon.png                             | Bin 0 -> 182 bytes
 src/images/search.png                              | Bin 0 -> 1433 bytes
 src/images/splash-2.1.svg                          | 229 +++++++
 src/images/splash-2.1beta.png                      | Bin 0 -> 179073 bytes
 src/images/{splash-2.5.svg => splash-2.3.svg}      |  36 +-
 src/images/{splash-2.5.svg => splash-2.4.svg}      |   6 +-
 src/images/splash-2.5.svg                          |   6 +-
 src/images/{splash-2.5.svg => splash-2.6beta.svg}  |  45 +-
 src/images/splash.png                              | Bin 171490 -> 175305 bytes
 src/images/splashBackground.png                    | Bin 0 -> 157549 bytes
 src/images/strings.png                             | Bin 0 -> 233 bytes
 src/images/unmark.png                              | Bin 0 -> 1025 bytes
 src/images/user-home.png                           | Bin 0 -> 1290 bytes
 src/images/view-refresh.png                        | Bin 0 -> 1591 bytes
 src/images/viewsource.gif                          | Bin 0 -> 119 bytes
 src/images/winedt.png                              | Bin 0 -> 1495 bytes
 src/images/wizard.png                              | Bin 0 -> 238 bytes
 src/images/wrongItem.png                           | Bin 0 -> 776 bytes
 src/images/wwwciteseer.png                         | Bin 0 -> 526 bytes
 src/java/net/sf/jabref/BasePanel.java              |  45 ++
 src/java/net/sf/jabref/ContentSelectorDialog2.java |   2 +
 src/java/net/sf/jabref/DuplicateCheck.java         |  10 +-
 src/java/net/sf/jabref/EntryEditor.java            | 102 +++-
 src/java/net/sf/jabref/EntryEditorTab.java         |  29 +-
 src/java/net/sf/jabref/GeneralTab.java             |   7 +-
 src/java/net/sf/jabref/Globals.java                |   2 +-
 src/java/net/sf/jabref/JabRef.java                 |  18 +-
 src/java/net/sf/jabref/JabRefPreferences.java      |   8 +-
 src/java/net/sf/jabref/PreviewPanel.java           |   2 +-
 src/java/net/sf/jabref/RegExpRule.java             |   5 +-
 src/java/net/sf/jabref/SearchManager2.java         |   4 +-
 src/java/net/sf/jabref/SimpleSearchRule.java       |   5 +-
 src/java/net/sf/jabref/Util.java                   | 189 +++++-
 src/java/net/sf/jabref/collab/Change.java          |   6 +-
 .../net/sf/jabref/collab/ChangeDisplayDialog.java  |  17 +-
 src/java/net/sf/jabref/collab/ChangeScanner.java   |  90 ++-
 src/java/net/sf/jabref/collab/EntryAddChange.java  |   3 +-
 src/java/net/sf/jabref/collab/EntryChange.java     |  20 +-
 .../net/sf/jabref/collab/EntryDeleteChange.java    |   3 +-
 .../net/sf/jabref/collab/FileUpdateMonitor.java    |  17 +-
 src/java/net/sf/jabref/collab/GroupChange.java     |  16 +-
 src/java/net/sf/jabref/collab/MetaDataChange.java  | 108 ++++
 src/java/net/sf/jabref/collab/PreambleChange.java  |   4 +-
 src/java/net/sf/jabref/collab/StringAddChange.java |  14 +-
 src/java/net/sf/jabref/collab/StringChange.java    |  20 +-
 .../net/sf/jabref/collab/StringNameChange.java     |  19 +-
 .../net/sf/jabref/collab/StringRemoveChange.java   |  11 +-
 src/java/net/sf/jabref/export/FileActions.java     |  13 +-
 .../jabref/export/OpenDocumentRepresentation.java  |  12 +-
 .../net/sf/jabref/export/SaveDatabaseAction.java   |  56 +-
 src/java/net/sf/jabref/export/SaveException.java   |   4 +
 src/java/net/sf/jabref/export/SaveSession.java     |  68 ++-
 src/java/net/sf/jabref/export/layout/Layout.java   |   9 +-
 .../net/sf/jabref/export/layout/LayoutEntry.java   |  16 +-
 .../sf/jabref/export/layout/format/Default.java    |  20 +
 .../jabref/export/layout/format/FormatChars.java   | 238 ++++----
 .../sf/jabref/export/layout/format/HTMLChars.java  |   5 +-
 .../sf/jabref/export/layout/format/LastPage.java   |   5 +-
 .../sf/jabref/export/layout/format/RTFChars.java   |   8 +-
 .../sf/jabref/export/layout/format/ResolvePDF.java |   2 +-
 .../external/TransferableFileLinkSelection.java    | 111 ++++
 src/java/net/sf/jabref/groups/AutoGroupDialog.java |  89 ++-
 .../jabref/groups/EntryTableTransferHandler.java   |  28 +-
 .../sf/jabref/groups/GroupTreeCellRenderer.java    |  13 +-
 src/java/net/sf/jabref/groups/KeywordGroup.java    |  32 +-
 .../net/sf/jabref/gui/AutoCompleteListener.java    |  72 ++-
 src/java/net/sf/jabref/gui/AutoCompleter.java      |   4 +
 src/java/net/sf/jabref/gui/FileListEditor.java     |  10 +-
 .../net/sf/jabref/gui/FileListEntryEditor.java     |  28 +-
 .../net/sf/jabref/gui/ImportInspectionDialog.java  |   3 +-
 .../sf/jabref/gui/MainTableSelectionListener.java  |  39 +-
 src/java/net/sf/jabref/gui/VerticalLabelUI.java    | 191 ++++++
 src/java/net/sf/jabref/imports/CsaImporter.java    |  48 +-
 .../net/sf/jabref/imports/EndnoteImporter.java     |   9 +-
 src/java/net/sf/jabref/imports/IsiImporter.java    |   4 +-
 .../net/sf/jabref/imports/OpenDatabaseAction.java  |  29 +-
 src/java/net/sf/jabref/imports/ParserResult.java   |   1 +
 .../net/sf/jabref/imports/ScifinderImporter.java   |  15 +-
 .../sf/jabref/journals/ManageJournalsPanel.java    |   6 +
 src/java/net/sf/jabref/net/Cookie.java             |   5 +-
 src/java/net/sf/jabref/search/BasicSearch.java     |   6 +-
 .../jabref/search/SearchExpressionTreeParser.java  |  12 +-
 src/java/net/sf/jabref/sql/SQLutil.java            |  13 +-
 src/resource/JabRef_da.properties                  |  19 +-
 src/resource/JabRef_de.properties                  |  36 +-
 src/resource/JabRef_en.properties                  |  20 +-
 src/resource/JabRef_fr.properties                  |  24 +-
 src/resource/JabRef_it.properties                  | 219 +++----
 src/resource/JabRef_nl.properties                  |  19 +-
 src/resource/JabRef_no.properties                  |  19 +-
 src/resource/JabRef_tr.properties                  | 126 ++--
 src/resource/JabRef_zh.properties                  |  19 +-
 src/resource/JabRef_zh.properties.UTF8             |  19 +
 src/resource/Menu_tr.properties                    |   8 +-
 src/resource/build.properties                      |   6 +-
 src/resource/layout/endnote/EndNote.article.layout |   2 +-
 src/resource/layout/endnote/EndNote.book.layout    |   2 +-
 src/resource/layout/endnote/EndNote.booklet.layout |   2 +-
 src/resource/layout/endnote/EndNote.inbook.layout  |   2 +-
 .../layout/endnote/EndNote.incollection.layout     |   2 +-
 .../layout/endnote/EndNote.inproceedings.layout    |   2 +-
 src/resource/layout/endnote/EndNote.layout         |   2 +-
 src/resource/layout/endnote/EndNote.manual.layout  |   2 +-
 .../layout/endnote/EndNote.mastersthesis.layout    |   2 +-
 src/resource/layout/endnote/EndNote.misc.layout    |   2 +-
 src/resource/layout/endnote/EndNote.other.layout   |   2 +-
 .../layout/endnote/EndNote.phdthesis.layout        |   2 +-
 .../layout/endnote/EndNote.proceedings.layout      |   2 +-
 .../layout/endnote/EndNote.techreport.layout       |   2 +-
 .../layout/endnote/EndNote.unpublished.layout      |   2 +-
 src/resource/layout/harvard/harvard.book.layout    |   3 +-
 src/resource/layout/harvard/harvard.inbook.layout  |   2 +
 .../layout/harvard/harvard.incollection.layout     |   3 +-
 .../layout/harvard/harvard.inproceedings.layout    |   3 +-
 src/resource/layout/harvard/harvard.layout         |   3 +-
 .../layout/harvard/harvard.proceedings.layout      |   3 +-
 src/txt/CHANGELOG                                  |  71 ++-
 src/txt/README                                     |   4 +-
 src/txt/README~                                    | 100 ----
 src/txt/TODO                                       |   8 +-
 src/windows/nsis/launcher.nsi                      |   4 +-
 190 files changed, 2575 insertions(+), 1814 deletions(-)

diff --git a/.classpath b/.classpath
index c66a907..16e0e16 100644
--- a/.classpath
+++ b/.classpath
@@ -5,7 +5,7 @@
 	<classpathentry exported="true" kind="lib" path="lib/plugin/commons-logging.jar"/>
 	<classpathentry exported="true" kind="lib" path="lib/spin.jar"/>
 	<classpathentry exported="true" kind="lib" path="lib/microba.jar"/>
-	<classpathentry exported="true" kind="lib" path="lib/looks-2.0.4.jar"/>
+	<classpathentry exported="true" kind="lib" path="lib/looks-2.2.0.jar"/>
 	<classpathentry exported="true" kind="lib" path="lib/PDFBox-0.7.3-dev-reduced.jar"/>
 	<classpathentry exported="true" kind="lib" path="lib/antlr.jar"/>
 	<classpathentry exported="true" kind="lib" path="lib/antlr-3.0b5.jar"/>
diff --git a/JabRef.ipr b/JabRef.ipr
deleted file mode 100644
index f15c148..0000000
--- a/JabRef.ipr
+++ /dev/null
@@ -1,188 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project relativePaths="false" version="4">
-  <component name="AntConfiguration">
-    <defaultAnt bundledAnt="true" />
-    <buildFile url="file://$PROJECT_DIR$/build.xml">
-      <additionalClassPath />
-      <antReference projectDefault="true" />
-      <customJdkName value="" />
-      <maximumHeapSize value="128" />
-      <maximumStackSize value="32" />
-      <properties />
-    </buildFile>
-  </component>
-  <component name="BuildJarProjectSettings">
-    <option name="BUILD_JARS_ON_MAKE" value="false" />
-  </component>
-  <component name="CodeStyleSettingsManager">
-    <option name="PER_PROJECT_SETTINGS" />
-    <option name="USE_PER_PROJECT_SETTINGS" value="false" />
-  </component>
-  <component name="CompilerConfiguration">
-    <option name="DEFAULT_COMPILER" value="Javac" />
-    <option name="DEPLOY_AFTER_MAKE" value="0" />
-    <resourceExtensions>
-      <entry name=".+\.(properties|xml|html|dtd|tld)" />
-      <entry name=".+\.(gif|png|jpeg|jpg)" />
-    </resourceExtensions>
-    <wildcardResourcePatterns>
-      <entry name="?*.properties" />
-      <entry name="?*.xml" />
-      <entry name="?*.gif" />
-      <entry name="?*.png" />
-      <entry name="?*.jpeg" />
-      <entry name="?*.jpg" />
-      <entry name="?*.html" />
-      <entry name="?*.dtd" />
-      <entry name="?*.tld" />
-      <entry name="?*.ftl" />
-    </wildcardResourcePatterns>
-  </component>
-  <component name="DependencyValidationManager">
-    <option name="SKIP_IMPORT_STATEMENTS" value="false" />
-  </component>
-  <component name="Encoding" useUTFGuessing="true" native2AsciiForPropertiesFiles="false" />
-  <component name="InspectionProjectProfileManager">
-    <option name="PROJECT_PROFILE" value="Project Default" />
-    <option name="USE_PROJECT_LEVEL_SETTINGS" value="false" />
-    <scopes />
-    <profiles>
-      <profile version="1.0" is_locked="false">
-        <option name="myName" value="Project Default" />
-        <option name="myLocal" value="false" />
-      </profile>
-    </profiles>
-    <list size="0" />
-  </component>
-  <component name="JavadocGenerationManager">
-    <option name="OUTPUT_DIRECTORY" />
-    <option name="OPTION_SCOPE" value="protected" />
-    <option name="OPTION_HIERARCHY" value="true" />
-    <option name="OPTION_NAVIGATOR" value="true" />
-    <option name="OPTION_INDEX" value="true" />
-    <option name="OPTION_SEPARATE_INDEX" value="true" />
-    <option name="OPTION_DOCUMENT_TAG_USE" value="false" />
-    <option name="OPTION_DOCUMENT_TAG_AUTHOR" value="false" />
-    <option name="OPTION_DOCUMENT_TAG_VERSION" value="false" />
-    <option name="OPTION_DOCUMENT_TAG_DEPRECATED" value="true" />
-    <option name="OPTION_DEPRECATED_LIST" value="true" />
-    <option name="OTHER_OPTIONS" value="" />
-    <option name="HEAP_SIZE" />
-    <option name="LOCALE" />
-    <option name="OPEN_IN_BROWSER" value="true" />
-  </component>
-  <component name="ProjectDetails">
-    <option name="projectName" value="JabRef" />
-  </component>
-  <component name="ProjectFileVersion" converted="true" />
-  <component name="ProjectModuleManager">
-    <modules>
-      <module fileurl="file://$PROJECT_DIR$/src/Jabref.iml" filepath="$PROJECT_DIR$/src/Jabref.iml" />
-    </modules>
-  </component>
-  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_5" assert-keyword="true" jdk-15="true" project-jdk-name="1.6" project-jdk-type="JavaSDK">
-    <output url="file://$PROJECT_DIR$/out" />
-  </component>
-  <component name="SvnBranchConfigurationManager">
-    <option name="myConfigurationMap">
-      <map>
-        <entry key="$PROJECT_DIR$">
-          <value>
-            <SvnBranchConfiguration>
-              <option name="branchUrls">
-                <list>
-                  <option value="https://jabref.svn.sourceforge.net/svnroot/jabref/branches" />
-                  <option value="https://jabref.svn.sourceforge.net/svnroot/jabref/tags" />
-                </list>
-              </option>
-              <option name="trunkUrl" value="https://jabref.svn.sourceforge.net/svnroot/jabref/trunk" />
-            </SvnBranchConfiguration>
-          </value>
-        </entry>
-      </map>
-    </option>
-    <option name="myVersion" value="124" />
-  </component>
-  <component name="VcsDirectoryMappings">
-    <mapping directory="" vcs="svn" />
-  </component>
-  <component name="masterDetails">
-    <option name="states">
-      <map>
-        <entry key="Errors.UI">
-          <value>
-            <UIState>
-              <option name="proportions">
-                <SplitterProportionsDataImpl />
-              </option>
-            </UIState>
-          </value>
-        </entry>
-        <entry key="ProjectJDKs.UI">
-          <value>
-            <UIState>
-              <option name="proportions">
-                <SplitterProportionsDataImpl>
-                  <option name="proportions">
-                    <list>
-                      <option value="0.2" />
-                    </list>
-                  </option>
-                </SplitterProportionsDataImpl>
-              </option>
-              <option name="lastEditedConfigurable" value="1.6" />
-            </UIState>
-          </value>
-        </entry>
-        <entry key="ScopeChooserConfigurable.UI">
-          <value>
-            <UIState>
-              <option name="proportions">
-                <SplitterProportionsDataImpl />
-              </option>
-            </UIState>
-          </value>
-        </entry>
-      </map>
-    </option>
-    <option name="myStates">
-      <map>
-        <entry key="Errors.UI">
-          <value>
-            <UIState>
-              <option name="proportions">
-                <SplitterProportionsDataImpl />
-              </option>
-            </UIState>
-          </value>
-        </entry>
-        <entry key="ProjectJDKs.UI">
-          <value>
-            <UIState>
-              <option name="proportions">
-                <SplitterProportionsDataImpl>
-                  <option name="proportions">
-                    <list>
-                      <option value="0.2" />
-                    </list>
-                  </option>
-                </SplitterProportionsDataImpl>
-              </option>
-              <option name="lastEditedConfigurable" value="1.6" />
-            </UIState>
-          </value>
-        </entry>
-        <entry key="ScopeChooserConfigurable.UI">
-          <value>
-            <UIState>
-              <option name="proportions">
-                <SplitterProportionsDataImpl />
-              </option>
-            </UIState>
-          </value>
-        </entry>
-      </map>
-    </option>
-  </component>
-</project>
-
diff --git a/JabRef.iws b/JabRef.iws
deleted file mode 100644
index b1b87af..0000000
--- a/JabRef.iws
+++ /dev/null
@@ -1,655 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project relativePaths="false" version="4">
-  <component name="ChangeListManager">
-    <list default="true" readonly="true" name="Default" comment="">
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/txt/CHANGELOG" afterPath="$PROJECT_DIR$/src/txt/CHANGELOG" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/build.xml" afterPath="$PROJECT_DIR$/build.xml" />
-    </list>
-    <ignored path="JabRef.iws" />
-    <ignored path=".idea/workspace.xml" />
-  </component>
-  <component name="ChangesViewManager" flattened_view="true" show_ignored="false" />
-  <component name="Commander">
-    <leftPanel />
-    <rightPanel />
-    <splitter proportion="0.5" />
-  </component>
-  <component name="CreatePatchCommitExecutor">
-    <option name="PATCH_PATH" value="" />
-    <option name="REVERSE_PATCH" value="false" />
-  </component>
-  <component name="DaemonCodeAnalyzer">
-    <disable_hints />
-  </component>
-  <component name="DebuggerManager">
-    <breakpoint_any>
-      <breakpoint>
-        <option name="NOTIFY_CAUGHT" value="true" />
-        <option name="NOTIFY_UNCAUGHT" value="true" />
-        <option name="ENABLED" value="false" />
-        <option name="LOG_ENABLED" value="false" />
-        <option name="LOG_EXPRESSION_ENABLED" value="false" />
-        <option name="SUSPEND_POLICY" value="SuspendAll" />
-        <option name="COUNT_FILTER_ENABLED" value="false" />
-        <option name="COUNT_FILTER" value="0" />
-        <option name="CONDITION_ENABLED" value="false" />
-        <option name="CLASS_FILTERS_ENABLED" value="false" />
-        <option name="INSTANCE_FILTERS_ENABLED" value="false" />
-        <option name="CONDITION" value="" />
-        <option name="LOG_MESSAGE" value="" />
-      </breakpoint>
-      <breakpoint>
-        <option name="NOTIFY_CAUGHT" value="true" />
-        <option name="NOTIFY_UNCAUGHT" value="true" />
-        <option name="ENABLED" value="false" />
-        <option name="LOG_ENABLED" value="false" />
-        <option name="LOG_EXPRESSION_ENABLED" value="false" />
-        <option name="SUSPEND_POLICY" value="SuspendAll" />
-        <option name="COUNT_FILTER_ENABLED" value="false" />
-        <option name="COUNT_FILTER" value="0" />
-        <option name="CONDITION_ENABLED" value="false" />
-        <option name="CLASS_FILTERS_ENABLED" value="false" />
-        <option name="INSTANCE_FILTERS_ENABLED" value="false" />
-        <option name="CONDITION" value="" />
-        <option name="LOG_MESSAGE" value="" />
-      </breakpoint>
-    </breakpoint_any>
-    <breakpoint_rules />
-    <ui_properties />
-  </component>
-  <component name="FavoritesManager">
-    <favorites_list name="JabRef" />
-  </component>
-  <component name="FileEditorManager">
-    <leaf>
-      <file leaf-file-name="PluginInstaller.java" pinned="false" current="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/src/java/net/sf/jabref/plugin/PluginInstaller.java">
-          <provider selected="true" editor-type-id="text-editor">
-            <state line="297" column="22" selection-start="12576" selection-end="12576" vertical-scroll-proportion="0.0">
-              <folding />
-            </state>
-          </provider>
-        </entry>
-      </file>
-      <file leaf-file-name="RisImporter.java" pinned="false" current="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/src/java/net/sf/jabref/imports/RisImporter.java">
-          <provider selected="true" editor-type-id="text-editor">
-            <state line="158" column="39" selection-start="5957" selection-end="5957" vertical-scroll-proportion="0.0">
-              <folding />
-            </state>
-          </provider>
-        </entry>
-      </file>
-      <file leaf-file-name="CHANGELOG" pinned="false" current="true" current-in-tab="true">
-        <entry file="file://$PROJECT_DIR$/src/txt/CHANGELOG">
-          <provider selected="true" editor-type-id="text-editor">
-            <state line="27" column="13" selection-start="1676" selection-end="1676" vertical-scroll-proportion="0.6958763">
-              <folding />
-            </state>
-          </provider>
-        </entry>
-      </file>
-      <file leaf-file-name="build.xml" pinned="false" current="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/build.xml">
-          <provider selected="true" editor-type-id="text-editor">
-            <state line="49" column="46" selection-start="2179" selection-end="2179" vertical-scroll-proportion="-12.954545">
-              <folding />
-            </state>
-          </provider>
-        </entry>
-      </file>
-      <file leaf-file-name="SQLutil.java" pinned="false" current="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/src/java/net/sf/jabref/sql/SQLutil.java">
-          <provider selected="true" editor-type-id="text-editor">
-            <state line="1026" column="20" selection-start="36310" selection-end="36310" vertical-scroll-proportion="0.0">
-              <folding />
-            </state>
-          </provider>
-        </entry>
-      </file>
-      <file leaf-file-name="JabRef.java" pinned="false" current="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/src/java/net/sf/jabref/JabRef.java">
-          <provider selected="true" editor-type-id="text-editor">
-            <state line="813" column="32" selection-start="34953" selection-end="34953" vertical-scroll-proportion="0.0">
-              <folding />
-            </state>
-          </provider>
-        </entry>
-      </file>
-      <file leaf-file-name="JabRef_en.properties" pinned="false" current="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/src/resource/JabRef_en.properties">
-          <provider selected="true" editor-type-id="text-editor">
-            <state line="2114" column="0" selection-start="69411" selection-end="69411" vertical-scroll-proportion="0.0">
-              <folding />
-            </state>
-          </provider>
-          <provider editor-type-id="ResourceBundle">
-            <state />
-          </provider>
-        </entry>
-      </file>
-      <file leaf-file-name="Autosave.html" pinned="false" current="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/src/help/Autosave.html">
-          <provider selected="true" editor-type-id="text-editor">
-            <state line="14" column="16" selection-start="770" selection-end="770" vertical-scroll-proportion="0.0">
-              <folding />
-            </state>
-          </provider>
-        </entry>
-      </file>
-      <file leaf-file-name="Contents.html" pinned="false" current="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/src/help/Contents.html">
-          <provider selected="true" editor-type-id="text-editor">
-            <state line="29" column="49" selection-start="1140" selection-end="1140" vertical-scroll-proportion="0.0">
-              <folding />
-            </state>
-          </provider>
-        </entry>
-      </file>
-      <file leaf-file-name="BaseFrameHelp.html" pinned="false" current="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/src/help/BaseFrameHelp.html">
-          <provider selected="true" editor-type-id="text-editor">
-            <state line="0" column="0" selection-start="0" selection-end="4665" vertical-scroll-proportion="0.0">
-              <folding />
-            </state>
-          </provider>
-        </entry>
-      </file>
-    </leaf>
-  </component>
-  <component name="FindManager">
-    <FindUsagesManager>
-      <setting name="OPEN_NEW_TAB" value="false" />
-    </FindUsagesManager>
-  </component>
-  <component name="ModuleEditorState">
-    <option name="LAST_EDITED_MODULE_NAME" />
-    <option name="LAST_EDITED_TAB_NAME" />
-  </component>
-  <component name="ProjectLevelVcsManager">
-    <OptionsSetting value="true" id="Add" />
-    <OptionsSetting value="true" id="Remove" />
-    <OptionsSetting value="true" id="Checkout" />
-    <OptionsSetting value="true" id="Update" />
-    <OptionsSetting value="true" id="Status" />
-    <OptionsSetting value="true" id="Edit" />
-    <ConfirmationsSetting value="0" id="Add" />
-    <ConfirmationsSetting value="0" id="Remove" />
-  </component>
-  <component name="ProjectPane">
-    <subPane>
-      <PATH>
-        <PATH_ELEMENT>
-          <option name="myItemId" value="JabRef" />
-          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
-        </PATH_ELEMENT>
-      </PATH>
-      <PATH>
-        <PATH_ELEMENT>
-          <option name="myItemId" value="JabRef" />
-          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
-        </PATH_ELEMENT>
-        <PATH_ELEMENT>
-          <option name="myItemId" value="Jabref" />
-          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewModuleNode" />
-        </PATH_ELEMENT>
-      </PATH>
-      <PATH>
-        <PATH_ELEMENT>
-          <option name="myItemId" value="JabRef" />
-          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
-        </PATH_ELEMENT>
-        <PATH_ELEMENT>
-          <option name="myItemId" value="Jabref" />
-          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewModuleNode" />
-        </PATH_ELEMENT>
-        <PATH_ELEMENT>
-          <option name="myItemId" value="src" />
-          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-        </PATH_ELEMENT>
-      </PATH>
-      <PATH>
-        <PATH_ELEMENT>
-          <option name="myItemId" value="JabRef" />
-          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
-        </PATH_ELEMENT>
-        <PATH_ELEMENT>
-          <option name="myItemId" value="Jabref" />
-          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewModuleNode" />
-        </PATH_ELEMENT>
-        <PATH_ELEMENT>
-          <option name="myItemId" value="src" />
-          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-        </PATH_ELEMENT>
-        <PATH_ELEMENT>
-          <option name="myItemId" value="txt" />
-          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-        </PATH_ELEMENT>
-      </PATH>
-      <PATH>
-        <PATH_ELEMENT>
-          <option name="myItemId" value="JabRef" />
-          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
-        </PATH_ELEMENT>
-        <PATH_ELEMENT>
-          <option name="myItemId" value="Jabref" />
-          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewModuleNode" />
-        </PATH_ELEMENT>
-        <PATH_ELEMENT>
-          <option name="myItemId" value="src" />
-          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-        </PATH_ELEMENT>
-        <PATH_ELEMENT>
-          <option name="myItemId" value="help" />
-          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-        </PATH_ELEMENT>
-      </PATH>
-    </subPane>
-  </component>
-  <component name="ProjectReloadState">
-    <option name="STATE" value="0" />
-  </component>
-  <component name="ProjectView">
-    <navigator currentView="ProjectPane" proportions="0.5" version="1" splitterProportion="0.5">
-      <flattenPackages />
-      <showMembers />
-      <showModules />
-      <showLibraryContents />
-      <hideEmptyPackages />
-      <abbreviatePackageNames />
-      <showStructure ProjectPane="false" />
-      <autoscrollToSource />
-      <autoscrollFromSource />
-      <sortByType />
-    </navigator>
-  </component>
-  <component name="PropertiesComponent">
-    <property name="GoToFile.includeJavaFiles" value="false" />
-    <property name="GoToClass.toSaveIncludeLibraries" value="false" />
-    <property name="MemberChooser.sorted" value="false" />
-    <property name="MemberChooser.showClasses" value="true" />
-    <property name="GoToClass.includeLibraries" value="false" />
-    <property name="MemberChooser.copyJavadoc" value="false" />
-  </component>
-  <component name="RestoreUpdateTree">
-    <UpdateInfo date="6/18/09 6:26 PM" ActionInfo="_Update">
-      <UpdatedFiles>
-        <FILE-GROUP>
-          <option name="myUpdateName" value="Updated from server" />
-          <option name="myStatusName" value="Changed on server" />
-          <option name="mySupportsDeletion" value="false" />
-          <option name="myCanBeAbsent" value="false" />
-          <option name="myId" value="CHANGED_ON_SERVER" />
-          <FILE-GROUP>
-            <option name="myUpdateName" value="Updated" />
-            <option name="myStatusName" value="Changed" />
-            <option name="mySupportsDeletion" value="false" />
-            <option name="myCanBeAbsent" value="false" />
-            <option name="myId" value="UPDATED" />
-            <PATH vcs="svn" revision="3027">$PROJECT_DIR$/src/resource/JabRef_da.properties</PATH>
-          </FILE-GROUP>
-          <FILE-GROUP>
-            <option name="myUpdateName" value="Created" />
-            <option name="myStatusName" value="Created" />
-            <option name="mySupportsDeletion" value="false" />
-            <option name="myCanBeAbsent" value="false" />
-            <option name="myId" value="CREATED" />
-          </FILE-GROUP>
-          <FILE-GROUP>
-            <option name="myUpdateName" value="Deleted" />
-            <option name="myStatusName" value="Deleted" />
-            <option name="mySupportsDeletion" value="false" />
-            <option name="myCanBeAbsent" value="true" />
-            <option name="myId" value="REMOVED_FROM_REPOSITORY" />
-          </FILE-GROUP>
-          <FILE-GROUP>
-            <option name="myUpdateName" value="Restored" />
-            <option name="myStatusName" value="Will be restored" />
-            <option name="mySupportsDeletion" value="false" />
-            <option name="myCanBeAbsent" value="false" />
-            <option name="myId" value="RESTORED" />
-          </FILE-GROUP>
-        </FILE-GROUP>
-        <FILE-GROUP>
-          <option name="myUpdateName" value="Modified" />
-          <option name="myStatusName" value="Modified" />
-          <option name="mySupportsDeletion" value="false" />
-          <option name="myCanBeAbsent" value="false" />
-          <option name="myId" value="MODIFIED" />
-        </FILE-GROUP>
-        <FILE-GROUP>
-          <option name="myUpdateName" value="Skipped" />
-          <option name="myStatusName" value="Skipped" />
-          <option name="mySupportsDeletion" value="false" />
-          <option name="myCanBeAbsent" value="false" />
-          <option name="myId" value="SKIPPED" />
-        </FILE-GROUP>
-        <FILE-GROUP>
-          <option name="myUpdateName" value="Merged with conflicts" />
-          <option name="myStatusName" value="Will be merged with conflicts" />
-          <option name="mySupportsDeletion" value="false" />
-          <option name="myCanBeAbsent" value="false" />
-          <option name="myId" value="MERGED_WITH_CONFLICTS" />
-        </FILE-GROUP>
-        <FILE-GROUP>
-          <option name="myUpdateName" value="Merged" />
-          <option name="myStatusName" value="Will be merged" />
-          <option name="mySupportsDeletion" value="false" />
-          <option name="myCanBeAbsent" value="false" />
-          <option name="myId" value="MERGED" />
-        </FILE-GROUP>
-        <FILE-GROUP>
-          <option name="myUpdateName" value="Not in repository" />
-          <option name="myStatusName" value="Not in repository" />
-          <option name="mySupportsDeletion" value="true" />
-          <option name="myCanBeAbsent" value="false" />
-          <option name="myId" value="UNKNOWN" />
-        </FILE-GROUP>
-        <FILE-GROUP>
-          <option name="myUpdateName" value="Locally added" />
-          <option name="myStatusName" value="Locally added" />
-          <option name="mySupportsDeletion" value="false" />
-          <option name="myCanBeAbsent" value="false" />
-          <option name="myId" value="LOCALLY_ADDED" />
-        </FILE-GROUP>
-        <FILE-GROUP>
-          <option name="myUpdateName" value="Locally removed" />
-          <option name="myStatusName" value="Locally removed" />
-          <option name="mySupportsDeletion" value="false" />
-          <option name="myCanBeAbsent" value="false" />
-          <option name="myId" value="LOCALLY_REMOVED" />
-        </FILE-GROUP>
-        <FILE-GROUP>
-          <option name="myUpdateName" value="Switched" />
-          <option name="myStatusName" value="Switched" />
-          <option name="mySupportsDeletion" value="false" />
-          <option name="myCanBeAbsent" value="false" />
-          <option name="myId" value="SWITCHED" />
-        </FILE-GROUP>
-      </UpdatedFiles>
-    </UpdateInfo>
-  </component>
-  <component name="RunManager">
-    <configuration default="true" type="Remote" factoryName="Remote">
-      <option name="USE_SOCKET_TRANSPORT" value="true" />
-      <option name="SERVER_MODE" value="false" />
-      <option name="SHMEM_ADDRESS" value="javadebug" />
-      <option name="HOST" value="localhost" />
-      <option name="PORT" value="5005" />
-    </configuration>
-    <configuration default="true" type="Applet" factoryName="Applet">
-      <module name="" />
-      <option name="MAIN_CLASS_NAME" />
-      <option name="HTML_FILE_NAME" />
-      <option name="HTML_USED" value="false" />
-      <option name="WIDTH" value="400" />
-      <option name="HEIGHT" value="300" />
-      <option name="POLICY_FILE" value="$APPLICATION_HOME_DIR$/bin/appletviewer.policy" />
-      <option name="VM_PARAMETERS" />
-      <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
-      <option name="ALTERNATIVE_JRE_PATH" />
-    </configuration>
-    <configuration default="true" type="Application" factoryName="Application" enabled="false" merge="false" runner="emma">
-      <option name="MAIN_CLASS_NAME" />
-      <option name="VM_PARAMETERS" />
-      <option name="PROGRAM_PARAMETERS" />
-      <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
-      <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
-      <option name="ALTERNATIVE_JRE_PATH" />
-      <option name="ENABLE_SWING_INSPECTOR" value="false" />
-      <option name="ENV_VARIABLES" />
-      <option name="PASS_PARENT_ENVS" value="true" />
-      <module name="" />
-      <envs />
-    </configuration>
-    <configuration default="true" type="JUnit" factoryName="JUnit" enabled="false" merge="false" runner="emma">
-      <module name="" />
-      <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
-      <option name="ALTERNATIVE_JRE_PATH" />
-      <option name="PACKAGE_NAME" />
-      <option name="MAIN_CLASS_NAME" />
-      <option name="METHOD_NAME" />
-      <option name="TEST_OBJECT" value="class" />
-      <option name="VM_PARAMETERS" />
-      <option name="PARAMETERS" />
-      <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
-      <option name="ENV_VARIABLES" />
-      <option name="PASS_PARENT_ENVS" value="true" />
-      <option name="ADDITIONAL_CLASS_PATH" />
-      <option name="TEST_SEARCH_SCOPE">
-        <value defaultName="moduleWithDependencies" />
-      </option>
-      <envs />
-    </configuration>
-    <list size="0" />
-    <configuration name="<template>" type="WebApp" default="true" selected="false">
-      <Host>localhost</Host>
-      <Port>5050</Port>
-    </configuration>
-  </component>
-  <component name="ShelveChangesManager" show_recycled="false" />
-  <component name="StructureViewFactory">
-    <option name="AUTOSCROLL_MODE" value="true" />
-    <option name="AUTOSCROLL_FROM_SOURCE" value="false" />
-    <option name="ACTIVE_ACTIONS" value="" />
-  </component>
-  <component name="SvnConfiguration">
-    <option name="USER" value="" />
-    <option name="PASSWORD" value="" />
-    <option name="LAST_MERGED_REVISION" />
-    <option name="UPDATE_RUN_STATUS" value="false" />
-    <option name="MERGE_DRY_RUN" value="false" />
-    <option name="MERGE_DIFF_USE_ANCESTRY" value="true" />
-    <option name="UPDATE_LOCK_ON_DEMAND" value="false" />
-    <configuration useDefault="true">/home/alver/.subversion</configuration>
-    <myIsUseDefaultProxy>false</myIsUseDefaultProxy>
-  </component>
-  <component name="TodoView" selected-index="0">
-    <todo-panel id="selected-file">
-      <are-packages-shown value="false" />
-      <are-modules-shown value="false" />
-      <flatten-packages value="false" />
-      <is-autoscroll-to-source value="true" />
-    </todo-panel>
-    <todo-panel id="all">
-      <are-packages-shown value="true" />
-      <are-modules-shown value="false" />
-      <flatten-packages value="false" />
-      <is-autoscroll-to-source value="true" />
-    </todo-panel>
-    <todo-panel id="default-changelist">
-      <are-packages-shown value="false" />
-      <are-modules-shown value="false" />
-      <flatten-packages value="false" />
-      <is-autoscroll-to-source value="false" />
-    </todo-panel>
-  </component>
-  <component name="ToolWindowManager">
-    <frame x="-5" y="25" width="1290" height="979" extended-state="6" />
-    <editor active="true" />
-    <layout>
-      <window_info id="Changes" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.2180723" sideWeight="0.0" order="7" side_tool="false" />
-      <window_info id="Palette" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="3" side_tool="false" />
-      <window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.120227456" sideWeight="0.773494" order="1" side_tool="false" />
-      <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32969698" sideWeight="0.5" order="1" side_tool="false" />
-      <window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="3" side_tool="false" />
-      <window_info id="Dataflow to this" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="false" />
-      <window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.3253012" sideWeight="0.5" order="7" side_tool="false" />
-      <window_info id="Messages" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32650602" sideWeight="0.5" order="7" side_tool="false" />
-      <window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="6" side_tool="false" />
-      <window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.24979524" sideWeight="0.66424245" order="1" side_tool="false" />
-      <window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="0" side_tool="false" />
-      <window_info id="Maven Projects" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="3" side_tool="false" />
-      <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.25426483" sideWeight="0.773494" order="0" side_tool="false" />
-      <window_info id="Dependency Viewer" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="false" />
-      <window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="5" side_tool="false" />
-      <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="2" side_tool="false" />
-      <window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="4" side_tool="false" />
-      <window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="0" side_tool="false" />
-      <window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="2" side_tool="false" />
-    </layout>
-  </component>
-  <component name="VcsManagerConfiguration">
-    <option name="OFFER_MOVE_TO_ANOTHER_CHANGELIST_ON_PARTIAL_COMMIT" value="true" />
-    <option name="CHECK_CODE_SMELLS_BEFORE_PROJECT_COMMIT" value="true" />
-    <option name="PERFORM_UPDATE_IN_BACKGROUND" value="false" />
-    <option name="PERFORM_COMMIT_IN_BACKGROUND" value="false" />
-    <option name="PERFORM_EDIT_IN_BACKGROUND" value="true" />
-    <option name="PERFORM_CHECKOUT_IN_BACKGROUND" value="true" />
-    <option name="PERFORM_ADD_REMOVE_IN_BACKGROUND" value="true" />
-    <option name="FORCE_NON_EMPTY_COMMENT" value="false" />
-    <option name="LAST_COMMIT_MESSAGE" value="Added quoting of some special characters in SQL export." />
-    <option name="OPTIMIZE_IMPORTS_BEFORE_PROJECT_COMMIT" value="false" />
-    <option name="REFORMAT_BEFORE_PROJECT_COMMIT" value="false" />
-    <option name="REFORMAT_BEFORE_FILE_COMMIT" value="false" />
-    <option name="FILE_HISTORY_DIALOG_COMMENTS_SPLITTER_PROPORTION" value="0.8" />
-    <option name="FILE_HISTORY_DIALOG_SPLITTER_PROPORTION" value="0.5" />
-    <option name="ACTIVE_VCS_NAME" />
-    <option name="UPDATE_GROUP_BY_PACKAGES" value="false" />
-    <option name="UPDATE_GROUP_BY_CHANGELIST" value="false" />
-    <option name="SHOW_FILE_HISTORY_AS_TREE" value="false" />
-    <option name="FILE_HISTORY_SPLITTER_PROPORTION" value="0.6" />
-    <MESSAGE value="Added help file for autosave feature. Added help button for autosave in the Preferences dialog." />
-    <MESSAGE value="Fixed bug in startup that could show warnings multiple times when loading from autosave files." />
-    <MESSAGE value="Added support for conditional blocks with multiple fields in export layouts. Such blocks need all fields to be present in order to give output." />
-    <MESSAGE value="Added documentation for multiple-field conditional blocks. Reorganized custom exports help file." />
-    <MESSAGE value="Fixed bug in installing a plugin directly from remote URL." />
-    <MESSAGE value="Changed RIS import so multiple abstract fields in an entry are concatenated." />
-    <MESSAGE value="Added quoting of some special characters in SQL export." />
-  </component>
-  <component name="XDebuggerManager">
-    <breakpoint-manager />
-  </component>
-  <component name="antWorkspaceConfiguration">
-    <option name="IS_AUTOSCROLL_TO_SOURCE" value="false" />
-    <option name="FILTER_TARGETS" value="false" />
-    <buildFile url="file://$PROJECT_DIR$/build.xml">
-      <antCommandLine value="" />
-      <runInBackground value="true" />
-      <targetFilters />
-      <treeView value="true" />
-      <verbose value="true" />
-      <viewClosedWhenNoErrors value="false" />
-    </buildFile>
-  </component>
-  <component name="editorHistoryManager">
-    <entry file="file://$PROJECT_DIR$/src/help/CustomExports.html">
-      <provider selected="true" editor-type-id="text-editor">
-        <state line="191" column="33" selection-start="8328" selection-end="8328" vertical-scroll-proportion="0.0">
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/src/java/net/sf/jabref/external/PushToApplicationButton.java">
-      <provider selected="true" editor-type-id="text-editor">
-        <state line="92" column="30" selection-start="3703" selection-end="3703" vertical-scroll-proportion="0.0">
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/src/java/net/sf/jabref/export/layout/LayoutEntry.java">
-      <provider selected="true" editor-type-id="text-editor">
-        <state line="166" column="14" selection-start="5364" selection-end="5364" vertical-scroll-proportion="0.0">
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/src/txt/TODO">
-      <provider selected="true" editor-type-id="text-editor">
-        <state line="14" column="33" selection-start="466" selection-end="466" vertical-scroll-proportion="0.0">
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/src/java/net/sf/jabref/plugin/ManagePluginsDialog.java">
-      <provider selected="true" editor-type-id="text-editor">
-        <state line="231" column="12" selection-start="9064" selection-end="9064" vertical-scroll-proportion="0.0">
-          <folding>
-            <marker date="1245172555000" expanded="true" signature="8124:8157" placeholder="{...}" />
-          </folding>
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/src/java/net/sf/jabref/net/URLDownload.java">
-      <provider selected="true" editor-type-id="text-editor">
-        <state line="55" column="16" selection-start="1397" selection-end="1397" vertical-scroll-proportion="0.0">
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/src/java/net/sf/jabref/plugin/PluginInstaller.java">
-      <provider selected="true" editor-type-id="text-editor">
-        <state line="297" column="22" selection-start="12576" selection-end="12576" vertical-scroll-proportion="0.0">
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/src/java/net/sf/jabref/imports/RisImporter.java">
-      <provider selected="true" editor-type-id="text-editor">
-        <state line="158" column="39" selection-start="5957" selection-end="5957" vertical-scroll-proportion="0.0">
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/src/java/net/sf/jabref/JabRef.java">
-      <provider selected="true" editor-type-id="text-editor">
-        <state line="813" column="32" selection-start="34953" selection-end="34953" vertical-scroll-proportion="0.0">
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/src/resource/JabRef_en.properties">
-      <provider selected="true" editor-type-id="text-editor">
-        <state line="2114" column="0" selection-start="69411" selection-end="69411" vertical-scroll-proportion="0.0">
-          <folding />
-        </state>
-      </provider>
-      <provider editor-type-id="ResourceBundle">
-        <state />
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/src/help/Autosave.html">
-      <provider selected="true" editor-type-id="text-editor">
-        <state line="14" column="16" selection-start="770" selection-end="770" vertical-scroll-proportion="0.0">
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/src/help/Contents.html">
-      <provider selected="true" editor-type-id="text-editor">
-        <state line="29" column="49" selection-start="1140" selection-end="1140" vertical-scroll-proportion="0.0">
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/src/help/BaseFrameHelp.html">
-      <provider selected="true" editor-type-id="text-editor">
-        <state line="0" column="0" selection-start="0" selection-end="4665" vertical-scroll-proportion="-0.0">
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/src/java/net/sf/jabref/sql/SQLutil.java">
-      <provider selected="true" editor-type-id="text-editor">
-        <state line="1026" column="20" selection-start="36310" selection-end="36310" vertical-scroll-proportion="0.0">
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/build.xml">
-      <provider selected="true" editor-type-id="text-editor">
-        <state line="49" column="46" selection-start="2179" selection-end="2179" vertical-scroll-proportion="-12.954545">
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/src/txt/CHANGELOG">
-      <provider selected="true" editor-type-id="text-editor">
-        <state line="27" column="13" selection-start="1676" selection-end="1676" vertical-scroll-proportion="0.6958763">
-          <folding />
-        </state>
-      </provider>
-    </entry>
-  </component>
-</project>
-
diff --git a/build.number b/build.number
index 3827efa..9f34c41 100644
--- a/build.number
+++ b/build.number
@@ -1,3 +1,3 @@
 #Build Number for ANT. Do not edit!
-#Mon Jun 22 19:37:12 CEST 2009
-build.number=67
+#Sun Nov 01 16:45:05 CET 2009
+build.number=40
diff --git a/build.xml b/build.xml
index e6f9b7c..5a7bd0a 100644
--- a/build.xml
+++ b/build.xml
@@ -22,8 +22,8 @@
    Compiler: Ant
    Authors:  Joerg K. Wegner, wegnerj at informatik.uni-tuebingen.de
              Morten O. Alver
-   Version:  $Revision: 2997 $
-             $Date: 2009-05-11 17:55:23 +0200 (Mon, 11 May 2009) $
+   Version:  $Revision: 3131 $
+             $Date: 2009-11-01 15:46:02 +0100 (Sun, 01 Nov 2009) $
              $Author: mortenalver $
 
    modified:
@@ -47,7 +47,7 @@
      +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-->
 
 	<!-- some version information -->
-	<property name="jabref.version" value="2.5" />
+	<property name="jabref.version" value="2.6b2" />
 	<property name="jabref.placeholder.version" value="@version@" />
 	<!-- used by replace task -->
 
@@ -180,7 +180,7 @@
 	<!-- Compiles project excluding tests -->
 	<target name="compile" depends="generate">
 		<mkdir dir="${build.classes}" />
-		<javac debug="off" deprecation="on" destdir="${build.classes}" source="1.5" target="1.5">
+		<javac debug="on" deprecation="on" destdir="${build.classes}" source="1.5" target="1.5">
 			<src path="${java.dir}" />
 			<exclude name="tests/**" />
 			<exclude name="**/JabRefMain.java" />
diff --git a/src/Jabref.iml b/src/Jabref_trunk.iml
similarity index 50%
rename from src/Jabref.iml
rename to src/Jabref_trunk.iml
index cab9dcf..5049fe7 100644
--- a/src/Jabref.iml
+++ b/src/Jabref_trunk.iml
@@ -19,33 +19,6 @@
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$MODULE_DIR$/../lib/plugin/jpf-boot.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/../lib/plugin/JPFCodeGenerator.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/../lib/plugin/commons-logging.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
           <root url="jar://$MODULE_DIR$/../lib/plugin/jpf.jar!/" />
         </CLASSES>
         <JAVADOC />
@@ -64,34 +37,7 @@
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$MODULE_DIR$/../lib/glazedlists-1.7.0_java15.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/../lib/langproper.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/../lib/PDFBox-0.7.3-dev-reduced.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/../lib/antlr-3.0b5.jar!/" />
+          <root url="jar://$MODULE_DIR$/../lib/plugin/commons-logging.jar!/" />
         </CLASSES>
         <JAVADOC />
         <SOURCES />
@@ -100,7 +46,7 @@
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$MODULE_DIR$/../lib/ccl.jar!/" />
+          <root url="jar://$MODULE_DIR$/../lib/plugin/jpf-boot.jar!/" />
         </CLASSES>
         <JAVADOC />
         <SOURCES />
@@ -109,7 +55,7 @@
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$MODULE_DIR$/../lib/javancss.jar!/" />
+          <root url="jar://$MODULE_DIR$/../lib/plugin/JPFCodeGenerator.jar!/" />
         </CLASSES>
         <JAVADOC />
         <SOURCES />
@@ -118,7 +64,7 @@
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$MODULE_DIR$/../lib/jaxen-core-1.0-fcs.jar!/" />
+          <root url="jar://$MODULE_DIR$/../lib/substance-4.1.jar!/" />
         </CLASSES>
         <JAVADOC />
         <SOURCES />
@@ -136,7 +82,7 @@
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$MODULE_DIR$/../lib/jdom-1.0b8.jar!/" />
+          <root url="jar://$MODULE_DIR$/../lib/JempBox-0.2.0.jar!/" />
         </CLASSES>
         <JAVADOC />
         <SOURCES />
@@ -154,78 +100,6 @@
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$MODULE_DIR$/../lib/saxpath-1.0-fcs.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/../lib/antlr.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/../lib/EndNote.zip!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/../lib/log4j-1.2.9.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/../lib/jalopy-1.0b10.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/../lib/jarbundler-1.4.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/../lib/substance-4.1.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/../lib/vizant.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
           <root url="jar://$MODULE_DIR$/../lib/spin.jar!/" />
         </CLASSES>
         <JAVADOC />
@@ -235,43 +109,7 @@
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$MODULE_DIR$/../lib/mysql-connector-java-5.0.7-bin.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/../lib/jalopy-ant-0.6.1.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/../lib/sax-2.0.1.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/../lib/junit.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/../lib/log4j-1.2.6.jar!/" />
+          <root url="jar://$MODULE_DIR$/../lib/antlr.jar!/" />
         </CLASSES>
         <JAVADOC />
         <SOURCES />
@@ -280,7 +118,7 @@
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$MODULE_DIR$/../lib/oro-2.0.6.jar!/" />
+          <root url="jar://$MODULE_DIR$/../lib/glazedlists-1.7.0_java15.jar!/" />
         </CLASSES>
         <JAVADOC />
         <SOURCES />
@@ -289,7 +127,7 @@
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$MODULE_DIR$/../lib/aelfred-1.2.jar!/" />
+          <root url="jar://$MODULE_DIR$/../lib/PDFBox-0.7.3-dev-reduced.jar!/" />
         </CLASSES>
         <JAVADOC />
         <SOURCES />
@@ -298,7 +136,7 @@
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$MODULE_DIR$/../lib/jaxp-1.2.jar!/" />
+          <root url="jar://$MODULE_DIR$/../lib/antlr-3.0b5.jar!/" />
         </CLASSES>
         <JAVADOC />
         <SOURCES />
@@ -316,16 +154,7 @@
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$MODULE_DIR$/../lib/JempBox-0.2.0.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/../lib/pmd-2.0.jar!/" />
+          <root url="jar://$MODULE_DIR$/../lib/mysql-connector-java-5.0.7-bin.jar!/" />
         </CLASSES>
         <JAVADOC />
         <SOURCES />
diff --git a/src/help/About.html b/src/help/About.html
index 1246bc9..92d8cc8 100755
--- a/src/help/About.html
+++ b/src/help/About.html
@@ -35,6 +35,7 @@
         Joerg K. Wegner,
         Michael Wrighton,
         Egon Willighagen,
+	Wenbo Yang,
         Jörg Zieren</p>
 
         <h2>Contributions from:</h2>
diff --git a/src/help/BaseFrameHelp.html b/src/help/BaseFrameHelp.html
index b83d338..8522fdd 100755
--- a/src/help/BaseFrameHelp.html
+++ b/src/help/BaseFrameHelp.html
@@ -27,25 +27,20 @@
         keys.</li>
 
         <li>The table is sorted according to a set of fields of
-        your choosing. The default sort order is set up in
+        your choosing. The default sort order can be set up in
         <strong>Preferences -> Entry table</strong>, but to
-        quickly change the order, click the header of a column to
+        more quickly change the order, click the header of a column to
         set it as the primary sort criterion, or reverse the
         sorting if it is already set. Another click will deselect
         the column as sorting criterion. Hold down <b>CONTROL</b>
         and click a column to add, reverse or remove it as a
         sub-criterion after the primary column. You can add an
-        arbitrary number of sub-criteria.</li>
+        arbitrary number of sub-criteria, but only three levels
+        will be stored for the next time you start JabRef.</li>
 
         <li>Adjust the width of each column by dragging the borders
         between their headers.</li>
 
-        <li>In the <strong>Preferences</strong> dialog, toggle
-        whether the table should be resized to fit the window.
-        Enable this to ensure visibility of the whole table, and
-        disable it to make room for displaying more
-        information.</li>
-
         <li>
             Color codes can be toggled in the
             <strong>Preferences</strong> dialog, and they help you
@@ -85,7 +80,7 @@
     types.</p>
 
     <p>When a new entry is added, by default an
-    <a href="EntryEditorHelp.html">editor dialog</a> for the entry
+    <a href="EntryEditorHelp.html">entry editor</a> for the entry
     will be opened. This behaviour can be toggled in the
     <strong>Preferences</strong> dialog.</p>
 
@@ -96,10 +91,10 @@
     <h2>Editing an entry</h2>
 
     <p>To open an
-    <a href="EntryEditorHelp.html">editor dialog</a> for an
+    <a href="EntryEditorHelp.html">entry editor</a> for an
     existing entry, simply double-click anywhere on the appropriate
-    line will open the <a href="EntryEditorHelp.html">editor
-    dialog</a> (or select the entry and press ENTER).</p>
+    line will open the <a href="EntryEditorHelp.html">entry editor</a>
+    (or select the entry and press ENTER).</p>
 
     <h2>Referencing a <em>bibtex</em> string in a field</h2>
 
diff --git a/src/help/CustomExports.html b/src/help/CustomExports.html
index c7c2ba1..c8d8694 100644
--- a/src/help/CustomExports.html
+++ b/src/help/CustomExports.html
@@ -303,6 +303,11 @@
         <code>\format[CurrentDate]{yyyy.MM.dd}</code> will give the
         date only, e.g. 2005.11.30.</li>
 
+        <li><code>Default</code> : takes a single argument, which serves as a default value.
+        If the string to format is non-empty, it is output without changes. If it is empty,
+        the default value is output. For instance, <code>\format[Default(unknown)]{\year}</code>
+        will output the entry's year if set, and "unknown" if no year is set.</li>
+
         <li><code>FileLink(filetype)</code> : if no argument is given, this formatter outputs
         the first external file link encoded in the field. To work, the formatter must
         be supplied with the contents of the "file" field.
diff --git a/src/help/EntryEditorHelp.html b/src/help/EntryEditorHelp.html
index 734b55c..9120ace 100755
--- a/src/help/EntryEditorHelp.html
+++ b/src/help/EntryEditorHelp.html
@@ -19,7 +19,7 @@
 
     <p>You can fully customize which fields should be regarded as
     required and optional for each type of entry, and which fields
-    appear in the General fields tab. See
+    appear in the General fields tabs. See
     <a href="CustomEntriesHelp.html">Customizing entry types</a>
     for more information about this.</p>
 
@@ -64,18 +64,14 @@
     unknown to JabRef, these will be visible in the source
     panel.</p>
 
-    <p><strong>Tip:</strong> the <i>pdf</i> and <i>url</i> fields
-    support Drag and Drop operations. You can drop there an url
-    from your browser. either a link to a pdf file (that JabRef can
-    download for you) or you can keep the link.</p>
-
     <h2>Field consistency checking</h2>
 
     <p>When the contents of a field
     is changed, JabRef checks if the new contents are acceptable.
     For field types that are used by <em>bibtex</em>, the contents
     are checked with respect to the use of the '#' character. The
-    hash symbol is <em>only</em> to be used in pairs, wrapping the
+    hash symbol is <em>only</em> to be used in pairs (except in escaped
+    form, '\#'), wrapping the
     name of a <em>bibtex</em> string that is referenced. Note that
     JabRef does not check if the referenced string actually exists
     (this is not trivial, since the <em>bibtex</em> style you use
diff --git a/src/help/RevisionHistory.html b/src/help/RevisionHistory.html
index 87ce748..ced61f5 100644
--- a/src/help/RevisionHistory.html
+++ b/src/help/RevisionHistory.html
@@ -5,6 +5,107 @@
 
   <h1>Revision history</h1>
 
+    <h3>Version 2.6beta 2</h3>
+    <ul>
+    <li>Added export formatter "Default" which takes a single argument. Outputs the string to format
+      unchanged if it is non-empty, otherwise outputs the argument.</li>
+    <li>Added option under Options -> Preferences -> General for disabling the strict enforcing of
+      correct BibTeX keys. Disabling this makes it possible to use e.g. umlaut characters in keys.</li>
+    <li>Modified launcher script for Windows installer to give higher heap size limit.</li>
+    <li>Improved autocompletion. All fields with autocompletion which have content selectors will now
+      autocomplete on content selector values. For the "journal" field, the autocompleter will now
+      additionally use entries from the current journal abbreviations list, and will also complete
+      on the entire field up to the cursor rather than just looking at the last word only.</li>
+    <li>Added support for postformatter in Layout. The postformatter will be run after
+      the formatters called from a layout.</li>
+    <li>Improved group autogeneration. Added option to generate groups based on author or editor
+      last names. Autogenerated groups are now alphabetized.</li>
+    <li>Modified Endnote export filter so "--" gets converted to "-" in the "pages" field.</li>
+    <li>Changed keyword groups so they will match on whole words only. E.g. a keyword group for the
+      keyword "can" will no longer match the keyword "scanner".</li>
+    <li>Improved entry type determination and author parsing for some varieties of CSA files.</li>
+    <li>Minor change to Harvard RTF export. Added space after "ed.", and added editor to output for
+      inbook entries.</li>
+    <li>Set limit to the number of displayed characters in group names in groups tree in order to
+      avoid group panel width problems.</li>
+    <li>Changed file link handling so all remote links classified as URL can be opened through
+      the browser. Setting a different file type manually makes JabRef call a remote link using
+      the handler application instead.</li>
+    <li>Modified Endnote/refer import filter to strip "doi:" from the %R field.</li>
+    <li>Modified HTML conversion so single newline is displayed in the preview (and HTML exports) as
+      <br>, while multiple newlines are displayed as <p>.
+    <li>Fixed bug: switching entry editor between entries of different type may result in switching
+      of entry editor tabs.</li>
+    <li>Fixed bug: adding external file link leads to relative path from root directory if file
+      directory is set to an empty string.</li>
+    <li>Fixed error message when a # in a BibTeX string prevents saving. No longer states that the
+      problem is in an entry, but specifies that it is in a string.</li>
+    <li>Fixed bug: ODS export doesn't resolve BibTeX strings.</li>
+    <li>Fixed bug: content selector for "editor" field uses "," instead of " and " as delimiter.</li>
+    <li>Fixed bug: editing source doesn't allow change of entry type.</li>
+    <li>RTFChars formatter now converts --- to \emdash and -- to \endash.</li>
+    </ul>
+    
+    <h3>Version 2.6beta</h3>
+
+    <ul>
+        <li>Added pages information to several entry types in Endnote export.</li>
+        <li>Modified LastPage formatter so it returns the number when only the number of pages is given.</li>
+        <li>Modified search algorithms so LaTeX commands are removed before search. For instance, this
+            means that the value "test \textit{case}" now matches the search string "test case".</li>
+        <li>Changed default table font family to "SansSerif".</li>
+        <li>Can now create lock file while writing a bib file. The lock file is checked before
+            saving, and before scanning an externally changed file, in order to avoid reading an
+            unfinished file.</li>
+        <li>Added support for dragging a file link from the file column to another application.</li>
+        <li>Added toolbar button and shortcut (Alt-F) in entry editor for autosetting file links.</li>
+        <li>Improved ISI import filter so DOI information is included.</li>
+        <li>Fixed bug: metadata changes would not be detected as external changes to a database.</li>
+        <li>Fixed bug: when accepting external changes and not saving before new changes are
+            detected, the previously accepted changes would also be listed.</li>
+        <li>Fixed bug in Scifinder import where an empty Inventor field could overwrite the
+            author field.</li>
+        <li>Fixed bug in autocompleter. Current suggested completion would be added to the field
+            if the user closed the entry editor or mouse clicked on another field.</li>
+        <li>Fixed problem with exporting to some MySql versions. Patch by François Dorin.</li>
+        <li>Fixed bug in handling of LaTeX character sequences - now sequences with = as command
+            character (e.g. "\={A}") are recognized.</li>
+        <li>Fixed bug: gray out / hide setting in groups panel is overridden on startup
+            by search mode selection. Added separate prefs key for the groups setting.
+            Fix suggested by Igor L. Chernyavsky.</li>
+        <li>Fixed bug: cookie manager installed by Download button in file field editor throws
+            an exception when trying to fetch from Medline.</li>
+        <li>Fixed bug: temporary files don't get deleted on shutdown.</li>
+        <li>Disabled table column reordering in import inspection window, since a user reported
+            problems when using this.</li>
+        <li>Changed years from 2008 to 2009 in splash image.</li>
+    </ul>
+    <h3>Version 2.5 (June 22nd, 2009)</h3>
+    <ul>
+        <li>Modified export layout procedure so missing formatters can be reported in the error
+          output. Export now succeeds with warnings added where formatters are missing.</li>
+        <li>Conditional blocks (\begin{field}...\end{field}) in layout files can now be given a
+          semicolon-separated list of fields as argument. All fields must then be set for output
+          to be given.</li>
+        <li>Changed RIS import so multiple abstract fields in an entry are concatenated.</li>
+        <li>Added quoting of some special characters in SQL export, based on Kyle Crabtree's patch.</li>
+        <li>Fixed bug in MS Office 2007 XML export - editor names missing.</li>
+        <li>Fixed bug in plugin manager that prevented the "Download plugin" button from working.</li>
+        <li>Fixed bug in plugin manager routine that checks for installed versions of a plugin.</li>
+        <li>Fixed bug in startup that could show warnings multiple times when loading
+          from autosave files.</li>
+    </ul>
+    <h3>Version 2.5beta 2 (May 19th, 2009)</h3>
+    <ul>
+        <li>Plugin manager now handles plugin versions correctly based on the version number in their
+          plugin.xml file.</li>
+        <li>Added formatter "Number" that outputs a sequence number for the current entry in the current
+          export operation. This formatter can be used to produce a numbered list of entries.</li>
+        <li>Added autosave feature.</li>
+        <li>Fixed bug in file link handling in BibTeXML export.</li>
+        <li>Improved handling of patents in Scifinder import.</li>
+    </ul>
+
     <h3>Version 2.5beta (April 21st, 2009)</h3>
 
     <ul>
@@ -12,7 +113,7 @@
       <li> Added simple plugin manager.</li>
       <li> Added ~/.jabref/plugins as user-specific plugin directory.</li>
       <li> Added \r marker to WrapFileLinks formatter that outputs file links without expanding relative links.</li>
-      <li> Added [authorAlpha] key marker that formats authors according to the "alpha" BibTeX style. Patch submitted by Oliver Kopp.</li>
+      <li> Added [authorsAlpha] key marker that formats authors according to the "alpha" BibTeX style. Patch submitted by Oliver Kopp.</li>
       <li> Table sort order set by clicking and Ctrl-clicking table columns is now immediately set as default sort order in preferences.</li>
       <li> Changed LyX pipe setting so it works whether ".in" is included or omitted.</li>
       <li> Modified ISI importer so the words "of", "and" and "the" will not be capitalized in the title, journal or publisher fields.</li>
@@ -63,7 +164,6 @@
       <li>Fixed bug 2157664: Current edit is now treated as an undoable edit in itself.</li>
     </ul>
 
-
     <h3>Version 2.4.1 (October 8th, 2008)</h3>
 
       <ul>
diff --git a/src/help/da/About.html b/src/help/da/About.html
index a00300a..fbf40c4 100755
--- a/src/help/da/About.html
+++ b/src/help/da/About.html
@@ -37,6 +37,7 @@
         Joerg K. Wegner,
         Michael Wrighton,
         Egon Willighagen,
+	Wenbo Yang,
         Jörg Zieren</p>
 
         <h2>Bidrag fra:</h2>
diff --git a/src/help/de/About.html b/src/help/de/About.html
index 721cf8e..5bf8769 100644
--- a/src/help/de/About.html
+++ b/src/help/de/About.html
@@ -35,6 +35,7 @@
         Joerg K. Wegner,
         Michael Wrighton,
         Egon Willighagen,
+	Wenbo Yang,
         Jörg Zieren</p>
 
         <h2>Beiträge von:</h2>
diff --git a/src/help/fr/About.html b/src/help/fr/About.html
index a4d36d1..2a3ab4c 100644
--- a/src/help/fr/About.html
+++ b/src/help/fr/About.html
@@ -35,6 +35,7 @@
         Joerg K. Wegner,
         Michael Wrighton,
         Egon Willighagen,
+	Wenbo Yang,
         Jörg Zieren</p>
 
         <h2>Contributions de :</h2>
diff --git a/src/help/fr/BaseFrameHelp.html b/src/help/fr/BaseFrameHelp.html
index b005647..47351c4 100644
--- a/src/help/fr/BaseFrameHelp.html
+++ b/src/help/fr/BaseFrameHelp.html
@@ -34,10 +34,10 @@
         flèches du clavier.</li>
 
         <li>Le tableau est trié selon une série de
-        champs de votre choix. L'ordre de tri par défaut est
+        champs de votre choix. L'ordre de tri par défaut peut être
         configuré dans <strong>Options ->
         Préférences -> Table des
-        entrées</strong> mais pour changer rapidement cet
+        entrées</strong> mais pour changer plus rapidement cet
         ordre, cliquez l'entête d'une colonne pour la
         définir comme critère de tri principal, ou
         inverser l'ordre du tri s'il est déjà
@@ -47,19 +47,13 @@
         enfoncée et cliquez sur un autre entête de
         colonne pour l'ajouter, l'inverser ou l'enlever comme
         critère de tri auxiliaire. Vous pouvez ajouter un
-        nombre arbitraire de critères auxiliaires.</li>
+        nombre arbitraire de critères auxiliaires, mais uniquement
+        trois niveaux seront mémorisés pour
+        le démarrage suivant de JabRef.</li>
 
         <li>Vous pouvez ajuster la largeur des colonnes en faisant
         glisser les limites entre les entêtes.</li>
 
-        <li>Dans la fenêtre de dialogue
-        <strong>Préférences</strong>, choisissez si
-        le tableau doit être redimensionné pour
-        s'ajuster à la fenêtre. Sélectionnez
-        cette option pour toujours voir l'ensemble du tableau, et
-        désélectionnez là pour permettre
-        l'affichage de plus d'informations.</li>
-
         <li>
             Les codes de couleurs vous aident à visualiser
             l'état de votre base de données. Les
@@ -109,8 +103,8 @@
     les types les plus courants.</p>
 
     <p>Lorsqu'une nouvelle entrée est ajoutée, par
-    défaut, une <a href="EntryEditorHelp.html">fenêtre
-    d'édition</a> s'ouvre. Ce comportement peut être
+    défaut,  l'<a href="EntryEditorHelp.html">éditeur
+    d'entrées</a> s'ouvre. Ce comportement peut être
     modifié dans la fenêtre de dialogue
     <strong>Préférences</strong>.</p>
 
@@ -121,12 +115,11 @@
 
     <h2>Editer une entrée</h2>
 
-    <p>Pour ouvrir la
-    <a href="EntryEditorHelp.html">fenêtre
-    d'édition</a> sur une entrée existante,
+    <p>Pour ouvrir l'<a href="EntryEditorHelp.html">éditeur
+    d'entrées</a> sur une entrée existante,
     double-cliquez simplement sur la ligne correspondant à
     l'entrée (ou appuyez sur ENTREE après avoir
-    sélectionner l'entrée).</p>
+    sélectionné l'entrée).</p>
 
     <h2>Référencer une chaîne <em>BibTeX</em>
     dans un champ</h2>
diff --git a/src/help/fr/CustomExports.html b/src/help/fr/CustomExports.html
index 54b364d..39e0685 100644
--- a/src/help/fr/CustomExports.html
+++ b/src/help/fr/CustomExports.html
@@ -349,6 +349,15 @@
         date peut-être adapté. Par exemple,
         <code>\format[CurrentDate]{yyyy.MM.dd}</code> renverra
         uniquement la date, comme par exemple 2005.11.30.</li>
+        
+        <li><code>Default</code> : prend un seul argument, qui sert comme
+        valeur par défaut. Si la chaîne à formatter
+        n'est pas vide, elle est renvoyée sans changement.
+        Si elle est vide, la valeur par défaut est renvoyée.
+        Par exemple,
+        <code>\format[Default(unknown)]{\year}</code>
+        renverra l'année de l'entrée si elle existe,
+        et "unknown" si l'année n'est pas précisée.</li>
        
         <li><code>FileLink(TypeDeFichier)</code> : sans argument, ce formateur renvoie
         le premier lien apparaissant dans le champ. Pour fonctionner, ce formateur doit
diff --git a/src/help/fr/EntryEditorHelp.html b/src/help/fr/EntryEditorHelp.html
index 48c7f24..d448afe 100644
--- a/src/help/fr/EntryEditorHelp.html
+++ b/src/help/fr/EntryEditorHelp.html
@@ -78,10 +78,6 @@
     d'utiliser les quatre autres onglets, vous devez cocher cette
     option.</p>
 
-    <p><strong>Astuce :</strong> Si votre base contient des
-    champs que JabRef ne connaît pas, ils seront visibles
-    dans l'onglet <em>Source BibTeX</em>.</p>
-
     <p><strong>Astuce :</strong> les champs <i>pdf</i> et
     <i>url</i> supportent les opérations de
     Glisser-Déplacer. Vous pouvez faire glisser une url
@@ -97,7 +93,8 @@
     Pour les champs qui sont utilisés par <em>BibTeX</em>,
     le contenu est vérifié par rapport à
     l'utilisation du caractére '#'. Le symbole dièse
-    doit <em>toujours</em> être utilisé par paires,
+    doit <em>toujours</em> être utilisé par paires
+    (excepté pour la forme d'échappement '\#'),
     encadrant le nom d'une chaîne <em>BibTeX</em> existante.
     Notez que JabRef ne vérifie pas si la chaîne
     <em>BibTeX</em> est vraiment définie (ce n'est pas
diff --git a/src/help/fr/RevisionHistory.html b/src/help/fr/RevisionHistory.html
index 59bf77b..05e95e1 100644
--- a/src/help/fr/RevisionHistory.html
+++ b/src/help/fr/RevisionHistory.html
@@ -5,6 +5,65 @@
 
   <h1>Historique des révisions (en anglais)</h1>
 
+    <h3>Version 2.6beta</h3>
+
+    <ul>
+        <li>Added pages information to several entry types in Endnote export.</li>
+        <li>Modified LastPage formatter so it returns the number when only the number of pages is given.</li>
+        <li>Modified search algorithms so LaTeX commands are removed before search. For instance, this
+            means that the value "test \textit{case}" now matches the search string "test case".</li>
+        <li>Changed default table font family to "SansSerif".</li>
+        <li>Can now create lock file while writing a bib file. The lock file is checked before
+            saving, and before scanning an externally changed file, in order to avoid reading an
+            unfinished file.</li>
+        <li>Added support for dragging a file link from the file column to another application.</li>
+        <li>Added toolbar button and shortcut (Alt-F) in entry editor for autosetting file links.</li>
+        <li>Improved ISI import filter so DOI information is included.</li>
+        <li>Fixed bug: metadata changes would not be detected as external changes to a database.</li>
+        <li>Fixed bug: when accepting external changes and not saving before new changes are
+            detected, the previously accepted changes would also be listed.</li>
+        <li>Fixed bug in Scifinder import where an empty Inventor field could overwrite the
+            author field.</li>
+        <li>Fixed bug in autocompleter. Current suggested completion would be added to the field
+            if the user closed the entry editor or mouse clicked on another field.</li>
+        <li>Fixed problem with exporting to some MySql versions. Patch by François Dorin.</li>
+        <li>Fixed bug in handling of LaTeX character sequences - now sequences with = as command
+            character (e.g. "\={A}") are recognized.</li>
+        <li>Fixed bug: gray out / hide setting in groups panel is overridden on startup
+            by search mode selection. Added separate prefs key for the groups setting.
+            Fix suggested by Igor L. Chernyavsky.</li>
+        <li>Fixed bug: cookie manager installed by Download button in file field editor throws
+            an exception when trying to fetch from Medline.</li>
+        <li>Fixed bug: temporary files don't get deleted on shutdown.</li>
+        <li>Disabled table column reordering in import inspection window, since a user reported
+            problems when using this.</li>
+        <li>Changed years from 2008 to 2009 in splash image.</li>
+    </ul>
+    <h3>Version 2.5 (June 22nd, 2009)</h3>
+    <ul>
+        <li>Modified export layout procedure so missing formatters can be reported in the error
+          output. Export now succeeds with warnings added where formatters are missing.</li>
+        <li>Conditional blocks (\begin{field}...\end{field}) in layout files can now be given a
+          semicolon-separated list of fields as argument. All fields must then be set for output
+          to be given.</li>
+        <li>Changed RIS import so multiple abstract fields in an entry are concatenated.</li>
+        <li>Added quoting of some special characters in SQL export, based on Kyle Crabtree's patch.</li>
+        <li>Fixed bug in MS Office 2007 XML export - editor names missing.</li>
+        <li>Fixed bug in plugin manager that prevented the "Download plugin" button from working.</li>
+        <li>Fixed bug in plugin manager routine that checks for installed versions of a plugin.</li>
+        <li>Fixed bug in startup that could show warnings multiple times when loading
+          from autosave files.</li>
+    </ul>
+    <h3>Version 2.5beta 2 (May 19th, 2009)</h3>
+    <ul>
+        <li>Plugin manager now handles plugin versions correctly based on the version number in their
+          plugin.xml file.</li>
+        <li>Added formatter "Number" that outputs a sequence number for the current entry in the current
+          export operation. This formatter can be used to produce a numbered list of entries.</li>
+        <li>Added autosave feature.</li>
+        <li>Fixed bug in file link handling in BibTeXML export.</li>
+        <li>Improved handling of patents in Scifinder import.</li>
+    </ul>
 
     <h3>Version 2.5beta (April 21st, 2009)</h3>
 
@@ -13,7 +72,7 @@
       <li> Added simple plugin manager.</li>
       <li> Added ~/.jabref/plugins as user-specific plugin directory.</li>
       <li> Added \r marker to WrapFileLinks formatter that outputs file links without expanding relative links.</li>
-      <li> Added [authorAlpha] key marker that formats authors according to the "alpha" BibTeX style. Patch submitted by Oliver Kopp.</li>
+      <li> Added [authorsAlpha] key marker that formats authors according to the "alpha" BibTeX style. Patch submitted by Oliver Kopp.</li>
       <li> Table sort order set by clicking and Ctrl-clicking table columns is now immediately set as default sort order in preferences.</li>
       <li> Changed LyX pipe setting so it works whether ".in" is included or omitted.</li>
       <li> Modified ISI importer so the words "of", "and" and "the" will not be capitalized in the title, journal or publisher fields.</li>
@@ -64,7 +123,6 @@
       <li>Fixed bug 2157664: Current edit is now treated as an undoable edit in itself.</li>
     </ul>
 
-
     <h3>Version 2.4.1 (October 8th, 2008)</h3>
 
       <ul>
@@ -1204,4 +1262,4 @@
 
   </body>
 
-</html>
+</html>
\ No newline at end of file
diff --git a/src/images/absIcon.png b/src/images/absIcon.png
new file mode 100644
index 0000000..f249fda
Binary files /dev/null and b/src/images/absIcon.png differ
diff --git a/src/images/add.png b/src/images/add.png
new file mode 100644
index 0000000..6b636fe
Binary files /dev/null and b/src/images/add.png differ
diff --git a/src/images/autumn.png b/src/images/autumn.png
new file mode 100644
index 0000000..77b7590
Binary files /dev/null and b/src/images/autumn.png differ
diff --git a/src/images/completeItem.png b/src/images/completeItem.png
new file mode 100644
index 0000000..5eeadc7
Binary files /dev/null and b/src/images/completeItem.png differ
diff --git a/src/images/contents.png b/src/images/contents.png
new file mode 100644
index 0000000..6e44fa7
Binary files /dev/null and b/src/images/contents.png differ
diff --git a/src/images/database_connect.png b/src/images/database_connect.png
new file mode 100644
index 0000000..3a11197
Binary files /dev/null and b/src/images/database_connect.png differ
diff --git a/src/images/database_save.png b/src/images/database_save.png
new file mode 100644
index 0000000..44c06dd
Binary files /dev/null and b/src/images/database_save.png differ
diff --git a/src/images/document-save-as.png b/src/images/document-save-as.png
new file mode 100644
index 0000000..7a1591f
Binary files /dev/null and b/src/images/document-save-as.png differ
diff --git a/src/images/document-save.png b/src/images/document-save.png
new file mode 100644
index 0000000..0311e47
Binary files /dev/null and b/src/images/document-save.png differ
diff --git a/src/images/doismall.png b/src/images/doismall.png
new file mode 100644
index 0000000..3c9595b
Binary files /dev/null and b/src/images/doismall.png differ
diff --git a/src/images/duplicate.png b/src/images/duplicate.png
new file mode 100644
index 0000000..5599a18
Binary files /dev/null and b/src/images/duplicate.png differ
diff --git a/src/images/edit-copy.png b/src/images/edit-copy.png
new file mode 100644
index 0000000..efec317
Binary files /dev/null and b/src/images/edit-copy.png differ
diff --git a/src/images/edit-cut.png b/src/images/edit-cut.png
new file mode 100644
index 0000000..7e750c9
Binary files /dev/null and b/src/images/edit-cut.png differ
diff --git a/src/images/edit-delete.png b/src/images/edit-delete.png
new file mode 100644
index 0000000..0ac3589
Binary files /dev/null and b/src/images/edit-delete.png differ
diff --git a/src/images/edit-find.png b/src/images/edit-find.png
new file mode 100644
index 0000000..b98e348
Binary files /dev/null and b/src/images/edit-find.png differ
diff --git a/src/images/edit-paste.png b/src/images/edit-paste.png
new file mode 100644
index 0000000..577e9c2
Binary files /dev/null and b/src/images/edit-paste.png differ
diff --git a/src/images/edit-redo.png b/src/images/edit-redo.png
new file mode 100644
index 0000000..712a8ee
Binary files /dev/null and b/src/images/edit-redo.png differ
diff --git a/src/images/edit-undo.png b/src/images/edit-undo.png
new file mode 100644
index 0000000..4652df0
Binary files /dev/null and b/src/images/edit-undo.png differ
diff --git a/src/images/editor.png b/src/images/editor.png
new file mode 100644
index 0000000..a653bfe
Binary files /dev/null and b/src/images/editor.png differ
diff --git a/src/images/emacs.png b/src/images/emacs.png
new file mode 100644
index 0000000..6b76f52
Binary files /dev/null and b/src/images/emacs.png differ
diff --git a/src/images/emblem-web-small.png b/src/images/emblem-web-small.png
new file mode 100644
index 0000000..3d81a37
Binary files /dev/null and b/src/images/emblem-web-small.png differ
diff --git a/src/images/emblem-web.png b/src/images/emblem-web.png
new file mode 100644
index 0000000..49f7290
Binary files /dev/null and b/src/images/emblem-web.png differ
diff --git a/src/images/fileclose.png b/src/images/fileclose.png
new file mode 100644
index 0000000..033326f
Binary files /dev/null and b/src/images/fileclose.png differ
diff --git a/src/images/fileclose2.png b/src/images/fileclose2.png
new file mode 100644
index 0000000..c1e5f4d
Binary files /dev/null and b/src/images/fileclose2.png differ
diff --git a/src/images/filenew.png b/src/images/filenew.png
new file mode 100644
index 0000000..7274a21
Binary files /dev/null and b/src/images/filenew.png differ
diff --git a/src/images/fileopen.png b/src/images/fileopen.png
new file mode 100644
index 0000000..7c9f7a6
Binary files /dev/null and b/src/images/fileopen.png differ
diff --git a/src/images/genIcon.png b/src/images/genIcon.png
new file mode 100644
index 0000000..5bedaa2
Binary files /dev/null and b/src/images/genIcon.png differ
diff --git a/src/images/go-down.png b/src/images/go-down.png
new file mode 100644
index 0000000..970d43a
Binary files /dev/null and b/src/images/go-down.png differ
diff --git a/src/images/go-next.png b/src/images/go-next.png
new file mode 100644
index 0000000..cfee8f4
Binary files /dev/null and b/src/images/go-next.png differ
diff --git a/src/images/go-previous.png b/src/images/go-previous.png
new file mode 100644
index 0000000..3311c05
Binary files /dev/null and b/src/images/go-previous.png differ
diff --git a/src/images/go-up.png b/src/images/go-up.png
new file mode 100644
index 0000000..4ee50ef
Binary files /dev/null and b/src/images/go-up.png differ
diff --git a/src/images/groupIncluding.png b/src/images/groupIncluding.png
new file mode 100644
index 0000000..6f2bd08
Binary files /dev/null and b/src/images/groupIncluding.png differ
diff --git a/src/images/groupRefining.png b/src/images/groupRefining.png
new file mode 100644
index 0000000..2ba0a26
Binary files /dev/null and b/src/images/groupRefining.png differ
diff --git a/src/images/grouping_morten.png b/src/images/grouping_morten.png
new file mode 100644
index 0000000..9b29f68
Binary files /dev/null and b/src/images/grouping_morten.png differ
diff --git a/src/images/groupsHighlightAll.png b/src/images/groupsHighlightAll.png
new file mode 100644
index 0000000..c6e1a97
Binary files /dev/null and b/src/images/groupsHighlightAll.png differ
diff --git a/src/images/groupsHighlightAny.png b/src/images/groupsHighlightAny.png
new file mode 100644
index 0000000..1bc2e28
Binary files /dev/null and b/src/images/groupsHighlightAny.png differ
diff --git a/src/images/help-about.png b/src/images/help-about.png
new file mode 100644
index 0000000..90ce540
Binary files /dev/null and b/src/images/help-about.png differ
diff --git a/src/images/help-browser.png b/src/images/help-browser.png
new file mode 100644
index 0000000..6de563b
Binary files /dev/null and b/src/images/help-browser.png differ
diff --git a/src/images/integrity.png b/src/images/integrity.png
new file mode 100644
index 0000000..4343947
Binary files /dev/null and b/src/images/integrity.png differ
diff --git a/src/images/lyx2.png b/src/images/lyx2.png
new file mode 100644
index 0000000..84a742f
Binary files /dev/null and b/src/images/lyx2.png differ
diff --git a/src/images/mark.png b/src/images/mark.png
new file mode 100644
index 0000000..6f8ab3a
Binary files /dev/null and b/src/images/mark.png differ
diff --git a/src/images/messageFail.png b/src/images/messageFail.png
new file mode 100644
index 0000000..474f63f
Binary files /dev/null and b/src/images/messageFail.png differ
diff --git a/src/images/messageInfo.png b/src/images/messageInfo.png
new file mode 100644
index 0000000..ecdc991
Binary files /dev/null and b/src/images/messageInfo.png differ
diff --git a/src/images/messageWarn.png b/src/images/messageWarn.png
new file mode 100755
index 0000000..55a6f01
Binary files /dev/null and b/src/images/messageWarn.png differ
diff --git a/src/images/optIcon.png b/src/images/optIcon.png
new file mode 100644
index 0000000..64562b3
Binary files /dev/null and b/src/images/optIcon.png differ
diff --git a/src/images/pdf-new.png b/src/images/pdf-new.png
new file mode 100644
index 0000000..cda12b9
Binary files /dev/null and b/src/images/pdf-new.png differ
diff --git a/src/images/pdf.png b/src/images/pdf.png
new file mode 100644
index 0000000..d5eab07
Binary files /dev/null and b/src/images/pdf.png differ
diff --git a/src/images/postscript.png b/src/images/postscript.png
new file mode 100644
index 0000000..5065c98
Binary files /dev/null and b/src/images/postscript.png differ
diff --git a/src/images/preamble.png b/src/images/preamble.png
new file mode 100644
index 0000000..cf9d89d
Binary files /dev/null and b/src/images/preamble.png differ
diff --git a/src/images/preferences.png b/src/images/preferences.png
new file mode 100644
index 0000000..426460b
Binary files /dev/null and b/src/images/preferences.png differ
diff --git a/src/images/remove.png b/src/images/remove.png
new file mode 100644
index 0000000..0815d3f
Binary files /dev/null and b/src/images/remove.png differ
diff --git a/src/images/reqIcon.png b/src/images/reqIcon.png
new file mode 100644
index 0000000..5d2439c
Binary files /dev/null and b/src/images/reqIcon.png differ
diff --git a/src/images/search.png b/src/images/search.png
new file mode 100644
index 0000000..a555de8
Binary files /dev/null and b/src/images/search.png differ
diff --git a/src/images/splash-2.1.svg b/src/images/splash-2.1.svg
new file mode 100644
index 0000000..1f931f6
--- /dev/null
+++ b/src/images/splash-2.1.svg
@@ -0,0 +1,229 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://web.resource.org/cc/"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   inkscape:export-ydpi="90.000000"
+   inkscape:export-xdpi="90.000000"
+   inkscape:export-filename="/home/alver/jabref-2.1b/src/images/splash-2.1beta.png"
+   sodipodi:docname="splash-2.1.svg"
+   sodipodi:docbase="/home/alver/jabref_newcvs/jabref/src/images"
+   inkscape:version="0.44"
+   sodipodi:version="0.32"
+   id="svg2138"
+   height="1052.3622047"
+   width="744.09448819">
+  <defs
+     id="defs2140">
+    <pattern
+       patternTransform="translate(316.0000,1046.362)"
+       id="pattern9054"
+       xlink:href="#pattern9048"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient5361"
+       inkscape:collect="always">
+      <stop
+         id="stop5363"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop5365"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:0;" />
+    </linearGradient>
+    <marker
+       style="overflow:visible;"
+       id="Arrow2Send"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow2Send">
+      <path
+         transform="scale(0.3) rotate(180) translate(-5,0)"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;"
+         id="path3046"
+         sodipodi:nodetypes="cccc" />
+    </marker>
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       y2="300.91277"
+       x2="491.20592"
+       y1="300.91277"
+       x1="445.01770"
+       id="linearGradient5367"
+       xlink:href="#linearGradient5361"
+       inkscape:collect="always" />
+    <pattern
+       id="pattern9048"
+       patternTransform="translate(231.0000,284.3622)"
+       height="428.00000"
+       width="572.00000"
+       patternUnits="userSpaceOnUse">
+      <image
+         transform="translate(-231.0000,-284.3622)"
+         style="opacity:1.0000000;stroke:#000000;stroke-width:5.0000000;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-opacity:1.0000000"
+         inkscape:export-ydpi="90.000000"
+         inkscape:export-xdpi="90.000000"
+         inkscape:export-filename="/home/alver/Desktop/bilder/jabref/splash4.png"
+         y="284.36218"
+         x="231.00000"
+         xlink:href="behandlet.png"
+         sodipodi:absref="/home/alver/Desktop/bilder/jabref/behandlet.png"
+         width="572.00000"
+         height="428.00000"
+         id="image9050" />
+    </pattern>
+  </defs>
+  <sodipodi:namedview
+     inkscape:window-y="53"
+     inkscape:window-x="15"
+     inkscape:window-height="856"
+     inkscape:window-width="853"
+     inkscape:current-layer="layer1"
+     inkscape:document-units="px"
+     inkscape:cy="698.1925"
+     inkscape:cx="364.52617"
+     inkscape:zoom="1"
+     inkscape:pageshadow="2"
+     inkscape:pageopacity="0.0"
+     borderopacity="1.0"
+     bordercolor="#666666"
+     pagecolor="#ffffff"
+     id="base" />
+  <metadata
+     id="metadata2143">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:groupmode="layer"
+     inkscape:label="Layer 1">
+    <rect
+       inkscape:export-ydpi="75.000000"
+       inkscape:export-xdpi="75.000000"
+       inkscape:export-filename="/home/alver/jabref-2.1rc/src/images/splash-2.1.png"
+       y="170.36218"
+       x="77.500000"
+       height="432.00000"
+       width="576.00000"
+       id="rect6833"
+       style="opacity:1.0000000;fill:#6b6b75;fill-opacity:1.0000000;stroke:none;stroke-width:5.0000000;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000" />
+    <image
+       id="image1821"
+       height="428"
+       width="572"
+       sodipodi:absref="/home/alver/jabref/src/images/splashBackground.png"
+       xlink:href="/home/alver/jabref/src/images/splashBackground.png"
+       x="79"
+       y="172.36218"
+       inkscape:export-filename="/home/alver/jabref-2.1rc/src/images/splash-2.1.png"
+       inkscape:export-xdpi="75"
+       inkscape:export-ydpi="75" />
+    <flowRoot
+       inkscape:export-ydpi="75.000000"
+       inkscape:export-xdpi="75.000000"
+       inkscape:export-filename="/home/alver/jabref-2.1rc/src/images/splash-2.1.png"
+       style="opacity:1.0000000;fill:#635578;fill-opacity:1.0000000;stroke:#b5b5c7;stroke-width:0.48137558;stroke-linejoin:bevel;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000"
+       transform="matrix(1.875133,0.000000,0.000000,2.542210,-129.6969,-372.8897)"
+       id="flowRoot2189"
+       xml:space="preserve">
+      <flowRegion
+   id="flowRegion2191">
+        <rect
+   style="fill:#635578;fill-opacity:1.0000000;stroke:#b5b5c7;stroke-opacity:1.0000000;stroke-width:0.48137557;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-linejoin:bevel"
+   y="199.10532"
+   x="128.49385"
+   height="127.49445"
+   width="283.51782"
+   id="rect2193" />
+      </flowRegion>
+      <flowPara
+   style="font-size:90.000000px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125.00000%;writing-mode:lr-tb;text-anchor:start;fill:#635578;fill-opacity:1.0000000;stroke:#b5b5c7;stroke-width:0.48137558;stroke-linejoin:bevel;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;font-family:AR PL KaitiM GB"
+   id="flowPara2201">JabRef</flowPara>
+    </flowRoot>    <flowRoot
+       inkscape:export-ydpi="75.000000"
+       inkscape:export-xdpi="75.000000"
+       inkscape:export-filename="/home/alver/jabref-2.1b/src/images/splash-2.1beta.png"
+       style="font-size:34.96500015px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:104.16220427%;writing-mode:lr-tb;text-anchor:start;opacity:1;fill:#ffffff;fill-opacity:1;stroke:#5cc757;stroke-width:0.64448702;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:0.64448701 0.64448701 ;stroke-dashoffset:0.45114091;stroke-opacity:1;font-family:FreeSans"
+       transform="matrix(2.869197,-1.415830e-2,2.234317e-2,3.356271,-832.1435,-652.0185)"
+       id="flowRoot2203"
+       xml:space="preserve">
+      <flowRegion
+   style="stroke:url(#linearGradient5367);stroke-width:0.64448702;stroke-miterlimit:4;stroke-dasharray:0.64448701 0.64448701 ;stroke-dashoffset:0.45114091"
+   id="flowRegion2205">
+        <rect
+   style="font-size:34.96500015px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:104.16220427%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:#322b5b;stroke-width:0.64448702;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:0.64448701 0.64448701 ;stroke-dashoffset:0.45114091;stroke-opacity:1;font-family:FreeSans"
+   y="286.45224"
+   x="443.95346"
+   height="119.83134"
+   width="173.972"
+   id="rect2207" />
+      </flowRegion>
+      <flowPara
+   style="font-size:34.96500015px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:104.16220427%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:#322b5b;stroke-width:0.64448702;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:0.64448701 0.64448701 ;stroke-dashoffset:0.45114091;stroke-opacity:1;font-family:FreeSans"
+   id="flowPara2211">2.1</flowPara>
+    </flowRoot>    <flowRoot
+       inkscape:export-ydpi="75.000000"
+       inkscape:export-xdpi="75.000000"
+       inkscape:export-filename="/home/alver/jabref-2.1rc/src/images/splash-2.1.png"
+       transform="matrix(0.972246,0.000000,0.000000,1.325301,6.054966,-126.1181)"
+       style="font-size:11.9999996;font-style:oblique;font-variant:normal;font-weight:bold;font-stretch:normal;fill:#797580;fill-opacity:1.0000000;font-family:Bitstream Vera Sans;text-anchor:middle;writing-mode:lr;text-align:center;line-height:100%"
+       id="flowRoot3076"
+       xml:space="preserve"><flowRegion
+         id="flowRegion3078">
+        <rect
+   style="fill:#797580;fill-opacity:1.0000000;font-family:Bitstream Vera Sans;font-weight:bold;font-style:oblique;font-stretch:normal;font-variant:normal;font-size:11.9999996;text-anchor:middle;text-align:center;writing-mode:lr;line-height:100%"
+   y="514.56494"
+   x="115.50008"
+   height="78.684433"
+   width="506.03476"
+   id="rect3080" />
+      </flowRegion><flowPara
+         id="flowPara1339">This program is distributed under the terms of the General Public License.</flowPara><flowPara
+         id="flowPara1341">Copyright (2003-2006) Morten O. Alver, Nizar Batada and all contributors.</flowPara></flowRoot>    <text
+       inkscape:export-ydpi="75.000000"
+       inkscape:export-xdpi="75.000000"
+       inkscape:export-filename="/home/alver/jabref-2.1rc/src/images/splash-2.1.png"
+       transform="scale(0.853277,1.171952)"
+       sodipodi:linespacing="100%"
+       id="text1393"
+       y="315.20035"
+       x="163.38908"
+       style="font-size:183.29680;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#413b62;fill-opacity:1.0000000;stroke:none;stroke-width:1.0000000px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000;font-family:Nimbus Roman No9 L;text-anchor:start;writing-mode:lr-tb"
+       xml:space="preserve"><tspan
+         y="315.20035"
+         x="163.38908"
+         id="tspan1395"
+         sodipodi:role="line">JabRef</tspan></text>
+    <text
+       inkscape:export-ydpi="75.000000"
+       inkscape:export-xdpi="75.000000"
+       inkscape:export-filename="/home/alver/jabref-2.1rc/src/images/splash-2.1.png"
+       transform="scale(0.853347,1.171856)"
+       sodipodi:linespacing="100%"
+       id="text2179"
+       y="397.84811"
+       x="149.99753"
+       style="font-size:44.00000436;font-style:italic;font-variant:normal;font-weight:bold;font-stretch:normal;fill:#805b41;fill-opacity:1.0000000;stroke:none;stroke-width:1.0000000px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000;font-family:Nimbus Roman No9 L;text-anchor:start;writing-mode:lr;text-align:start;line-height:100%"
+       xml:space="preserve"><tspan
+         y="397.84811"
+         x="149.99753"
+         id="tspan2181"
+         sodipodi:role="line">reference manager</tspan></text>
+  </g>
+</svg>
diff --git a/src/images/splash-2.1beta.png b/src/images/splash-2.1beta.png
new file mode 100644
index 0000000..4304131
Binary files /dev/null and b/src/images/splash-2.1beta.png differ
diff --git a/src/images/splash-2.5.svg b/src/images/splash-2.3.svg
similarity index 91%
copy from src/images/splash-2.5.svg
copy to src/images/splash-2.3.svg
index 55e8e0e..d519da8 100644
--- a/src/images/splash-2.5.svg
+++ b/src/images/splash-2.3.svg
@@ -2,7 +2,7 @@
 <!-- Created with Inkscape (http://www.inkscape.org/) -->
 <svg
    xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:cc="http://web.resource.org/cc/"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:svg="http://www.w3.org/2000/svg"
    xmlns="http://www.w3.org/2000/svg"
@@ -12,9 +12,9 @@
    inkscape:export-ydpi="90.000000"
    inkscape:export-xdpi="90.000000"
    inkscape:export-filename="/home/alver/jabref_head/jabref/src/images/jabref_splash-2.2.png"
-   sodipodi:docname="splash-2.5.svg"
-   sodipodi:docbase="/home/alver/jabref_trunk/src/images"
-   inkscape:version="0.46"
+   sodipodi:docname="splash-2.3.svg"
+   sodipodi:docbase="/home/alver/jabref/src/images"
+   inkscape:version="0.45.1"
    sodipodi:version="0.32"
    id="svg2138"
    height="1052.3622047"
@@ -22,13 +22,6 @@
    inkscape:output_extension="org.inkscape.output.svg.inkscape">
   <defs
      id="defs2140">
-    <inkscape:perspective
-       sodipodi:type="inkscape:persp3d"
-       inkscape:vp_x="0 : 526.18109 : 1"
-       inkscape:vp_y="0 : 1000 : 0"
-       inkscape:vp_z="744.09448 : 526.18109 : 1"
-       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
-       id="perspective2595" />
     <linearGradient
        id="linearGradient2974">
       <stop
@@ -148,8 +141,7 @@
      borderopacity="1.0"
      bordercolor="#666666"
      pagecolor="#ffffff"
-     id="base"
-     showgrid="false" />
+     id="base" />
   <metadata
      id="metadata2143">
     <rdf:RDF>
@@ -168,7 +160,7 @@
     <rect
        inkscape:export-ydpi="75.000000"
        inkscape:export-xdpi="75.000000"
-       inkscape:export-filename="/home/alver/jabref_beta/src/images/splash.png"
+       inkscape:export-filename="/home/alver/jabref/src/images/splash.png"
        y="170.36218"
        x="77.500000"
        height="432.00000"
@@ -183,13 +175,13 @@
        xlink:href="splashBackground.png"
        x="79"
        y="172.36218"
-       inkscape:export-filename="/home/alver/jabref_beta/src/images/splash.png"
+       inkscape:export-filename="/home/alver/jabref/src/images/splash.png"
        inkscape:export-xdpi="75"
        inkscape:export-ydpi="75" />
     <flowRoot
        inkscape:export-ydpi="75.000000"
        inkscape:export-xdpi="75.000000"
-       inkscape:export-filename="/home/alver/jabref_beta/src/images/splash.png"
+       inkscape:export-filename="/home/alver/jabref/src/images/splash.png"
        style="opacity:1.0000000;fill:#635578;fill-opacity:1.0000000;stroke:#b5b5c7;stroke-width:0.48137558;stroke-linejoin:bevel;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000"
        transform="matrix(1.875133,0.000000,0.000000,2.542210,-129.6969,-372.8897)"
        id="flowRoot2189"
@@ -210,7 +202,7 @@
     </flowRoot>    <flowRoot
        inkscape:export-ydpi="75.000000"
        inkscape:export-xdpi="75.000000"
-       inkscape:export-filename="/home/alver/jabref_beta/src/images/splash.png"
+       inkscape:export-filename="/home/alver/jabref/src/images/splash.png"
        transform="matrix(0.972246,0,0,1.325301,6.054966,-126.1181)"
        style="font-size:12px;font-style:oblique;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr-tb;text-anchor:middle;fill:#797580;fill-opacity:1;font-family:Bitstream Vera Sans"
        id="flowRoot3076"
@@ -225,10 +217,10 @@
    id="rect3080" />
       </flowRegion><flowPara
          id="flowPara1339">This program is distributed under the terms of the General Public License.</flowPara><flowPara
-         id="flowPara1341">Copyright (2003-2008) Morten O. Alver, Nizar Batada and all contributors.</flowPara></flowRoot>    <text
+         id="flowPara1341">Copyright (2003-2007) Morten O. Alver, Nizar Batada and all contributors.</flowPara></flowRoot>    <text
        inkscape:export-ydpi="75.000000"
        inkscape:export-xdpi="75.000000"
-       inkscape:export-filename="/home/alver/jabref_beta/src/images/splash.png"
+       inkscape:export-filename="/home/alver/jabref/src/images/splash.png"
        transform="scale(0.853347,1.171856)"
        sodipodi:linespacing="100%"
        id="text2179"
@@ -244,7 +236,7 @@
        id="g2867"
        transform="matrix(1.14435,0,0,1.103688,-34.88143,-26.75429)"
        style="fill:#3d3d5f;fill-opacity:1;stroke:url(#radialGradient2889);stroke-width:1.99301183;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       inkscape:export-filename="/home/alver/jabref_beta/src/images/splash.png"
+       inkscape:export-filename="/home/alver/jabref/src/images/splash.png"
        inkscape:export-xdpi="75"
        inkscape:export-ydpi="75">
       <path
@@ -272,13 +264,13 @@
        id="text2911"
        sodipodi:linespacing="100%"
        transform="scale(0.917932,1.089405)"
-       inkscape:export-filename="/home/alver/jabref_beta/src/images/splash.png"
+       inkscape:export-filename="/home/alver/jabref/src/images/splash.png"
        inkscape:export-xdpi="75"
        inkscape:export-ydpi="75"><tspan
          sodipodi:role="line"
          id="tspan2913"
          x="462.20135"
          y="426.2529"
-         style="font-size:119.00263214px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:#727888;stroke-width:1.80000031;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;font-family:Bitstream Vera Sans">2.5</tspan></text>
+         style="font-size:119.00263214px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:#727888;stroke-width:1.80000031;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;font-family:Bitstream Vera Sans">2.3</tspan></text>
   </g>
 </svg>
diff --git a/src/images/splash-2.5.svg b/src/images/splash-2.4.svg
similarity index 99%
copy from src/images/splash-2.5.svg
copy to src/images/splash-2.4.svg
index 55e8e0e..8eaf7e1 100644
--- a/src/images/splash-2.5.svg
+++ b/src/images/splash-2.4.svg
@@ -12,7 +12,7 @@
    inkscape:export-ydpi="90.000000"
    inkscape:export-xdpi="90.000000"
    inkscape:export-filename="/home/alver/jabref_head/jabref/src/images/jabref_splash-2.2.png"
-   sodipodi:docname="splash-2.5.svg"
+   sodipodi:docname="splash-2.4.svg"
    sodipodi:docbase="/home/alver/jabref_trunk/src/images"
    inkscape:version="0.46"
    sodipodi:version="0.32"
@@ -137,7 +137,7 @@
      inkscape:window-y="25"
      inkscape:window-x="0"
      inkscape:window-height="949"
-     inkscape:window-width="1280"
+     inkscape:window-width="1279"
      inkscape:current-layer="layer1"
      inkscape:document-units="px"
      inkscape:cy="677.8697"
@@ -279,6 +279,6 @@
          id="tspan2913"
          x="462.20135"
          y="426.2529"
-         style="font-size:119.00263214px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:#727888;stroke-width:1.80000031;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;font-family:Bitstream Vera Sans">2.5</tspan></text>
+         style="font-size:119.00263214px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:#727888;stroke-width:1.80000031;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;font-family:Bitstream Vera Sans">2.4</tspan></text>
   </g>
 </svg>
diff --git a/src/images/splash-2.5.svg b/src/images/splash-2.5.svg
index 55e8e0e..f571b08 100644
--- a/src/images/splash-2.5.svg
+++ b/src/images/splash-2.5.svg
@@ -135,8 +135,8 @@
   </defs>
   <sodipodi:namedview
      inkscape:window-y="25"
-     inkscape:window-x="0"
-     inkscape:window-height="949"
+     inkscape:window-x="50"
+     inkscape:window-height="768"
      inkscape:window-width="1280"
      inkscape:current-layer="layer1"
      inkscape:document-units="px"
@@ -225,7 +225,7 @@
    id="rect3080" />
       </flowRegion><flowPara
          id="flowPara1339">This program is distributed under the terms of the General Public License.</flowPara><flowPara
-         id="flowPara1341">Copyright (2003-2008) Morten O. Alver, Nizar Batada and all contributors.</flowPara></flowRoot>    <text
+         id="flowPara1341">Copyright (2003-2009) Morten O. Alver, Nizar Batada and all contributors.</flowPara></flowRoot>    <text
        inkscape:export-ydpi="75.000000"
        inkscape:export-xdpi="75.000000"
        inkscape:export-filename="/home/alver/jabref_beta/src/images/splash.png"
diff --git a/src/images/splash-2.5.svg b/src/images/splash-2.6beta.svg
similarity index 85%
copy from src/images/splash-2.5.svg
copy to src/images/splash-2.6beta.svg
index 55e8e0e..af82162 100644
--- a/src/images/splash-2.5.svg
+++ b/src/images/splash-2.6beta.svg
@@ -12,7 +12,7 @@
    inkscape:export-ydpi="90.000000"
    inkscape:export-xdpi="90.000000"
    inkscape:export-filename="/home/alver/jabref_head/jabref/src/images/jabref_splash-2.2.png"
-   sodipodi:docname="splash-2.5.svg"
+   sodipodi:docname="splash-2.6beta.svg"
    sodipodi:docbase="/home/alver/jabref_trunk/src/images"
    inkscape:version="0.46"
    sodipodi:version="0.32"
@@ -134,14 +134,14 @@
        r="135.88549" />
   </defs>
   <sodipodi:namedview
-     inkscape:window-y="25"
+     inkscape:window-y="0"
      inkscape:window-x="0"
-     inkscape:window-height="949"
-     inkscape:window-width="1280"
+     inkscape:window-height="768"
+     inkscape:window-width="1272"
      inkscape:current-layer="layer1"
      inkscape:document-units="px"
      inkscape:cy="677.8697"
-     inkscape:cx="414.10531"
+     inkscape:cx="238.10531"
      inkscape:zoom="1"
      inkscape:pageshadow="2"
      inkscape:pageopacity="0.0"
@@ -168,7 +168,7 @@
     <rect
        inkscape:export-ydpi="75.000000"
        inkscape:export-xdpi="75.000000"
-       inkscape:export-filename="/home/alver/jabref_beta/src/images/splash.png"
+       inkscape:export-filename="/home/alver/jabref_trunk/src/images/splash.png"
        y="170.36218"
        x="77.500000"
        height="432.00000"
@@ -183,13 +183,13 @@
        xlink:href="splashBackground.png"
        x="79"
        y="172.36218"
-       inkscape:export-filename="/home/alver/jabref_beta/src/images/splash.png"
+       inkscape:export-filename="/home/alver/jabref_trunk/src/images/splash.png"
        inkscape:export-xdpi="75"
        inkscape:export-ydpi="75" />
     <flowRoot
        inkscape:export-ydpi="75.000000"
        inkscape:export-xdpi="75.000000"
-       inkscape:export-filename="/home/alver/jabref_beta/src/images/splash.png"
+       inkscape:export-filename="/home/alver/jabref_trunk/src/images/splash.png"
        style="opacity:1.0000000;fill:#635578;fill-opacity:1.0000000;stroke:#b5b5c7;stroke-width:0.48137558;stroke-linejoin:bevel;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000"
        transform="matrix(1.875133,0.000000,0.000000,2.542210,-129.6969,-372.8897)"
        id="flowRoot2189"
@@ -210,7 +210,7 @@
     </flowRoot>    <flowRoot
        inkscape:export-ydpi="75.000000"
        inkscape:export-xdpi="75.000000"
-       inkscape:export-filename="/home/alver/jabref_beta/src/images/splash.png"
+       inkscape:export-filename="/home/alver/jabref_trunk/src/images/splash.png"
        transform="matrix(0.972246,0,0,1.325301,6.054966,-126.1181)"
        style="font-size:12px;font-style:oblique;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr-tb;text-anchor:middle;fill:#797580;fill-opacity:1;font-family:Bitstream Vera Sans"
        id="flowRoot3076"
@@ -225,10 +225,10 @@
    id="rect3080" />
       </flowRegion><flowPara
          id="flowPara1339">This program is distributed under the terms of the General Public License.</flowPara><flowPara
-         id="flowPara1341">Copyright (2003-2008) Morten O. Alver, Nizar Batada and all contributors.</flowPara></flowRoot>    <text
+         id="flowPara1341">Copyright (2003-2009) Morten O. Alver, Nizar Batada and all contributors.</flowPara></flowRoot>    <text
        inkscape:export-ydpi="75.000000"
        inkscape:export-xdpi="75.000000"
-       inkscape:export-filename="/home/alver/jabref_beta/src/images/splash.png"
+       inkscape:export-filename="/home/alver/jabref_trunk/src/images/splash.png"
        transform="scale(0.853347,1.171856)"
        sodipodi:linespacing="100%"
        id="text2179"
@@ -244,7 +244,7 @@
        id="g2867"
        transform="matrix(1.14435,0,0,1.103688,-34.88143,-26.75429)"
        style="fill:#3d3d5f;fill-opacity:1;stroke:url(#radialGradient2889);stroke-width:1.99301183;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       inkscape:export-filename="/home/alver/jabref_beta/src/images/splash.png"
+       inkscape:export-filename="/home/alver/jabref_trunk/src/images/splash.png"
        inkscape:export-xdpi="75"
        inkscape:export-ydpi="75">
       <path
@@ -272,13 +272,28 @@
        id="text2911"
        sodipodi:linespacing="100%"
        transform="scale(0.917932,1.089405)"
-       inkscape:export-filename="/home/alver/jabref_beta/src/images/splash.png"
+       inkscape:export-filename="/home/alver/jabref_trunk/src/images/splash.png"
        inkscape:export-xdpi="75"
        inkscape:export-ydpi="75"><tspan
          sodipodi:role="line"
          id="tspan2913"
          x="462.20135"
          y="426.2529"
-         style="font-size:119.00263214px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:#727888;stroke-width:1.80000031;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;font-family:Bitstream Vera Sans">2.5</tspan></text>
-  </g>
+         style="font-size:119.00263214px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:#727888;stroke-width:1.80000031;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;font-family:Bitstream Vera Sans">2.6</tspan></text>
+    <flowRoot
+       xml:space="preserve"
+       id="flowRoot2745"
+       style="font-size:56px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#f91616;fill-opacity:0.65789472;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans Bold"
+       transform="matrix(0.9688007,-0.2478411,0.2478411,0.9688007,-87.20276,118.59483)"
+       inkscape:export-filename="/home/alver/jabref_trunk/src/images/splash.png"
+       inkscape:export-xdpi="75"
+       inkscape:export-ydpi="75"><flowRegion
+         id="flowRegion2747"><rect
+           id="rect2749"
+           width="164"
+           height="68"
+           x="482"
+           y="470.36218"
+           style="font-size:56px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#f91616;fill-opacity:0.65789472;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans Bold" /></flowRegion><flowPara
+         id="flowPara2751">beta</flowPara></flowRoot>  </g>
 </svg>
diff --git a/src/images/splash.png b/src/images/splash.png
index efc1828..5b71a8a 100644
Binary files a/src/images/splash.png and b/src/images/splash.png differ
diff --git a/src/images/splashBackground.png b/src/images/splashBackground.png
new file mode 100644
index 0000000..d5a048e
Binary files /dev/null and b/src/images/splashBackground.png differ
diff --git a/src/images/strings.png b/src/images/strings.png
new file mode 100644
index 0000000..649899f
Binary files /dev/null and b/src/images/strings.png differ
diff --git a/src/images/unmark.png b/src/images/unmark.png
new file mode 100644
index 0000000..92ac338
Binary files /dev/null and b/src/images/unmark.png differ
diff --git a/src/images/user-home.png b/src/images/user-home.png
new file mode 100644
index 0000000..a3c4765
Binary files /dev/null and b/src/images/user-home.png differ
diff --git a/src/images/view-refresh.png b/src/images/view-refresh.png
new file mode 100644
index 0000000..952b5f7
Binary files /dev/null and b/src/images/view-refresh.png differ
diff --git a/src/images/viewsource.gif b/src/images/viewsource.gif
new file mode 100644
index 0000000..3ef9a2e
Binary files /dev/null and b/src/images/viewsource.gif differ
diff --git a/src/images/winedt.png b/src/images/winedt.png
new file mode 100644
index 0000000..cded1a7
Binary files /dev/null and b/src/images/winedt.png differ
diff --git a/src/images/wizard.png b/src/images/wizard.png
new file mode 100644
index 0000000..b5d81d3
Binary files /dev/null and b/src/images/wizard.png differ
diff --git a/src/images/wrongItem.png b/src/images/wrongItem.png
new file mode 100644
index 0000000..8b2f1eb
Binary files /dev/null and b/src/images/wrongItem.png differ
diff --git a/src/images/wwwciteseer.png b/src/images/wwwciteseer.png
new file mode 100644
index 0000000..1885445
Binary files /dev/null and b/src/images/wwwciteseer.png differ
diff --git a/src/java/net/sf/jabref/BasePanel.java b/src/java/net/sf/jabref/BasePanel.java
index 8ed5da6..054b44e 100644
--- a/src/java/net/sf/jabref/BasePanel.java
+++ b/src/java/net/sf/jabref/BasePanel.java
@@ -1789,6 +1789,42 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
         for (BibtexEntry entry : database.getEntries()){
             Util.updateCompletersForEntry(autoCompleters, entry);
         }
+
+        addJournalListToAutoCompleter();
+        addContentSelectorValuesToAutoCompleters();
+    }
+
+    /**
+     * For all fields with both autocompletion and content selector, add content selector
+     * values to the autocompleter list:
+     */
+    public void addContentSelectorValuesToAutoCompleters() {
+        for (String field : autoCompleters.keySet()) {
+            AutoCompleter ac = autoCompleters.get(field);
+            if (metaData.getData(Globals.SELECTOR_META_PREFIX + field) != null) {
+                Vector<String> items = metaData.getData(Globals.SELECTOR_META_PREFIX + field);
+                if (items != null) {
+                    Iterator<String> i = items.iterator();
+                    while (i.hasNext())
+                        ac.addWord(i.next());
+                }
+            }
+        }
+    }
+
+    /**
+     * If an autocompleter exists for the "journal" field, add all
+     * journal names in the journal abbreviation list to this autocompleter.
+     */
+    public void addJournalListToAutoCompleter() {
+        if (autoCompleters.containsKey("journal")) {
+            AutoCompleter ac = autoCompleters.get("journal");
+            Set<String> journals = Globals.journalAbbrev.getJournals().keySet();
+            for (String journal : journals)
+                ac.addWord(journal);
+        }
+
+
     }
 
 
@@ -2478,6 +2514,15 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
 	  };
 
       // Test: running scan automatically in background
+      if ((BasePanel.this.getFile() != null) &&
+              !Util.waitForFileLock(BasePanel.this.getFile(), 10)) {
+          // The file is locked even after the maximum wait. Do nothing.
+          System.err.println("File updated externally, but change scan failed because the file is locked.");
+          // Perturb the stored timestamp so successive checks are made:
+          Globals.fileUpdateMonitor.perturbTimestamp(getFileMonitorHandle());
+          return;
+      }
+
       scanner.changeScan(BasePanel.this.getFile());
       try {
 	  scanner.join();
diff --git a/src/java/net/sf/jabref/ContentSelectorDialog2.java b/src/java/net/sf/jabref/ContentSelectorDialog2.java
index 27869d4..66e9900 100644
--- a/src/java/net/sf/jabref/ContentSelectorDialog2.java
+++ b/src/java/net/sf/jabref/ContentSelectorDialog2.java
@@ -292,6 +292,8 @@ public class ContentSelectorDialog2 extends JDialog {
 	else {
 	    panel.rebuildAllEntryEditors();
 	}
+    panel.addContentSelectorValuesToAutoCompleters();
+        
     }
 
     /**
diff --git a/src/java/net/sf/jabref/DuplicateCheck.java b/src/java/net/sf/jabref/DuplicateCheck.java
index ad4148d..467db65 100644
--- a/src/java/net/sf/jabref/DuplicateCheck.java
+++ b/src/java/net/sf/jabref/DuplicateCheck.java
@@ -25,16 +25,18 @@ public class DuplicateCheck {
         // The check if they have the same required fields:
         String[] fields = one.getType().getRequiredFields();
 
-        float req;
-        if (fields == null)
-            req = 1;
+        float req, reqWeight = 2;
+        if (fields == null) {
+            req = 0;
+            reqWeight = 0;
+        }
         else
             req = compareFieldSet(fields, one, two);
         fields = one.getType().getOptionalFields();
 
         if (fields != null) {
             float opt = compareFieldSet(fields, one, two);
-            return (2 * req + opt) / 3 >= Globals.duplicateThreshold;
+            return (reqWeight * req + opt) / (1 + reqWeight) >= Globals.duplicateThreshold;
         } else {
             return (req >= Globals.duplicateThreshold);
         }
diff --git a/src/java/net/sf/jabref/EntryEditor.java b/src/java/net/sf/jabref/EntryEditor.java
index 5b3b4fc..8de6827 100644
--- a/src/java/net/sf/jabref/EntryEditor.java
+++ b/src/java/net/sf/jabref/EntryEditor.java
@@ -53,10 +53,9 @@ import net.sf.jabref.gui.*;
 import net.sf.jabref.gui.date.DatePickerButton;
 import net.sf.jabref.imports.BibtexParser;
 import net.sf.jabref.labelPattern.LabelPatternUtil;
-import net.sf.jabref.undo.NamedCompound;
-import net.sf.jabref.undo.UndoableFieldChange;
-import net.sf.jabref.undo.UndoableKeyChange;
-import net.sf.jabref.undo.UndoableRemoveEntry;
+import net.sf.jabref.undo.*;
+import com.jgoodies.looks.Options;
+import com.jgoodies.looks.HeaderStyle;
 
 /**
  * GUI component that allows editing of the fields of a BibtexEntry (i.e. the
@@ -101,6 +100,8 @@ public class EntryEditor extends JPanel implements VetoableChangeListener {
     // The action which generates a bibtexkey for this entry.
     public GenerateKeyAction generateKeyAction;
 
+    public AutoSetFileAction autoLink = new AutoSetFileAction();
+
     public AbstractAction writeXmp;
 
     SaveDatabaseAction saveDatabaseAction = new SaveDatabaseAction();
@@ -247,7 +248,12 @@ public class EntryEditor extends JPanel implements VetoableChangeListener {
     }
 
     private void setupToolBar() {
+        JPanel leftPan = new JPanel();
+        leftPan.setLayout(new BorderLayout());
         tlb = new JToolBar(JToolBar.VERTICAL);
+        //tlb.putClientProperty(Options.HEADER_STYLE_KEY, HeaderStyle.BOTH);
+        tlb.setBorder(null);
+        tlb.setRollover(true);
 
         tlb.setMargin(new Insets(0, 0, 0, 2));
 
@@ -262,6 +268,8 @@ public class EntryEditor extends JPanel implements VetoableChangeListener {
         am.put("store", storeFieldAction);
         im.put(prefs.getKey("Autogenerate BibTeX keys"), "generateKey");
         am.put("generateKey", generateKeyAction);
+        im.put(prefs.getKey("Automatically link files"), "autoLink");
+        am.put("autoLink", autoLink);
         im.put(prefs.getKey("Entry editor, previous entry"), "prev");
         am.put("prev", prevEntryAction);
         im.put(prefs.getKey("Entry editor, next entry"), "next");
@@ -275,17 +283,22 @@ public class EntryEditor extends JPanel implements VetoableChangeListener {
 
         tlb.setFloatable(false);
 
+        // Add actions (and thus buttons)
+        JButton closeBut = new JButton(closeAction);
+        closeBut.setText(null);
+        closeBut.setBorder(null);
+        leftPan.add(closeBut, BorderLayout.NORTH);
+
         // Create type-label
         typeLabel = new TypeLabel(entry.getType().getName());
-        
-        // Add actions (and thus buttons)
-        tlb.add(closeAction);
+        leftPan.add(typeLabel, BorderLayout.CENTER);
 
-        tlb.add(typeLabel);
+        //tlb.add(typeL);
 
         tlb.addSeparator();
         
         tlb.add(generateKeyAction);
+        tlb.add(autoLink);
 
         tlb.add(writeXmp);
 
@@ -304,7 +317,8 @@ public class EntryEditor extends JPanel implements VetoableChangeListener {
         for (int i = 0; i < comps.length; i++)
             ((JComponent) comps[i]).setOpaque(false);
 
-        add(tlb, BorderLayout.WEST);
+        leftPan.add(tlb, BorderLayout.SOUTH);
+        add(leftPan, BorderLayout.WEST);
     }
 
     /**
@@ -386,7 +400,7 @@ public class EntryEditor extends JPanel implements VetoableChangeListener {
         } else if (panel.metaData.getData(Globals.SELECTOR_META_PREFIX + ed.getFieldName()) != null) {
             FieldContentSelector ws = new FieldContentSelector(frame, panel, frame, ed,
                 panel.metaData, storeFieldAction, false,
-                (ed.getFieldName().equals("author") ? " and " : ", "));
+                ((ed.getFieldName().equals("author") || ed.getFieldName().equals("editor")) ? " and " : ", "));
             contentSelectors.add(ws);
 
             return ws;
@@ -720,6 +734,7 @@ public class EntryEditor extends JPanel implements VetoableChangeListener {
             // oldKey = entry.getCiteKey(),
             newKey = nu.getCiteKey();
             boolean anyChanged = false;
+            boolean changedType = false;
             boolean duplicateWarning = false;
             boolean emptyWarning = newKey == null || newKey.equals("");
 
@@ -755,6 +770,14 @@ public class EntryEditor extends JPanel implements VetoableChangeListener {
                 }
             }
 
+            // See if the user has changed the entry type:
+            if (nu.getType() != entry.getType()) {
+                compound.addEdit(new UndoableChangeType(entry,
+                      entry.getType(), nu.getType()));
+                entry.setType(nu.getType());
+                anyChanged = true;
+                changedType = true;
+            }
             compound.end();
 
             if (!anyChanged)
@@ -776,10 +799,14 @@ public class EntryEditor extends JPanel implements VetoableChangeListener {
             }
 
             lastSourceStringAccepted = source.getText();
-            updateAllFields();
-            lastSourceAccepted = true;
-            updateSource = true;
-
+            if (!changedType) {
+                updateAllFields();
+                lastSourceAccepted = true;
+                updateSource = true;
+            }
+            else {
+                panel.updateEntryEditorIfShowing();
+            }
             // TODO: does updating work properly after source stored?
             // panel.tableModel.remap();
             // panel.entryTable.repaint();
@@ -873,10 +900,13 @@ public class EntryEditor extends JPanel implements VetoableChangeListener {
     }
 
 
-    private class TypeLabel extends JPanel {
-        private String label;
+    private class TypeLabel extends JLabel {
         public TypeLabel(String type) {
-            label = type;
+            super(type+" ");
+            setUI(new VerticalLabelUI(false));
+            setForeground(GUIGlobals.validFieldColor);
+            setHorizontalAlignment(RIGHT);
+            setFont(GUIGlobals.typeNameFont);
             addMouseListener(new MouseAdapter() {
                 public void mouseClicked(MouseEvent e) {
                     boolean ctrlClick = prefs.getBoolean("ctrlClick");
@@ -895,15 +925,16 @@ public class EntryEditor extends JPanel implements VetoableChangeListener {
             });
         }
 
-        public void paint(Graphics g) {
+        public void paintComponent(Graphics g) {
             Graphics2D g2 = (Graphics2D) g;
-            g2.setColor(GUIGlobals.validFieldColor);
-            g2.setFont(GUIGlobals.typeNameFont);
-            FontMetrics fm = g2.getFontMetrics();
-            int width = fm.stringWidth(label);
+            //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);
+            super.paintComponent(g2);
+            //g2.rotate(-Math.PI / 2, 0, 0);
+            //g2.drawString(label, -width - 7, 28);
         }
     }
 
@@ -1397,4 +1428,27 @@ public class EntryEditor extends JPanel implements VetoableChangeListener {
     }
 
 
+    class AutoSetFileAction extends AbstractAction {
+        public AutoSetFileAction() {
+            putValue(SMALL_ICON, GUIGlobals.getImage("autoGroup"));
+            putValue(SHORT_DESCRIPTION, Globals.lang("Automatically set file links for this entry")
+                    +" (Alt-F)");
+        }
+
+        public void actionPerformed(ActionEvent event) {
+            JDialog diag = new JDialog(frame, true);
+            final FileListTableModel tableModel = new FileListTableModel();
+            tableModel.setContent(entry.getField(GUIGlobals.FILE_FIELD));
+            FileListEditor.autoSetLinks(entry, tableModel, panel.metaData(), new ActionListener() {
+                public void actionPerformed(ActionEvent e) {
+                    if (e.getID() > 0) {
+                        entry.setField(GUIGlobals.FILE_FIELD, tableModel.getStringRepresentation());
+                        frame.output(Globals.lang("Finished autosetting external links."));
+                    }
+                    else frame.output(Globals.lang("Finished autosetting external links.")
+                        +" "+Globals.lang("No files found."));
+                }
+            }, diag);
+        }
+    }
 }
diff --git a/src/java/net/sf/jabref/EntryEditorTab.java b/src/java/net/sf/jabref/EntryEditorTab.java
index 42f4f4f..2028928 100644
--- a/src/java/net/sf/jabref/EntryEditorTab.java
+++ b/src/java/net/sf/jabref/EntryEditorTab.java
@@ -48,7 +48,7 @@ import com.jgoodies.forms.layout.FormLayout;
  * A single tab displayed in the EntryEditor holding several FieldEditors.
  * 
  * @author $Author: mortenalver $
- * @version $Revision: 2864 $ ($Date: 2008-11-25 21:22:56 +0100 (Tue, 25 Nov 2008) $)
+ * @version $Revision: 3072 $ ($Date: 2009-09-03 21:07:51 +0200 (Thu, 03 Sep 2009) $)
  * 
  */
 public class EntryEditorTab {
@@ -138,13 +138,14 @@ public class EntryEditorTab {
             //ta.addUndoableEditListener(bPanel.undoListener);
             
             JComponent ex = parent.getExtra(fields[i], ta);
-            setupJTextComponent(ta.getTextComponent());
 
             // Add autocompleter listener, if required for this field:
             AutoCompleter autoComp = bPanel.getAutoCompleter(fields[i]);
+            AutoCompleteListener acl = null;
             if (autoComp != null) {
-                ta.getTextComponent().addKeyListener(new AutoCompleteListener(autoComp));
+                acl = new AutoCompleteListener(autoComp);
             }
+            setupJTextComponent(ta.getTextComponent(), acl);
 
             // Store the editor for later reference:
             editors.put(fields[i], ta);
@@ -171,7 +172,7 @@ public class EntryEditorTab {
 			final FieldTextField tf = new FieldTextField(BibtexFields.KEY_FIELD, parent
 				.getEntry().getField(BibtexFields.KEY_FIELD), true);
             //tf.addUndoableEditListener(bPanel.undoListener);
-			setupJTextComponent(tf);
+			setupJTextComponent(tf, null);
 
 			editors.put("bibtexkey", tf);
 			/*
@@ -308,9 +309,23 @@ public class EntryEditorTab {
 	 * 
 	 * @param component
 	 */
-	public void setupJTextComponent(final JComponent component) {
-
-		component.addFocusListener(fieldListener);
+	public void setupJTextComponent(final JComponent component, final AutoCompleteListener acl) {
+
+        // Here we add focus listeners to the component. The funny code is because we need
+        // to guarantee that the AutoCompleteListener - if used - is called before fieldListener
+        // on a focus lost event. The AutoCompleteListener is responsible for removing any
+        // current suggestion when focus is lost, and this must be done before fieldListener
+        // stores the current edit. Swing doesn't guarantee the order of execution of event
+        // listeners, so we handle this by only adding the AutoCompleteListener and telling
+        // it to call fieldListener afterwards. If no AutoCompleteListener is used, we
+        // add the fieldListener normally.
+        if (acl != null) {
+            component.addKeyListener(acl);
+            component.addFocusListener(acl);
+            acl.setNextFocusListener(fieldListener);
+        }
+        else
+		    component.addFocusListener(fieldListener);
 
 		InputMap im = component.getInputMap(JComponent.WHEN_FOCUSED);
 		ActionMap am = component.getActionMap();
diff --git a/src/java/net/sf/jabref/GeneralTab.java b/src/java/net/sf/jabref/GeneralTab.java
index 42e33e6..5d8ced5 100644
--- a/src/java/net/sf/jabref/GeneralTab.java
+++ b/src/java/net/sf/jabref/GeneralTab.java
@@ -23,7 +23,7 @@ public class GeneralTab extends JPanel implements PrefsTab {
 
     private JCheckBox
     defSort, ctrlClick, useOwner, overwriteOwner,
-    keyDuplicateWarningDialog, keyEmptyWarningDialog,
+    keyDuplicateWarningDialog, keyEmptyWarningDialog, enforceLegalKeys,
     confirmDelete, allowEditing, memoryStick, useImportInspector,
     useImportInspectorForSingle, inspectionWarnDupli, useTimeStamp, overwriteTimeStamp,
     markImportedEntries, unmarkAllEntriesBeforeImporting;
@@ -57,6 +57,7 @@ public class GeneralTab extends JPanel implements PrefsTab {
             +"the field set, overwrite."));
         keyDuplicateWarningDialog = new JCheckBox(Globals.lang("Show warning dialog when a duplicate BibTeX key is entered"));
         keyEmptyWarningDialog = new JCheckBox(Globals.lang("Show warning dialog when an empty BibTeX key is entered")); // JZTODO lyrics
+        enforceLegalKeys = new JCheckBox(Globals.lang("Enforce legal characters in BibTeX keys"));
         confirmDelete = new JCheckBox(Globals.lang("Show confirmation dialog when deleting entries"));
 
         useImportInspector = new JCheckBox(Globals.lang("Display imported entries in an inspection window before they are added."));
@@ -110,6 +111,8 @@ public class GeneralTab extends JPanel implements PrefsTab {
         builder.nextLine();
         builder.append(keyEmptyWarningDialog, 13);
         builder.nextLine();
+        builder.append(enforceLegalKeys, 13);
+        builder.nextLine();
         builder.append(memoryStick, 13);
         
         // Create a new panel with its own FormLayout for the last items:
@@ -165,6 +168,7 @@ public class GeneralTab extends JPanel implements PrefsTab {
         overwriteTimeStamp.setSelected(_prefs.getBoolean("overwriteTimeStamp"));
         keyDuplicateWarningDialog.setSelected(_prefs.getBoolean("dialogWarningForDuplicateKey"));
         keyEmptyWarningDialog.setSelected(_prefs.getBoolean("dialogWarningForEmptyKey"));
+        enforceLegalKeys.setSelected(_prefs.getBoolean("enforceLegalBibtexKey"));
         memoryStick.setSelected(_prefs.getBoolean("memoryStickMode"));
         confirmDelete.setSelected(_prefs.getBoolean("confirmDelete"));
         defOwnerField.setText(_prefs.get("defaultOwner"));
@@ -205,6 +209,7 @@ public class GeneralTab extends JPanel implements PrefsTab {
         _prefs.putBoolean("overwriteTimeStamp", overwriteTimeStamp.isSelected());
         _prefs.putBoolean("dialogWarningForDuplicateKey", keyDuplicateWarningDialog.isSelected());
         _prefs.putBoolean("dialogWarningForEmptyKey", keyEmptyWarningDialog.isSelected());
+        _prefs.putBoolean("enforceLegalBibtexKey", enforceLegalKeys.isSelected());
         if (_prefs.getBoolean("memoryStickMode") && !memoryStick.isSelected()){
             JOptionPane.showMessageDialog(null, Globals.lang("To disable the memory stick mode" +
             		" rename or remove the jabref.xml file in the same folder as JabRef."),
diff --git a/src/java/net/sf/jabref/Globals.java b/src/java/net/sf/jabref/Globals.java
index 856dae8..d6625ff 100644
--- a/src/java/net/sf/jabref/Globals.java
+++ b/src/java/net/sf/jabref/Globals.java
@@ -410,7 +410,7 @@ public class Globals {
 	}
 
 
-    public static String SPECIAL_COMMAND_CHARS = "\"`^~'c";
+    public static String SPECIAL_COMMAND_CHARS = "\"`^~'c=";
 
 	public static HashMap<String, String> HTML_CHARS = new HashMap<String, String>();
 	public static HashMap<String, String> HTMLCHARS = new HashMap<String, String>();
diff --git a/src/java/net/sf/jabref/JabRef.java b/src/java/net/sf/jabref/JabRef.java
index 3e8578b..125fd41 100644
--- a/src/java/net/sf/jabref/JabRef.java
+++ b/src/java/net/sf/jabref/JabRef.java
@@ -293,7 +293,7 @@ public class JabRef {
                             loaded.add(ParserResult.INVALID_FORMAT);
                     }
                 }
-                else
+                else if (pr != ParserResult.FILE_LOCKED)
                     loaded.add(pr);
 
             }
@@ -482,10 +482,6 @@ public class JabRef {
             fetchCommand.split(":").length != 2) {
             System.out.println(Globals.lang("Expected syntax for --fetch='<name of fetcher>:<query>'"));
             System.out.println(Globals.lang("The following fetchers are available:"));
-            for (EntryFetcherExtension e : JabRefPlugin.getInstance(PluginCore.getManager())
-                .getEntryFetcherExtensions()) {
-                System.out.println("  " + e.getId().replaceAll("Fetcher", "").toLowerCase());
-            }
             return null;
         }
 
@@ -691,10 +687,11 @@ public class JabRef {
 
                         if (pr != null) {
 
-                            if (pr.isInvalid()) {
+                            if (pr == ParserResult.INVALID_FORMAT) {
                                 System.out.println(Globals.lang("Error opening file")+" '"+fileToOpen.getPath()+"'");
                             }
-                            loaded.add(pr);
+                            else if (pr != ParserResult.FILE_LOCKED)
+                                loaded.add(pr);
 
                         }
                     }
@@ -858,6 +855,13 @@ public class JabRef {
                     return postp;
                 }
             }
+
+            if (!Util.waitForFileLock(file, 10)) {
+                System.out.println(Globals.lang("Error opening file")+" '"+name+"'. "+
+                    "File is locked by another JabRef instance.");
+                return ParserResult.FILE_LOCKED;
+            }
+
             String encoding = Globals.prefs.get("defaultEncoding");
             ParserResult pr = OpenDatabaseAction.loadDatabase(file, encoding);
             if (pr == null) {
diff --git a/src/java/net/sf/jabref/JabRefPreferences.java b/src/java/net/sf/jabref/JabRefPreferences.java
index 4b51df8..fe02fde 100644
--- a/src/java/net/sf/jabref/JabRefPreferences.java
+++ b/src/java/net/sf/jabref/JabRefPreferences.java
@@ -261,7 +261,7 @@ public class JabRefPreferences {
 
         //defaults.put("recentFiles", "/home/alver/Documents/bibk_dok/hovedbase.bib");
         defaults.put("historySize", new Integer(8));
-        defaults.put("fontFamily", "Times");
+        defaults.put("fontFamily", "SansSerif");
         defaults.put("fontStyle", new Integer(java.awt.Font.PLAIN));
         defaults.put("fontSize", new Integer(12));
         defaults.put("overrideDefaultFonts", Boolean.FALSE);
@@ -298,6 +298,7 @@ public class JabRefPreferences {
         defaults.put("warnBeforeOverwritingKey", Boolean.TRUE);
         defaults.put("confirmDelete", Boolean.TRUE);
         defaults.put("grayOutNonHits", Boolean.TRUE);
+        defaults.put("floatSearch", Boolean.TRUE);
         defaults.put("showSearchInDialog", Boolean.FALSE);
         defaults.put("searchAllBases", Boolean.FALSE);
         defaults.put("defaultLabelPattern", "[auth][year]");
@@ -382,13 +383,15 @@ public class JabRefPreferences {
         defaults.put("autolinkExactKeyOnly", Boolean.TRUE);
         defaults.put("numericFields", "mittnum;author");
         defaults.put("runAutomaticFileSearch", Boolean.FALSE);
-
+        defaults.put("useLockFiles", Boolean.TRUE);
         defaults.put("autoSave", Boolean.TRUE);
         defaults.put("autoSaveInterval", 5);
         defaults.put("promptBeforeUsingAutosave", Boolean.TRUE);
 
         defaults.put("deletePlugins", "");
         
+        defaults.put("enforceLegalBibtexKey", Boolean.TRUE);
+
         //defaults.put("lastAutodetectedImport", "");
 
         //defaults.put("autoRemoveExactDuplicates", Boolean.FALSE);
@@ -882,6 +885,7 @@ public class JabRefPreferences {
         defKeyBinds.put("Increase table font size", "ctrl PLUS");
         defKeyBinds.put("Decrease table font size", "ctrl MINUS");
 
+        defKeyBinds.put("Automatically link files", "alt F");
     }
 
     private String getNextUnit(Reader data) throws IOException {
diff --git a/src/java/net/sf/jabref/PreviewPanel.java b/src/java/net/sf/jabref/PreviewPanel.java
index 036099c..1b5148c 100644
--- a/src/java/net/sf/jabref/PreviewPanel.java
+++ b/src/java/net/sf/jabref/PreviewPanel.java
@@ -22,7 +22,7 @@ import net.sf.jabref.util.DocumentPrinter;
  * Displays an BibtexEntry using the given layout format.
  * 
  * @author $Author: mortenalver $
- * @version $Revision: 2983 $ ($Date: 2007-08-01 20:23:38 +0200 (Mi, 01 Aug
+ * @version $Revision: 3047 $ ($Date: 2007-08-01 20:23:38 +0200 (Mi, 01 Aug
  *          2007) $)
  * 
  */
diff --git a/src/java/net/sf/jabref/RegExpRule.java b/src/java/net/sf/jabref/RegExpRule.java
index 5f591e5..4183f99 100644
--- a/src/java/net/sf/jabref/RegExpRule.java
+++ b/src/java/net/sf/jabref/RegExpRule.java
@@ -32,12 +32,13 @@ import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import java.util.regex.PatternSyntaxException;
 
-import net.sf.jabref.export.layout.format.RemoveBrackets;
+import net.sf.jabref.export.layout.format.RemoveLatexCommands;
 
 public class RegExpRule implements SearchRule {
 
     final boolean m_caseSensitiveSearch;
-    static RemoveBrackets removeBrackets = new RemoveBrackets();
+    //static RemoveBrackets removeBrackets = new RemoveBrackets();
+    static RemoveLatexCommands removeBrackets = new RemoveLatexCommands();
 
     public RegExpRule(boolean caseSensitive) {
         m_caseSensitiveSearch = caseSensitive;
diff --git a/src/java/net/sf/jabref/SearchManager2.java b/src/java/net/sf/jabref/SearchManager2.java
index 43c041e..4a9b1c9 100644
--- a/src/java/net/sf/jabref/SearchManager2.java
+++ b/src/java/net/sf/jabref/SearchManager2.java
@@ -218,7 +218,7 @@ class SearchManager2 extends SidePaneComponent
     // Select the last used mode of search:
     if (Globals.prefs.getBoolean("incrementS"))
         increment.setSelected(true);
-    else if (Globals.prefs.getBoolean("grayOutNonHits"))
+    else if (Globals.prefs.getBoolean("floatSearch"))
         floatSearch.setSelected(true);
     else if (Globals.prefs.getBoolean("showSearchInDialog"))
         showResultsInDialog.setSelected(true);
@@ -320,7 +320,7 @@ class SearchManager2 extends SidePaneComponent
         Globals.prefs.putBoolean("searchAll", searchAll.isSelected());
         Globals.prefs.putBoolean("incrementS", increment.isSelected());
         Globals.prefs.putBoolean("selectS", select.isSelected());
-        Globals.prefs.putBoolean("grayOutNonHits", floatSearch.isSelected());
+        Globals.prefs.putBoolean("floatSearch", floatSearch.isSelected());
         Globals.prefs.putBoolean("caseSensitiveSearch",
                  caseSensitive.isSelected());
         Globals.prefs.putBoolean("regExpSearch", regExpSearch.isSelected());
diff --git a/src/java/net/sf/jabref/SimpleSearchRule.java b/src/java/net/sf/jabref/SimpleSearchRule.java
index 2517d02..e42fe12 100644
--- a/src/java/net/sf/jabref/SimpleSearchRule.java
+++ b/src/java/net/sf/jabref/SimpleSearchRule.java
@@ -28,12 +28,13 @@ package net.sf.jabref;
 
 import java.util.Map;
 
-import net.sf.jabref.export.layout.format.RemoveBrackets;
+import net.sf.jabref.export.layout.format.RemoveLatexCommands;
 
 public class SimpleSearchRule implements SearchRule {
 
     final boolean m_caseSensitiveSearch;
-    static RemoveBrackets removeBrackets = new RemoveBrackets();
+    //static RemoveBrackets removeBrackets = new RemoveBrackets();
+    static RemoveLatexCommands removeBrackets = new RemoveLatexCommands();
 
     public SimpleSearchRule(boolean caseSensitive) {
         m_caseSensitiveSearch = caseSensitive;
diff --git a/src/java/net/sf/jabref/Util.java b/src/java/net/sf/jabref/Util.java
index efc49c5..8e44f07 100644
--- a/src/java/net/sf/jabref/Util.java
+++ b/src/java/net/sf/jabref/Util.java
@@ -51,9 +51,7 @@ import java.io.IOException;
 import java.io.PrintWriter;
 import java.io.StringWriter;
 import java.io.UnsupportedEncodingException;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.net.URLDecoder;
+import java.net.*;
 import java.nio.charset.Charset;
 import java.nio.charset.CharsetEncoder;
 import java.text.NumberFormat;
@@ -78,18 +76,12 @@ import java.util.Vector;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-import javax.swing.Box;
-import javax.swing.JButton;
-import javax.swing.JFrame;
-import javax.swing.JLabel;
-import javax.swing.JOptionPane;
-import javax.swing.JPanel;
-import javax.swing.JScrollPane;
-import javax.swing.JTextArea;
+import javax.swing.*;
 import javax.swing.undo.UndoableEdit;
 
 import net.sf.jabref.export.layout.LayoutEntry;
 import net.sf.jabref.export.layout.LayoutFormatter;
+import net.sf.jabref.export.SaveSession;
 import net.sf.jabref.external.ExternalFileType;
 import net.sf.jabref.external.ExternalFileTypeEntryEditor;
 import net.sf.jabref.external.UnknownExternalFileType;
@@ -103,6 +95,7 @@ import net.sf.jabref.imports.CiteSeerFetcher;
 import net.sf.jabref.undo.NamedCompound;
 import net.sf.jabref.undo.UndoableFieldChange;
 import net.sf.jabref.labelPattern.LabelPatternUtil;
+import net.sf.jabref.net.URLDownload;
 
 import com.jgoodies.forms.builder.DefaultFormBuilder;
 import com.jgoodies.forms.layout.FormLayout;
@@ -137,6 +130,8 @@ public class Util {
 
 	final static NumberFormat idFormat;
 
+    public static Pattern remoteLinkPattern = Pattern.compile("[a-z]+://.*");
+
 	static {
 		idFormat = NumberFormat.getInstance();
 		idFormat.setMinimumIntegerDigits(8);
@@ -315,7 +310,21 @@ public class Util {
 	public static String checkLegalKey(String key) {
 		if (key == null)
 			return null;
-		StringBuffer newKey = new StringBuffer();
+        if (!Globals.prefs.getBoolean("enforceLegalBibtexKey")) {
+            // User doesn't want us to enforce legal characters. We must still look
+            // for whitespace and some characters such as commas, since these would
+            // interfere with parsing:
+            StringBuilder newKey = new StringBuilder();
+            for (int i = 0; i < key.length(); i++) {
+                char c = key.charAt(i);
+                if (!Character.isWhitespace(c) && (c != '{') && (c != '\\') && (c != '"')
+                    && (c != '}') && (c != ','))
+                    newKey.append(c);
+            }
+            return newKey.toString();
+
+        }
+		StringBuilder newKey = new StringBuilder();
 		for (int i = 0; i < key.length(); i++) {
 			char c = key.charAt(i);
 			if (!Character.isWhitespace(c) && (c != '#') && (c != '{') && (c != '\\') && (c != '"')
@@ -403,9 +412,9 @@ public class Util {
 		return out.toString();// .replaceAll("\n", "\n\t");
 	}
 
-	public static HashSet<String> findDeliminatedWordsInField(BibtexDatabase db, String field,
+	public static TreeSet<String> findDeliminatedWordsInField(BibtexDatabase db, String field,
 		String deliminator) {
-		HashSet<String> res = new HashSet<String>();
+		TreeSet<String> res = new TreeSet<String>();
 		
 		for (String s : db.getKeySet()){
 			BibtexEntry be = db.getEntryById(s);
@@ -414,7 +423,7 @@ public class Util {
 				String fieldValue = o.toString().trim();
 				StringTokenizer tok = new StringTokenizer(fieldValue, deliminator);
 				while (tok.hasMoreTokens())
-					res.add(tok.nextToken().trim());
+					res.add(nCase(tok.nextToken().trim()));
 			}
 		}
 		return res;
@@ -434,8 +443,8 @@ public class Util {
 	 *            a <code>String</code> value
 	 * @return a <code>HashSet</code> value
 	 */
-	public static HashSet<String> findAllWordsInField(BibtexDatabase db, String field, String remove) {
-		HashSet<String> res = new HashSet<String>();
+	public static TreeSet<String> findAllWordsInField(BibtexDatabase db, String field, String remove) {
+		TreeSet<String> res = new TreeSet<String>();
 		StringTokenizer tok;
 		for (String s : db.getKeySet()){
 			BibtexEntry be = db.getEntryById(s);
@@ -443,12 +452,42 @@ public class Util {
 			if (o != null) {
 				tok = new StringTokenizer(o.toString(), remove, false);
 				while (tok.hasMoreTokens())
-					res.add(tok.nextToken());
+					res.add(nCase(tok.nextToken().trim()));
 			}
 		}
 		return res;
 	}
 
+
+    /**
+     * Finds all authors' last names in all the given fields for the given database.
+     * @param db The database.
+     * @param fields The fields to look in.
+     * @return a set containing the names.
+     */
+    public static Set<String> findAuthorLastNames(BibtexDatabase db, List<String> fields) {
+		Set<String> res = new TreeSet<String>();
+		for (String s : db.getKeySet()){
+			BibtexEntry be = db.getEntryById(s);
+            for (String field : fields) {
+                String val = be.getField(field);
+                if ((val != null) && (val.length() > 0)) {
+                    AuthorList al = AuthorList.getAuthorList(val);
+                    for (int i=0; i<al.size(); i++) {
+                        AuthorList.Author a = al.getAuthor(i);
+                        String lastName = a.getLast();
+                        if ((lastName != null) && (lastName.length() > 0))
+                            res.add(lastName);
+                    }
+                }
+
+            }
+		}
+
+		return res;
+	}
+    
+
 	/**
 	 * Takes a String array and returns a string with the array's elements
 	 * delimited by a certain String.
@@ -677,11 +716,32 @@ public class Util {
 	 *            The file name.
      * @return false if the link couldn't be resolved, true otherwise.
 	 */
-	public static boolean openExternalFileAnyFormat(MetaData metaData, String link,
-                                                 ExternalFileType fileType) throws IOException {
+	public static boolean openExternalFileAnyFormat(final MetaData metaData, String link,
+                                                 final ExternalFileType fileType) throws IOException {
 
-        boolean httpLink = link.toLowerCase().startsWith("http");
+        boolean httpLink = false;
 
+        if (remoteLinkPattern.matcher(link.toLowerCase()).matches()) {
+            httpLink = true;
+        }
+        /*if (link.toLowerCase().startsWith("file://")) {
+            link = link.substring(7);
+        }
+        final String ln = link;
+        if (remoteLinkPattern.matcher(link.toLowerCase()).matches()) {
+            (new Thread(new Runnable() {
+                public void run() {
+                    openRemoteExternalFile(metaData, ln, fileType);
+                }
+            })).start();
+
+            return true;
+        }*/
+
+        //boolean httpLink = link.toLowerCase().startsWith("http:")
+        //        || link.toLowerCase().startsWith("ftp:");
+
+        
         // For other platforms we'll try to find the file type:
 		File file = new File(link);
 
@@ -777,6 +837,34 @@ public class Util {
 
     }
 
+
+    public static void openRemoteExternalFile(final MetaData metaData,
+                                              final String link, final ExternalFileType fileType) {
+        File temp = null;
+        try {
+            temp = File.createTempFile("jabref-link", "."+fileType.getExtension());
+            temp.deleteOnExit();
+            System.out.println("Downloading to '"+temp.getPath()+"'");
+            URLDownload ud = new URLDownload(null, new URL(link), temp);
+            ud.download();
+            System.out.println("Done");
+        } catch (MalformedURLException ex) {
+            ex.printStackTrace();
+        } catch (IOException ex) {
+            ex.printStackTrace();
+        }
+        final String ln = temp.getPath();
+        SwingUtilities.invokeLater(new Runnable() {
+            public void run() {
+                try {
+                    openExternalFileAnyFormat(metaData, ln, fileType);
+                } catch (IOException ex) {
+                    ex.printStackTrace();
+                }
+            }
+        });
+    }
+
 public static boolean openExternalFileUnknown(JabRefFrame frame, BibtexEntry entry, MetaData metaData,
                                            String link, UnknownExternalFileType fileType) throws IOException {
 
@@ -2709,5 +2797,62 @@ public static boolean openExternalFileUnknown(JabRefFrame frame, BibtexEntry ent
         // of execution will not continue until run() is finished.
         clb.update(); // Runs the update() method on the EDT.
     }
-	
+
+    /**
+     * This method checks whether there is a lock file for the given file. If
+     * there is, it waits for 500 ms. This is repeated until the lock is gone
+     * or we have waited the maximum number of times.
+     *
+     * @param file The file to check the lock for.
+     * @param maxWaitCount The maximum number of times to wait.
+     * @return true if the lock file is gone, false if it is still there.
+     */
+    public static boolean waitForFileLock(File file, int maxWaitCount) {
+        // Check if the file is locked by another JabRef user:
+        int lockCheckCount = 0;
+        while (Util.hasLockFile(file)) {
+
+            System.out.println("File locked... waiting");
+            if (lockCheckCount++ == maxWaitCount) {
+                System.out.println("Giving up wait.");
+                return false;
+            }
+            try { Thread.sleep(500); } catch (InterruptedException ex) {}
+        }
+        return true;
+    }
+
+    /**
+     * Check whether a lock file exists for this file.
+     * @param file The file to check.
+     * @return true if a lock file exists, false otherwise.
+     */
+    public static boolean hasLockFile(File file) {
+        File lock = new File(file.getPath()+ SaveSession.LOCKFILE_SUFFIX);
+        return lock.exists();
+    }
+
+    /**
+     * Find the lock file's last modified time, if it has a lock file.
+     * @param file The file to check.
+     * @return the last modified time if lock file exists, -1 otherwise.
+     */
+    public static long getLockFileTimeStamp(File file) {
+        File lock = new File(file.getPath()+ SaveSession.LOCKFILE_SUFFIX);
+        return lock.exists() ? lock.lastModified() : -1;
+    }
+
+        /**
+     * Check if a lock file exists, and delete it if it does.
+     * @return true if the lock file existed, false otherwise.
+     * @throws IOException if something goes wrong.
+     */
+    public static boolean deleteLockFile(File file) {
+        File lock = new File(file.getPath()+SaveSession.LOCKFILE_SUFFIX);
+        if (!lock.exists()) {
+            return false;
+        }
+        lock.delete();
+        return true;
+    }
 }
\ No newline at end of file
diff --git a/src/java/net/sf/jabref/collab/Change.java b/src/java/net/sf/jabref/collab/Change.java
index 342fd8f..754e392 100644
--- a/src/java/net/sf/jabref/collab/Change.java
+++ b/src/java/net/sf/jabref/collab/Change.java
@@ -2,6 +2,8 @@ package net.sf.jabref.collab;
 
 import net.sf.jabref.Globals;
 import net.sf.jabref.BasePanel;
+import net.sf.jabref.BibtexDatabase;
+
 import javax.swing.tree.DefaultMutableTreeNode;
 import javax.swing.JComponent;
 import net.sf.jabref.undo.NamedCompound;
@@ -57,8 +59,10 @@ public abstract class Change extends DefaultMutableTreeNode {
   * Perform the change. This method is responsible for adding a proper undo edit to
   * the NamedCompound, so the change can be undone.
   * @param panel BasePanel The tab where the database lives.
+  * @param secondary BibtexDatabase The "tmp" database for which the change
+  *   should also be made.
   * @param undoEdit NamedCompound The compound to hold the undo edits.
   */
-  abstract void makeChange(BasePanel panel, NamedCompound undoEdit);
+  abstract void makeChange(BasePanel panel, BibtexDatabase secondary, NamedCompound undoEdit);
 
 }
diff --git a/src/java/net/sf/jabref/collab/ChangeDisplayDialog.java b/src/java/net/sf/jabref/collab/ChangeDisplayDialog.java
index 92aa1b3..3ddaf27 100644
--- a/src/java/net/sf/jabref/collab/ChangeDisplayDialog.java
+++ b/src/java/net/sf/jabref/collab/ChangeDisplayDialog.java
@@ -13,11 +13,13 @@ import java.awt.event.ActionListener;
 import java.awt.event.ActionEvent;
 import java.util.Enumeration;
 import net.sf.jabref.BasePanel;
+import net.sf.jabref.BibtexDatabase;
 import net.sf.jabref.undo.NamedCompound;
 
 public class ChangeDisplayDialog extends JDialog implements TreeSelectionListener {
 
-  DefaultMutableTreeNode root;
+    private BibtexDatabase secondary;
+    DefaultMutableTreeNode root;
   JTree tree;
   JPanel infoPanel = new JPanel(),
       buttonPanel = new JPanel(),
@@ -30,9 +32,16 @@ public class ChangeDisplayDialog extends JDialog implements TreeSelectionListene
   JComponent infoShown = null;
     private boolean okPressed = false;
 
-  public ChangeDisplayDialog(JFrame owner, final BasePanel panel, final DefaultMutableTreeNode root) {
+  public ChangeDisplayDialog(JFrame owner, final BasePanel panel,
+                             BibtexDatabase secondary, final DefaultMutableTreeNode root) {
     super(owner, Globals.lang("External changes"), true);
-    this.root = root;
+      this.secondary = secondary;
+
+      // Just to be sure, put in an empty secondary base if none is given:
+      if (secondary == null) {
+          this.secondary = new BibtexDatabase();
+      }
+      this.root = root;
     tree = new JTree(root);
     tree.addTreeSelectionListener(this);
     JSplitPane pane = new JSplitPane();
@@ -77,7 +86,7 @@ public class ChangeDisplayDialog extends JDialog implements TreeSelectionListene
         for (; enumer.hasMoreElements();) {
           Change c = (Change)enumer.nextElement();
           if (c.isAcceptable() && c.isAccepted())
-            c.makeChange(panel, ce);
+            c.makeChange(panel, ChangeDisplayDialog.this.secondary, ce);
         }
         ce.end();
         panel.undoManager.addEdit(ce);
diff --git a/src/java/net/sf/jabref/collab/ChangeScanner.java b/src/java/net/sf/jabref/collab/ChangeScanner.java
index 5e18b1a..e2969a9 100644
--- a/src/java/net/sf/jabref/collab/ChangeScanner.java
+++ b/src/java/net/sf/jabref/collab/ChangeScanner.java
@@ -4,12 +4,17 @@ import java.io.File;
 import java.io.IOException;
 import java.util.HashSet;
 import java.util.Iterator;
+import java.util.Vector;
+import java.util.ArrayList;
 
 import javax.swing.JOptionPane;
 import javax.swing.SwingUtilities;
 import javax.swing.tree.DefaultMutableTreeNode;
 
 import net.sf.jabref.*;
+import net.sf.jabref.export.FileActions;
+import net.sf.jabref.export.SaveException;
+import net.sf.jabref.export.SaveSession;
 import net.sf.jabref.groups.GroupTreeNode;
 import net.sf.jabref.imports.OpenDatabaseAction;
 import net.sf.jabref.imports.ParserResult;
@@ -20,8 +25,8 @@ public class ChangeScanner extends Thread {
     final double MATCH_THRESHOLD = 0.4;
     final String[] sortBy = new String[] {"year", "author", "title" };
     File f;
-    BibtexDatabase inMem;
-    MetaData mdInMem;
+    BibtexDatabase inMem, inTemp = null;
+    MetaData mdInMem, mdInTemp;
     BasePanel panel;
     JabRefFrame frame;
 
@@ -58,8 +63,8 @@ public class ChangeScanner extends Thread {
             File tempFile = Globals.fileUpdateMonitor.getTempFile(panel.fileMonitorHandle());
             ParserResult pr = OpenDatabaseAction.loadDatabase(tempFile,
             Globals.prefs.get("defaultEncoding"));
-            BibtexDatabase inTemp = pr.getDatabase();
-            MetaData mdInTemp = new MetaData(pr.getMetaData(),inTemp);
+            inTemp = pr.getDatabase();
+            mdInTemp = new MetaData(pr.getMetaData(),inTemp);
             // Parse the modified file.
             pr = OpenDatabaseAction.loadDatabase(f, Globals.prefs.get("defaultEncoding"));
             BibtexDatabase onDisk = pr.getDatabase();
@@ -80,7 +85,7 @@ public class ChangeScanner extends Thread {
             EntrySorter sInMem = inMem.getSorter(comp);
 
             // Start looking at changes.
-
+            scanMetaData(mdInMem, mdInTemp, mdOnDisk);
             scanPreamble(inMem, inTemp, onDisk);
             scanStrings(inMem, inTemp, onDisk);
 
@@ -95,6 +100,7 @@ public class ChangeScanner extends Thread {
         }
     }
 
+
     public boolean changesFound() {
         return changes.getChildCount() > 0;
     }
@@ -103,10 +109,14 @@ public class ChangeScanner extends Thread {
         if (changes.getChildCount() > 0) {
             SwingUtilities.invokeLater(new Runnable() {
                 public void run() {
-                    ChangeDisplayDialog dial = new ChangeDisplayDialog(frame, panel, changes);
+                    ChangeDisplayDialog dial = new ChangeDisplayDialog(frame, panel, inTemp, changes);
                     Util.placeDialog(dial, frame);
                     dial.setVisible(true); // dial.show(); -> deprecated since 1.5
                     fup.scanResultsResolved(dial.isOkPressed());
+                    if (dial.isOkPressed()) {
+                        // Overwrite the temp database:
+                        storeTempDatabase();
+                    }
                 }
             });
 
@@ -117,6 +127,60 @@ public class ChangeScanner extends Thread {
         }
     }
 
+    private void storeTempDatabase() {
+        new Thread(new Runnable() {
+            public void run() {
+                System.out.println("Storing temp database");
+                try {
+                    SaveSession ss = FileActions.saveDatabase(inTemp, mdInTemp,
+                        Globals.fileUpdateMonitor.getTempFile(panel.fileMonitorHandle()), Globals.prefs,
+                        false, false, panel.getEncoding(), true);
+                    ss.commit();
+                    System.out.println("done");
+                } catch (SaveException ex) {
+                    System.out.println("Problem updating tmp file after accepting external changes");
+                }
+
+
+            }
+        }).start();
+    }
+
+    private void scanMetaData(MetaData inMem, MetaData inTemp, MetaData onDisk) {
+        MetaDataChange mdc = new MetaDataChange(inMem, inTemp);
+        ArrayList<String> handledOnDisk = new ArrayList<String>();
+        // Loop through the metadata entries of the "tmp" database, looking for
+        // matches
+        for (Iterator i = inTemp.iterator(); i.hasNext();) {
+            String key = (String)i.next();
+            // See if the key is missing in the disk database:
+            Vector<String> vod = onDisk.getData(key);
+            if (vod == null) {
+                mdc.insertMetaDataRemoval(key);
+            }
+            else {
+                // Both exist. Check if they are different:
+                Vector<String> vit = inTemp.getData(key);
+                if (!vod.equals(vit))
+                    mdc.insertMetaDataChange(key, vod);
+                // Remember that we've handled this one:
+                handledOnDisk.add(key);
+            }
+        }
+
+        // See if there are unhandled keys in the disk database:
+        for (Iterator i = onDisk.iterator(); i.hasNext();) {
+            String key = (String)i.next();
+            if (!handledOnDisk.contains(key)) {
+                mdc.insertMetaDataAddition(key, onDisk.getData(key));
+            }
+        }
+
+        if (mdc.getChangeCount() > 0)
+            changes.add(mdc);
+    }
+
+
     private void scanEntries(EntrySorter mem, EntrySorter tmp, EntrySorter disk) {
 
         // Create pointers that are incremented as the entries of each base are used in
@@ -129,7 +193,7 @@ public class ChangeScanner extends Thread {
         HashSet<String> used = new HashSet<String>(disk.getEntryCount());
         HashSet<Integer> notMatched = new HashSet<Integer>(tmp.getEntryCount());
 
-        // Loop through the entries of the "mem" database, looking for exact matches in the "disk" one.
+        // Loop through the entries of the "tmp" database, looking for exact matches in the "disk" one.
         // We must finish scanning for exact matches before looking for near matches, to avoid an exact
         // match being "stolen" from another entry.
         mainLoop: for (piv1=0; piv1<tmp.getEntryCount(); piv1++) {
@@ -323,11 +387,11 @@ public class ChangeScanner extends Thread {
                             // But they have nonmatching contents, so we've found a change.
                             BibtexString mem = findString(inMem, tmp.getName(), usedInMem);
                             if (mem != null)
-                                changes.add(new StringChange(mem, tmp.getName(),
+                                changes.add(new StringChange(mem, tmp, tmp.getName(),
                                 mem.getContent(),
                                 tmp.getContent(), disk.getContent()));
                             else
-                                changes.add(new StringChange(null, tmp.getName(), null, tmp.getContent(), disk.getContent()));
+                                changes.add(new StringChange(null, tmp, tmp.getName(), null, tmp.getContent(), disk.getContent()));
                         }
                         used.add(diskId);
                         //if (j==piv2)
@@ -370,7 +434,7 @@ public class ChangeScanner extends Thread {
                                 }
                             }
 
-                            changes.add(new StringNameChange(bsMem, bsMem.getName(),
+                            changes.add(new StringNameChange(bsMem, tmp, bsMem.getName(),
                             tmp.getName(), disk.getName(),
                             tmp.getContent()));
                             i.remove();
@@ -389,7 +453,7 @@ public class ChangeScanner extends Thread {
                 BibtexString tmp = onTmp.getString(nmId);
                 BibtexString mem = findString(inMem, tmp.getName(), usedInMem);
                 if (mem != null) { // The removed string is not removed from the mem version.
-                    changes.add(new StringRemoveChange(tmp, mem));
+                    changes.add(new StringRemoveChange(tmp, tmp, mem));
                 }
             }
         }
@@ -434,12 +498,12 @@ public class ChangeScanner extends Thread {
             return;
         if ((groupsTmp != null && groupsDisk == null)
                 || (groupsTmp == null && groupsDisk != null)) {
-            changes.add(new GroupChange(groupsDisk));
+            changes.add(new GroupChange(groupsDisk, groupsTmp));
             return;
         }
         if (groupsTmp.equals(groupsDisk))
             return;
-        changes.add(new GroupChange(groupsDisk));
+        changes.add(new GroupChange(groupsDisk, groupsTmp));
         return;
 
 //
diff --git a/src/java/net/sf/jabref/collab/EntryAddChange.java b/src/java/net/sf/jabref/collab/EntryAddChange.java
index 5053041..275e8cf 100644
--- a/src/java/net/sf/jabref/collab/EntryAddChange.java
+++ b/src/java/net/sf/jabref/collab/EntryAddChange.java
@@ -22,9 +22,10 @@ public class EntryAddChange extends Change {
     sp = new JScrollPane(pp);
   }
 
-  public void makeChange(BasePanel panel, NamedCompound undoEdit) {
+  public void makeChange(BasePanel panel, BibtexDatabase secondary, NamedCompound undoEdit) {
       diskEntry.setId(Util.createNeutralId());
       panel.database().insertEntry(diskEntry);
+      secondary.insertEntry(diskEntry);
       undoEdit.addEdit(new UndoableInsertEntry(panel.database(), diskEntry, panel));
   }
 
diff --git a/src/java/net/sf/jabref/collab/EntryChange.java b/src/java/net/sf/jabref/collab/EntryChange.java
index bfc9719..01a44f5 100644
--- a/src/java/net/sf/jabref/collab/EntryChange.java
+++ b/src/java/net/sf/jabref/collab/EntryChange.java
@@ -51,15 +51,15 @@ public class EntryChange extends Change {
       if ((tmp != null) && (disk != null)) {
         if (!tmp.equals(disk)) {
           // Modified externally.
-          add(new FieldChange(field, memEntry, mem, tmp, disk));
+          add(new FieldChange(field, memEntry, tmpEntry, mem, tmp, disk));
         }
       } else if ((tmp == null) && (disk != null) && !disk.equals("")) {
         // Added externally.
-        add(new FieldChange(field, memEntry, mem, tmp, disk));
+        add(new FieldChange(field, memEntry, tmpEntry, mem, tmp, disk));
       } else if ((disk == null) && (tmp != null) && !tmp.equals("")
                  && (mem != null) && !mem.equals("")) {
         // Deleted externally and not locally.
-        add(new FieldChange(field, memEntry, mem, tmp, disk));
+        add(new FieldChange(field, memEntry, tmpEntry, mem, tmp, disk));
       }
 
       //Util.pr("Field: "+fld.next());
@@ -67,14 +67,14 @@ public class EntryChange extends Change {
   }
 
   
-public void makeChange(BasePanel panel, NamedCompound undoEdit) {
+public void makeChange(BasePanel panel, BibtexDatabase secondary, NamedCompound undoEdit) {
 
 	@SuppressWarnings("unchecked")
     Enumeration<Change> e = children();
     for (; e.hasMoreElements();) {
       Change c = e.nextElement();
       if (c.isAcceptable() && c.isAccepted())
-        c.makeChange(panel, undoEdit);
+        c.makeChange(panel, secondary, undoEdit);
     }
 
     /*panel.database().removeEntry(memEntry.getId());
@@ -93,13 +93,14 @@ public void makeChange(BasePanel panel, NamedCompound undoEdit) {
 
   class FieldChange extends Change {
 
-    BibtexEntry entry;
+    BibtexEntry entry, tmpEntry;
     String field, inMem, onTmp, onDisk;
     InfoPane tp = new InfoPane();
     JScrollPane sp = new JScrollPane(tp);
 
-    public FieldChange(String field, BibtexEntry memEntry, String inMem, String onTmp, String onDisk) {
+    public FieldChange(String field, BibtexEntry memEntry, BibtexEntry tmpEntry, String inMem, String onTmp, String onDisk) {
       entry = memEntry;
+      this.tmpEntry = tmpEntry;
       name = field;
       this.field = field;
       this.inMem = inMem;
@@ -117,6 +118,8 @@ public void makeChange(BasePanel panel, NamedCompound undoEdit) {
 
       if ((inMem != null) && !inMem.equals(""))
           text.append("<H3>").append(Globals.lang("Current value")).append(":</H3>" + " ").append(inMem);
+      if ((onTmp != null) && !onTmp.equals(""))
+          text.append("<H3>").append(Globals.lang("Current tmp value")).append(":</H3>" + " ").append(onTmp);
       else {
         // No value in memory.
         /*if ((onTmp != null) && !onTmp.equals(inMem))
@@ -127,10 +130,11 @@ public void makeChange(BasePanel panel, NamedCompound undoEdit) {
       tp.setText(text.toString());
     }
 
-    public void makeChange(BasePanel panel, NamedCompound undoEdit) {
+    public void makeChange(BasePanel panel, BibtexDatabase secondary, NamedCompound undoEdit) {
       //System.out.println(field+" "+onDisk);
       entry.setField(field, onDisk);
       undoEdit.addEdit(new UndoableFieldChange(entry, field, inMem, onDisk));
+      tmpEntry.setField(field, onDisk);
     }
 
     JComponent description() {
diff --git a/src/java/net/sf/jabref/collab/EntryDeleteChange.java b/src/java/net/sf/jabref/collab/EntryDeleteChange.java
index 121e2cf..d3997bb 100644
--- a/src/java/net/sf/jabref/collab/EntryDeleteChange.java
+++ b/src/java/net/sf/jabref/collab/EntryDeleteChange.java
@@ -34,9 +34,10 @@ public class EntryDeleteChange extends Change {
     sp = new JScrollPane(pp);
   }
 
-  public void makeChange(BasePanel panel, NamedCompound undoEdit) {
+  public void makeChange(BasePanel panel, BibtexDatabase secondary, NamedCompound undoEdit) {
     panel.database().removeEntry(memEntry.getId());
     undoEdit.addEdit(new UndoableRemoveEntry(panel.database(), memEntry, panel));
+    secondary.removeEntry(tmpEntry.getId());
   }
 
   JComponent description() {
diff --git a/src/java/net/sf/jabref/collab/FileUpdateMonitor.java b/src/java/net/sf/jabref/collab/FileUpdateMonitor.java
index 92b2624..0f7b433 100644
--- a/src/java/net/sf/jabref/collab/FileUpdateMonitor.java
+++ b/src/java/net/sf/jabref/collab/FileUpdateMonitor.java
@@ -91,6 +91,20 @@ public class FileUpdateMonitor extends Thread {
 	}
     }
 
+    /**
+     * Change the stored timestamp for the given file. If the timestamp equals
+     * the file's timestamp on disk, after this call the file will appear to
+     * have been modified. Used if a file has been modified, and the change
+     * scan fails, in order to ensure successive checks.
+     * @param handle the handle to the correct file.
+     */
+    public void perturbTimestamp(String handle) {
+        Object o = entries.get(handle);
+        if (o == null)
+            return;
+        ((Entry)o).timeStamp--;
+    }
+
   /**
    * Removes a listener from the monitor.
    * @param handle String The handle for the listener to remove.
@@ -213,7 +227,8 @@ public class FileUpdateMonitor extends Thread {
     // Globals.prefs.get("tempDir")
     //while ((f = File.createTempFile("jabref"+(tmpNum++), null)).exists());
     try {
-	f = File.createTempFile("jabref", null);
+	    f = File.createTempFile("jabref", null);
+        f.deleteOnExit();
 	//System.out.println(f.getPath());
     } catch (IOException ex) {
 	ex.printStackTrace();
diff --git a/src/java/net/sf/jabref/collab/GroupChange.java b/src/java/net/sf/jabref/collab/GroupChange.java
index 9b81a58..ed438ba 100644
--- a/src/java/net/sf/jabref/collab/GroupChange.java
+++ b/src/java/net/sf/jabref/collab/GroupChange.java
@@ -5,6 +5,7 @@ import javax.swing.JLabel;
 
 import net.sf.jabref.BasePanel;
 import net.sf.jabref.Globals;
+import net.sf.jabref.BibtexDatabase;
 import net.sf.jabref.groups.AllEntriesGroup;
 import net.sf.jabref.groups.GroupTreeNode;
 import net.sf.jabref.groups.UndoableModifySubtree;
@@ -12,14 +13,17 @@ import net.sf.jabref.undo.NamedCompound;
 
 public class GroupChange extends Change {
     private final GroupTreeNode m_changedGroups;
-    public GroupChange(GroupTreeNode changedGroups) {
+    private GroupTreeNode tmpGroupRoot;
+
+    public GroupChange(GroupTreeNode changedGroups, GroupTreeNode tmpGroupRoot) {
         super(changedGroups != null ? 
                 "Modified groups tree"
                 : "Removed all groups"); // JZTODO lyrics
         m_changedGroups = changedGroups;
+        this.tmpGroupRoot = tmpGroupRoot;
     }
 
-    public void makeChange(BasePanel panel, NamedCompound undoEdit) {
+    public void makeChange(BasePanel panel, BibtexDatabase secondary, NamedCompound undoEdit) {
         final GroupTreeNode root = panel.getGroupSelector().getGroupTreeRoot();
         final UndoableModifySubtree undo = new UndoableModifySubtree(
                 panel.getGroupSelector(), root, Globals.lang("Modified groups")); // JZTODO lyrics
@@ -39,6 +43,14 @@ public class GroupChange extends Change {
         }
         panel.getGroupSelector().revalidateGroups();
         undoEdit.addEdit(undo);
+        
+        // Update tmp database:
+        GroupTreeNode copied = m_changedGroups.deepCopy();
+        tmpGroupRoot.removeAllChildren();
+        tmpGroupRoot.setGroup(copied.getGroup());
+        for (int i = 0; i < copied.getChildCount(); ++i)
+            tmpGroupRoot.add(((GroupTreeNode) copied.getChildAt(i)).deepCopy());
+        tmpGroupRoot.refreshGroupsForNewDatabase(secondary);
     }
 
     JComponent description() {
diff --git a/src/java/net/sf/jabref/collab/MetaDataChange.java b/src/java/net/sf/jabref/collab/MetaDataChange.java
new file mode 100644
index 0000000..34f4f17
--- /dev/null
+++ b/src/java/net/sf/jabref/collab/MetaDataChange.java
@@ -0,0 +1,108 @@
+package net.sf.jabref.collab;
+
+import net.sf.jabref.BasePanel;
+import net.sf.jabref.BibtexDatabase;
+import net.sf.jabref.MetaData;
+import net.sf.jabref.Globals;
+import net.sf.jabref.undo.NamedCompound;
+
+import javax.swing.*;
+import java.util.Vector;
+import java.util.ArrayList;
+import java.util.Iterator;
+
+/**
+ * 
+ */
+public class MetaDataChange extends Change {
+
+    static final int
+        ADD = 1,
+        REMOVE = 2,
+        MODIFY = 3;
+
+    InfoPane tp = new InfoPane();
+    JScrollPane sp = new JScrollPane(tp);
+    private MetaData md;
+    private MetaData mdSecondary;
+    ArrayList<MetaDataChangeUnit> changes = new ArrayList<MetaDataChangeUnit>();
+
+    public MetaDataChange(MetaData md, MetaData mdSecondary) {
+        super(Globals.lang("Metadata change"));
+        this.md = md;
+        this.mdSecondary = mdSecondary;
+
+        tp.setText("<html>"+Globals.lang("Metadata change")+"</html>");
+    }
+
+    public int getChangeCount() {
+        return changes.size();
+    }
+
+    public void insertMetaDataAddition(String key, Vector<String> value) {
+        changes.add(new MetaDataChangeUnit(ADD, key, value));
+    }
+
+    public void insertMetaDataRemoval(String key) {
+        changes.add(new MetaDataChangeUnit(REMOVE, key, null));
+    }
+
+    public void insertMetaDataChange(String key, Vector<String> value) {
+        changes.add(new MetaDataChangeUnit(MODIFY, key, value));
+    }
+
+    JComponent description() {
+        StringBuilder sb = new StringBuilder("<html>"+Globals.lang("Changes have been made to the following metadata elements")+":<p>");
+        for (Iterator<MetaDataChangeUnit> iterator = changes.iterator(); iterator.hasNext();) {
+            MetaDataChangeUnit unit = iterator.next();
+            sb.append("<br>  ");
+            sb.append(unit.key);
+            /*switch (unit.type) {
+                case ADD:
+                    sb.append("<p>Added: "+unit.key);
+                    break;
+                case REMOVE:
+                    sb.append("<p>Removed: "+unit.key);
+                    break;
+                case MODIFY:
+                    sb.append("<p>Modified: "+unit.key);
+                    break;
+            }*/
+        }
+        sb.append("</html>");
+        tp.setText(sb.toString());
+        return sp;
+    }
+
+    void makeChange(BasePanel panel, BibtexDatabase secondary, NamedCompound undoEdit) {
+        for (Iterator<MetaDataChangeUnit> iterator = changes.iterator(); iterator.hasNext();) {
+            MetaDataChangeUnit unit = iterator.next();
+            switch (unit.type) {
+                case ADD:
+                    md.putData(unit.key, unit.value);
+                    mdSecondary.putData(unit.key, unit.value);
+                    break;
+                case REMOVE:
+                    md.remove(unit.key);
+                    mdSecondary.remove(unit.key);
+                    break;
+                case MODIFY:
+                    md.putData(unit.key, unit.value);
+                    mdSecondary.putData(unit.key, unit.value);
+                    break;
+            }
+        }
+    }
+
+    class MetaDataChangeUnit {
+        int type;
+        String key;
+        Vector<String> value;
+
+        public MetaDataChangeUnit(int type, String key, Vector<String> value) {
+            this.type = type;
+            this.key = key;
+            this.value = value;
+        }
+    }
+}
diff --git a/src/java/net/sf/jabref/collab/PreambleChange.java b/src/java/net/sf/jabref/collab/PreambleChange.java
index 6234e72..d82388d 100644
--- a/src/java/net/sf/jabref/collab/PreambleChange.java
+++ b/src/java/net/sf/jabref/collab/PreambleChange.java
@@ -5,6 +5,7 @@ import javax.swing.JScrollPane;
 
 import net.sf.jabref.BasePanel;
 import net.sf.jabref.Globals;
+import net.sf.jabref.BibtexDatabase;
 import net.sf.jabref.undo.NamedCompound;
 import net.sf.jabref.undo.UndoablePreambleChange;
 
@@ -36,9 +37,10 @@ public class PreambleChange extends Change {
       tp.setText(text.toString());
   }
 
-  public void makeChange(BasePanel panel, NamedCompound undoEdit) {
+  public void makeChange(BasePanel panel, BibtexDatabase secondary, NamedCompound undoEdit) {
     panel.database().setPreamble(disk);
     undoEdit.addEdit(new UndoablePreambleChange(panel.database(), panel, mem, disk));
+      secondary.setPreamble(disk);
   }
 
   JComponent description() {
diff --git a/src/java/net/sf/jabref/collab/StringAddChange.java b/src/java/net/sf/jabref/collab/StringAddChange.java
index d2978bf..e109371 100644
--- a/src/java/net/sf/jabref/collab/StringAddChange.java
+++ b/src/java/net/sf/jabref/collab/StringAddChange.java
@@ -3,10 +3,7 @@ package net.sf.jabref.collab;
 import javax.swing.JComponent;
 import javax.swing.JScrollPane;
 
-import net.sf.jabref.BasePanel;
-import net.sf.jabref.BibtexString;
-import net.sf.jabref.Globals;
-import net.sf.jabref.KeyCollisionException;
+import net.sf.jabref.*;
 import net.sf.jabref.undo.NamedCompound;
 import net.sf.jabref.undo.UndoableInsertString;
 
@@ -35,7 +32,7 @@ public class StringAddChange extends Change {
 
   }
 
-  public void makeChange(BasePanel panel, NamedCompound undoEdit) {
+  public void makeChange(BasePanel panel, BibtexDatabase secondary, NamedCompound undoEdit) {
 
     if (panel.database().hasStringLabel(string.getName())) {
       // The name to change to is already in the database, so we can't comply.
@@ -49,7 +46,12 @@ public class StringAddChange extends Change {
     } catch (KeyCollisionException ex) {
       Globals.logger("Error: could not add string '"+string.getName()+"': "+ex.getMessage());
     }
-
+    try {
+        secondary.addString(new BibtexString(Util.createNeutralId(), string.getName(),
+                string.getContent()));
+    } catch (KeyCollisionException ex) {
+        Globals.logger("Error: could not add string '"+string.getName()+"' to tmp database: "+ex.getMessage());
+    }
   }
 
 
diff --git a/src/java/net/sf/jabref/collab/StringChange.java b/src/java/net/sf/jabref/collab/StringChange.java
index f57729f..ddc320a 100644
--- a/src/java/net/sf/jabref/collab/StringChange.java
+++ b/src/java/net/sf/jabref/collab/StringChange.java
@@ -15,9 +15,12 @@ public class StringChange extends Change {
 
   InfoPane tp = new InfoPane();
   JScrollPane sp = new JScrollPane(tp);
+    private BibtexString tmpString;
 
-  public StringChange(BibtexString string, String label, String mem, String tmp, String disk) {
-    name = Globals.lang("Modified string")+": '"+label+"'";
+    public StringChange(BibtexString string, BibtexString tmpString, String label,
+                      String mem, String tmp, String disk) {
+        this.tmpString = tmpString;
+        name = Globals.lang("Modified string")+": '"+label+"'";
     this.string = string;
     this.label = label;
     this.mem = mem;
@@ -46,10 +49,12 @@ public class StringChange extends Change {
     tp.setText(sb.toString());
   }
 
-  public void makeChange(BasePanel panel, NamedCompound undoEdit) {
+  public void makeChange(BasePanel panel, BibtexDatabase secondary, NamedCompound undoEdit) {
     if (string != null) {
       string.setContent(disk);
       undoEdit.addEdit(new UndoableStringChange(panel, string, false, mem, disk));
+        // Update tmp databse:
+
     } else {
       // The string was removed or renamed locally. We guess that it was removed.
 	String newId = Util.createNeutralId();
@@ -61,6 +66,15 @@ public class StringChange extends Change {
 	    Globals.logger("Error: could not add string '"+string.getName()+"': "+ex.getMessage());
 	}
     }
+
+      // Update tmp database:
+      if (tmpString != null) {
+          tmpString.setContent(disk);
+      }
+      else {
+          BibtexString bs = new BibtexString(Util.createNeutralId(), label, disk);
+          secondary.addString(bs);
+      }
   }
 
 
diff --git a/src/java/net/sf/jabref/collab/StringNameChange.java b/src/java/net/sf/jabref/collab/StringNameChange.java
index e3ea8be..a2ef52d 100644
--- a/src/java/net/sf/jabref/collab/StringNameChange.java
+++ b/src/java/net/sf/jabref/collab/StringNameChange.java
@@ -12,9 +12,12 @@ public class StringNameChange extends Change {
 
   BibtexString string;
   String mem, tmp, disk, content;
+    private BibtexString tmpString;
 
-  public StringNameChange(BibtexString string, String mem, String tmp, String disk, String content) {
-    name = Globals.lang("Renamed string")+": '"+tmp+"'";
+    public StringNameChange(BibtexString string, BibtexString tmpString,
+                          String mem, String tmp, String disk, String content) {
+        this.tmpString = tmpString;
+        name = Globals.lang("Renamed string")+": '"+tmp+"'";
     this.string = string;
     this.content = content;
     this.mem = mem;
@@ -23,7 +26,7 @@ public class StringNameChange extends Change {
 
   }
 
-  public void makeChange(BasePanel panel, NamedCompound undoEdit) {
+  public void makeChange(BasePanel panel, BibtexDatabase secondary, NamedCompound undoEdit) {
 
     if (panel.database().hasStringLabel(disk)) {
       // The name to change to is already in the database, so we can't comply.
@@ -46,6 +49,16 @@ public class StringNameChange extends Change {
         Globals.logger("Error: could not add string '"+bs.getName()+"': "+ex.getMessage());
       }
     }
+
+      // Update tmp database:
+      if (tmpString != null) {
+          tmpString.setName(disk);
+      }
+      else {
+          String newId = Util.createNeutralId();
+	      BibtexString bs = new BibtexString(newId, disk, content);
+          secondary.addString(bs);
+      }
   }
 
 
diff --git a/src/java/net/sf/jabref/collab/StringRemoveChange.java b/src/java/net/sf/jabref/collab/StringRemoveChange.java
index 3e9be68..c45d00f 100644
--- a/src/java/net/sf/jabref/collab/StringRemoveChange.java
+++ b/src/java/net/sf/jabref/collab/StringRemoveChange.java
@@ -6,6 +6,7 @@ import javax.swing.JScrollPane;
 import net.sf.jabref.BasePanel;
 import net.sf.jabref.BibtexString;
 import net.sf.jabref.Globals;
+import net.sf.jabref.BibtexDatabase;
 import net.sf.jabref.undo.NamedCompound;
 import net.sf.jabref.undo.UndoableRemoveString;
 
@@ -15,10 +16,12 @@ public class StringRemoveChange extends Change {
 
   InfoPane tp = new InfoPane();
   JScrollPane sp = new JScrollPane(tp);
+    private BibtexString tmpString;
 
 
-  public StringRemoveChange(BibtexString string, BibtexString inMem) {
-    name = Globals.lang("Removed string")+": '"+string.getName()+"'";
+    public StringRemoveChange(BibtexString string, BibtexString tmpString, BibtexString inMem) {
+        this.tmpString = tmpString;
+        name = Globals.lang("Removed string")+": '"+string.getName()+"'";
     this.string = string;
     this.inMem = inMem; // Holds the version in memory. Check if it has been modified...?
 
@@ -36,7 +39,7 @@ public class StringRemoveChange extends Change {
 
   }
 
-  public void makeChange(BasePanel panel, NamedCompound undoEdit) {
+  public void makeChange(BasePanel panel, BibtexDatabase secondary, NamedCompound undoEdit) {
 
     try {
       panel.database().removeString(inMem.getId());
@@ -45,6 +48,8 @@ public class StringRemoveChange extends Change {
       Globals.logger("Error: could not add string '"+string.getName()+"': "+ex.getMessage());
     }
 
+      // Update tmp database:
+      secondary.removeString(tmpString.getId());
   }
 
 
diff --git a/src/java/net/sf/jabref/export/FileActions.java b/src/java/net/sf/jabref/export/FileActions.java
index 2d28d2d..31cac70 100644
--- a/src/java/net/sf/jabref/export/FileActions.java
+++ b/src/java/net/sf/jabref/export/FileActions.java
@@ -123,8 +123,17 @@ public class FileActions
         }
 
         fw.write("@STRING{" + bs.getName() + " = ");
-        if (!bs.getContent().equals(""))
-            fw.write((new LatexFieldFormatter()).format(bs.getContent(), Globals.BIBTEX_STRING));
+        if (!bs.getContent().equals("")) {
+            try {
+                String formatted = (new LatexFieldFormatter()).format(bs.getContent(), Globals.BIBTEX_STRING);
+                fw.write(formatted);
+            } catch (IllegalArgumentException ex) {
+                throw new IllegalArgumentException(
+                        Globals.lang("The # character is not allowed in BibTeX strings unless escaped as in '\\#'.") + "\n" +
+                        Globals.lang("Before saving, please edit any strings containing the # character."));
+            }
+
+        }
         else
             fw.write("{}");
 
diff --git a/src/java/net/sf/jabref/export/OpenDocumentRepresentation.java b/src/java/net/sf/jabref/export/OpenDocumentRepresentation.java
index 7e0a77c..31e275e 100644
--- a/src/java/net/sf/jabref/export/OpenDocumentRepresentation.java
+++ b/src/java/net/sf/jabref/export/OpenDocumentRepresentation.java
@@ -31,9 +31,11 @@ import ca.odell.glazedlists.SortedList;
  */
 public class OpenDocumentRepresentation {
     protected Collection<BibtexEntry> entries;
+    private BibtexDatabase database;
 
     @SuppressWarnings("unchecked")
-	public OpenDocumentRepresentation(BibtexDatabase bibtex, Set<String> keySet) {
+	public OpenDocumentRepresentation(BibtexDatabase database, Set<String> keySet) {
+        this.database = database;
         // Make a list of comparators for sorting the entries:
         List<FieldComparator> comparators = new ArrayList<FieldComparator>();
         comparators.add(new FieldComparator("author"));
@@ -45,10 +47,10 @@ public class OpenDocumentRepresentation {
         // Set up a list of all entries, if keySet==null, or the entries whose
         // ids are in keySet, otherwise:
         if (keySet == null)
-            entryList.addAll(bibtex.getEntries());
+            entryList.addAll(database.getEntries());
         else {
             for (String key : keySet)
-                entryList.add(bibtex.getEntryById(key));
+                entryList.add(database.getEntryById(key));
         }
 
         entries = new SortedList(entryList, new FieldComparatorStack(comparators));
@@ -181,8 +183,8 @@ public class OpenDocumentRepresentation {
     }
 
     protected String getField(BibtexEntry e, String field) {
-        Object o = e.getField(field);
-        return o == null ? "" : o.toString();
+        String s = BibtexDatabase.getResolvedField(field, e, database);
+        return s == null ? "" : s;
     }
 
     protected void addTableCell(Document doc, Element parent, String content) {
diff --git a/src/java/net/sf/jabref/export/SaveDatabaseAction.java b/src/java/net/sf/jabref/export/SaveDatabaseAction.java
index a14cdcd..7876d4d 100644
--- a/src/java/net/sf/jabref/export/SaveDatabaseAction.java
+++ b/src/java/net/sf/jabref/export/SaveDatabaseAction.java
@@ -22,7 +22,7 @@ import java.util.Vector;
 public class SaveDatabaseAction extends AbstractWorker {
     private BasePanel panel;
     private JabRefFrame frame;
-    private boolean success = false, cancelled = false;
+    private boolean success = false, cancelled = false, fileLockedError = false;
 
     public SaveDatabaseAction(BasePanel panel) {
 
@@ -34,10 +34,12 @@ public class SaveDatabaseAction extends AbstractWorker {
     public void init() throws Throwable {
         success = false;
         cancelled = false;
+        fileLockedError = false;
         if (panel.getFile() == null)
             saveAs();
         else {
 
+            // Check for external modifications:
             if (panel.isUpdatedExternally() || Globals.fileUpdateMonitor.hasBeenModified(panel.getFileMonitorHandle())) {
 
                 String[] opts = new String[]{Globals.lang("Review changes"), Globals.lang("Save"),
@@ -61,6 +63,12 @@ public class SaveDatabaseAction extends AbstractWorker {
 
                     (new Thread(new Runnable() {
                         public void run() {
+
+                            if (!Util.waitForFileLock(panel.getFile(), 10)) {
+                                // TODO: GUI handling of the situation when the externally modified file keeps being locked.
+                                System.err.println("File locked, this will be trouble.");
+                            }
+
                             ChangeScanner scanner = new ChangeScanner(panel.frame(), panel);
                             scanner.changeScan(panel.getFile());
                             try {
@@ -118,7 +126,11 @@ public class SaveDatabaseAction extends AbstractWorker {
             frame.output(Globals.lang("Saved database") + " '"
                     + panel.getFile().getPath() + "'.");
         } else if (!cancelled) {
-            frame.output(Globals.lang("Save failed"));
+            if (fileLockedError) {
+                // TODO: user should have the option to override the lock file.
+                frame.output(Globals.lang("Could not save, file locked by another JabRef instance."));
+            } else
+                frame.output(Globals.lang("Save failed"));
         }
     }
 
@@ -136,19 +148,25 @@ public class SaveDatabaseAction extends AbstractWorker {
             // lacking keys, before saving:
             panel.autoGenerateKeysBeforeSaving();
 
-            // Now save the database:
-            success = saveDatabase(panel.getFile(), false, panel.getEncoding());
-
-            //Util.pr("Testing resolve string... BasePanel line 237");
-            //Util.pr("Resolve aq: "+database.resolveString("aq"));
-            //Util.pr("Resolve text: "+database.resolveForStrings("A text which refers to the string #aq# and #billball#, hurra."));
-
-            try {
-                Globals.fileUpdateMonitor.updateTimeStamp(panel.getFileMonitorHandle());
-            } catch (IllegalArgumentException ex) {
-                // This means the file has not yet been registered, which is the case
-                // when doing a "Save as". Maybe we should change the monitor so no
-                // exception is cast.
+            if (!Util.waitForFileLock(panel.getFile(), 10)) {
+                success = false;
+                fileLockedError = true;
+            }
+            else {
+                // Now save the database:
+                success = saveDatabase(panel.getFile(), false, panel.getEncoding());
+
+                //Util.pr("Testing resolve string... BasePanel line 237");
+                //Util.pr("Resolve aq: "+database.resolveString("aq"));
+                //Util.pr("Resolve text: "+database.resolveForStrings("A text which refers to the string #aq# and #billball#, hurra."));
+
+                try {
+                    Globals.fileUpdateMonitor.updateTimeStamp(panel.getFileMonitorHandle());
+                } catch (IllegalArgumentException ex) {
+                    // This means the file has not yet been registered, which is the case
+                    // when doing a "Save as". Maybe we should change the monitor so no
+                    // exception is cast.
+                }
             }
             panel.setSaving(false);
             if (success) {
@@ -166,6 +184,11 @@ public class SaveDatabaseAction extends AbstractWorker {
                 panel.setUpdatedExternally(false);
             }
         } catch (SaveException ex2) {
+            if (ex2 == SaveException.FILE_LOCKED) {
+                success =false;
+                fileLockedError = true;
+                return;
+            }
             ex2.printStackTrace();
         }
     }
@@ -187,6 +210,9 @@ public class SaveDatabaseAction extends AbstractWorker {
                     Globals.lang("Save database"), JOptionPane.ERROR_MESSAGE);
             throw new SaveException("rt");
         } catch (SaveException ex) {
+            if (ex == SaveException.FILE_LOCKED) {
+                throw ex;
+            }
             if (ex.specificEntry()) {
                 // Error occured during processing of
                 // be. Highlight it:
diff --git a/src/java/net/sf/jabref/export/SaveException.java b/src/java/net/sf/jabref/export/SaveException.java
index bf9c19b..a6e0990 100644
--- a/src/java/net/sf/jabref/export/SaveException.java
+++ b/src/java/net/sf/jabref/export/SaveException.java
@@ -27,6 +27,7 @@ http://www.gnu.org/copyleft/gpl.ja.html
 package net.sf.jabref.export;
 
 import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.Globals;
 
 
 /**
@@ -37,6 +38,9 @@ public class SaveException extends Exception
 {
     //~ Instance fields ////////////////////////////////////////////////////////
 
+    public static final SaveException FILE_LOCKED = new SaveException
+            (Globals.lang("Could not save, file locked by another JabRef instance."));
+
     private BibtexEntry entry;
     private int status;
     //~ Constructors ///////////////////////////////////////////////////////////
diff --git a/src/java/net/sf/jabref/export/SaveSession.java b/src/java/net/sf/jabref/export/SaveSession.java
index 1f2ddd7..09b885f 100644
--- a/src/java/net/sf/jabref/export/SaveSession.java
+++ b/src/java/net/sf/jabref/export/SaveSession.java
@@ -26,17 +26,23 @@ import java.nio.charset.UnsupportedCharsetException;
  */
 public class SaveSession {
 
+    public static final String LOCKFILE_SUFFIX = ".lock";
+    // The age in ms of a lockfile before JabRef will offer to "steal" the locked file:
+    public static final long LOCKFILE_CRITICAL_AGE = 60000;
+
     private static final String TEMP_PREFIX = "jabref";
     private static final String TEMP_SUFFIX = "save.bib";
+
     File file, tmp, backupFile;
     String encoding;
-    boolean backup;
+    boolean backup, useLockFile;
     VerifyingWriter writer;
 
     public SaveSession(File file, String encoding, boolean backup) throws IOException,
         UnsupportedCharsetException {
         this.file = file;
         tmp = File.createTempFile(TEMP_PREFIX, TEMP_SUFFIX);
+        useLockFile = Globals.prefs.getBoolean("useLockFiles");
         this.backup = backup;
         this.encoding = encoding;
         writer = new VerifyingWriter(new FileOutputStream(tmp), encoding);
@@ -64,6 +70,20 @@ public class SaveSession {
             }
         }
         try {
+            if (useLockFile) {
+                try {
+                    if (createLockFile()) {
+                        // Oops, the lock file already existed. Try to wait it out:
+                        if (!Util.waitForFileLock(file, 10))
+                            throw SaveException.FILE_LOCKED;
+
+                    }
+                } catch (IOException ex) {
+                    System.err.println("Error when creating lock file");
+                    ex.printStackTrace();
+                }
+            }
+
             Util.copyFile(tmp, file, true);
         } catch (IOException ex2) {
             // If something happens here, what can we do to correct the problem? The file is corrupted, but we still
@@ -71,6 +91,15 @@ public class SaveSession {
             // repeating the action will have a different result.
             // On the other hand, our temporary file should still be clean, and won't be deleted.
             throw new SaveException(Globals.lang("Save failed while committing changes")+": "+ex2.getMessage());
+        } finally {
+            if (useLockFile) {
+                try {
+                    deleteLockFile();
+                } catch (IOException ex) {
+                    System.err.println("Error when deleting lock file");
+                    ex.printStackTrace();
+                }
+            }
         }
 
         tmp.delete();
@@ -80,6 +109,43 @@ public class SaveSession {
         tmp.delete();
     }
 
+
+    /**
+     * Check if a lock file exists, and create it if it doesn't.
+     * @return true if the lock file already existed
+     * @throws IOException if something happens during creation.
+     */
+    private boolean createLockFile() throws IOException {
+        File lock = new File(file.getPath()+LOCKFILE_SUFFIX);
+        if (lock.exists()) {
+            return true;
+        }
+        FileOutputStream out = new FileOutputStream(lock);
+        out.write(0);
+        try {
+            out.close();
+        } catch (IOException ex) {
+            System.err.println("Error when creating lock file");
+            ex.printStackTrace();
+        }
+        lock.deleteOnExit();
+        return false;
+    }
+
+    /**
+     * Check if a lock file exists, and delete it if it does.
+     * @return true if the lock file existed, false otherwise.
+     * @throws IOException if something goes wrong.
+     */
+    private boolean deleteLockFile() throws IOException {
+        File lock = new File(file.getPath()+LOCKFILE_SUFFIX);
+        if (!lock.exists()) {
+            return false;
+        }
+        lock.delete();
+        return true;
+    }
+
     public File getTemporaryFile() {
         return tmp;
     }
diff --git a/src/java/net/sf/jabref/export/layout/Layout.java b/src/java/net/sf/jabref/export/layout/Layout.java
index 3e262f1..1c14b8e 100755
--- a/src/java/net/sf/jabref/export/layout/Layout.java
+++ b/src/java/net/sf/jabref/export/layout/Layout.java
@@ -38,7 +38,7 @@ import wsi.ra.types.StringInt;
  * Main class for formatting DOCUMENT ME!
  *
  * @author $author$
- * @version $Revision: 3018 $
+ * @version $Revision: 3092 $
  */
 public class Layout
 {
@@ -142,6 +142,13 @@ public class Layout
         }
     }
 
+    public void setPostFormatter(LayoutFormatter formatter) {
+        for (int i = 0; i < layoutEntries.length; i++) {
+            LayoutEntry layoutEntry = layoutEntries[i];
+            layoutEntry.setPostFormatter(formatter);
+        }
+    }
+
     /**
      * Returns the processed bibtex entry. If the database argument is
      * null, no string references will be resolved. Otherwise all valid
diff --git a/src/java/net/sf/jabref/export/layout/LayoutEntry.java b/src/java/net/sf/jabref/export/layout/LayoutEntry.java
index 78db159..23c6687 100755
--- a/src/java/net/sf/jabref/export/layout/LayoutEntry.java
+++ b/src/java/net/sf/jabref/export/layout/LayoutEntry.java
@@ -43,7 +43,7 @@ import wsi.ra.types.StringInt;
  * DOCUMENT ME!
  * 
  * @author $author$
- * @version $Revision: 3018 $
+ * @version $Revision: 3092 $
  */
 public class LayoutEntry {
 	// ~ Instance fields
@@ -51,6 +51,9 @@ public class LayoutEntry {
 
 	private LayoutFormatter[] option;
 
+    // Formatter to be run after other formatters:
+    private LayoutFormatter postFormatter = null;
+
 	private String text;
 
 	private LayoutEntry[] layoutEntries;
@@ -171,6 +174,10 @@ public class LayoutEntry {
 		
 	}
 
+    public void setPostFormatter(LayoutFormatter formatter) {
+        this.postFormatter = formatter;
+    }
+
 	public String doLayout(BibtexEntry bibtex, BibtexDatabase database) {
 
 		switch (type) {
@@ -271,6 +278,10 @@ public class LayoutEntry {
 				}
 			}
 
+            // If a post formatter has been set, call it:
+            if (postFormatter != null)
+                fieldEntry = postFormatter.format(fieldEntry);
+
 			return fieldEntry;
 		}
         case LayoutHelper.IS_ENCODING_NAME: {
@@ -311,6 +322,9 @@ public class LayoutEntry {
 					field = option[i].format(field);
 				}
 			}
+            // If a post formatter has been set, call it:
+            if (postFormatter != null)
+                field = postFormatter.format(field);
 
 			return field;
 		} else if (type == LayoutHelper.IS_ENCODING_NAME) {
diff --git a/src/java/net/sf/jabref/export/layout/format/Default.java b/src/java/net/sf/jabref/export/layout/format/Default.java
new file mode 100644
index 0000000..1fa56a1
--- /dev/null
+++ b/src/java/net/sf/jabref/export/layout/format/Default.java
@@ -0,0 +1,20 @@
+package net.sf.jabref.export.layout.format;
+
+import net.sf.jabref.export.layout.ParamLayoutFormatter;
+
+/**
+ * Layout formatter that puts in a default value (given as argument) if the field is empty.
+ * Empty means null or an empty string.
+ */
+public class Default implements ParamLayoutFormatter {
+
+    String defValue = "";
+
+    public void setArgument(String arg) {
+        this.defValue = arg;
+    }
+
+    public String format(String fieldText) {
+        return fieldText != null && (fieldText.length() > 0) ? fieldText : defValue;
+    }
+}
diff --git a/src/java/net/sf/jabref/export/layout/format/FormatChars.java b/src/java/net/sf/jabref/export/layout/format/FormatChars.java
index 1468d9d..bd3de04 100644
--- a/src/java/net/sf/jabref/export/layout/format/FormatChars.java
+++ b/src/java/net/sf/jabref/export/layout/format/FormatChars.java
@@ -85,133 +85,133 @@ public class FormatChars implements LayoutFormatter {
 
 		// HTML special characters without names (UNICODE Latin Extended-A),
 		// indicated by UNICODE number
-		CHARS.put("=A", "Ā"); // "Amacr"
-		CHARS.put("=a", "ā"); // "amacr"
-		CHARS.put("uA", "Ă"); // "Abreve"
-		CHARS.put("ua", "ă"); // "abreve"
-		CHARS.put("kA", "Ą"); // "Aogon"
-		CHARS.put("ka", "ą"); // "aogon"
-		CHARS.put("'C", "Ć"); // "Cacute"
-		CHARS.put("'c", "ć"); // "cacute"
-		CHARS.put("^C", "Ĉ"); // "Ccirc"
-		CHARS.put("^c", "ĉ"); // "ccirc"
-		CHARS.put(".C", "Ċ"); // "Cdot"
-		CHARS.put(".c", "ċ"); // "cdot"
-		CHARS.put("vC", "Č"); // "Ccaron"
-		CHARS.put("vc", "č"); // "ccaron"
-		CHARS.put("vD", "Ď"); // "Dcaron"
+		CHARS.put("=A", "Ā"); // "Amacr"
+		CHARS.put("=a", "ā"); // "amacr"
+		CHARS.put("uA", "Ă"); // "Abreve"
+		CHARS.put("ua", "ă"); // "abreve"
+		CHARS.put("kA", "Ą"); // "Aogon"
+		CHARS.put("ka", "ą"); // "aogon"
+		CHARS.put("'C", "Ć"); // "Cacute"
+		CHARS.put("'c", "ć"); // "cacute"
+		CHARS.put("^C", "Ĉ"); // "Ccirc"
+		CHARS.put("^c", "ĉ"); // "ccirc"
+		CHARS.put(".C", "Ċ"); // "Cdot"
+		CHARS.put(".c", "ċ"); // "cdot"
+		CHARS.put("vC", "Č"); // "Ccaron"
+		CHARS.put("vc", "č"); // "ccaron"
+		CHARS.put("vD", "Ď"); // "Dcaron"
 		// Symbol #271 (d�) has no special Latex command
-		CHARS.put("DJ", "Đ"); // "Dstrok"
-		CHARS.put("dj", "đ"); // "dstrok"
-		CHARS.put("=E", "Ē"); // "Emacr"
-		CHARS.put("=e", "ē"); // "emacr"
-		CHARS.put("uE", "Ĕ"); // "Ebreve"
-		CHARS.put("ue", "ĕ"); // "ebreve"
-		CHARS.put(".E", "Ė"); // "Edot"
-		CHARS.put(".e", "ė"); // "edot"
-		CHARS.put("kE", "Ę"); // "Eogon"
-		CHARS.put("ke", "ę"); // "eogon"
-		CHARS.put("vE", "Ě"); // "Ecaron"
-		CHARS.put("ve", "ě"); // "ecaron"
-		CHARS.put("^G", "Ĝ"); // "Gcirc"
-		CHARS.put("^g", "ĝ"); // "gcirc"
-		CHARS.put("uG", "Ğ"); // "Gbreve"
-		CHARS.put("ug", "ğ"); // "gbreve"
-		CHARS.put(".G", "Ġ"); // "Gdot"
-		CHARS.put(".g", "ġ"); // "gdot"
-		CHARS.put("cG", "Ģ"); // "Gcedil"
-		CHARS.put("'g", "ģ"); // "gacute"
-		CHARS.put("^H", "Ĥ"); // "Hcirc"
-		CHARS.put("^h", "ĥ"); // "hcirc"
-		CHARS.put("Hstrok", "Ħ"); // "Hstrok"
-		CHARS.put("hstrok", "ħ"); // "hstrok"
-		CHARS.put("~I", "Ĩ"); // "Itilde"
-		CHARS.put("~i", "ĩ"); // "itilde"
-		CHARS.put("=I", "Ī"); // "Imacr"
-		CHARS.put("=i", "ī"); // "imacr"
-		CHARS.put("uI", "Ĭ"); // "Ibreve"
-		CHARS.put("ui", "ĭ"); // "ibreve"
-		CHARS.put("kI", "Į"); // "Iogon"
-		CHARS.put("ki", "į"); // "iogon"
-		CHARS.put(".I", "İ"); // "Idot"
-		CHARS.put("i", "ı"); // "inodot"
+		CHARS.put("DJ", "Đ"); // "Dstrok"
+		CHARS.put("dj", "đ"); // "dstrok"
+		CHARS.put("=E", "Ē"); // "Emacr"
+		CHARS.put("=e", "ē"); // "emacr"
+		CHARS.put("uE", "Ĕ"); // "Ebreve"
+		CHARS.put("ue", "ĕ"); // "ebreve"
+		CHARS.put(".E", "Ė"); // "Edot"
+		CHARS.put(".e", "ė"); // "edot"
+		CHARS.put("kE", "Ę"); // "Eogon"
+		CHARS.put("ke", "ę"); // "eogon"
+		CHARS.put("vE", "Ě"); // "Ecaron"
+		CHARS.put("ve", "ě"); // "ecaron"
+		CHARS.put("^G", "Ĝ"); // "Gcirc"
+		CHARS.put("^g", "ĝ"); // "gcirc"
+		CHARS.put("uG", "Ğ"); // "Gbreve"
+		CHARS.put("ug", "ğ"); // "gbreve"
+		CHARS.put(".G", "Ġ"); // "Gdot"
+		CHARS.put(".g", "ġ"); // "gdot"
+		CHARS.put("cG", "Ģ"); // "Gcedil"
+		CHARS.put("'g", "ģ"); // "gacute"
+		CHARS.put("^H", "Ĥ"); // "Hcirc"
+		CHARS.put("^h", "ĥ"); // "hcirc"
+		CHARS.put("Hstrok", "Ħ"); // "Hstrok"
+		CHARS.put("hstrok", "ħ"); // "hstrok"
+		CHARS.put("~I", "Ĩ"); // "Itilde"
+		CHARS.put("~i", "ĩ"); // "itilde"
+		CHARS.put("=I", "Ī"); // "Imacr"
+		CHARS.put("=i", "ī"); // "imacr"
+		CHARS.put("uI", "Ĭ"); // "Ibreve"
+		CHARS.put("ui", "ĭ"); // "ibreve"
+		CHARS.put("kI", "Į"); // "Iogon"
+		CHARS.put("ki", "į"); // "iogon"
+		CHARS.put(".I", "İ"); // "Idot"
+		CHARS.put("i", "ı"); // "inodot"
 		// Symbol #306 (IJ) has no special Latex command
 		// Symbol #307 (ij) has no special Latex command
-		CHARS.put("^J", "Ĵ"); // "Jcirc"
-		CHARS.put("^j", "ĵ"); // "jcirc"
-		CHARS.put("cK", "Ķ"); // "Kcedil"
-		CHARS.put("ck", "ķ"); // "kcedil"
+		CHARS.put("^J", "Ĵ"); // "Jcirc"
+		CHARS.put("^j", "ĵ"); // "jcirc"
+		CHARS.put("cK", "Ķ"); // "Kcedil"
+		CHARS.put("ck", "ķ"); // "kcedil"
 		// Symbol #312 (k) has no special Latex command
-		CHARS.put("'L", "Ĺ"); // "Lacute"
-		CHARS.put("'l", "ĺ"); // "lacute"
-		CHARS.put("cL", "Ļ"); // "Lcedil"
-		CHARS.put("cl", "ļ"); // "lcedil"
+		CHARS.put("'L", "Ĺ"); // "Lacute"
+		CHARS.put("'l", "ĺ"); // "lacute"
+		CHARS.put("cL", "Ļ"); // "Lcedil"
+		CHARS.put("cl", "ļ"); // "lcedil"
 		// Symbol #317 (L�) has no special Latex command
 		// Symbol #318 (l�) has no special Latex command
-		CHARS.put("Lmidot", "Ŀ"); // "Lmidot"
-		CHARS.put("lmidot", "ŀ"); // "lmidot"
-		CHARS.put("L", "Ł"); // "Lstrok"
-		CHARS.put("l", "ł"); // "lstrok"
-		CHARS.put("'N", "Ń"); // "Nacute"
-		CHARS.put("'n", "ń"); // "nacute"
-		CHARS.put("cN", "Ņ"); // "Ncedil"
-		CHARS.put("cn", "ņ"); // "ncedil"
-		CHARS.put("vN", "Ň"); // "Ncaron"
-		CHARS.put("vn", "ň"); // "ncaron"
+		CHARS.put("Lmidot", "Ŀ"); // "Lmidot"
+		CHARS.put("lmidot", "ŀ"); // "lmidot"
+		CHARS.put("L", "Ł"); // "Lstrok"
+		CHARS.put("l", "ł"); // "lstrok"
+		CHARS.put("'N", "Ń"); // "Nacute"
+		CHARS.put("'n", "ń"); // "nacute"
+		CHARS.put("cN", "Ņ"); // "Ncedil"
+		CHARS.put("cn", "ņ"); // "ncedil"
+		CHARS.put("vN", "Ň"); // "Ncaron"
+		CHARS.put("vn", "ň"); // "ncaron"
 		// Symbol #329 (�n) has no special Latex command
-		CHARS.put("NG", "Ŋ"); // "ENG"
-		CHARS.put("ng", "ŋ"); // "eng"
-		CHARS.put("=O", "Ō"); // "Omacr"
-		CHARS.put("=o", "ō"); // "omacr"
-		CHARS.put("uO", "Ŏ"); // "Obreve"
-		CHARS.put("uo", "ŏ"); // "obreve"
-		CHARS.put("HO", "Ő"); // "Odblac"
-		CHARS.put("Ho", "ő"); // "odblac"
-		CHARS.put("OE", "Œ"); // "OElig"
-		CHARS.put("oe", "œ"); // "oelig"
-		CHARS.put("'R", "Ŕ"); // "Racute"
-		CHARS.put("'r", "ŕ"); // "racute"
-		CHARS.put("cR", "Ŗ"); // "Rcedil"
-		CHARS.put("cr", "ŗ"); // "rcedil"
-		CHARS.put("vR", "Ř"); // "Rcaron"
-		CHARS.put("vr", "ř"); // "rcaron"
-		CHARS.put("'S", "Ś"); // "Sacute"
-		CHARS.put("'s", "ś"); // "sacute"
-		CHARS.put("^S", "Ŝ"); // "Scirc"
-		CHARS.put("^s", "ŝ"); // "scirc"
-		CHARS.put("cS", "Ş"); // "Scedil"
-		CHARS.put("cs", "ş"); // "scedil"
-		CHARS.put("vS", "Š"); // "Scaron"
-		CHARS.put("vs", "š"); // "scaron"
-		CHARS.put("cT", "Ţ"); // "Tcedil"
-		CHARS.put("ct", "ţ"); // "tcedil"
-		CHARS.put("vT", "Ť"); // "Tcaron"
+		CHARS.put("NG", "Ŋ"); // "ENG"
+		CHARS.put("ng", "ŋ"); // "eng"
+		CHARS.put("=O", "Ō"); // "Omacr"
+		CHARS.put("=o", "ō"); // "omacr"
+		CHARS.put("uO", "Ŏ"); // "Obreve"
+		CHARS.put("uo", "ŏ"); // "obreve"
+		CHARS.put("HO", "Ő"); // "Odblac"
+		CHARS.put("Ho", "ő"); // "odblac"
+		CHARS.put("OE", "Œ"); // "OElig"
+		CHARS.put("oe", "œ"); // "oelig"
+		CHARS.put("'R", "Ŕ"); // "Racute"
+		CHARS.put("'r", "ŕ"); // "racute"
+		CHARS.put("cR", "Ŗ"); // "Rcedil"
+		CHARS.put("cr", "ŗ"); // "rcedil"
+		CHARS.put("vR", "Ř"); // "Rcaron"
+		CHARS.put("vr", "ř"); // "rcaron"
+		CHARS.put("'S", "Ś"); // "Sacute"
+		CHARS.put("'s", "ś"); // "sacute"
+		CHARS.put("^S", "Ŝ"); // "Scirc"
+		CHARS.put("^s", "ŝ"); // "scirc"
+		CHARS.put("cS", "Ş"); // "Scedil"
+		CHARS.put("cs", "ş"); // "scedil"
+		CHARS.put("vS", "Š"); // "Scaron"
+		CHARS.put("vs", "š"); // "scaron"
+		CHARS.put("cT", "Ţ"); // "Tcedil"
+		CHARS.put("ct", "ţ"); // "tcedil"
+		CHARS.put("vT", "Ť"); // "Tcaron"
 		// Symbol #357 (t�) has no special Latex command
-		CHARS.put("Tstrok", "Ŧ"); // "Tstrok"
-		CHARS.put("tstrok", "ŧ"); // "tstrok"
-		CHARS.put("~U", "Ũ"); // "Utilde"
-		CHARS.put("~u", "ũ"); // "utilde"
-		CHARS.put("=U", "Ū"); // "Umacr"
-		CHARS.put("=u", "ū"); // "umacr"
-		CHARS.put("uU", "Ŭ"); // "Ubreve"
-		CHARS.put("uu", "ŭ"); // "ubreve"
-		CHARS.put("rU", "Ů"); // "Uring"
-		CHARS.put("ru", "ů"); // "uring"
-		CHARS.put("HU", "Ű"); // "Odblac"
-		CHARS.put("Hu", "ű"); // "odblac"
-		CHARS.put("kU", "Ų"); // "Uogon"
-		CHARS.put("ku", "ų"); // "uogon"
-		CHARS.put("^W", "Ŵ"); // "Wcirc"
-		CHARS.put("^w", "ŵ"); // "wcirc"
-		CHARS.put("^Y", "Ŷ"); // "Ycirc"
-		CHARS.put("^y", "ŷ"); // "ycirc"
-		CHARS.put("\"Y", "Ÿ"); // "Yuml"
-		CHARS.put("'Z", "Ź"); // "Zacute"
-		CHARS.put("'z", "ź"); // "zacute"
-		CHARS.put(".Z", "Ż"); // "Zdot"
-		CHARS.put(".z", "ż"); // "zdot"
-		CHARS.put("vZ", "Ž"); // "Zcaron"
-		CHARS.put("vz", "ž"); // "zcaron"
+		CHARS.put("Tstrok", "Ŧ"); // "Tstrok"
+		CHARS.put("tstrok", "ŧ"); // "tstrok"
+		CHARS.put("~U", "Ũ"); // "Utilde"
+		CHARS.put("~u", "ũ"); // "utilde"
+		CHARS.put("=U", "Ū"); // "Umacr"
+		CHARS.put("=u", "ū"); // "umacr"
+		CHARS.put("uU", "Ŭ"); // "Ubreve"
+		CHARS.put("uu", "ŭ"); // "ubreve"
+		CHARS.put("rU", "Ů"); // "Uring"
+		CHARS.put("ru", "ů"); // "uring"
+		CHARS.put("HU", "ů"); // "Odblac"
+		CHARS.put("Hu", "ű"); // "odblac"
+		CHARS.put("kU", "Ų"); // "Uogon"
+		CHARS.put("ku", "ų"); // "uogon"
+		CHARS.put("^W", "Ŵ"); // "Wcirc"
+		CHARS.put("^w", "ŵ"); // "wcirc"
+		CHARS.put("^Y", "Ŷ"); // "Ycirc"
+		CHARS.put("^y", "ŷ"); // "ycirc"
+		CHARS.put("\"Y", "Ÿ"); // "Yuml"
+		CHARS.put("'Z", "Ź"); // "Zacute"
+		CHARS.put("'z", "ź"); // "zacute"
+		CHARS.put(".Z", "Ż"); // "Zdot"
+		CHARS.put(".z", "ż"); // "zdot"
+		CHARS.put("vZ", "Ž"); // "Zcaron"
+		CHARS.put("vz", "ž"); // "zcaron"
 		// Symbol #383 (f) has no special Latex command
         CHARS.put("%", "%"); // percent sign
     }
diff --git a/src/java/net/sf/jabref/export/layout/format/HTMLChars.java b/src/java/net/sf/jabref/export/layout/format/HTMLChars.java
index 51716b4..2e41117 100644
--- a/src/java/net/sf/jabref/export/layout/format/HTMLChars.java
+++ b/src/java/net/sf/jabref/export/layout/format/HTMLChars.java
@@ -6,13 +6,14 @@ import net.sf.jabref.export.layout.LayoutFormatter;
 /**
  * This formatter escapes characters so they are suitable for HTML.
  * 
- * @version $Revision: 2568 $ ($Date: 2008-01-15 18:40:26 +0100 (Tue, 15 Jan 2008) $)
+ * @version $Revision: 3128 $ ($Date: 2009-11-01 11:38:08 +0100 (Sun, 01 Nov 2009) $)
  */
 public class HTMLChars implements LayoutFormatter {
 
 	public String format(String field) {
 		int i;
-		field = field.replaceAll("&|\\\\&", "&").replaceAll("[\\n]{1,}", "<p>");
+		field = field.replaceAll("&|\\\\&", "&").replaceAll("[\\n]{2,}", "<p>")
+                .replaceAll("\\n", "<br>");
 
 		StringBuffer sb = new StringBuffer();
 		StringBuffer currentCommand = null;
diff --git a/src/java/net/sf/jabref/export/layout/format/LastPage.java b/src/java/net/sf/jabref/export/layout/format/LastPage.java
index 86db9b5..c1327f9 100644
--- a/src/java/net/sf/jabref/export/layout/format/LastPage.java
+++ b/src/java/net/sf/jabref/export/layout/format/LastPage.java
@@ -16,7 +16,10 @@ public class LastPage implements LayoutFormatter {
 		String[] pageParts = s.split("[\\-]+");
 		if (pageParts.length == 2)
             return pageParts[1];
-        else return "";
+        // If we didn't get two parts, it may be that only the number of pages is given.
+        // Return the first part:
+        else return pageParts[0];
+        //else return "";
 
     }
 }
\ No newline at end of file
diff --git a/src/java/net/sf/jabref/export/layout/format/RTFChars.java b/src/java/net/sf/jabref/export/layout/format/RTFChars.java
index 8fbf8ff..5524b91 100644
--- a/src/java/net/sf/jabref/export/layout/format/RTFChars.java
+++ b/src/java/net/sf/jabref/export/layout/format/RTFChars.java
@@ -14,10 +14,12 @@ import net.sf.jabref.export.layout.LayoutFormatter;
  *   
  *   3.) Replace emph and textit and textbf with their RTF replacements.
  *   
- *   4.) Take special care to save all unicode characters correctly. 
+ *   4.) Take special care to save all unicode characters correctly.
+ *
+ *   5.) Replace --- by \emdash and -- by \endash.
  * 
  * @author $Author: mortenalver $
- * @version $Revision: 2568 $ ($Date: 2008-01-15 18:40:26 +0100 (Tue, 15 Jan 2008) $)
+ * @version $Revision: 3094 $ ($Date: 2009-10-07 22:27:27 +0200 (Wed, 07 Oct 2009) $)
  *
  */
 public class RTFChars implements LayoutFormatter {
@@ -150,7 +152,7 @@ public class RTFChars implements LayoutFormatter {
 				sb.append("\\u").append((long) c).append('?');
 		}
 
-		return sb.toString();
+		return sb.toString().replaceAll("---", "{\\\\emdash}").replaceAll("--", "{\\\\endash}");
 	}
 
 	private IntAndString getPart(String text, int i) {
diff --git a/src/java/net/sf/jabref/export/layout/format/ResolvePDF.java b/src/java/net/sf/jabref/export/layout/format/ResolvePDF.java
index fc6a2a5..cbcea29 100644
--- a/src/java/net/sf/jabref/export/layout/format/ResolvePDF.java
+++ b/src/java/net/sf/jabref/export/layout/format/ResolvePDF.java
@@ -11,7 +11,7 @@ import net.sf.jabref.export.layout.LayoutFormatter;
  * must exist).
  * 
  * @author $Author: mortenalver $
- * @version $Revision: 2973 $ ($Date: 2009-04-29 22:09:09 +0200 (Wed, 29 Apr 2009) $)
+ * @version $Revision: 3047 $ ($Date: 2009-08-21 18:32:56 +0200 (Fri, 21 Aug 2009) $)
  */
 public class ResolvePDF implements LayoutFormatter {
 
diff --git a/src/java/net/sf/jabref/external/TransferableFileLinkSelection.java b/src/java/net/sf/jabref/external/TransferableFileLinkSelection.java
new file mode 100644
index 0000000..55dd56e
--- /dev/null
+++ b/src/java/net/sf/jabref/external/TransferableFileLinkSelection.java
@@ -0,0 +1,111 @@
+package net.sf.jabref.external;
+
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.GUIGlobals;
+import net.sf.jabref.Util;
+import net.sf.jabref.BasePanel;
+import net.sf.jabref.gui.FileListTableModel;
+
+import java.awt.datatransfer.StringSelection;
+import java.awt.datatransfer.Transferable;
+import java.awt.datatransfer.DataFlavor;
+import java.awt.datatransfer.UnsupportedFlavorException;
+import java.io.File;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.util.List;
+import java.util.ArrayList;
+
+/**
+ * 
+ */
+public class TransferableFileLinkSelection implements Transferable {
+
+    List<File> fileList = new ArrayList<File>();
+
+    public TransferableFileLinkSelection(BasePanel panel, BibtexEntry[] selection) {
+        String s = selection[0].getField(GUIGlobals.FILE_FIELD);
+        FileListTableModel tm = new FileListTableModel();
+        if (s != null)
+            tm.setContent(s);
+        if (tm.getRowCount() > 0) {
+            // Find the default directory for this field type, if any:
+            String dir = panel.metaData().getFileDirectory(GUIGlobals.FILE_FIELD);
+            // Include the standard "file" directory:
+            String fileDir = panel.metaData().getFileDirectory(GUIGlobals.FILE_FIELD);
+            // Include the directory of the bib file:
+            String[] dirs;
+            if (panel.metaData().getFile() != null) {
+                String databaseDir = panel.metaData().getFile().getParent();
+                dirs = new String[] { dir, fileDir, databaseDir };
+            }
+            else
+                dirs = new String[] { dir, fileDir };
+            File expLink = Util.expandFilename(tm.getEntry(0).getLink(), dirs);
+            fileList.add(expLink);
+
+        }
+
+    }
+
+    public DataFlavor[] getTransferDataFlavors() {
+        return new DataFlavor[] {DataFlavor.javaFileListFlavor};//, DataFlavor.stringFlavor};
+    }
+
+    public boolean isDataFlavorSupported(DataFlavor dataFlavor) {
+        System.out.println("Query: "+dataFlavor.getHumanPresentableName()+" , "+
+            dataFlavor.getDefaultRepresentationClass()+" , "+dataFlavor.getMimeType());
+        return dataFlavor.equals(DataFlavor.javaFileListFlavor)
+                || dataFlavor.equals(DataFlavor.stringFlavor);
+    }
+
+    public Object getTransferData(DataFlavor dataFlavor) throws UnsupportedFlavorException, IOException {
+        //if (dataFlavor.equals(DataFlavor.javaFileListFlavor))
+            return fileList;
+        //else
+        //    return "test";
+    }
+    /*
+    private StringSelection ss;
+
+    public TransferableFileLinkSelection(BasePanel panel, BibtexEntry[] selection) {
+        String s = selection[0].getField(GUIGlobals.FILE_FIELD);
+        FileListTableModel tm = new FileListTableModel();
+        if (s != null)
+            tm.setContent(s);
+        if (tm.getRowCount() > 0) {
+            // Find the default directory for this field type, if any:
+            String dir = panel.metaData().getFileDirectory(GUIGlobals.FILE_FIELD);
+            // Include the standard "file" directory:
+            String fileDir = panel.metaData().getFileDirectory(GUIGlobals.FILE_FIELD);
+            // Include the directory of the bib file:
+            String[] dirs;
+            if (panel.metaData().getFile() != null) {
+                String databaseDir = panel.metaData().getFile().getParent();
+                dirs = new String[] { dir, fileDir, databaseDir };
+            }
+            else
+                dirs = new String[] { dir, fileDir };
+            System.out.println(tm.getEntry(0).getLink());
+            for (int i = 0; i < dirs.length; i++) {
+                String dir1 = dirs[i];
+                System.out.println("dir:"+dir1);
+            }
+            File expLink = Util.expandFilename(tm.getEntry(0).getLink(), dirs);
+            try { 
+                System.out.println(expLink.toURI().toURL().toString());
+                ss = new StringSelection(expLink.toURI().toURL().toString());
+                
+            } catch (MalformedURLException ex) {
+                ss = new StringSelection("");
+            }
+        }
+        else
+            ss = new StringSelection("");
+
+    }
+
+    public Transferable getTransferable() {
+        return ss;
+    } */
+}
diff --git a/src/java/net/sf/jabref/groups/AutoGroupDialog.java b/src/java/net/sf/jabref/groups/AutoGroupDialog.java
index dae7be8..68ee761 100644
--- a/src/java/net/sf/jabref/groups/AutoGroupDialog.java
+++ b/src/java/net/sf/jabref/groups/AutoGroupDialog.java
@@ -33,6 +33,9 @@ import java.awt.Insets;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 import java.util.HashSet;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Set;
 
 import javax.swing.*;
 import javax.swing.event.CaretEvent;
@@ -43,6 +46,9 @@ import net.sf.jabref.Globals;
 import net.sf.jabref.JabRefFrame;
 import net.sf.jabref.Util;
 import net.sf.jabref.undo.NamedCompound;
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+import com.jgoodies.forms.builder.ButtonBarBuilder;
+import com.jgoodies.forms.layout.FormLayout;
 
 /**
  * Dialog for creating or modifying groups. Operates directly on the Vector
@@ -53,6 +59,10 @@ class AutoGroupDialog extends JDialog implements CaretListener {
             deliminator = new JTextField(60);
     JLabel nf = new JLabel(Globals.lang("Field to group by") + ":"),
             nr = new JLabel(Globals.lang("Characters to ignore") + ":");
+    JRadioButton
+        keywords = new JRadioButton(Globals.lang("Generate groups from keywords in a BibTeX field")),
+        authors = new JRadioButton(Globals.lang("Generate groups for author last names")),
+        editors = new JRadioButton(Globals.lang("Generate groups for editor last names"));
     JCheckBox nd = new JCheckBox(Globals.lang(
     		"Use the following delimiter character(s)")
             + ":"); // JZTODO lyrics
@@ -93,18 +103,35 @@ class AutoGroupDialog extends JDialog implements CaretListener {
                 GroupTreeNode autoGroupsRoot = new GroupTreeNode(
                         new ExplicitGroup(Globals.lang("Automatically created groups"),
                         		AbstractGroup.INCLUDING));
-                HashSet<String> hs = null;
-                if (nd.isSelected()) {
-                    hs = Util
-                            .findDeliminatedWordsInField(panel.getDatabase(),
-                                    field().toLowerCase().trim(), deliminator
-                                            .getText());
-                } else {
-                    hs = Util.findAllWordsInField(panel.getDatabase(), field()
-                            .toLowerCase().trim(), remove());
+                Set<String> hs = null;
+                String field = field();
+                if (keywords.isSelected()) {
+                    if (nd.isSelected()) {
+                        hs = Util
+                                .findDeliminatedWordsInField(panel.getDatabase(),
+                                        field().toLowerCase().trim(), deliminator
+                                                .getText());
+                    } else {
+                        hs = Util.findAllWordsInField(panel.getDatabase(),
+                                field().toLowerCase().trim(), remove());
+
+                    }
+                }
+                else if (authors.isSelected()) {
+                    List<String> fields = new ArrayList<String>(2);
+                    fields.add("author");
+                    hs = Util.findAuthorLastNames(panel.getDatabase(), fields);
+                    field = "author";
                 }
+                else if (editors.isSelected()) {
+                    List<String> fields = new ArrayList<String>(2);
+                    fields.add("editor");
+                    hs = Util.findAuthorLastNames(panel.getDatabase(), fields);
+                    field = "editor";
+                }
+
                 for (String keyword : hs){
-                    KeywordGroup group = new KeywordGroup(keyword, field(),
+                    KeywordGroup group = new KeywordGroup(keyword, field,
                             keyword, false, false, AbstractGroup.INDEPENDENT);
                     autoGroupsRoot.add(new GroupTreeNode(group));
                 }
@@ -140,8 +167,42 @@ class AutoGroupDialog extends JDialog implements CaretListener {
         InputMap im = main.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
         im.put(frame.prefs().getKey("Close dialog"), "close");
         am.put("close", cancelAction);
+
+        ButtonGroup bg = new ButtonGroup();
+        bg.add(keywords);
+        bg.add(authors);
+        bg.add(editors);
+        keywords.setSelected(true);
+        DefaultFormBuilder b = new DefaultFormBuilder(new FormLayout
+                ("left:20dlu, 4dlu, left:pref, 4dlu, fill:60dlu, 4dlu, fill:0dlu", ""), main);
+        b.append(keywords, 5);
+        b.nextLine();
+        b.append(new JPanel());
+        b.append(Globals.lang("Field to group by")+":");
+        b.append(field);
+        b.nextLine();
+        b.append(new JPanel());
+        b.append(Globals.lang("Characters to ignore")+":");
+        b.append(remove);
+        b.nextLine();
+        b.append(new JPanel());
+        b.append(nd);
+        b.append(deliminator);
+        b.nextLine();
+        b.append(authors, 5);
+        b.nextLine();
+        b.append(editors, 5);
+        b.nextLine();
+        
+        ButtonBarBuilder bb = new ButtonBarBuilder(opt);
+        bb.addGlue();
+        bb.addGridded(ok);
+        bb.addGridded(cancel);
+        bb.addGlue();
+
+
         // Layout starts here.
-        main.setLayout(gbl);
+        /*main.setLayout(gbl);
         opt.setLayout(gbl);
         main.setBorder(BorderFactory.createTitledBorder(BorderFactory
                 .createEtchedBorder(), Globals.lang("Group properties")));
@@ -186,12 +247,14 @@ class AutoGroupDialog extends JDialog implements CaretListener {
         con.anchor = GridBagConstraints.WEST;
         con.gridwidth = GridBagConstraints.REMAINDER;
         gbl.setConstraints(cancel, con);
-        opt.add(cancel);
+        opt.add(cancel);*/
+        main.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+        opt.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
         getContentPane().add(main, BorderLayout.CENTER);
         getContentPane().add(opt, BorderLayout.SOUTH);
         // pack();
         updateComponents();
-        setSize(400, 200);
+        pack();
         Util.placeDialog(this, frame);
     }
 
diff --git a/src/java/net/sf/jabref/groups/EntryTableTransferHandler.java b/src/java/net/sf/jabref/groups/EntryTableTransferHandler.java
index 517c112..e6a1f06 100644
--- a/src/java/net/sf/jabref/groups/EntryTableTransferHandler.java
+++ b/src/java/net/sf/jabref/groups/EntryTableTransferHandler.java
@@ -22,12 +22,10 @@
 
 package net.sf.jabref.groups;
 
-import java.awt.datatransfer.Clipboard;
-import java.awt.datatransfer.DataFlavor;
-import java.awt.datatransfer.Transferable;
-import java.awt.datatransfer.UnsupportedFlavorException;
+import java.awt.datatransfer.*;
 import java.awt.dnd.DnDConstants;
 import java.awt.event.InputEvent;
+import java.awt.event.MouseEvent;
 import java.io.File;
 import java.io.FileWriter;
 import java.io.IOException;
@@ -47,7 +45,9 @@ import net.sf.jabref.Globals;
 import net.sf.jabref.JabRefFrame;
 import net.sf.jabref.external.DroppedFileHandler;
 import net.sf.jabref.external.ExternalFileType;
+import net.sf.jabref.external.TransferableFileLinkSelection;
 import net.sf.jabref.gui.MainTable;
+import net.sf.jabref.gui.MainTableFormat;
 import net.sf.jabref.imports.ImportMenuItem;
 import net.sf.jabref.imports.OpenDatabaseAction;
 import net.sf.jabref.imports.ParserResult;
@@ -107,8 +107,15 @@ public class EntryTableTransferHandler extends TransferHandler {
 	 * This method is called when dragging stuff *from* the table.
 	 */
 	public Transferable createTransferable(JComponent c) {
-		/* so we can assume it will never be called if entryTable==null: */
-		return new TransferableEntrySelection(entryTable.getSelectedEntries());
+        if (!draggingFile) {
+            /* so we can assume it will never be called if entryTable==null: */
+            return new TransferableEntrySelection(entryTable.getSelectedEntries());
+        }
+        else {
+            draggingFile = false;
+            return (new TransferableFileLinkSelection
+                    (panel, entryTable.getSelectedEntries()));//.getTransferable();
+        }
 	}
 
 	/**
@@ -189,10 +196,10 @@ public class EntryTableTransferHandler extends TransferHandler {
 		// nope, never heard of this type
 		return false;
 	}
+    boolean draggingFile = false;
 
 	public void exportAsDrag(JComponent comp, InputEvent e, int action) {
-		// action is always LINK
-        /* TODO: add support for dragging file link from table icon into other apps
+		/* TODO: add support for dragging file link from table icon into other apps */
         if (e instanceof MouseEvent) {
             MouseEvent me = (MouseEvent)e;
             int col = entryTable.columnAtPoint(me.getPoint());
@@ -204,8 +211,9 @@ public class EntryTableTransferHandler extends TransferHandler {
             // We have an icon column:
             if (res == MainTableFormat.FILE) {
                 System.out.println("dragging file");
+                draggingFile = true;
             }
-        }*/
+        }
         super.exportAsDrag(comp, e, DnDConstants.ACTION_LINK);
 	}
 
@@ -222,7 +230,7 @@ public class EntryTableTransferHandler extends TransferHandler {
 	// add-ons -----------------------
 
 	protected boolean handleDropTransfer(String dropStr, final int dropRow) throws IOException {
-		if (dropStr.startsWith("file:")) {
+        if (dropStr.startsWith("file:")) {
 			// This appears to be a dragged file link and not a reference
 			// format. Check if we can map this to a set of files:
 			if (handleDraggedFilenames(dropStr, dropRow))
diff --git a/src/java/net/sf/jabref/groups/GroupTreeCellRenderer.java b/src/java/net/sf/jabref/groups/GroupTreeCellRenderer.java
index ce18ace..21c4ef6 100644
--- a/src/java/net/sf/jabref/groups/GroupTreeCellRenderer.java
+++ b/src/java/net/sf/jabref/groups/GroupTreeCellRenderer.java
@@ -22,8 +22,7 @@
 
 package net.sf.jabref.groups;
 
-import java.awt.Color;
-import java.awt.Component;
+import java.awt.*;
 
 import javax.swing.BorderFactory;
 import javax.swing.ImageIcon;
@@ -42,6 +41,9 @@ import net.sf.jabref.Util;
  * @author jzieren
  */
 public class GroupTreeCellRenderer extends DefaultTreeCellRenderer {
+
+    public static final int MAX_DISPLAYED_LETTERS = 35;
+
     /** The cell over which the user is currently dragging */
     protected Object highlight1Cell = null;
     protected Object[] highlight2Cells = null;
@@ -69,6 +71,7 @@ public class GroupTreeCellRenderer extends DefaultTreeCellRenderer {
         if (group == null || !(c instanceof JLabel))
             return c; // sanity check
         JLabel label = (JLabel) c;
+
         if (highlightBorderCell != null && highlightBorderCell == value)
             label.setBorder(BorderFactory.createLineBorder(Color.BLACK));
         else
@@ -94,6 +97,9 @@ public class GroupTreeCellRenderer extends DefaultTreeCellRenderer {
                 }
             }
         }
+        String name = group.getName();
+        if (name.length() > MAX_DISPLAYED_LETTERS)
+            name = name.substring(0, MAX_DISPLAYED_LETTERS-2)+"...";
         StringBuffer sb = new StringBuffer();
         sb.append("<html>");
         if (red)
@@ -102,7 +108,7 @@ public class GroupTreeCellRenderer extends DefaultTreeCellRenderer {
             sb.append("<u>");
         if (italics)
             sb.append("<i>");
-        sb.append(Util.quoteForHTML(group.getName()));
+        sb.append(Util.quoteForHTML(name));
         if (italics)
             sb.append("</i>");
         if (underline)
@@ -111,6 +117,7 @@ public class GroupTreeCellRenderer extends DefaultTreeCellRenderer {
             sb.append("</font>");
         sb.append("</html>");
         final String text = sb.toString();
+
         if (!label.getText().equals(text))
             label.setText(text);
         label.setToolTipText("<html>" + group.getShortDescription() + "</html>");
diff --git a/src/java/net/sf/jabref/groups/KeywordGroup.java b/src/java/net/sf/jabref/groups/KeywordGroup.java
index ec1d4ed..68402a8 100644
--- a/src/java/net/sf/jabref/groups/KeywordGroup.java
+++ b/src/java/net/sf/jabref/groups/KeywordGroup.java
@@ -62,8 +62,8 @@ public class KeywordGroup extends AbstractGroup implements SearchRule {
 
 	protected void compilePattern() throws IllegalArgumentException,
 			PatternSyntaxException {
-		m_pattern = m_caseSensitive ? Pattern.compile(m_searchExpression)
-				: Pattern.compile(m_searchExpression, Pattern.CASE_INSENSITIVE);
+		m_pattern = m_caseSensitive ? Pattern.compile("\\b"+m_searchExpression+"\\b")
+				: Pattern.compile("\\b"+m_searchExpression+"\\b", Pattern.CASE_INSENSITIVE);
 	}
 
 	/**
@@ -239,11 +239,33 @@ public class KeywordGroup extends AbstractGroup implements SearchRule {
 		if (m_regExp)
 			return m_pattern.matcher(content).find();
 		if (m_caseSensitive)
-			return content.indexOf(m_searchExpression) >= 0;
-		content = content.toLowerCase();
-		return content.indexOf(m_searchExpression.toLowerCase()) >= 0;
+			return containsWord(m_searchExpression, content);
+		return containsWord(m_searchExpression.toLowerCase(), content.toLowerCase());
 	}
 
+    /**
+     * Look for the given non-regexp string in another string, but check whether a
+     * match concerns a complete word, not part of a word.
+     * @param word The word to look for.
+     * @param text The string to look in.
+     * @return true if the word was found, false otherwise.
+     */
+    private static boolean containsWord(String word, String text) {
+        int piv = 0;
+        while (piv < text.length()) {
+            int ind = text.indexOf(word, piv);
+            if (ind < 0)
+                return false;
+            // Found a match. See if it is a complete word:
+            if (((ind == 0) || !Character.isLetterOrDigit(text.charAt(ind-1))) &&
+                ((ind+word.length() == text.length()) || !Character.isLetterOrDigit(text.charAt(ind+word.length())))) {
+                return true;
+            }
+            else piv = ind+1;
+        }
+        return false;
+    }
+
 	/**
 	 * Removes matches of searchString in the entry's field. This is only
 	 * possible if the search expression is not a regExp.
diff --git a/src/java/net/sf/jabref/gui/AutoCompleteListener.java b/src/java/net/sf/jabref/gui/AutoCompleteListener.java
index 410cfe3..f23e851 100644
--- a/src/java/net/sf/jabref/gui/AutoCompleteListener.java
+++ b/src/java/net/sf/jabref/gui/AutoCompleteListener.java
@@ -4,11 +4,13 @@ import javax.swing.text.JTextComponent;
 import javax.swing.text.BadLocationException;
 import java.awt.event.KeyAdapter;
 import java.awt.event.KeyEvent;
+import java.awt.event.FocusListener;
+import java.awt.event.FocusEvent;
 
 /**
  * Created by Morten O. Alver, 16 Feb. 2007
  */
-public class AutoCompleteListener extends KeyAdapter {
+public class AutoCompleteListener extends KeyAdapter implements FocusListener {
 
 
     AutoCompleter completer;
@@ -18,12 +20,27 @@ public class AutoCompleteListener extends KeyAdapter {
     protected Object[] lastCompletions = null;
     protected int lastShownCompletion = 0;
 
+    // This field is set if the focus listener should call another focus listener
+    // after finishing. This is needed because the autocomplete listener must
+    // run before the focus listener responsible for storing the current edit.
+    protected FocusListener nextFocusListener = null;
+
     // These variables keep track of the situation from time to time.
 
     public AutoCompleteListener(AutoCompleter completer) {
         this.completer = completer;
     }
 
+    /**
+     * This method is used if the focus listener should call another focus listener
+     * after finishing. This is needed because the autocomplete listener must
+     * run before the focus listener responsible for storing the current edit.
+     *
+     * @param listener The listener to call.
+     */
+    public void setNextFocusListener(FocusListener listener) {
+        this.nextFocusListener = listener;
+    }
 
     public void keyPressed(KeyEvent e) {
         if ((toSetIn != null) && (e.getKeyCode() == KeyEvent.VK_ENTER)) {
@@ -190,19 +207,27 @@ public class AutoCompleteListener extends KeyAdapter {
 
         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--;
+            // We now have the text from the start of the field up to the caret position.
+            // In most fields, we are only interested in the currently edited word, so we
+            // seek from the caret backward to the closest space:
+            if (!completer.isSingleUnitField()) {
+                if ((comp.getCaretPosition() < comp.getText().length())
+                        && !Character.isWhitespace(comp.getText().charAt(comp.getCaretPosition())))
+                    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));
             }
-            //if (piv < 0)
-            //piv = 0;
-            res.append(upToCaret.substring(piv + 1));
+            // For fields such as "journal" it is more reasonable to try to complete on the entire
+            // text field content, so we skip the searching and keep the entire part up to the caret:
+            else res.append(upToCaret);
             //Util.pr("AutoCompListener: "+res.toString());
         } catch (BadLocationException ex) {
         }
@@ -228,4 +253,25 @@ public class AutoCompleteListener extends KeyAdapter {
         }
 
     }
+
+    public void focusGained(FocusEvent event) {
+        if (nextFocusListener != null)
+            nextFocusListener.focusGained(event);
+    }
+
+    public void focusLost(FocusEvent event) {
+        if (lastCompletions != null) {
+            JTextComponent comp = (JTextComponent)event.getSource();
+            int selStart = comp.getSelectionStart();
+            String text = comp.getText();
+            comp.setText(text.substring(0, selStart) + text.substring(comp.getSelectionEnd()));
+            comp.setCaretPosition(selStart);
+            lastCompletions = null;
+            lastShownCompletion = 0;
+            lastCaretPosition = -1;
+            toSetIn = null;
+        }
+        if (nextFocusListener != null)
+            nextFocusListener.focusLost(event);
+    }
 }
diff --git a/src/java/net/sf/jabref/gui/AutoCompleter.java b/src/java/net/sf/jabref/gui/AutoCompleter.java
index 20a122f..0d98442 100644
--- a/src/java/net/sf/jabref/gui/AutoCompleter.java
+++ b/src/java/net/sf/jabref/gui/AutoCompleter.java
@@ -41,6 +41,10 @@ public class AutoCompleter {
         return nameField;
     }
 
+    public boolean isSingleUnitField() {
+        return entireField;
+    }
+
     public void addWord(String word) {
         if (word.length() >= SHORTEST_WORD)
             words.add(word);
diff --git a/src/java/net/sf/jabref/gui/FileListEditor.java b/src/java/net/sf/jabref/gui/FileListEditor.java
index 3611379..de7aa19 100644
--- a/src/java/net/sf/jabref/gui/FileListEditor.java
+++ b/src/java/net/sf/jabref/gui/FileListEditor.java
@@ -527,11 +527,11 @@ public class FileListEditor extends JTable implements FieldEditor,
     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);	    
+	    if ((dir.getPath().length() > 0) && pth.startsWith(dir.getPath())) {
+            String subs = pth.substring(dir.getPath().length());
+            if ((subs.length() > 0) && ((subs.charAt(0) == '/') || (subs.charAt(0) == '\\')))
+                subs = subs.substring(1);
+            return new File(subs);
 	    }
 	}
 	return f;
diff --git a/src/java/net/sf/jabref/gui/FileListEntryEditor.java b/src/java/net/sf/jabref/gui/FileListEntryEditor.java
index ab0c74f..c35bbb5 100644
--- a/src/java/net/sf/jabref/gui/FileListEntryEditor.java
+++ b/src/java/net/sf/jabref/gui/FileListEntryEditor.java
@@ -5,6 +5,7 @@ import java.awt.event.*;
 import java.io.File;
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.regex.Pattern;
 
 import javax.swing.*;
 import javax.swing.event.DocumentEvent;
@@ -53,6 +54,8 @@ public class FileListEntryEditor {
     private boolean okPressed = false, okDisabledExternally = false,
             openBrowseWhenShown = false, dontOpenBrowseUntilDisposed = false;
 
+    public static Pattern remoteLinkPattern = Pattern.compile("[a-z]+://.*");
+
     public FileListEntryEditor(JabRefFrame frame, FileListEntry entry, boolean showProgressBar,
                                boolean showOpenButton, MetaData metaData) {
         this.entry = entry;
@@ -183,6 +186,16 @@ public class FileListEntryEditor {
     private void checkExtension() {
         if ((types.getSelectedIndex() == -1) &&
                 (link.getText().trim().length() > 0)) {
+
+            // Check if this looks like a remote link:
+            if (remoteLinkPattern.matcher(link.getText()).matches()) {
+                ExternalFileType type = Globals.prefs.getExternalFileTypeByExt("html");
+                if (type != null) {
+                    types.setSelectedItem(type);
+                    return;
+                }
+            }
+
             // Try to guess the file type:
             String theLink = link.getText().trim();
             int index = theLink.lastIndexOf('.');
@@ -266,12 +279,15 @@ public class FileListEntryEditor {
         } else {
             String canPath = (new File(fileDir)).getCanonicalPath();
             File fl = new File(link.getText().trim());
-            String flPath = fl.getCanonicalPath();
-            if ((flPath.length() > canPath.length()) && (flPath.startsWith(canPath))) {
-                String relFileName = fl.getCanonicalPath().substring(canPath.length()+1);
-                entry.setLink(relFileName);
-            } else
-                entry.setLink(link.getText().trim());
+            if (fl.isAbsolute()) {
+                String flPath = fl.getCanonicalPath();
+                if ((flPath.length() > canPath.length()) && (flPath.startsWith(canPath))) {
+                    String relFileName = fl.getCanonicalPath().substring(canPath.length()+1);
+                    entry.setLink(relFileName);
+                } else
+                    entry.setLink(link.getText().trim());
+            }
+            else entry.setLink(link.getText().trim());
         }
     } catch (java.io.IOException ex)
 	{ 
diff --git a/src/java/net/sf/jabref/gui/ImportInspectionDialog.java b/src/java/net/sf/jabref/gui/ImportInspectionDialog.java
index 59bcad4..5665740 100644
--- a/src/java/net/sf/jabref/gui/ImportInspectionDialog.java
+++ b/src/java/net/sf/jabref/gui/ImportInspectionDialog.java
@@ -111,7 +111,7 @@ import com.jgoodies.uif_lite.component.UIFSplitPane;
  * 
  * @author alver
  * @author $Author: mortenalver $
- * @version $Revision: 2919 $ ($Date: 2007-11-14 01:25:31 +0100 (Mi, 14 Nov
+ * @version $Revision: 3047 $ ($Date: 2007-11-14 01:25:31 +0100 (Mi, 14 Nov
  *          2007) $)
  * 
  */
@@ -1369,6 +1369,7 @@ public class ImportInspectionDialog extends JDialog implements ImportInspector {
 
         public EntryTable(TableModel model) {
             super(model);
+            getTableHeader().setReorderingAllowed(false);
         }
 
         public TableCellRenderer getCellRenderer(int row, int column) {
diff --git a/src/java/net/sf/jabref/gui/MainTableSelectionListener.java b/src/java/net/sf/jabref/gui/MainTableSelectionListener.java
index 2a31ac2..2cc1044 100644
--- a/src/java/net/sf/jabref/gui/MainTableSelectionListener.java
+++ b/src/java/net/sf/jabref/gui/MainTableSelectionListener.java
@@ -106,10 +106,17 @@ public class MainTableSelectionListener implements ListEventListener<BibtexEntry
             if ((mode == BasePanel.WILL_SHOW_EDITOR) || (mode == BasePanel.SHOWING_EDITOR)) {
                 // An entry is currently being edited.
                 EntryEditor oldEditor = panel.getCurrentEditor();
+                String visName = null;
+                if (oldEditor != null)
+                    visName = oldEditor.getVisiblePanelName();
+        
                 // Get an old or new editor for the entry to edit:
                 EntryEditor newEditor = panel.getEntryEditor(toShow);
                 // Show the new editor unless it was already visible:
                 if ((newEditor != oldEditor) || (mode != BasePanel.SHOWING_EDITOR)) {
+
+                    if (visName != null)
+                        newEditor.setVisiblePanel(visName);
                     panel.showEntryEditor(newEditor);
                     SwingUtilities.invokeLater(new Runnable() {
                         public void run() {
@@ -206,22 +213,14 @@ public class MainTableSelectionListener implements ListEventListener<BibtexEntry
         }
     }
 
-     public void mousePressed(MouseEvent e) {
-         
+    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());
 
-        // A double click on an entry should open the entry's editor.
-        if (e.getClickCount() == 2) {
-
-            BibtexEntry toShow = tableRows.get(row);
-            editSignalled(toShow);
-        }
-
         // Check if the user has clicked on an icon cell to open url or pdf.
         final String[] iconType = table.getIconTypeForColumn(col);
-
+        
         // Check if the user has right-clicked. If so, open the right-click menu.
         if (e.isPopupTrigger()) {
             if (iconType == null)
@@ -231,6 +230,24 @@ public class MainTableSelectionListener implements ListEventListener<BibtexEntry
 
             return;
         }
+    }
+
+    public void mouseClicked(MouseEvent e) {
+         
+        // First find the column on which the user has clicked.
+        final int col = table.columnAtPoint(e.getPoint()),
+                row = table.rowAtPoint(e.getPoint());
+
+        // A double click on an entry should open the entry's editor.
+        if (e.getClickCount() == 2) {
+
+            BibtexEntry toShow = tableRows.get(row);
+            editSignalled(toShow);
+        }
+
+        // Check if the user has clicked on an icon cell to open url or pdf.
+        final String[] iconType = table.getIconTypeForColumn(col);
+
 
          // Workaround for Windows. Right-click is not popup trigger on mousePressed, but
          // on mouseReleased. Therefore we need to avoid taking action at this point, because
@@ -381,9 +398,7 @@ public class MainTableSelectionListener implements ListEventListener<BibtexEntry
     }
 
 
-    public void mouseClicked(MouseEvent e) {
 
-    }
 
     public void mouseEntered(MouseEvent e) {
 
diff --git a/src/java/net/sf/jabref/gui/VerticalLabelUI.java b/src/java/net/sf/jabref/gui/VerticalLabelUI.java
new file mode 100644
index 0000000..1ce33f9
--- /dev/null
+++ b/src/java/net/sf/jabref/gui/VerticalLabelUI.java
@@ -0,0 +1,191 @@
+/**
+ * @(#)VerticalLabelUI.java	1.0 02/18/09
+ */
+package net.sf.jabref.gui;
+
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.FontMetrics;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.Rectangle;
+import javax.swing.Icon;
+import javax.swing.JComponent;
+import javax.swing.JLabel;
+import javax.swing.SwingUtilities;
+import javax.swing.plaf.ComponentUI;
+import javax.swing.plaf.basic.BasicLabelUI;
+
+/**
+ * A UI delegate for JLabel that rotates the label 90�
+ * <P>
+ * Extends {@link BasicLabelUI}.
+ * <P>
+ * The only difference between the appearance of labels in the Basic and Metal
+ * L&Fs is the manner in which diabled text is painted.  As VerticalLabelUI
+ * does not override the method paintDisabledText, this class can be adapted
+ * for Metal L&F by extending MetalLabelUI instead of BasicLabelUI.
+ * <P>
+ * No other changes are required.
+ * 
+ * @author Darryl
+ */
+public class VerticalLabelUI extends BasicLabelUI {
+
+   private boolean clockwise = false;
+   // see comment in BasicLabelUI
+   Rectangle verticalViewR = new Rectangle();
+   Rectangle verticalIconR = new Rectangle();
+   Rectangle verticalTextR = new Rectangle();
+   protected static VerticalLabelUI verticalLabelUI =
+         new VerticalLabelUI();
+   private final static VerticalLabelUI SAFE_VERTICAL_LABEL_UI =
+         new VerticalLabelUI();
+
+   /**
+    * Constructs a <code>VerticalLabelUI</code> with the default anticlockwise
+    * rotation
+    */
+   public VerticalLabelUI() {
+   }
+
+   /**
+    * Constructs a <code>VerticalLabelUI</code> with the desired rotation.
+    * <P>
+    * @param clockwise true to rotate clockwise, false for anticlockwise
+    */
+   public VerticalLabelUI(boolean clockwise) {
+      this.clockwise = clockwise;
+   }
+
+   /**
+    * @see ComponentUI#createUI(javax.swing.JComponent) 
+    */
+   public static ComponentUI createUI(JComponent c) {
+      if (System.getSecurityManager() != null) {
+         return SAFE_VERTICAL_LABEL_UI;
+      } else {
+         return verticalLabelUI;
+      }
+   }
+
+   /**
+    * Overridden to always return -1, since a vertical label does not have a
+    * meaningful baseline.
+    * 
+    * @see ComponentUI#getBaseline(JComponent, int, int)
+    */
+   @Override
+   public int getBaseline(JComponent c, int width, int height) {
+      super.getBaseline(c, width, height);
+      return -1;
+   }
+
+   /**
+    * Overridden to always return Component.BaselineResizeBehavior.OTHER,
+    * since a vertical label does not have a meaningful baseline 
+    * 
+    * @see ComponentUI#getBaselineResizeBehavior(javax.swing.JComponent)
+    */
+   @Override
+   public Component.BaselineResizeBehavior getBaselineResizeBehavior(
+         JComponent c) {
+      super.getBaselineResizeBehavior(c);
+      return Component.BaselineResizeBehavior.OTHER;
+   }
+
+   /**
+    * Transposes the view rectangles as appropriate for a vertical view
+    * before invoking the super method and copies them after they have been
+    * altered by {@link SwingUtilities#layoutCompoundLabel(FontMetrics, String,
+    * Icon, int, int, int, int, Rectangle, Rectangle, Rectangle, int)}
+    */
+   @Override
+   protected String layoutCL(JLabel label, FontMetrics fontMetrics,
+         String text, Icon icon, Rectangle viewR, Rectangle iconR,
+         Rectangle textR) {
+
+      verticalViewR = transposeRectangle(viewR, verticalViewR);
+      verticalIconR = transposeRectangle(iconR, verticalIconR);
+      verticalTextR = transposeRectangle(textR, verticalTextR);
+
+      text = super.layoutCL(label, fontMetrics, text, icon,
+            verticalViewR, verticalIconR, verticalTextR);
+
+      viewR = copyRectangle(verticalViewR, viewR);
+      iconR = copyRectangle(verticalIconR, iconR);
+      textR = copyRectangle(verticalTextR, textR);
+      return text;
+   }
+
+   /**
+    * Transforms the Graphics for vertical rendering and invokes the
+    * super method.
+    */
+   @Override
+   public void paint(Graphics g, JComponent c) {
+      Graphics2D g2 = (Graphics2D) g.create();
+      if (clockwise) {
+         g2.rotate(Math.PI / 2, c.getSize().width / 2, c.getSize().width / 2);
+      } else {
+         g2.rotate(-Math.PI / 2, c.getSize().height / 2, c.getSize().height / 2);
+      }
+      super.paint(g2, c);
+   }
+
+   /**
+    * Returns a Dimension appropriate for vertical rendering
+    * 
+    * @see ComponentUI#getPreferredSize(javax.swing.JComponent)
+    */
+   @Override
+   public Dimension getPreferredSize(JComponent c) {
+      return transposeDimension(super.getPreferredSize(c));
+   }
+
+   /**
+    * Returns a Dimension appropriate for vertical rendering
+    * 
+    * @see ComponentUI#getMaximumSize(javax.swing.JComponent)
+    */
+   @Override
+   public Dimension getMaximumSize(JComponent c) {
+      return transposeDimension(super.getMaximumSize(c));
+   }
+
+   /**
+    * Returns a Dimension appropriate for vertical rendering
+    * 
+    * @see ComponentUI#getMinimumSize(javax.swing.JComponent)
+    */
+   @Override
+   public Dimension getMinimumSize(JComponent c) {
+      return transposeDimension(super.getMinimumSize(c));
+   }
+
+   private Dimension transposeDimension(Dimension from) {
+      return new Dimension(from.height, from.width + 2);
+   }
+
+   private Rectangle transposeRectangle(Rectangle from, Rectangle to) {
+      if (to == null) {
+         to = new Rectangle();
+      }
+      to.x = from.y;
+      to.y = from.x;
+      to.width = from.height;
+      to.height = from.width;
+      return to;
+   }
+
+   private Rectangle copyRectangle(Rectangle from, Rectangle to) {
+      if (to == null) {
+         to = new Rectangle();
+      }
+      to.x = from.x;
+      to.y = from.y;
+      to.width = from.width;
+      to.height = from.height;
+      return to;
+   }
+}
diff --git a/src/java/net/sf/jabref/imports/CsaImporter.java b/src/java/net/sf/jabref/imports/CsaImporter.java
index 1e930e4..1039216 100644
--- a/src/java/net/sf/jabref/imports/CsaImporter.java
+++ b/src/java/net/sf/jabref/imports/CsaImporter.java
@@ -288,28 +288,31 @@ public class CsaImporter extends ImportFormat {
                     Type = null;
                     String flow = fstr.toLowerCase();
                     String[] types = flow.split("; ");
-                    if (types[0].equals("article") ||
-                        types[0].equals("journal article")) {
-                        Type = "article";
-                    } else if (types[0].equals("dissertation")) {
-                        Type = "phdthesis";
-                    } else {
-                        for (int ii = 0; ii < types.length; ++ii) {
-                            if (types[ii].equals("conference")) {
-                                Type = "inproceedings";
-                                break;
-                            } else if (types[ii].equals("book monograph") &&
-                                       Type == null) {
-                                Type = "book";
-                            } else if (types[ii].equals("report") &&
-                                       Type == null) {
-                                Type = "techreport";
-                            }
-                        }
-                        if (Type == null) {
-                            Type = "misc";
+                    for (int ii = 0; ii < types.length; ++ii) {
+                        if ((types[ii].indexOf("article")>=0) ||
+                            (types[ii].indexOf("journal article")>=0)) {
+                            Type = "article";
+                            break;
+                        } else if (types[ii].equals("dissertation")) {
+                            Type = "phdthesis";
+                            break;
+                        } else if (types[ii].equals("conference")) {
+                            Type = "inproceedings";
+                            break;
+                        } else if (types[ii].equals("book monograph") &&
+                                   Type == null) {
+                            Type = "book";
+                            break;
+                        } else if (types[ii].equals("report") &&
+                                   Type == null) {
+                            Type = "techreport";
+                            break;
                         }
                     }
+                    if (Type == null) {
+                        Type = "misc";
+                    }
+
                 }
 
                 String ftype = null;
@@ -317,8 +320,11 @@ public class CsaImporter extends ImportFormat {
                     ftype = "abstract";
                 else if (fabbr.equals("AF"))
                     ftype = "affiliation";
-                else if (fabbr.equals("AU"))
+                else if (fabbr.equals("AU")) {
                     ftype = "author";
+                    if (fstr.indexOf(";") >= 0)
+                        fstr = fstr.replaceAll("; ", " and ");
+                }
                 else if (fabbr.equals("CA"))
                     ftype = "organization";
                 else if (fabbr.equals("DE"))
diff --git a/src/java/net/sf/jabref/imports/EndnoteImporter.java b/src/java/net/sf/jabref/imports/EndnoteImporter.java
index 3e17141..c36644e 100644
--- a/src/java/net/sf/jabref/imports/EndnoteImporter.java
+++ b/src/java/net/sf/jabref/imports/EndnoteImporter.java
@@ -162,7 +162,12 @@ public class EndnoteImporter extends ImportFormat {
         else if (prefix.equals("V")) hm.put("volume", val);
         else if (prefix.equals("N")) hm.put("number", val);
         else if (prefix.equals("U")) hm.put("url", val);
-        else if (prefix.equals("R")) hm.put("doi", val);
+        else if (prefix.equals("R")) {
+            String doi = val;
+            if (doi.startsWith("doi:"))
+                doi = doi.substring(4);
+            hm.put("doi", doi);
+        }
         else if (prefix.equals("O")) {
 	    // Notes may contain Article number
 	    if (val.startsWith("Artn")) {
@@ -194,7 +199,7 @@ public class EndnoteImporter extends ImportFormat {
         if (!author.equals("")) hm.put("author", fixAuthor(author));
         if (!editor.equals("")) hm.put("editor", fixAuthor(editor));
         //if pages missing and article number given, use the article number
-        if ((hm.get("pages") == null) || hm.get("pages").equals("-") && !artnum.equals(""))
+        if (((hm.get("pages") == null) || hm.get("pages").equals("-")) && !artnum.equals(""))
             hm.put("pages", artnum);
 
         BibtexEntry b = new BibtexEntry(BibtexFields.DEFAULT_BIBTEXENTRY_ID, Globals
diff --git a/src/java/net/sf/jabref/imports/IsiImporter.java b/src/java/net/sf/jabref/imports/IsiImporter.java
index 3e7fae4..f2e9629 100644
--- a/src/java/net/sf/jabref/imports/IsiImporter.java
+++ b/src/java/net/sf/jabref/imports/IsiImporter.java
@@ -34,7 +34,7 @@ import net.sf.jabref.util.CaseChanger;
  * </ul>
  * 
  * @author $Author: mortenalver $
- * @version $Revision: 2900 $ ($Date: 2009-02-24 18:29:11 +0100 (Tue, 24 Feb 2009) $)
+ * @version $Revision: 3047 $ ($Date: 2009-08-21 18:32:56 +0200 (Fri, 21 Aug 2009) $)
  * 
  */
 public class IsiImporter extends ImportFormat {
@@ -265,6 +265,8 @@ public class IsiImporter extends ImportFormat {
 					hm.put("volume", value);
 				else if (beg.equals("PU"))
 					hm.put("publisher", value);
+                else if (beg.equals("DI"))
+                    hm.put("doi", value);
 				else if (beg.equals("PD")) {
 
 					String month = parseMonth(value);
diff --git a/src/java/net/sf/jabref/imports/OpenDatabaseAction.java b/src/java/net/sf/jabref/imports/OpenDatabaseAction.java
index 02940f8..75be6dd 100644
--- a/src/java/net/sf/jabref/imports/OpenDatabaseAction.java
+++ b/src/java/net/sf/jabref/imports/OpenDatabaseAction.java
@@ -21,6 +21,7 @@ import net.sf.jabref.JabRefFrame;
 import net.sf.jabref.MnemonicAwareAction;
 import net.sf.jabref.Util;
 import net.sf.jabref.export.AutoSaveManager;
+import net.sf.jabref.export.SaveSession;
 import net.sf.jabref.gui.FileDialogs;
 import net.sf.jabref.external.FileLinksUpgradeWarning;
 
@@ -172,6 +173,30 @@ public class OpenDatabaseAction extends MnemonicAwareAction {
                 Globals.prefs.put("workingDirectory", file.getPath());
                 // Should this be done _after_ we know it was successfully opened?
                 String encoding = Globals.prefs.get("defaultEncoding");
+
+                if (Util.hasLockFile(file)) {
+                    long modTime = Util.getLockFileTimeStamp(file);
+                    if ((modTime != -1) && (System.currentTimeMillis() - modTime
+                            > SaveSession.LOCKFILE_CRITICAL_AGE)) {
+                        // The lock file is fairly old, so we can offer to "steal" the file:
+                        int answer = JOptionPane.showConfirmDialog(null, "<html>"+Globals.lang("Error opening file")
+                            +" '"+fileName+"'. "+Globals.lang("File is locked by another JabRef instance.")
+                            +"<p>"+Globals.lang("Do you want to override the file lock?"),
+                            Globals.lang("File locked"), JOptionPane.YES_NO_OPTION);
+                        if (answer == JOptionPane.YES_OPTION) {
+                            Util.deleteLockFile(file);
+                        }
+                        else return;
+                    }
+                    else if (!Util.waitForFileLock(file, 10)) {
+                        JOptionPane.showMessageDialog(null, Globals.lang("Error opening file")
+                            +" '"+fileName+"'. "+Globals.lang("File is locked by another JabRef instance."),
+                            Globals.lang("Error"), JOptionPane.ERROR_MESSAGE);
+                        return;
+                    }
+
+
+                }
                 ParserResult pr;
                 String errorMessage = null;
                 try {
@@ -182,7 +207,9 @@ public class OpenDatabaseAction extends MnemonicAwareAction {
                     pr = null;
                 }
                 if ((pr == null) || (pr == ParserResult.INVALID_FORMAT)) {
-                    //Util.showQuickErrorDialog(frame, Globals.lang("Open database"), exception);
+                    JOptionPane.showMessageDialog(null, Globals.lang("Error opening file") + " '" + fileName + "'",
+                            Globals.lang("Error"),
+                            JOptionPane.ERROR_MESSAGE);
 
                     String message = "<html>"+errorMessage+"<p>"+
                             (tryingAutosave ? Globals.lang("Error opening autosave of '%0'. Trying to load '%0' instead.", file.getName())
diff --git a/src/java/net/sf/jabref/imports/ParserResult.java b/src/java/net/sf/jabref/imports/ParserResult.java
index 513f8b8..b450379 100644
--- a/src/java/net/sf/jabref/imports/ParserResult.java
+++ b/src/java/net/sf/jabref/imports/ParserResult.java
@@ -37,6 +37,7 @@ import net.sf.jabref.BibtexEntry;
 public class ParserResult {
 
     public static ParserResult INVALID_FORMAT = new ParserResult(null, null, null);
+    public static ParserResult FILE_LOCKED = new ParserResult(null, null, null);
     private BibtexDatabase base;
     private HashMap<String, String> metaData;
     private HashMap<String, BibtexEntryType> entryTypes;
diff --git a/src/java/net/sf/jabref/imports/ScifinderImporter.java b/src/java/net/sf/jabref/imports/ScifinderImporter.java
index c314af0..08e7026 100644
--- a/src/java/net/sf/jabref/imports/ScifinderImporter.java
+++ b/src/java/net/sf/jabref/imports/ScifinderImporter.java
@@ -73,6 +73,7 @@ public class ScifinderImporter extends ImportFormat {
     HashMap<String, String> hm = new HashMap<String, String>();
     for (int i = 1; i < entries.length; i++){
         String[] fields = entries[i].split("FIELD ");
+        String journal = null;
         String Type = "";
         hm.clear(); // reset
         for (int j = 0; j < fields.length; j++)
@@ -83,7 +84,9 @@ public class ScifinderImporter extends ImportFormat {
             if (tmp.length > 1){//==2
             if (tmp[0].equals("Author")) hm.put("author", AuthorList.fixAuthor_lastNameFirst(tmp[1].replaceAll(";", " and ")));
             else if (tmp[0].equals("Title")) hm.put("title", tmp[1]);
-            else if (tmp[0].equals("Journal Title")) hm.put("journal", tmp[1]);
+            else if (tmp[0].equals("Journal Title")) {
+                journal = tmp[1];
+            }
 
 
             else if (tmp[0].equals("Volume")) hm.put("volume", tmp[1]);
@@ -92,7 +95,7 @@ public class ScifinderImporter extends ImportFormat {
             else if (tmp[0].equals("Abstract")) hm.put("abstract", tmp[1]);
             else if (tmp[0].equals("Supplementary Terms")) hm.put("keywords",
                                           tmp[1]);
-            else if (tmp[0].equals("Inventor Name")) hm.put("author", AuthorList.fixAuthor_lastNameFirst(tmp[1].replaceAll(";", " and ")));
+            else if (tmp[0].equals("Inventor Name") && (tmp[1].trim().length() > 0)) hm.put("author", AuthorList.fixAuthor_lastNameFirst(tmp[1].replaceAll(";", " and ")));
             else if (tmp[0].equals("Patent Assignee")) hm.put("institution", tmp[1]);
             else if (tmp[0].equals("Patent Kind Code")) kindcode = " " + tmp[1];
             else if (tmp[0].equals("Patent Country")) country = tmp[1] + " ";
@@ -106,6 +109,8 @@ public class ScifinderImporter extends ImportFormat {
                                     Type = "phdthesis";
                                 else if (tmp[1].equals("Patent"))
                                     Type = "patent";
+                                else if (tmp[1].startsWith("Conference"))
+                                    Type = "conference";
                                 else
                                     Type = tmp[1];
                         }
@@ -116,6 +121,12 @@ public class ScifinderImporter extends ImportFormat {
                         .getEntryType(Type)); // id assumes an existing database so don't
         // create one here
         b.setField(hm);
+        if (journal != null) {
+            if (Type.equals("conference"))
+                b.setField("booktitle", journal);
+            else
+                b.setField("journal", journal);
+        }
         bibitems.add(b);
 
     }
diff --git a/src/java/net/sf/jabref/journals/ManageJournalsPanel.java b/src/java/net/sf/jabref/journals/ManageJournalsPanel.java
index 46eac1e..4b98400 100644
--- a/src/java/net/sf/jabref/journals/ManageJournalsPanel.java
+++ b/src/java/net/sf/jabref/journals/ManageJournalsPanel.java
@@ -373,6 +373,12 @@ public class ManageJournalsPanel extends JPanel{
 
         Globals.initializeJournalNames();
 
+        // Update the autocompleter for the "journal" field in all base panels,
+        // so added journal names are available:
+        for (int i=0; i<frame.baseCount(); i++) {
+            frame.baseAt(i).addJournalListToAutoCompleter();
+        }
+
     }
 
     class DownloadAction extends AbstractAction {
diff --git a/src/java/net/sf/jabref/net/Cookie.java b/src/java/net/sf/jabref/net/Cookie.java
index 66341e0..e2266a1 100644
--- a/src/java/net/sf/jabref/net/Cookie.java
+++ b/src/java/net/sf/jabref/net/Cookie.java
@@ -55,9 +55,8 @@ public class Cookie {
           }
           uriDomain = uriDomain.substring(
             uriDomain.indexOf('.'));
-          if (!uriDomain.equals(value)) {
-            throw new IllegalArgumentException(
-              "Trying to set foreign cookie");
+          if (!uriDomain.equals(value) && !uriDomain.endsWith(value)) {
+            throw new IllegalArgumentException("Trying to set foreign cookie");
           }
           this.domain = value;
         }
diff --git a/src/java/net/sf/jabref/search/BasicSearch.java b/src/java/net/sf/jabref/search/BasicSearch.java
index cbecdfe..c0fea72 100644
--- a/src/java/net/sf/jabref/search/BasicSearch.java
+++ b/src/java/net/sf/jabref/search/BasicSearch.java
@@ -8,7 +8,7 @@ import java.util.regex.Pattern;
 
 import net.sf.jabref.BibtexEntry;
 import net.sf.jabref.SearchRule;
-import net.sf.jabref.export.layout.format.RemoveBrackets;
+import net.sf.jabref.export.layout.format.RemoveLatexCommands;
 
 /**
  * Search rule for simple search.
@@ -17,8 +17,8 @@ public class BasicSearch implements SearchRule {
     private boolean caseSensitive;
     private boolean regExp;
     Pattern[] pattern;
-    static RemoveBrackets removeBrackets = new RemoveBrackets();
-
+    //static RemoveBrackets removeLatexCommands = new RemoveBrackets();
+    static RemoveLatexCommands removeBrackets = new RemoveLatexCommands();
 
     public BasicSearch(boolean caseSensitive, boolean regExp) {
 
diff --git a/src/java/net/sf/jabref/search/SearchExpressionTreeParser.java b/src/java/net/sf/jabref/search/SearchExpressionTreeParser.java
index 00093bb..e6778da 100644
--- a/src/java/net/sf/jabref/search/SearchExpressionTreeParser.java
+++ b/src/java/net/sf/jabref/search/SearchExpressionTreeParser.java
@@ -6,6 +6,7 @@ import java.util.regex.Pattern;
 import java.util.regex.PatternSyntaxException;
 
 import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.export.layout.format.RemoveLatexCommands;
 import antlr.MismatchedTokenException;
 import antlr.NoViableAltException;
 import antlr.RecognitionException;
@@ -15,7 +16,11 @@ import antlr.collections.AST;
 public class SearchExpressionTreeParser extends antlr.TreeParser       implements SearchExpressionTreeParserTokenTypes
  {
 
-	private static final int MATCH_EXACT = 0;
+    // Formatter used on every field before searching. Removes Latex commands that
+    // may interfere with the search:
+    static RemoveLatexCommands removeLatexCommands = new RemoveLatexCommands();
+
+    private static final int MATCH_EXACT = 0;
 	private static final int MATCH_CONTAINS = 1;
 	private static final int MATCH_DOES_NOT_CONTAIN = 2;
 
@@ -24,7 +29,7 @@ public class SearchExpressionTreeParser extends antlr.TreeParser       implement
 
     private static final int PSEUDOFIELD_TYPE = 1;
 
-    public int apply(AST ast, BibtexEntry bibtexEntry) throws antlr.RecognitionException {
+     public int apply(AST ast, BibtexEntry bibtexEntry) throws antlr.RecognitionException {
 		this.bibtexEntry = bibtexEntry;
 		// specification of fields to search is done in the search expression itself
 		this.searchKeys = bibtexEntry.getAllFields().toArray();
@@ -174,7 +179,8 @@ public SearchExpressionTreeParser() {
 								default: // regular field
 									if (!fieldSpec.matcher(searchKeys[i].toString()).matches())
 										continue;
-									content = bibtexEntry.getField(searchKeys[i].toString());
+									content = removeLatexCommands.format(
+                                            bibtexEntry.getField(searchKeys[i].toString()));
 							}
 			noSuchField = false;
 							if (content == null)
diff --git a/src/java/net/sf/jabref/sql/SQLutil.java b/src/java/net/sf/jabref/sql/SQLutil.java
index 2236de3..7d65217 100644
--- a/src/java/net/sf/jabref/sql/SQLutil.java
+++ b/src/java/net/sf/jabref/sql/SQLutil.java
@@ -776,18 +776,19 @@ public class SQLutil {
             + ", \n"
             + "PRIMARY KEY (entry_types_id) \n"
             + ");" );
-           
+           			
         processDML(out,"CREATE TABLE entries ( \n"
             + "entries_id      INTEGER         NOT NULL AUTO_INCREMENT, \n"
 			+ "jabref_eid      VARCHAR("
 			+  Util.getMinimumIntegerDigits()
 		    + ")   DEFAULT NULL, \n"
-            + "entry_types_id  INTEGER         DEFAULT NULL, \n"
+            + "entry_types_id  INT UNSIGNED         DEFAULT NULL, \n"
             + "cite_key        VARCHAR(100)     DEFAULT NULL, \n"
             + dml2
             + ",\n"
             + "PRIMARY KEY (entries_id), \n"
-            + "FOREIGN KEY (entry_types_id) REFERENCES entry_type(entry_types_id) \n"
+			+ "INDEX(entry_types_id), \n"
+            + "FOREIGN KEY (entry_types_id) REFERENCES entry_types(entry_types_id) \n"
             + ");");
 
         processDML(out,"CREATE TABLE strings ( \n"
@@ -819,7 +820,9 @@ public class SQLutil {
         processDML(out,"CREATE TABLE entry_group ( \n"
             + "entries_id       INTEGER        NOT NULL AUTO_INCREMENT, \n"
             + "groups_id        INTEGER        DEFAULT NULL, \n"
-            + "FOREIGN KEY (entries_id) REFERENCES entry_fields(entries_id), \n"
+			+ "INDEX(entries_id), \n"
+			+ "INDEX(groups_id), \n"
+            + "FOREIGN KEY (entries_id) REFERENCES entries(entries_id), \n"
             + "FOREIGN KEY (groups_id)  REFERENCES groups(groups_id) \n"
             + ");");
 
@@ -859,7 +862,7 @@ public class SQLutil {
             + ")");
           
         processDML(out,"ALTER TABLE entries ADD CONSTRAINT entries_fk "
-                     + "FOREIGN KEY (\"entry_types_id\") REFERENCES \"entry_type\" (\"entry_types_id\")");
+                     + "FOREIGN KEY (\"entry_types_id\") REFERENCES \"entry_types\" (\"entry_types_id\")");
 
         processDML(out,"CREATE TABLE group_types ( "
             + "group_types_id INT  NOT NULL PRIMARY KEY GENERATED ALWAYS AS IDENTITY, "
diff --git a/src/resource/JabRef_da.properties b/src/resource/JabRef_da.properties
index 0f7239e..9e900da 100644
--- a/src/resource/JabRef_da.properties
+++ b/src/resource/JabRef_da.properties
@@ -1298,4 +1298,21 @@ Plugin_will_be_deleted_next_time_JabRef_starts_up.=Plugin'en_slettes,_n\u00E6ste
 Old_plugin_versions_will_be_deleted_next_time_JabRef_starts_up.=\u00C6ldre_plugin-versioner_slettes,_n\u00E6ste_gang_JabRef_starter.
 
 Formatter_not_found\:_%0=Formatering_ikke_fundet:_%0
-The_following_formatters_could_not_be_found=De_f\u00f8lgende_formateringer_kunne_ikke_findes
+The_following_formatters_could_not_be_found=De_f\u00F8lgende_formateringer_kunne_ikke_findes
+
+Clear_inputarea=Ryd_inputomr\u00E5de
+Automatically_set_file_links_for_this_entry=S\u00E6t_automatisk_fil-links_for_denne_post
+Could_not_save,_file_locked_by_another_JabRef_instance.=Kunne_ikke_gemme,_filen_er_l\u00E5st_af_en_anden_k\u00F8rende_JabRef.
+File_is_locked_by_another_JabRef_instance.=Filen_er_l\u00E5st_af_en_anden_k\u00F8rende_JabRef.
+Do_you_want_to_override_the_file_lock?=Vil_du_ignorere,_at_filen_er_l\u00E5st?
+File_locked=Fil_l\u00E5st
+Current_tmp_value=Aktuel_tmp-v\u00E6rdi
+Metadata_change=Metadata-\u00E6ndring
+Changes_have_been_made_to_the_following_metadata_elements=Der_er_\u00E6ndringer_i_f\u00F8lgende_metadata-elementer
+
+Generate_groups_for_author_last_names=Generer_grupper_for_forfatteres_efternavne
+Generate_groups_for_editor_last_names=Generer_grupper_for_redakt\u00f8rers_efternavne
+Generate_groups_from_keywords_in_a_BibTeX_field=Generer_grupper_ud_fra_n\u00f8gleord_i_et_BibTeX-felt
+Enforce_legal_characters_in_BibTeX_keys=H\u00e5ndh\u00e6v_tilladte_tegn_i_BibTex-n\u00f8gler
+The_#_character_is_not_allowed_in_BibTeX_strings_unless_escaped_as_in_'\\#'.=Tegnet_#_er_ikke_tilladt_i_BibTeX-tekststrenge,_medmindre_det_skrives_som_'\\#'.
+Before_saving,_please_edit_any_strings_containing_the_#_character.=Ret_venligst_tekststrenge_indeholdende_#-tegnet,_f\u00f8r_du_gemmer.
diff --git a/src/resource/JabRef_de.properties b/src/resource/JabRef_de.properties
index 29828fd..7e8f727 100644
--- a/src/resource/JabRef_de.properties
+++ b/src/resource/JabRef_de.properties
@@ -1045,13 +1045,13 @@ localhost=localhost
 Look_and_feel=Aussehen
 Looking_for_pdf...=Suche_nach_pdf...
 lower=kleinbuchstaben
-Main_file_directory=Standard-Verzeichnis_f\u00fcr_Dateien
+Main_file_directory=Standard-Verzeichnis_f\u00FCr_Dateien
 
 Main_layout_file=Haupt-Layoutdatei
 
-Main_PDF_directory=Standard-Verzeichnis_f\u00fcr_PDF-Dateien
+Main_PDF_directory=Standard-Verzeichnis_f\u00FCr_PDF-Dateien
 
-Main_PS_directory=Standard-Verzeichnis_f\u00fcr_PS-Dateien
+Main_PS_directory=Standard-Verzeichnis_f\u00FCr_PS-Dateien
 
 Manage=Verwalten
 
@@ -1594,7 +1594,7 @@ Set_field=Setze_Feld
 Set_fields=Felder_setzen
 
 Set_general_fields=Allgemeine_Felder_festlegen
-Set_main_external_file_directory=Standard-Verzeichnis_f\u00fcr_externe_Dateien_bestimmen
+Set_main_external_file_directory=Standard-Verzeichnis_f\u00FCr_externe_Dateien_bestimmen
 
 Set_table_font=Tabellenschriftart_ausw\u00E4hlen
 
@@ -1969,7 +1969,7 @@ You_must_restart_JabRef_for_the_new_key_bindings_to_work_properly.=Sie_m\u00FCss
 
 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_das_%0-Verzeichnis_angeben
+You_must_set_both_BibTeX_key_and_%0_directory=Sie_m\u00FCssen_sowohl_den_BibTeX-Key_als_auch_das_%0-Verzeichnis_angeben
 
 Your_new_key_bindings_have_been_stored.=Ihre_neuen_Tastenk\u00FCrzel_wurden_gespeichert.
 The_following_fetchers_are_available\:=Folgende_Recherchetools_stehen_zur_Verf\u00FCgung:
@@ -2030,7 +2030,7 @@ Move_the_keyboard_focus_to_the_entry_table=Tastatur-Fokus_auf_die_Tabelle_setzen
 MIME_type=MIME-Typ
 
 This_feature_lets_new_files_be_opened_or_imported_into_an_already_running_instance_of_JabRef<BR>instead_of_opening_a_new_instance._For_instance,_this_is_useful_when_you_open_a_file_in_JabRef<br>from_your_web_browser.<BR>Note_that_this_will_prevent_you_from_running_more_than_one_instance_of_JabRef_at_a_time.=Diese_Funktion_\u00F6ffnet_neue_oder_importierte_Dateien_in_einer_bereits_laufenden_Instanz_von_JabRef<BR>und_nicht_in_einem_neuen_Fenster._Das_ist_beispielsweise_n\u00FCtzlich,<BR>we [...]
-Note_that_these_settings_are_used_for_the_legacy_<b>pdf</b>_and_<b>ps</b>_fields_only.<br>For_most_users,_setting_the_<b>Main_file_directory</b>_above_should_be_sufficient.=Beachten_Sie,_dass_diese_Einstellungen_nur_f\u00fcr_die_obsoleten_<b>pdf</b>-_und_<b>ps</b>-Felder_genutzt_werden.<BR>F\u00fcr_die_meisten_Benutzer_reicht_es_aus,_den_<b>Standard-Verzeichnis_f\u00fcr_Dateien</b>_zu_setzen.
+Note_that_these_settings_are_used_for_the_legacy_<b>pdf</b>_and_<b>ps</b>_fields_only.<br>For_most_users,_setting_the_<b>Main_file_directory</b>_above_should_be_sufficient.=Beachten_Sie,_dass_diese_Einstellungen_nur_f\u00FCr_die_obsoleten_<b>pdf</b>-_und_<b>ps</b>-Felder_genutzt_werden.<BR>F\u00FCr_die_meisten_Benutzer_reicht_es_aus,_den_<b>Standard-Verzeichnis_f\u00FCr_Dateien</b>_zu_setzen.
 Legacy_file_fields=Obsolete_Datei-Felder
 
 %0_entries_found._To_reduce_server_load,_only_%1_will_be_downloaded.=%0_Eintr\u00E4ge_gefunden._Um_die_Serverlast_zu_mindern,_werden_nur_%1_heruntergeladen.
@@ -2130,8 +2130,26 @@ Error_opening_autosave_of_'%0'._Trying_to_load_'%0'_instead.=Fehler_beim_\u00D6f
 
 Plugins_installed_in_your_user_plugin_directory_(%0)\:=Plugins,_die_in_Ihrem_Plugin-Verzeichnis_(%0)_installiert_wurden:
 Plugins_installed_in_other_locations\:=Plugins,_die_in_anderen_Verzeichnissen_installiert_wurden:
-Plugins_will_be_deleted_next_time_JabRef_starts_up.=Die_Plugins_werden_beim_n\u00e4chsten_Start_von_JabRef_entfernt.
-Plugin_will_be_deleted_next_time_JabRef_starts_up.=Das_Plugin_wird_beim_n\u00e4chsten_Start_von_JabRef_entfernt.
-Old_plugin_versions_will_be_deleted_next_time_JabRef_starts_up.=Alte_Plugin-Versionen_werden_beim_n\u00e4chsten_Start_von_JabRef_entfernt.
+Plugins_will_be_deleted_next_time_JabRef_starts_up.=Die_Plugins_werden_beim_n\u00E4chsten_Start_von_JabRef_entfernt.
+Plugin_will_be_deleted_next_time_JabRef_starts_up.=Das_Plugin_wird_beim_n\u00E4chsten_Start_von_JabRef_entfernt.
+Old_plugin_versions_will_be_deleted_next_time_JabRef_starts_up.=Alte_Plugin-Versionen_werden_beim_n\u00E4chsten_Start_von_JabRef_entfernt.
 Formatter_not_found\:_%0=Formatierer_nicht_gefunden:_%0
 The_following_formatters_could_not_be_found=Die_folgenden_Formatierer_konnten_nicht_gefunden_werden
+
+Clear_inputarea=Eingabefeld_l\u00F6schen
+
+Automatically_set_file_links_for_this_entry=Dateilinks_f\u00FCr_diesen_Eintrag_automatisch_festlegen
+Could_not_save,_file_locked_by_another_JabRef_instance.=Speichern_nicht_m\u00F6glich,_die_Datei_wird_von_einer_anderen_JabRef-Instanz_verwendet.
+File_is_locked_by_another_JabRef_instance.=Die_Datei_ist_durch_eine_andere_JabRef-Instanz_gesperrt.
+Do_you_want_to_override_the_file_lock?=Wollen_Sie_die_Datei_trotz_Sperre_\u00FCberschreiben?
+File_locked=Datei_gesperrt
+Current_tmp_value=Derzeitiger_tmp-Wert
+Metadata_change=Metadaten-\u00C4nderung
+Changes_have_been_made_to_the_following_metadata_elements=An_den_folgenden_Metadaten_wurden_\u00C4nderungen_vorgenommen
+
+Generate_groups_for_author_last_names=Erstelle_Gruppen_f\u00fcr_Nachnamen_der_Autoren
+Generate_groups_for_editor_last_names=Erstelle_Gruppen_f\u00fcr_Nachnamen_der_Herausgeber
+Generate_groups_from_keywords_in_a_BibTeX_field=Erstelle_Gruppen_aus_den_Stichw\u00f6rtern_eines_BibTeX-Feldes
+Enforce_legal_characters_in_BibTeX_keys=Erzwinge_erlaubte_Zeichen_in_BibTeX-Keys
+The_#_character_is_not_allowed_in_BibTeX_strings_unless_escaped_as_in_'\\#'.=Das_Zeichen_#_ist_in_BibTeX-Keys_nicht_erlaubt,_au\u00dfer_es_ist_mit_einem_Escape-Zeichen_versehen_wie_in_'\\#'.
+Before_saving,_please_edit_any_strings_containing_the_#_character.=Entfernen_Sie_vor_dem_Speichern_alle_Ausdr\u00fccke,_in_denen_das_Zeichen_#_vorkommt.
diff --git a/src/resource/JabRef_en.properties b/src/resource/JabRef_en.properties
index f01c6b0..ce6c795 100644
--- a/src/resource/JabRef_en.properties
+++ b/src/resource/JabRef_en.properties
@@ -2117,4 +2117,22 @@ Plugins_will_be_deleted_next_time_JabRef_starts_up.=Plugins_will_be_deleted_next
 Plugin_will_be_deleted_next_time_JabRef_starts_up.=Plugin_will_be_deleted_next_time_JabRef_starts_up.
 Old_plugin_versions_will_be_deleted_next_time_JabRef_starts_up.=Old_plugin_versions_will_be_deleted_next_time_JabRef_starts_up.
 Formatter_not_found\:_%0=Formatter_not_found\:_%0
-The_following_formatters_could_not_be_found=The_following_formatters_could_not_be_found
\ No newline at end of file
+The_following_formatters_could_not_be_found=The_following_formatters_could_not_be_found
+
+Clear_inputarea=Clear_inputarea
+
+Automatically_set_file_links_for_this_entry=Automatically_set_file_links_for_this_entry
+Could_not_save,_file_locked_by_another_JabRef_instance.=Could_not_save,_file_locked_by_another_JabRef_instance.
+File_is_locked_by_another_JabRef_instance.=File_is_locked_by_another_JabRef_instance.
+Do_you_want_to_override_the_file_lock?=Do_you_want_to_override_the_file_lock?
+File_locked=File_locked
+Current_tmp_value=Current_tmp_value
+Metadata_change=Metadata_change
+Changes_have_been_made_to_the_following_metadata_elements=Changes_have_been_made_to_the_following_metadata_elements
+
+Generate_groups_for_author_last_names=Generate_groups_for_author_last_names
+Generate_groups_for_editor_last_names=Generate_groups_for_editor_last_names
+Generate_groups_from_keywords_in_a_BibTeX_field=Generate_groups_from_keywords_in_a_BibTeX_field
+Enforce_legal_characters_in_BibTeX_keys=Enforce_legal_characters_in_BibTeX_keys
+The_#_character_is_not_allowed_in_BibTeX_strings_unless_escaped_as_in_'\\#'.=The_#_character_is_not_allowed_in_BibTeX_strings_unless_escaped_as_in_'\\#'.
+Before_saving,_please_edit_any_strings_containing_the_#_character.=Before_saving,_please_edit_any_strings_containing_the_#_character.
\ No newline at end of file
diff --git a/src/resource/JabRef_fr.properties b/src/resource/JabRef_fr.properties
index 85de995..d6b6811 100644
--- a/src/resource/JabRef_fr.properties
+++ b/src/resource/JabRef_fr.properties
@@ -600,7 +600,7 @@ Manage_custom_imports=G\u00E9rer_les_importations_personnalis\u00E9es
 Manage_external_file_types=G\u00E9rer_les_types_de_fichiers_externes
 Manage_journal_abbreviations=G\u00E9rer_les_abr\u00E9viations_de_journaux
 Manage=G\u00E9rer
-Mark_entries=Etiqueter_des_entr\u00E9es
+Mark_entries=Etiqueter_ces_entr\u00E9es
 Mark_entry=Etiqueter_l'entr\u00E9e
 Mark_new_entries_with_addition_date=Enregistrer_la_date_d'ajout_pour_les_nouvelles_entr\u00E9es
 Mark_new_entries_with_owner_name=Nouvelles_entr\u00E9es_attribu\u00E9es_au_propri\u00E9taire_
@@ -705,7 +705,7 @@ 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_SPIRES_entry=Ouvrir_l'entr\u00E9e_SPIRES
 Open_URL_or_DOI=Ouvrir_URL_ou_DOI
-Open=Cliquer_pour_ouvrir_le
+Open=Ouvrir
 OpenDocument_Spreadsheet=Tableur_OpenDocument
 Opened_database=Base_ouverte
 Opening_preferences...=Ouverture_des_pr\u00E9f\u00E9rences_en_cours...
@@ -1065,7 +1065,7 @@ unknown_edit=\u00E9dition_inconnue
 unknown_entry_type=type_d'entr\u00E9e_inconnue
 Unknown_export_format=Format_d'exportation_inconnu
 Unmark_all=Tout_d\u00E9s\u00E9tiqueter
-Unmark_entries=D\u00E9s\u00E9tiqueter_des_entr\u00E9es
+Unmark_entries=D\u00E9s\u00E9tiqueter_ces_entr\u00E9es
 Unmark_entry=D\u00E9s\u00E9tiqueter_l'entr\u00E9e
 Unmarked_selected=D\u00E9s\u00E9tiquetage_de_la_s\u00E9lection
 Unpack_EndNote_filter_set=D\u00E9compacter_la_s\u00E9rie_de_filtres_EndNote
@@ -1228,3 +1228,21 @@ Old_plugin_versions_will_be_deleted_next_time_JabRef_starts_up.=Les_anciennes_ve
 
 Formatter_not_found\:_%0=Formateur_non_trouv\u00E9_:_%0
 The_following_formatters_could_not_be_found=Les_formateurs_suivants_n'ont_pas_\u00E9t\u00E9_trouv\u00E9s
+
+Clear_inputarea=Vider_la_zone_de_saisie
+
+Automatically_set_file_links_for_this_entry=D\u00E9finir_automatiquement_les_liens_de_fichier_pour_cette_entr\u00E9e
+Could_not_save,_file_locked_by_another_JabRef_instance.=Echec_de_la_sauvegarde,_le_fichier_est_verrouill\u00E9_par_une_autre_instance_de_JabRef.
+File_is_locked_by_another_JabRef_instance.=Le_fichier_est_verrouill\u00E9_par_une_autre_instance_de_JabRef.
+Do_you_want_to_override_the_file_lock?=Voulez-vous_outrepasser_le_verrouillage_du_fichier_?
+File_locked=Fichier_verrouill\u00E9
+Current_tmp_value=Valeur_tmp_actuelle
+Metadata_change=Changement_dans_les_m\u00E9tadonn\u00E9es
+Changes_have_been_made_to_the_following_metadata_elements=Des_modifications_ont_\u00E9t\u00E9_faites_aux_\u00E9l\u00E9ments_de_m\u00E9tadonn\u00E9es_suivants
+
+Generate_groups_for_author_last_names=Cr\u00E9ation_de_groupes_pour_les_noms_d'auteurs
+Generate_groups_for_editor_last_names=Cr\u00E9ation_de_groupes_pour_les_noms_d'\u00E9diteurs
+Generate_groups_from_keywords_in_a_BibTeX_field=Cr\u00E9ation_de_groupes_\u00E0_partir_de_mots-clefs_d'un_champ_BibTeX
+Enforce_legal_characters_in_BibTeX_keys=Imposer_des_caract\u00E8res_l\u00E9gaux_dans_les_clefs_BibTeX
+The_#_character_is_not_allowed_in_BibTeX_strings_unless_escaped_as_in_'\\#'.=Le_caract\u00E8re_#_n'est_pas_autoris\u00E9_dans_les_cha\u00EEnes_BibTeX_\u00E0_moins_d'\u00EAtre_\u00E9chapp\u00E9_comme_dans_'\\#'.
+Before_saving,_please_edit_any_strings_containing_the_#_character.=Avant_l'enregistrement,_SVP,_\u00E9ditez_toute_cha\u00EEne_contenant_le_caract\u00E8re_#.
diff --git a/src/resource/JabRef_it.properties b/src/resource/JabRef_it.properties
index fc56e41..d4d8e17 100644
--- a/src/resource/JabRef_it.properties
+++ b/src/resource/JabRef_it.properties
@@ -298,7 +298,7 @@ Do_not_overwrite_existing_keys=Non_sovrascrivere_chiavi_esistenti
 Do_not_show_splash_window_at_startup=Non_mostrare_la_schermata_d'avvio
 Do_not_show_these_options_in_the_future=Non_mostrare_queste_opzioni_in_futuro
 Do_not_wrap_the_following_fields_when_saving=Non_mandare_a_capo_i_campi_seguenti_salvando_il_file
-# key below already already present with colon "escaped" by a backslash
+
 Do_not_write_the_following_fields_to_XMP_Metadata\:=Non_scrivere_i_dati_dei_campi_seguenti_nei_metadati_XMP:
 
 Do_you_want_JabRef_to_do_the_following_operations?=Vuoi_che_JabRef_esegua_le_operazioni_seguenti?
@@ -322,7 +322,7 @@ Duplicate_string_name=Nome_di_stringa_duplicato
 Duplicates_found=Trovati_doppioni
 Duplicates_removed=Doppioni_rimossi
 Dynamic_groups=Gruppi_dinamici
-# not sure of the translation below
+
 Dynamically_group_entries_by_a_free-form_search_expression=Raggruppa_dinamicamente_le_voci_utilizzando_una_espressione_di_ricerca_in_formato_libero
 Dynamically_group_entries_by_searching_a_field_for_a_keyword=Raggruppa_dinamicamente_le_voci_ricercando_una_parola_chiave_in_un_campo
 Each_line_must_be_on_the_following_form=Ciascuna_linea_deve_essere_nel_formato_seguente
@@ -444,7 +444,7 @@ Files_opened=File_aperti
 Filter=Filtro
 
 Finished_autosetting_external_links.=Impostazione_automatica_dei_collegamenti_esterni_terminata.
-## check below: is %0 a number?
+
 Finished_synchronizing_%0_links._Entries_changed%c_%1.=Sincronizzazione_di_%0_collegamenti:_Voci_cambiate%c_%1.
 Finished_writing_XMP-metadata._Wrote_to_%0_file(s).=Scrittura_dei_metadati_XMP_terminata._Scrittura_eseguita_su_%0_file.
 Finished_writing_XMP_for_%0_file_(%1_skipped,_%2_errors).=Terminata_la_scrittura_di_metadati_XMP_per_%0_file_(%1_saltati,_%2_errori).
@@ -499,7 +499,7 @@ 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
@@ -587,9 +587,7 @@ Language=Lingua
 Last_modified=Ultimo_modificato
 LaTeX_AUX_file=File_AUX_LaTeX
 Leave_file_in_its_current_directory.=Lascia_il_file_nella_cartella_corrente
-# Extension: What does it means exactly??
-# FDAR (French translation): no idea...
-# FDAR: I contacted the programmer. Now simplified...
+
 Leave_files_in_their_current_directory.=Lascia_i_file_nella_cartella_corrente
 Left=Sinistra
 License=Licenza
@@ -755,7 +753,7 @@ Path_to_HTML_viewer=Percorso_per_il_visualizzatore_HTML
 
 Path_to_LatexEditor_(LEd.exe)=Percorso_per_LatexEditor_(LEd.exe)
 Path_to_LyX_pipe=Percorso_per_la_pipe_LyX
-# key below duplicate, also with colon "escaped" by a backslash 
+
 Path_to_Vim=Percorso_per_Vim
 Path_to_WinEdt.exe=Percorso_per_WinEdt.exe
 PDF_directory=Cartella_dei_file_PDF
@@ -994,7 +992,7 @@ Strings_for_database=Stringhe_per_il_database
 Subdatabase_from_aux=Subdatabase_da_file_LaTeX_AUX
 Suggest=Suggerisci
 Switches_between_full_and_abbreviated_journal_name_if_the_journal_name_is_known.=Alterna_nomi_completi_e_nomi_abbreviati_per_le_riviste_delle_quali_\u00E8_noto_il_nome.
-## Removed? Switches_between_full_and_abbreviated_journal_name=Alterna_tra_nomi_delle_riviste_completi_e_abbreviati
+
 Synchronize_%0_links=Sincronizza_%0_collegamenti
 Synchronize_file_links=Sincronizza_il_collegamento_ai_file
 Synchronizing_%0_links...=Sincronizzazione_di_%0_collegamenti_in_corso...
@@ -1220,103 +1218,120 @@ Legacy_file_fields=Campi_file_obsoleti
 
 %0_entries_found._To_reduce_server_load,_only_%1_will_be_downloaded.=%0_voci_trovate._Per_ridurre_il_carico_sul_server_verranno_scaricate_solo_%1_voci.
 This_makes_JabRef_look_up_each_%0_extension_and_check_if_the_file_exists._If_not,_you_will_be_given_options<BR>to_resolve_the_problem.=Per_ciascuna_delle_%0_estensioni,_JabRef_verificher\u00E0_l'esistenza_del_file.<BR>In_caso_negativo_proporr\u00E0_delle_opzioni_per_la_risoluzione_del_problema.
+## Check if the = sign must be escaped. In both sides?
 Run_Fetcher,_e.g._"--fetch=Medline\:cancer"=Lanciare_una_ricerca,_es._"--fetch=Medline\:cancer"
+##
 
 Override_legacy_file_fields=Ignora_i_campi_di_file_obsoleti
 
 The_ACM_Digital_Library=ACM_Digital_Library
 
-Use_IEEE_LaTeX_abbreviations=
-The_Guide_to_Computing_Literature=
-Search_ACM_Portal=
-Connection_to_ACM_Portal_failed=
-
-
-Run_Fetcher,_e.g._"--fetch\=
-When_opening_file_link,_search_for_matching_file_if_no_link_is_defined=
-Settings_for_%0=
-Insert_selected_citations_into_Vim=
+Use_IEEE_LaTeX_abbreviations=Usa_le_abbreviazioni_LaTeX_IEEE
+The_Guide_to_Computing_Literature=The_Guide_to_Computing_Literature
+Search_ACM_Portal=Ricerca_nel_portale_ACM
+Connection_to_ACM_Portal_failed=Connessione_al_portale_ACM_fallita
+When_opening_file_link,_search_for_matching_file_if_no_link_is_defined=All'apertura_di_un_collegamento_ad_un_file,_ricercare_un_file_corrispondente_se_non_ne_\u00e8_definito_uno.
+Settings_for_%0=Parametri__per_%0
+Insert_selected_citations_into_Vim=Inviare_le_citazioni_selezionate_a_Vim
 RIS=RIS
-Assign_exclusively_to_group=
-Bad_Request_'%0'.=
-Mark_entries_imported_into_an_existing_database=
-Unmark_all_entries_before_importing_new_entries_into_an_existing_database=
-Forward=
-Back=
-Sort_the_following_fields_as_numeric_fields=
-Error_fetching_from_Citeseer\:\n=
-Line_%0\:_Found_corrupted_BibTeX-key.=
-Line_%0\:_Found_corrupted_BibTeX-key_(contains_whitespaces).=
-Line_%0\:_Found_corrupted_BibTeX-key_(comma_missing).=
-Finished_downloading_full_text_document=
-Unable_to_find_full_text_document_in_the_linked_web_page.=
-Connection_error_when_trying_to_find_full_text_document.=
-This_entry_provides_no_URL_or_DOI_links.=
-Full_text_article_download_failed=
-Down_up=
-Update_to_current_column_order=
-
-Rename_field=
-Set/clear/rename_fields=
-Rename_field_to\:=
-Move_contents_of_a_field_into_a_field_with_a_different_name=
-
-You_can_only_rename_one_field_at_a_time=
-Remove_all_broken_links=
-Cannot_use_port_%0_for_remote_operation;_another_application_may_be_using_it._Try_specifying_another_port.=
-
-Plugin_installer=
-Unable_to_create_plugin_directory=
-Unable_to_copy_file=
-Plugin_installed_successfully._You_must_restart_JabRef_to_load_the_new_plugin.=
-Unable_to_create_user_plugin_directory=
-Plugin_installation_failed.=
-The_same_version_of_this_plugin_is_already_installed.=
-A_newer_version_of_this_plugin_is_already_installed.=
-One_or_more_older_versions_of_this_plugin_is_installed._Delete_old_versions?=
-Old_versions_deleted_successfully.=
-
-Install_plugin=
-Download_plugin=
-Plugin_manager=
-Delete_the_%0_selected_plugins?=
-Delete_plugins=
-Delete_the_selected_plugin?=
-Delete_plugin=
-Enter_download_URL=
-Plugin_name=
-Version=
-Unknown=
-Not_loaded=
-Loaded=
-Could_not_determine_version_of_=
-Install_anyway?=
-
-Looking_for_full_text_document...=
-Follow_DOI_or_URL_link_and_try_to_locate_PDF_full_text_document=
-Unable_to_find_full_text_article._No_search_algorithm_defined_for_the_'%0'_web_site.=
-Found_pdf_link,_but_received_the_wrong_MIME_type._This_could_indicate_that_you_don't_have_access_to_the_fulltext_article.=
-
-Autosave=
-Prompt_before_recovering_a_database_from_an_autosave_file=
-Autosave_interval_(minutes)=
-Do_you_want_to_recover_the_database_from_the_autosave_file?=
-Recover_from_autosave=
-%0_warnings=
-
-Save_in_current_table_sort_order=
-Export_in_current_table_sort_order=
-Export_ordered_by_author/editor/year=
-Export_entries_in_their_original_order=
-Error_opening_file_'%0'.=
-Autosave_of_file_'%0'=
-Error_opening_autosave_of_'%0'._Trying_to_load_'%0'_instead.=
-
-Plugins_installed_in_your_user_plugin_directory_(%0)\:=
-Plugins_installed_in_other_locations\:=
-Plugins_will_be_deleted_next_time_JabRef_starts_up.=
-Plugin_will_be_deleted_next_time_JabRef_starts_up.=
-Old_plugin_versions_will_be_deleted_next_time_JabRef_starts_up.=
-
-Formatter_not_found\:_%0=
-The_following_formatters_could_not_be_found=
\ No newline at end of file
+Assign_exclusively_to_group=Assegna_esclusivamente_al_gruppo
+Bad_Request_'%0'.=Richiesta_erronea_'%0'.
+Mark_entries_imported_into_an_existing_database=Contrassegna_le_voci_importate_in_un_database_preesistente
+Unmark_all_entries_before_importing_new_entries_into_an_existing_database=Rimuovi_tutti_i_contrassegni_prima_di_importare_nuove_voci_in_un_database_preesistente
+Forward=Successivo
+Back=Precedente
+Sort_the_following_fields_as_numeric_fields=Ordina_i_campi_seguenti_come_campi_numerici
+Error_fetching_from_Citeseer\:\n=Errore_nel_corso_della_ricerca_Citeseer\:\n
+Line_%0\:_Found_corrupted_BibTeX-key.=Riga_%0\:_chiave_BibTeX_corrotta.
+Line_%0\:_Found_corrupted_BibTeX-key_(contains_whitespaces).=Riga_%0\:_chiave_BibTeX_corrotta_(contiene_spazi).
+Line_%0\:_Found_corrupted_BibTeX-key_(comma_missing).=Riga_%0\:_chiave_BibTeX_corrotta_(virgola_mancante).
+Finished_downloading_full_text_document=Terminato_il_download_del_documento_citato
+Unable_to_find_full_text_document_in_the_linked_web_page.=Impossibile_trovare_il_documento_citato_nella_pagina_web_collegata.
+Connection_error_when_trying_to_find_full_text_document.=Errore_di_connessione_nel_corso_della_ricerca_del_documento_citato
+This_entry_provides_no_URL_or_DOI_links.=Questa_voce_non_fornisce_collegamenti_URL_o_DOI.
+Full_text_article_download_failed=Fallito_il_download_del_documento_citato
+Down_up=Sposta_in_gi\u00f9
+Update_to_current_column_order=Salvare_l'ordine_delle_colonne_attuale
+
+Rename_field=Rinomina_il_campo
+Set/clear/rename_fields=Imposta/svuota/rinomina_i_campi
+Rename_field_to\:=Rinomina_il_campo_in\:
+Move_contents_of_a_field_into_a_field_with_a_different_name=Sposta_il_contenuto_di_un_campo_in_un_campo_con_nome_diverso
+
+You_can_only_rename_one_field_at_a_time=\u00c8_possibile_rinominare_solo_un_campo_per_volta
+Remove_all_broken_links=Rimuovere_tutti_i_collegamenti_non_validi
+Cannot_use_port_%0_for_remote_operation;_another_application_may_be_using_it._Try_specifying_another_port.=Impossibile_utilizzare_la_porta_%0_per_operazioni_remote;_la_porta_potrebbe_essere_in_uso_da_parte_di_un'altra_applicazione._Provare_a_specificare_una_porta_diversa.
+
+Plugin_installer=Installazione_di_plugin
+Unable_to_create_plugin_directory=Impossibile_creare_una_cartella_dei_plugin
+Unable_to_copy_file=Impossibile_copiare_un_file
+Plugin_installed_successfully._You_must_restart_JabRef_to_load_the_new_plugin.=Plugin_installato_correttamente._\u00c8_necessario_riavviare_JabRef_per_caricare_il_nuovo_plugin.
+Unable_to_create_user_plugin_directory=Impossibile_creare_una_cartella_utente_del_plugin
+Plugin_installation_failed.=Installazione_del_plugn_fallita.
+The_same_version_of_this_plugin_is_already_installed.=La_stessa_versione_del_plugin_\u00e8_gi\u00e0_installata.
+A_newer_version_of_this_plugin_is_already_installed.=Una_versione_pi\u00f9_recente_del_plugin_\u00e8_gi\u00e0_installata.
+One_or_more_older_versions_of_this_plugin_is_installed._Delete_old_versions?=Una_o_pi\u00f9_versioni_pi\u00f9_vecchie_del_plugin_sono_installate._Cancellare_le_vecchie_versioni?
+Old_versions_deleted_successfully.=La_cancellazione_delle_vecchie_versioni_\u00e8_riuscita.
+
+Install_plugin=Installa_plugin
+Download_plugin=Scarica_plugin
+Plugin_manager=Gestione_plugin
+Delete_the_%0_selected_plugins?=Cancellare_i_%0_plugin_selezionati?
+Delete_plugins=Cancella_plugin
+Delete_the_selected_plugin?=Cancellare_i_plugin_selezionati?
+Delete_plugin=Cancella_plugin
+Enter_download_URL=Inserire_lo_URL_di_download
+Plugin_name=Nome_del_plugin
+Version=Versione
+Unknown=Sconosciuto
+Not_loaded=Non_caricato
+Loaded=Caricato
+Could_not_determine_version_of_=Impossibile_determinare_la_versione_di_
+Install_anyway?=Installare_comunque?
+
+Looking_for_full_text_document...=Ricerca_del_documento_citato
+Follow_DOI_or_URL_link_and_try_to_locate_PDF_full_text_document=Segui_i_collegamenti_DOI_e_URL_prova_a_localizzare_il_file_PDF_del_documento_citato
+Unable_to_find_full_text_article._No_search_algorithm_defined_for_the_'%0'_web_site.=Impossibile_torvare_il_file_PDF_del_documento_citato._Nessun_algoritmo_di_ricerca_definito_per_il_sito_internet_'%0'.
+Found_pdf_link,_but_received_the_wrong_MIME_type._This_could_indicate_that_you_don't_have_access_to_the_fulltext_article.=Trovato_il_collegamento_al_file_PDF,_ma_il_tipo_MIME_ricevuto_non_\u00e8_corretto._Ci\u00f2_potrebbe_indicare_che_non_si_ha_permessi_di_accesso_al_file_PDF_del_documento_citato.
+
+Autosave=Salvataggio_automatico
+Prompt_before_recovering_a_database_from_an_autosave_file=Richiedere_conferma_prima_del_recupero_di_un_database_da_un_salvataggio_automatico
+Autosave_interval_(minutes)=Intervallo_di_salvataggio_automatico_(minuti)
+Do_you_want_to_recover_the_database_from_the_autosave_file?=Recuperare_il_database_dal_salvataggio_automatico?
+Recover_from_autosave=Recupero_da_salvataggio_automatico
+%0_warnings=%0_avvertimenti
+
+Save_in_current_table_sort_order=Salvare_nell'ordine_corrente_della_tabella
+Export_in_current_table_sort_order=Esportare_nell'ordine_corrente_della_tabella
+Export_ordered_by_author/editor/year=Esportare_secondo_l'ordine_author/editor/year
+Export_entries_in_their_original_order=Esportare_le_voci_nell'ordine_originale
+Error_opening_file_'%0'.=Errore_nell'apertura_del_file_'%0'.
+Autosave_of_file_'%0'=Salvataggio_automatico_del_file_'%0'
+Error_opening_autosave_of_'%0'._Trying_to_load_'%0'_instead.=Errore_nell'apertura_del_salvataggio_automatico_di_'%0'._Tentativo_di_apertura_di_'%0'.
+
+Plugins_installed_in_your_user_plugin_directory_(%0)\:=Plugin_installati_nella_cartella_dei_plugin_dell'utente_(%0):
+Plugins_installed_in_other_locations\:=Plugin_installati_in_altre_cartelle:
+Plugins_will_be_deleted_next_time_JabRef_starts_up.=I_plugin_verranno_cancellati_al_prossimo_avvio_di_JabRef.
+Plugin_will_be_deleted_next_time_JabRef_starts_up.=Il_plugin_verr\u00e0_cancellato_al_prossimo_avvio_di_JabRef.
+Old_plugin_versions_will_be_deleted_next_time_JabRef_starts_up.=Le_vecchie_versioni_del_plugin_verranno_cancellate_al_prossimo_avvio_di_JabRef.
+
+Formatter_not_found\:_%0=Formattazione_non_trovata\:_%0
+The_following_formatters_could_not_be_found=Le_seguenti_formattazioni_non_sono_state_trovate
+
+Clear_inputarea=Svuota_l'area_di_inserimento
+
+Automatically_set_file_links_for_this_entry=Definire_automaticamente_i_collegamenti_ai_file_per_questa_voce
+Could_not_save,_file_locked_by_another_JabRef_instance.=Impossibile_salvare,_il_file_\u00e8_bloccato_da_un'altra_istanza_di_JabRef.
+File_is_locked_by_another_JabRef_instance.=Il_file_\u00e8_bloccato_da_un'altra_istanza_di_JabRef.
+Do_you_want_to_override_the_file_lock?=Vuoi_ignorare_il_blocco_del_file?
+File_locked=File_bloccato
+Current_tmp_value=Variabile_"tmp"_corrente
+Metadata_change=Modifica_dei_metadati
+Changes_have_been_made_to_the_following_metadata_elements=Sono_stati_modificati_i_seguenti_elementi_dei_metadati
+
+Generate_groups_for_author_last_names=Genera_gruppi_in_base_al_cognome_dell'autore
+Generate_groups_for_editor_last_names=Genera_gruppi_in_base_al_cognome_del_curatore
+Generate_groups_from_keywords_in_a_BibTeX_field=Genera_gruppi_in_base_alle_parole_chiave_in_un_campo_BibTeX
+Enforce_legal_characters_in_BibTeX_keys=Imponi_l'utilizzo_dei_soli_caratteri_conformi_alla_sintassi_nelle_chiavi_BibTeX
+The_#_character_is_not_allowed_in_BibTeX_strings_unless_escaped_as_in_'\\#'.=Il_carattere_#_non_\u00e8_consentito_nelle_stringhe_BibTeX_se_non_protetto_da_un_carattere_di_"escape"_come_in_'\\#'.
+Before_saving,_please_edit_any_strings_containing_the_#_character.=Prima_di_salvare,_modificare_le_stringhe_contenenti_il_carattere_#.
diff --git a/src/resource/JabRef_nl.properties b/src/resource/JabRef_nl.properties
index 7a66dad..c7fd98e 100644
--- a/src/resource/JabRef_nl.properties
+++ b/src/resource/JabRef_nl.properties
@@ -2121,4 +2121,21 @@ Plugin_will_be_deleted_next_time_JabRef_starts_up.=
 Old_plugin_versions_will_be_deleted_next_time_JabRef_starts_up.=
 
 Formatter_not_found\:_%0=
-The_following_formatters_could_not_be_found=
\ No newline at end of file
+The_following_formatters_could_not_be_found=
+
+Clear_inputarea=
+Automatically_set_file_links_for_this_entry=
+Could_not_save,_file_locked_by_another_JabRef_instance.=
+File_is_locked_by_another_JabRef_instance.=
+Do_you_want_to_override_the_file_lock?=
+File_locked=
+Current_tmp_value=
+Metadata_change=
+Changes_have_been_made_to_the_following_metadata_elements=
+
+Generate_groups_for_author_last_names=
+Generate_groups_for_editor_last_names=
+Generate_groups_from_keywords_in_a_BibTeX_field=
+Enforce_legal_characters_in_BibTeX_keys=
+The_#_character_is_not_allowed_in_BibTeX_strings_unless_escaped_as_in_'\\#'.=
+Before_saving,_please_edit_any_strings_containing_the_#_character.=
\ No newline at end of file
diff --git a/src/resource/JabRef_no.properties b/src/resource/JabRef_no.properties
index da7b153..7d1b603 100644
--- a/src/resource/JabRef_no.properties
+++ b/src/resource/JabRef_no.properties
@@ -1294,4 +1294,21 @@ Plugin_will_be_deleted_next_time_JabRef_starts_up.=
 Old_plugin_versions_will_be_deleted_next_time_JabRef_starts_up.=
 
 Formatter_not_found\:_%0=
-The_following_formatters_could_not_be_found=
\ No newline at end of file
+The_following_formatters_could_not_be_found=
+
+Clear_inputarea=
+Automatically_set_file_links_for_this_entry=
+Could_not_save,_file_locked_by_another_JabRef_instance.=
+File_is_locked_by_another_JabRef_instance.=
+Do_you_want_to_override_the_file_lock?=
+File_locked=
+Current_tmp_value=
+Metadata_change=
+Changes_have_been_made_to_the_following_metadata_elements=
+
+Generate_groups_for_author_last_names=
+Generate_groups_for_editor_last_names=
+Generate_groups_from_keywords_in_a_BibTeX_field=
+Enforce_legal_characters_in_BibTeX_keys=
+The_#_character_is_not_allowed_in_BibTeX_strings_unless_escaped_as_in_'\\#'.=
+Before_saving,_please_edit_any_strings_containing_the_#_character.=
diff --git a/src/resource/JabRef_tr.properties b/src/resource/JabRef_tr.properties
index 8e5c4d3..c34ced3 100644
--- a/src/resource/JabRef_tr.properties
+++ b/src/resource/JabRef_tr.properties
@@ -1134,6 +1134,8 @@ Legacy_file_fields=Eski_s\u00FCr\u00FCm_dosya_alanlar\u0131
 %0_entries_found._To_reduce_server_load,_only_%1_will_be_downloaded.=%0_girdi_bulundu._Sunucu_y\u00FCk\u00FCn\u00FC_azaltmak_i\u00E7in_yaln\u0131zca_%1_indirilecektir.
 This_makes_JabRef_look_up_each_%0_extension_and_check_if_the_file_exists._If_not,_you_will_be_given_options<BR>to_resolve_the_problem.=Bu,_JabRef'in_her_bir_%0_uzant\u0131s\u0131n\u0131_bulup_dosyan\u0131n_var_olup_olmad\u0131\u011F\u0131n\u0131_kontrol_etmesini_sa\u011Flar._E\u011Fer_dosya_yoksa,_sorunu_\u00E7\u00F6zmek_i\u00E7in_se\u00E7enekler<BR>_sunulacakt\u0131r.
 
+Run_Fetcher,_e.g._"--fetch=Getiriciyi_\u00C7al\u0131\u015Ft\u0131r,_\u00D6rnek_"--fetch
+
 Override_legacy_file_fields=Eski_s\u00FCr\u00FCm_dosya_alanlar\u0131n\u0131_\u00F6nemseme
 
 The_ACM_Digital_Library=ACM_Say\u0131sal_K\u00FCt\u00FCphane
@@ -1169,65 +1171,83 @@ Rename_field=Alan\u0131n_ad\u0131n\u0131_de\u011Fi\u015Ftir
 Set/clear/rename_fields=Alanlar\u0131_kur/sil/yeniden_adland\u0131r
 Rename_field_to\:=Alan_ad\u0131n\u0131_\u015Funa_de\u011Fi\u015Ftir\:
 Move_contents_of_a_field_into_a_field_with_a_different_name=Alan_i\u00E7eri\u011Fini_ba\u015Fka_isimli_bir_alan\u0131n_i\u00E7ine_ta\u015F\u0131
-
-Run_Fetcher,_e.g._"--fetch=Getiriciyi_\u00C7al\u0131\u015Ft\u0131r,_\u00D6rnek_"--fetch
 You_can_only_rename_one_field_at_a_time=Bir_seferde_yaln\u0131zca_bir_alan\u0131n_ad\u0131n\u0131_de\u011Fi\u015Ftirebilirsiniz
 
-Remove_all_broken_links=
-Cannot_use_port_%0_for_remote_operation;_another_application_may_be_using_it._Try_specifying_another_port.=
+Remove_all_broken_links=T\u00FCm_bozuk_linkleri_sil
+Cannot_use_port_%0_for_remote_operation;_another_application_may_be_using_it._Try_specifying_another_port.=Uzak_operasyon_i\u00E7in_ba\u011Flant\u0131_noktas\u0131_%0_kullan\u0131lam\u0131yor;_bir_ba\u015Fka_program_kullan\u0131yor_olabilir._Ba\u015Fka_bir_ba\u011Flant\u0131_noktas\u0131_deneyin.
+
+Plugin_installer=Eklenti_kurucu
+Unable_to_create_plugin_directory=Eklenti_dizini_olu\u015Fturulam\u0131yor
+Unable_to_copy_file=Dosya_kopyalanam\u0131yor
+Plugin_installed_successfully._You_must_restart_JabRef_to_load_the_new_plugin.=Eklenti_ba\u015Far\u0131yla_kuruldu._Yeni_eklentiyi_y\u00FCklemek_i\u00E7in_JabRefi'i_yeniden_ba\u015Flatmal\u0131s\u0131n\u0131z.
+Unable_to_create_user_plugin_directory=Kullan\u0131c\u0131_eklenti_dizini_olu\u015Fturulam\u0131yor
+Plugin_installation_failed.=Eklenti_kurulumu_ba\u015Far\u0131s\u0131z.
+The_same_version_of_this_plugin_is_already_installed.=Bu_eklentinin_ayn\u0131_s\u00FCr\u00FCm\u00FC_zaten_kurulu.
+A_newer_version_of_this_plugin_is_already_installed.=Bu_eklentinin_daha_yeni_bir_s\u00FCr\u00FCm\u00FC_zaten_kurulu.
+One_or_more_older_versions_of_this_plugin_is_installed._Delete_old_versions?=Bu_eklentinin_bir_ya_da_daha_fazla_eski_s\u00FCr\u00FCm\u00FC_kurulu._Eski_s\u00FCr\u00FCmler_silinsin_mi?
+Old_versions_deleted_successfully.=Eski_s\u00FCr\u00FCmler_ba\u015Far\u0131yla_silindi.
+Install_plugin=Eklenti_kur
+Download_plugin=Eklenti_indir
+Plugin_manager=Eklenti_y\u00F6neticisi
+Delete_the_%0_selected_plugins?=%0_se\u00E7ili_eklenti_silinsin_mi?
+Delete_plugins=Eklentileri_sil
+Delete_the_selected_plugin?=Se\u00E7ili_eklenti_silinsin_mi?
+Delete_plugin=Eklenti_sil
+Enter_download_URL=\u0130ndirme_URL'si_giriniz
+Plugin_name=Eklenti_ad\u0131
+Version=S\u00FCr\u00FCm
+Unknown=Bilinmeyen
+Not_loaded=Y\u00FCklenmedi
+Loaded=Y\u00FCklendi
+Could_not_determine_version_of_=\u015Eunun_s\u00FCr\u00FCm\u00FC_belirlenemedi_
+Install_anyway?=Yine_de_kurulsun_mu?
+
+Looking_for_full_text_document...=Tam_metin_belge_aran\u0131yor...
+Follow_DOI_or_URL_link_and_try_to_locate_PDF_full_text_document=DOI_ya_da_URL_linki_izle_ve_tam_metin_PDF_belgesini_bulmaya_\u00E7al\u0131\u015F
+Unable_to_find_full_text_article._No_search_algorithm_defined_for_the_'%0'_web_site.=Tam_metin_makal_bulunamad\u0131._'%0'_web_sitesi_i\u00E7in_bir_arama_algoritmas\u0131_tan\u0131mlanmam\u0131\u015F.
+Found_pdf_link,_but_received_the_wrong_MIME_type._This_could_indicate_that_you_don't_have_access_to_the_fulltext_article.=Pdf_link_bulundu,_ama_yanl\u0131\u015F_MIME_t\u00FCr\u00FC_al\u0131nd\u0131._Bu,_tam_metin_makaleye_eri\u015Fiminiz_olmad\u0131\u011F\u0131_anlam\u0131na_gelebilir.
+
+Autosave=Otomatik_kaydet
+Prompt_before_recovering_a_database_from_an_autosave_file=Otomatik_kaydedilmi\u015F_bir_dosyadan_veri_taban\u0131n\u0131_kurtarmaya_ba\u015Flamadan_\u00F6nce_sor
+Autosave_interval_(minutes)=Otomatik_kay\u0131t_aral\u0131\u011F\u0131_(dakika)
+Do_you_want_to_recover_the_database_from_the_autosave_file?=Otomatik_kay\u0131t_dosyas\u0131ndan_veritaban\u0131n\u0131_kurtarmak_ister_misiniz?
+Recover_from_autosave=Otomatik_kay\u0131ttan_kurtar
+%0_warnings=%0_uyar\u0131
 
-Plugin_installer=
-Unable_to_create_plugin_directory=
-Unable_to_copy_file=
-Plugin_installed_successfully._You_must_restart_JabRef_to_load_the_new_plugin.=
-Unable_to_create_user_plugin_directory=
-Plugin_installation_failed.=
-The_same_version_of_this_plugin_is_already_installed.=
-A_newer_version_of_this_plugin_is_already_installed.=
-One_or_more_older_versions_of_this_plugin_is_installed._Delete_old_versions?=
-Old_versions_deleted_successfully.=
+Save_in_current_table_sort_order=Mevcut_tablo_s\u0131ralama_d\u00FCzeninde_kaydet
+Export_in_current_table_sort_order=Mevcut_tablo_s\u0131ralama_d\u00FCzeninde_d\u0131\u015Fa_aktar
+Export_ordered_by_author/editor/year=Yazar/edit\u00F6r/y\u0131l_d\u00FCzeninde_s\u0131ralayarak_d\u0131\u015Fa_aktar
+Export_entries_in_their_original_order=Girdileri_orijinal_s\u0131ras\u0131nda_d\u0131\u015Fa_aktar
+Error_opening_file_'%0'.=Dosya_a\u00E7mada_hata_'%0'.
+Autosave_of_file_'%0'='%0'_dosyas\u0131n\u0131n_otomatik_kayd\u0131
+Error_opening_autosave_of_'%0'._Trying_to_load_'%0'_instead.='%0''in_otomatik_kayd\u0131n\u0131_a\u00E7mada_hata._Onun_yerine_'%0'_y\u00FCklenmeye_\u00E7al\u0131\u015F\u0131yor.
 
-Install_plugin=
-Download_plugin=
-Plugin_manager=
-Delete_the_%0_selected_plugins?=
-Delete_plugins=
-Delete_the_selected_plugin?=
-Delete_plugin=
-Enter_download_URL=
-Plugin_name=
-Version=
-Unknown=
-Not_loaded=
-Loaded=
-Could_not_determine_version_of_=
-Install_anyway?=
+Plugins_installed_in_your_user_plugin_directory_(%0)\:=Kullan\u0131c\u0131_eklenti_dizininizde_(%0)\_kurulu_eklentiler:
+Plugins_installed_in_other_locations\:=Di\u011Fer_yerlerde_kurulu_eklentiler\:
+Plugins_will_be_deleted_next_time_JabRef_starts_up.=JabRef_tekrar_ba\u015Flad\u0131\u011F\u0131nda_eklentiler_silinecek.
+Plugin_will_be_deleted_next_time_JabRef_starts_up.=JabRef_tekrar_ba\u015Flad\u0131\u011F\u0131nda_eklenti_silinecek.
+Old_plugin_versions_will_be_deleted_next_time_JabRef_starts_up.=Eski_eklenti_s\u00FCr\u00FCmleri,_JabRef_tekrar_ba\u015Flad\u0131\u011F\u0131nda_silinecek.
 
-Looking_for_full_text_document...=
-Follow_DOI_or_URL_link_and_try_to_locate_PDF_full_text_document=
-Unable_to_find_full_text_article._No_search_algorithm_defined_for_the_'%0'_web_site.=
-Found_pdf_link,_but_received_the_wrong_MIME_type._This_could_indicate_that_you_don't_have_access_to_the_fulltext_article.=
+Formatter_not_found\:_%0=Bi\u00E7imleyici_bulunamad\u0131\:_%0
+The_following_formatters_could_not_be_found=A\u015Fa\u011F\u0131daki_bi\u00E7imleyiciler_bulunamad\u0131
 
-Autosave=
-Prompt_before_recovering_a_database_from_an_autosave_file=
-Autosave_interval_(minutes)=
-Do_you_want_to_recover_the_database_from_the_autosave_file?=
-Recover_from_autosave=
-%0_warnings=
+Clear_inputarea=Girdi_alan\u0131n\u0131_temizle
+Automatically_set_file_links_for_this_entry=Bu_girdi_i\u00e7in_dosya_ba\u011flant\u0131lar\u0131n\u0131_otomatikman_kur
+Could_not_save,_file_locked_by_another_JabRef_instance.=Kaydedilemiyor,_dosya_ba\u015fka_bir_JabRef_oturumunca_kilitlenmi\u015f.
+File_is_locked_by_another_JabRef_instance.=Dosya_ba\u015fka_bir_JabRef_oturumunca_kilitlenmi\u015f.
+Do_you_want_to_override_the_file_lock?=Dosya_kilidini_ge\u00e7ersiz_k\u0131lmak_ister_misiniz?
+File_locked=Dosya_kilitli
+Current_tmp_value=Mevcut_tmp_de\u011feri
+Metadata_change=Metadata_de\u011fi\u015fikli\u011fi
+Changes_have_been_made_to_the_following_metadata_elements=A\u015fa\u011f\u0131daki_metadata_\u00f6gelerinde_de\u011fi\u015fiklik_yap\u0131ld\u0131
 
-Save_in_current_table_sort_order=
-Export_in_current_table_sort_order=
-Export_ordered_by_author/editor/year=
-Export_entries_in_their_original_order=
-Error_opening_file_'%0'.=
-Autosave_of_file_'%0'=
-Error_opening_autosave_of_'%0'._Trying_to_load_'%0'_instead.=
+Generate_groups_for_author_last_names=Yazar_soyadlar\u0131_i\u00e7in_grup_olu\u015ftur
+Generate_groups_for_editor_last_names=Edit\u00f6r_soyadlar\u0131_i\u00e7in_grup_olu\u015ftur
+Generate_groups_from_keywords_in_a_BibTeX_field=Bir_BibTeX_alan\u0131ndaki_anahtar_s\u00f6zc\u00fcklerden_grup_olu\u015ftur
+Enforce_legal_characters_in_BibTeX_keys=BibTeX_anahtarlar\u0131nda_yasal_karakterleri_zorla
+The_#_character_is_not_allowed_in_BibTeX_strings_unless_escaped_as_in_'\\#'.='\\#'_\u015feklinde_belirtilmedik\u00e7e_BibTeX_dizgelerinde_#_karakterine_izin_verilmez.
+Before_saving,_please_edit_any_strings_containing_the_#_character.=Kaydetmeden_\u00f6nce_l\u00fctfen_#_karakterini_i\u00e7eren_t\u00fcm_dizgeleri_d\u00fczeltin.
+Deletion_of_old_versions_failed.=Eski_s\u00FCr\u00FCmlerin_silinmesi_ba\u015Far\u0131s\u0131z.
 
-Plugins_installed_in_your_user_plugin_directory_(%0)\:=
-Plugins_installed_in_other_locations\:=
-Plugins_will_be_deleted_next_time_JabRef_starts_up.=
-Plugin_will_be_deleted_next_time_JabRef_starts_up.=
-Old_plugin_versions_will_be_deleted_next_time_JabRef_starts_up.=
 
-Formatter_not_found\:_%0=
-The_following_formatters_could_not_be_found=
\ No newline at end of file
+Highlight_groups_that_contain_entries_contained_in_any_currently_selected_group=Se\u00E7ili_herhangi_bir_gruptaki_girdileri_i\u00E7eren_gruplar\u0131_i\u015Faretle
diff --git a/src/resource/JabRef_zh.properties b/src/resource/JabRef_zh.properties
index a937266..42f73b3 100644
--- a/src/resource/JabRef_zh.properties
+++ b/src/resource/JabRef_zh.properties
@@ -2110,4 +2110,21 @@ Plugin_will_be_deleted_next_time_JabRef_starts_up.=
 Old_plugin_versions_will_be_deleted_next_time_JabRef_starts_up.=
 
 Formatter_not_found\:_%0=
-The_following_formatters_could_not_be_found=
\ No newline at end of file
+The_following_formatters_could_not_be_found=
+
+Clear_inputarea=
+Automatically_set_file_links_for_this_entry=
+Could_not_save,_file_locked_by_another_JabRef_instance.=
+File_is_locked_by_another_JabRef_instance.=
+Do_you_want_to_override_the_file_lock?=
+File_locked=
+Current_tmp_value=
+Metadata_change=
+Changes_have_been_made_to_the_following_metadata_elements=
+
+Generate_groups_for_author_last_names=
+Generate_groups_for_editor_last_names=
+Generate_groups_from_keywords_in_a_BibTeX_field=
+Enforce_legal_characters_in_BibTeX_keys=
+The_#_character_is_not_allowed_in_BibTeX_strings_unless_escaped_as_in_'\\#'.=
+Before_saving,_please_edit_any_strings_containing_the_#_character.=
\ No newline at end of file
diff --git a/src/resource/JabRef_zh.properties.UTF8 b/src/resource/JabRef_zh.properties.UTF8
index c9f1c51..cb7c6fa 100644
--- a/src/resource/JabRef_zh.properties.UTF8
+++ b/src/resource/JabRef_zh.properties.UTF8
@@ -2114,3 +2114,22 @@ Unknown=
 Version=
 Formatter_not_found\:_%0=
 The_following_formatters_could_not_be_found=
+
+Clear_inputarea=
+
+Automatically_set_file_links_for_this_entry=
+Could_not_save,_file_locked_by_another_JabRef_instance.=
+File_is_locked_by_another_JabRef_instance.=
+Do_you_want_to_override_the_file_lock?=
+File_locked=
+Current_tmp_value=
+Metadata_change=
+Changes_have_been_made_to_the_following_metadata_elements=
+
+Generate_groups_for_author_last_names=
+Generate_groups_for_editor_last_names=
+Generate_groups_from_keywords_in_a_BibTeX_field=
+Enforce_legal_characters_in_BibTeX_keys=
+
+The_#_character_is_not_allowed_in_BibTeX_strings_unless_escaped_as_in_'\\#'.=
+Before_saving,_please_edit_any_strings_containing_the_#_character.=
\ No newline at end of file
diff --git a/src/resource/Menu_tr.properties b/src/resource/Menu_tr.properties
index 716248e..7c92971 100644
--- a/src/resource/Menu_tr.properties
+++ b/src/resource/Menu_tr.properties
@@ -117,7 +117,9 @@ Increase_table_font_size=Tablo_yaz\u0131tipi_boyutunu_artt\u0131r
 Decrease_table_font_size=Tablo_yaz\u0131tipi_boyutunu_azalt
 Forward=\u0130leri
 Back=Geri
+Manage_plugins=Eklentileri_y\u00f6net
+Synchronize_file_links=Dosya_linklerini_e\u015fzamanla
+Set/clear/rename_fields=Alanlar\u0131_ata/sil/yeniden_adland\u0131r
+Look_up_full_text_document=Tam_metin_belge_bul
+Push_entries_to_external_application_(LyX/Kile)=Girdileri_harici_uygulamaya_(LyX/Kile)_itele
 
-Manage_plugins=
-Look_up_full_text_document=
-Set/clear/rename_fields=
\ No newline at end of file
diff --git a/src/resource/build.properties b/src/resource/build.properties
index 7899b78..c6a6462 100644
--- a/src/resource/build.properties
+++ b/src/resource/build.properties
@@ -1,3 +1,3 @@
-builddate=June 22 2009
-build=66
-version=2.5
\ No newline at end of file
+builddate=November 1 2009
+build=39
+version=2.6b2
\ No newline at end of file
diff --git a/src/resource/layout/endnote/EndNote.article.layout b/src/resource/layout/endnote/EndNote.article.layout
index decbf22..f52bee1 100755
--- a/src/resource/layout/endnote/EndNote.article.layout
+++ b/src/resource/layout/endnote/EndNote.article.layout
@@ -10,7 +10,7 @@
 %V \volume
 %6
 %N \number
-%P \pages
+%P \format[FormatPagesForHTML]{\pages}
 %& 
 %Y 
 %S 
diff --git a/src/resource/layout/endnote/EndNote.book.layout b/src/resource/layout/endnote/EndNote.book.layout
index 86f5b1d..92cb46b 100755
--- a/src/resource/layout/endnote/EndNote.book.layout
+++ b/src/resource/layout/endnote/EndNote.book.layout
@@ -10,7 +10,7 @@
 %V \volume
 %6
 %N \number
-%P
+%P \format[FormatPagesForHTML]{\pages}
 %& 
 %Y 
 %S 
diff --git a/src/resource/layout/endnote/EndNote.booklet.layout b/src/resource/layout/endnote/EndNote.booklet.layout
index adb5a35..9635c2d 100755
--- a/src/resource/layout/endnote/EndNote.booklet.layout
+++ b/src/resource/layout/endnote/EndNote.booklet.layout
@@ -10,7 +10,7 @@
 %V
 %6
 %N \lastchecked
-%P
+%P \format[FormatPagesForHTML]{\pages}
 %& 
 %Y 
 %S 
diff --git a/src/resource/layout/endnote/EndNote.inbook.layout b/src/resource/layout/endnote/EndNote.inbook.layout
index 5f72995..dca0ff3 100755
--- a/src/resource/layout/endnote/EndNote.inbook.layout
+++ b/src/resource/layout/endnote/EndNote.inbook.layout
@@ -10,7 +10,7 @@
 %V \volume
 %6
 %N 
-%P \pages
+%P \format[FormatPagesForHTML]{\pages}
 %& \chapter
 %Y 
 %S \series
diff --git a/src/resource/layout/endnote/EndNote.incollection.layout b/src/resource/layout/endnote/EndNote.incollection.layout
index df32a90..0956822 100755
--- a/src/resource/layout/endnote/EndNote.incollection.layout
+++ b/src/resource/layout/endnote/EndNote.incollection.layout
@@ -10,7 +10,7 @@
 %V \volume
 %6
 %N 
-%P \pages
+%P \format[FormatPagesForHTML]{\pages}
 %& \chapter
 %Y 
 %S \series
diff --git a/src/resource/layout/endnote/EndNote.inproceedings.layout b/src/resource/layout/endnote/EndNote.inproceedings.layout
index be42424..7ca4100 100755
--- a/src/resource/layout/endnote/EndNote.inproceedings.layout
+++ b/src/resource/layout/endnote/EndNote.inproceedings.layout
@@ -10,7 +10,7 @@
 %V \volume
 %6
 %N 
-%P \pages
+%P \format[FormatPagesForHTML]{\pages}
 %& 
 %Y \organization
 %S \series
diff --git a/src/resource/layout/endnote/EndNote.layout b/src/resource/layout/endnote/EndNote.layout
index dfcdfea..3ef5296 100755
--- a/src/resource/layout/endnote/EndNote.layout
+++ b/src/resource/layout/endnote/EndNote.layout
@@ -10,7 +10,7 @@
 %V 
 %6
 %N 
-%P 
+%P \format[FormatPagesForHTML]{\pages}
 %& 
 %Y 
 %S 
diff --git a/src/resource/layout/endnote/EndNote.manual.layout b/src/resource/layout/endnote/EndNote.manual.layout
index ee216b3..084b94e 100755
--- a/src/resource/layout/endnote/EndNote.manual.layout
+++ b/src/resource/layout/endnote/EndNote.manual.layout
@@ -10,7 +10,7 @@
 %V 
 %6
 %N 
-%P 
+%P \format[FormatPagesForHTML]{\pages}
 %& 
 %Y 
 %S 
diff --git a/src/resource/layout/endnote/EndNote.mastersthesis.layout b/src/resource/layout/endnote/EndNote.mastersthesis.layout
index 192b93f..86af2d9 100755
--- a/src/resource/layout/endnote/EndNote.mastersthesis.layout
+++ b/src/resource/layout/endnote/EndNote.mastersthesis.layout
@@ -10,7 +10,7 @@
 %V 
 %6
 %N 
-%P 
+%P \format[FormatPagesForHTML]{\pages}
 %& 
 %Y 
 %S 
diff --git a/src/resource/layout/endnote/EndNote.misc.layout b/src/resource/layout/endnote/EndNote.misc.layout
index ae7c447..7df4a94 100755
--- a/src/resource/layout/endnote/EndNote.misc.layout
+++ b/src/resource/layout/endnote/EndNote.misc.layout
@@ -10,7 +10,7 @@
 %V 
 %6
 %N 
-%P 
+%P \format[FormatPagesForHTML]{\pages}
 %& 
 %Y 
 %S 
diff --git a/src/resource/layout/endnote/EndNote.other.layout b/src/resource/layout/endnote/EndNote.other.layout
index 08233ae..bd45e46 100755
--- a/src/resource/layout/endnote/EndNote.other.layout
+++ b/src/resource/layout/endnote/EndNote.other.layout
@@ -10,7 +10,7 @@
 %V 
 %6
 %N 
-%P 
+%P \format[FormatPagesForHTML]{\pages}
 %& 
 %Y 
 %S 
diff --git a/src/resource/layout/endnote/EndNote.phdthesis.layout b/src/resource/layout/endnote/EndNote.phdthesis.layout
index 1519870..3fe2498 100755
--- a/src/resource/layout/endnote/EndNote.phdthesis.layout
+++ b/src/resource/layout/endnote/EndNote.phdthesis.layout
@@ -10,7 +10,7 @@
 %V 
 %6
 %N 
-%P 
+%P \format[FormatPagesForHTML]{\pages}
 %& 
 %Y 
 %S 
diff --git a/src/resource/layout/endnote/EndNote.proceedings.layout b/src/resource/layout/endnote/EndNote.proceedings.layout
index 503c1f6..9133c41 100755
--- a/src/resource/layout/endnote/EndNote.proceedings.layout
+++ b/src/resource/layout/endnote/EndNote.proceedings.layout
@@ -10,7 +10,7 @@
 %V \volume
 %6
 %N 
-%P \pages
+%P \format[FormatPagesForHTML]{\pages}
 %& 
 %Y \organization
 %S \series
diff --git a/src/resource/layout/endnote/EndNote.techreport.layout b/src/resource/layout/endnote/EndNote.techreport.layout
index 29f794d..4a78bcb 100755
--- a/src/resource/layout/endnote/EndNote.techreport.layout
+++ b/src/resource/layout/endnote/EndNote.techreport.layout
@@ -10,7 +10,7 @@
 %V 
 %6
 %N 
-%P 
+%P \format[FormatPagesForHTML]{\pages}
 %& 
 %Y 
 %S 
diff --git a/src/resource/layout/endnote/EndNote.unpublished.layout b/src/resource/layout/endnote/EndNote.unpublished.layout
index ec926b5..556fe11 100755
--- a/src/resource/layout/endnote/EndNote.unpublished.layout
+++ b/src/resource/layout/endnote/EndNote.unpublished.layout
@@ -10,7 +10,7 @@
 %V 
 %6
 %N 
-%P 
+%P \format[FormatPagesForHTML]{\pages}
 %& 
 %Y 
 %S 
diff --git a/src/resource/layout/harvard/harvard.book.layout b/src/resource/layout/harvard/harvard.book.layout
index 9f74a7d..78748e9 100644
--- a/src/resource/layout/harvard/harvard.book.layout
+++ b/src/resource/layout/harvard/harvard.book.layout
@@ -2,8 +2,7 @@
 \format[RTFChars,AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\author}
 \end{author}
 \begin{editor}
-\format[RTFChars,AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\editor}, ed.
-\end{editor}
+\format[RTFChars,AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\editor}, ed. \end{editor}
  (\year), 
 }{\\i \format[RTFChars]{\title}}{
 \begin{volume}
diff --git a/src/resource/layout/harvard/harvard.inbook.layout b/src/resource/layout/harvard/harvard.inbook.layout
index 743176b..5a6c549 100644
--- a/src/resource/layout/harvard/harvard.inbook.layout
+++ b/src/resource/layout/harvard/harvard.inbook.layout
@@ -1,6 +1,8 @@
 \begin{author}
 \format[RTFChars,AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\author}
 \end{author}
+\begin{editor}
+\format[RTFChars,AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\editor}, ed., \end{editor}
  (\year), 
 }{\\i \format[RTFChars]{\title}}{
 \begin{publisher}
diff --git a/src/resource/layout/harvard/harvard.incollection.layout b/src/resource/layout/harvard/harvard.incollection.layout
index d052b2b..239241d 100644
--- a/src/resource/layout/harvard/harvard.incollection.layout
+++ b/src/resource/layout/harvard/harvard.incollection.layout
@@ -1,8 +1,7 @@
 \format[RTFChars,AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\author} (\year), 
 }{\format[RTFChars]{\title}}{
 \begin{editor}
-, }{\\i in }{\format[RTFChars,AuthorFirstFirst,AuthorAndsReplacer]{\editor}, ed.,
-\end{editor}
+, }{\\i in }{\format[RTFChars,AuthorFirstFirst,AuthorAndsReplacer]{\editor}, ed., \end{editor}
 \begin{booktitle}
 '\format[RTFChars]{\booktitle}'
 \end{booktitle}
diff --git a/src/resource/layout/harvard/harvard.inproceedings.layout b/src/resource/layout/harvard/harvard.inproceedings.layout
index b064c14..d76fcf0 100644
--- a/src/resource/layout/harvard/harvard.inproceedings.layout
+++ b/src/resource/layout/harvard/harvard.inproceedings.layout
@@ -2,8 +2,7 @@
 \format[RTFChars]{\title}
 , }{\\i in }{
 \begin{editor}
-\format[RTFChars,AuthorFirstFirst,AuthorAndsReplacer]{\editor}, ed.,
-\end{editor}
+\format[RTFChars,AuthorFirstFirst,AuthorAndsReplacer]{\editor}, ed., \end{editor}
 \begin{booktitle}
 '\format[RTFChars]{\booktitle}'
 \end{booktitle}
diff --git a/src/resource/layout/harvard/harvard.layout b/src/resource/layout/harvard/harvard.layout
index 5155d71..181b316 100644
--- a/src/resource/layout/harvard/harvard.layout
+++ b/src/resource/layout/harvard/harvard.layout
@@ -7,8 +7,7 @@
 (\number)
 \end{number}
 \begin{editor}
-, }{\\i in }{\format[AuthorFirstFirst,AuthorAndsReplacer,RTFChars]{\editor}, ed.,
-\end{editor}
+, }{\\i in }{\format[AuthorFirstFirst,AuthorAndsReplacer,RTFChars]{\editor}, ed., \end{editor}
 \begin{booktitle}
 '\format[RTFChars]{\booktitle}'
 \end{booktitle}
diff --git a/src/resource/layout/harvard/harvard.proceedings.layout b/src/resource/layout/harvard/harvard.proceedings.layout
index 9f74a7d..34768d3 100644
--- a/src/resource/layout/harvard/harvard.proceedings.layout
+++ b/src/resource/layout/harvard/harvard.proceedings.layout
@@ -2,8 +2,7 @@
 \format[RTFChars,AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\author}
 \end{author}
 \begin{editor}
-\format[RTFChars,AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\editor}, ed.
-\end{editor}
+\format[RTFChars,AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\editor}, ed., \end{editor}
  (\year), 
 }{\\i \format[RTFChars]{\title}}{
 \begin{volume}
diff --git a/src/txt/CHANGELOG b/src/txt/CHANGELOG
index eba0463..dd1c566 100644
--- a/src/txt/CHANGELOG
+++ b/src/txt/CHANGELOG
@@ -1,3 +1,72 @@
+    - Added export formatter "Default" which takes a single argument. Outputs the string to format
+      unchanged if it is non-empty, otherwise outputs the argument.
+    - Added option under Options -> Preferences -> General for disabling the strict enforcing of
+      correct BibTeX keys. Disabling this makes it possible to use e.g. umlaut characters in keys.
+    - Modified launcher script for Windows installer to give higher heap size limit.
+    - Improved autocompletion. All fields with autocompletion which have content selectors will now
+      autocomplete on content selector values. For the "journal" field, the autocompleter will now
+      additionally use entries from the current journal abbreviations list, and will also complete
+      on the entire field up to the cursor rather than just looking at the last word only.
+    - Added support for postformatter in Layout. The postformatter will be run after
+      the formatters called from a layout.
+    - Improved group autogeneration. Added option to generate groups based on author or editor
+      last names. Autogenerated groups are now alphabetized.
+    - Modified Endnote export filter so "--" gets converted to "-" in the "pages" field.
+    - Changed keyword groups so they will match on whole words only. E.g. a keyword group for the
+      keyword "can" will no longer match the keyword "scanner".
+    - Improved entry type determination and author parsing for some varieties of CSA files.
+    - Minor change to Harvard RTF export. Added space after "ed.", and added editor to output for
+      inbook entries.
+    - Set limit to the number of displayed characters in group names in groups tree in order to
+      avoid group panel width problems.
+    - Changed file link handling so all remote links classified as URL can be opened through
+      the browser. Setting a different file type manually makes JabRef call a remote link using
+      the handler application instead.
+    - Modified Endnote/refer import filter to strip "doi:" from the %R field.
+    - Modified HTML conversion so single newline is displayed in the preview (and HTML exports) as
+      <br>, while multiple newlines are displayed as <p>.
+    - Fixed bug: switching entry editor between entries of different type may result in switching
+      of entry editor tabs.
+    - Fixed bug: adding external file link leads to relative path from root directory if file
+      directory is set to an empty string.
+    - Fixed error message when a # in a BibTeX string prevents saving. No longer states that the
+      problem is in an entry, but specifies that it is in a string.
+    - Fixed bug: ODS export doesn't resolve BibTeX strings.
+    - Fixed bug: content selector for "editor" field uses "," instead of " and " as delimiter.
+    - Fixed bug: editing source doesn't allow change of entry type.
+    - RTFChars formatter now converts --- to \emdash and -- to \endash.
+
+2.6b
+    - Added pages information to several entry types in Endnote export.
+    - Modified LastPage formatter so it returns the number when only the number of pages is given.
+    - Modified search algorithms so LaTeX commands are removed before search. For instance, this
+      means that the value "test \textit{case}" now matches the search string "test case".
+    - Changed default table font family to "SansSerif".
+    - Can now create lock file while writing a bib file. The lock file is checked before
+      saving, and before scanning an externally changed file, in order to avoid reading an
+      unfinished file.
+    - Added support for dragging a file link from the file column to another application.
+    - Added toolbar button and shortcut (Alt-F) in entry editor for autosetting file links.
+    - Improved ISI import filter so DOI information is included.
+    - Fixed bug: metadata changes would not be detected as external changes to a database.
+    - Fixed bug: when accepting external changes and not saving before new changes are
+      detected, the previously accepted changes would also be listed.
+    - Fixed bug in Scifinder import where an empty Inventor field could overwrite the
+      author field.
+    - Fixed bug in autocompleter. Current suggested completion would be added to the field
+      if the user closed the entry editor or mouse clicked on another field.
+    - Fixed problem with exporting to some MySql versions. Patch by François Dorin. 
+    - Fixed bug in handling of LaTeX character sequences - now sequences with = as command
+      character (e.g. "\={A}") are recognized.
+    - Fixed bug: gray out / hide setting in groups panel is overridden on startup
+      by search mode selection. Added separate prefs key for the groups setting.
+      Fix suggested by Igor L. Chernyavsky.
+    - Fixed bug: cookie manager installed by Download button in file field editor throws
+      an exception when trying to fetch from Medline.
+    - Fixed bug: temporary files don't get deleted on shutdown.
+    - Disabled table column reordering in import inspection window, since a user reported
+      problems when using this.
+    - Changed years from 2008 to 2009 in splash image.
 2.5
     - Modified export layout procedure so missing formatters can be reported in the error
       output. Export now succeeds with warnings added where formatters are missing.
@@ -25,7 +94,7 @@
     - Added ~/.jabref/plugins as user-specific plugin directory.
     - Added \r marker to WrapFileLinks formatter that outputs file links without expanding
       relative links.
-    - Added [authorAlpha] key marker that formats authors according to the "alpha" BibTeX style.
+    - Added [authorsAlpha] key marker that formats authors according to the "alpha" BibTeX style.
       Patch submitted by Oliver Kopp.
     - Table sort order set by clicking and Ctrl-clicking table columns is now immediately set
       as default sort order in preferences.
diff --git a/src/txt/README b/src/txt/README
index 0d5d968..fdbc2d5 100644
--- a/src/txt/README
+++ b/src/txt/README
@@ -1,6 +1,6 @@
 
-JabRef 2.5
-----------
+JabRef 2.6 beta 2
+-----------------
 
 Introduction:
 
diff --git a/src/txt/README~ b/src/txt/README~
deleted file mode 100644
index 04f473c..0000000
--- a/src/txt/README~
+++ /dev/null
@@ -1,100 +0,0 @@
-
-JabRef 2.5 beta
----------------
-
-Introduction:
-
-JabRef is a graphical Java application for editing bibtex (.bib)
-databases. JabRef lets you organize your entries into overlapping
-logical groups, and with a single click limit your view to a single
-group or an intersection or union of several groups. You can customize
-the entry information shown in the main window, and sort by any of the
-standard Bibtex fields. JabRef can autogenerate bibtex keys for your
-entries. JabRef also lets you easily link to PDF or web sources for your
-reference entries.
-
-JabRef can import from and export to several formats, and you can
-customize export filters. JabRef can be run as a command line application
-to convert from any import format to any export format.
-
-
-License:
-JabRef is free open source software, distributed under the GNU General
-Public Licence. See the enclosed text file 'gpl.txt', or the About
-dialog, for details about the GPL.
-
-JabRef also uses libraries distributed by other porties; see the About
-box for details.
-
-
-Requirements:
-JabRef runs on any system equipped with the Java Virtual Machine
-(1.5 or newer), which can be downloaded at no cost from
-http://java.sun.com. If you do not plan to compile JabRef, the Java
-Runtime Environment may be a better choice than the Java Development
-Kit.
-
-
-Installing and running, Windows:
-JabRef is available in Windows Installer (.msi) format. To install,
-double-click the .msi file. A shortcut to JabRef will be added to your
-start menu.
-
-The Windows installation was made by Dale Visser, using the following open-source tools:
-JSmooth (.exe wrapper for Java apps), available at http://jsmooth.sf.net/
-Wix (tool for compiling MSI files from an XML specification), available at http://wix.sf.net/
-
-
-Installing and running, general:
-JabRef can be downloaded as an executable .jar file. Run the
-program as follows:
-If you are using the Java Development Kit:
-     java -jar <path to jar>
-or, if you are using the Java Runtime Environment:
-     jre -new -jar <path to jar> or
-     jrew -new -jar <path to jar>
-
-If you run JabRef under Java 1.5, you can add the option "-Dswing.aatext=true" before the
-"-jar" option, to activate antialiased text throughout the application.
-
-
-The jar file containing JabRef can be unpacked with the command:
-    jar xf <path to jar>
-or  jar xf <path to jar> <list of files to extract>
-Unpacking the jar file is not necessary to run the program.
-
-
-
-Building JabRef from source:
-Please see the INSTALL file for instructions for building from source.
-
-Documentation:
-JabRef comes with an online help function, accessed by pressing F1 or
-clicking on a question mark icon. The help files are probably not
-exhaustive enough to satisfy everyone yet, but they should help sort
-out the most important issues about using the program. The help files
-can also be viewed outside the program with a standard HTML browser.
-If you choose languages other than English, some or all help pages may
-appear in your chosen languages.
-
-
-Bug reports, suggestions, other feedback:
-We are thankful for any bug reports or other feedback. If there are
-features you want included in JabRef, tell us!
-
-
-JabRef homepage:
-http://jabref.sourceforge.net
-
-You can always get the very latest version of the program from our SVN
-repository; instructions for downloading are found on the
-homepage. Note that the SVN version may contain untested features, or
-have other stability issues.
-
-Bug submission and Open Discussions and Help forums are found at:
-http://sourceforge.net/projects/jabref
-
-
-Corresponding authors:
-mortenalver _ users.sourceforge.net
-nbatada _ users.sourceforge.net
diff --git a/src/txt/TODO b/src/txt/TODO
index 0bd5178..b053de6 100644
--- a/src/txt/TODO
+++ b/src/txt/TODO
@@ -9,13 +9,16 @@ Chris:
   
 Morten:
 
+* Look into whether incremental search could be made more persistent when search panel loses focus.
+* Fix handling of Jr particle in names.
+* Problem: when looking at group with hiding non-hits, newly created entry doesn't appear in entry editor.
+* Improve handling of SO field in CSA import (csaresults-12.txt).
+
 * Plugins like SVN plugin might need hooks for performing actions before a database is
   closed, and may need the ability to cancel the closing, and to avoid questions about
   saving changes.
 * Revisions merged into trunk after 2.4 release: 2620-2733
 
-* Documentation export formatters
-
 * Enable "Open spires entry" ("openSpires" action)? Think about better integration of this?
   Look into which viewer is used.
 * Add "Copy all externally linked files for this set of entries"-feature.
@@ -25,6 +28,5 @@ Morten:
 * [MADE WORKAROUND] Native FileDialog does not work for selecting a directory.
   - workaround is to autodisable native file dialog for dir selection.
 
-* [OK? Extension fields only] MODS exports "file" in raw form.
 * [POSTPONE] Icon selection for external file types: - select arbitrary images from disk?
 * [POSTPONE] Fix Save/Export file dialog stuff
diff --git a/src/windows/nsis/launcher.nsi b/src/windows/nsis/launcher.nsi
index 19ac3f6..9de141b 100644
--- a/src/windows/nsis/launcher.nsi
+++ b/src/windows/nsis/launcher.nsi
@@ -33,7 +33,7 @@ Section ""
   Call GetParameters
   Pop $R1
 
-  StrCpy $R0 '"$R0" -jar "${JARFILE}" $R1'
+  StrCpy $R0 '"$R0" -Xms32m -Xmx512m -jar "${JARFILE}" $R1'
  
   SetOutPath $EXEDIR
   Exec "$R0"
@@ -104,4 +104,4 @@ Function GetJRE
  JreFound:
   Pop $R1
   Exch $R0
-FunctionEnd
\ No newline at end of file
+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