[jabref] 340/459: Imported Upstream version 2.9~beta2+ds

gregor herrmann gregoa at debian.org
Thu Sep 15 20:40:57 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 f8d100fb4998554d00caa1e0d9e8a5223b953196
Author: gregor herrmann <gregoa at debian.org>
Date:   Mon Nov 19 16:44:02 2012 +0100

    Imported Upstream version 2.9~beta2+ds
---
 .classpath                                         |   42 +
 .gitignore                                         |    1 +
 .idea/.name                                        |    1 +
 .idea/ant.xml                                      |   15 +
 .idea/compiler.xml                                 |   21 +
 .idea/copyright/profiles_settings.xml              |    5 +
 .idea/encodings.xml                                |    5 +
 .idea/libraries/jersey.xml                         |   13 +
 .idea/libraries/lib.xml                            |   19 +
 .idea/libraries/oo.xml                             |   12 +
 .idea/libraries/plugin.xml                         |   14 +
 .idea/libraries/sciplore.xml                       |   10 +
 .idea/misc.xml                                     |   30 +
 .idea/modules.xml                                  |    9 +
 .idea/scopes/scope_settings.xml                    |    5 +
 .idea/uiDesigner.xml                               |  125 ++
 .idea/vcs.xml                                      |    8 +
 .idea/workspace.xml                                |  779 +++++++++
 .project                                           |   17 +
 JabRef - MrDlib.userlibraries                      |   25 -
 build.gradle                                       |   15 -
 build.number                                       |    4 +-
 build.xml                                          |  133 +-
 buildlib/jarbundler-2.2.0.jar                      |  Bin 0 -> 18509 bytes
 jabref.ebuild                                      |   79 +
 osx/JavaApplicationStub                            |  Bin 0 -> 61376 bytes
 osx/OSXAdapter.class                               |  Bin 0 -> 1815 bytes
 src/Jabref.iml                                     |   19 +
 src/help/ACMPortalHelp.html                        |    8 +-
 src/help/About.html                                |   12 +-
 src/help/Contents.html                             |    5 +-
 src/help/DOItoBibTeXHelp.html                      |   20 +
 src/help/DiVAtoBibTeXHelp.html                     |   22 +
 src/help/GoogleScholarHelp.html                    |   23 +
 src/help/IEEEXploreHelp.html                       |    2 +-
 src/help/ISBNtoBibTeXHelp.html                     |    2 +-
 src/help/RevisionHistory.html                      |   31 +
 src/help/da/About.html                             |    9 +-
 src/help/de/About.html                             |    7 +-
 src/help/fr/About.html                             |    3 +-
 src/help/fr/Contents.html                          |    4 +
 src/help/fr/DOItoBibTeXHelp.html                   |   24 +
 src/help/fr/GoogleScholarHelp.html                 |   26 +
 src/help/fr/ISBNtoBibTeXHelp.html                  |   23 +
 src/help/fr/RevisionHistory.html                   |   57 +
 src/help/fr/SpecialFieldsHelp.html                 |   50 +
 src/help/in/About.html                             |    7 +-
 src/help/ja/About.html                             |    7 +-
 src/help/jgoodies.html                             |    2 +-
 src/images/JabRef-Logo.icns                        |  Bin 35556 -> 194699 bytes
 src/images/JabRef-icon-mac.svg                     |   59 +
 src/images/reference_list.xcf                      |  Bin 0 -> 553160 bytes
 src/java/net/sf/jabref/AdvancedTab.java            |   36 +-
 src/java/net/sf/jabref/BasePanel.java              |   20 +-
 src/java/net/sf/jabref/BibLatexEntryTypes.java     |   36 +
 src/java/net/sf/jabref/BibtexEntryType.java        |   48 +
 src/java/net/sf/jabref/ContentSelectorDialog2.java |    4 +-
 src/java/net/sf/jabref/EntryTypeDialog.java        |   31 +-
 src/java/net/sf/jabref/ExternalTab.java            |   45 +-
 .../net/sf/jabref/FindUnlinkedFilesDialog.java     |   71 +-
 src/java/net/sf/jabref/GUIGlobals.java             |   10 +-
 src/java/net/sf/jabref/GeneralTab.java             |    4 +-
 src/java/net/sf/jabref/Globals.java                |   47 +-
 src/java/net/sf/jabref/JabRef.java                 |  207 +--
 src/java/net/sf/jabref/JabRefFrame.java            |   26 +-
 src/java/net/sf/jabref/JabRefMain.java             |   10 +-
 src/java/net/sf/jabref/JabRefPreferences.java      |    3 +
 src/java/net/sf/jabref/PrefsDialog3.java           |    4 +-
 src/java/net/sf/jabref/SearchManager2.java         |    6 +-
 src/java/net/sf/jabref/SidePaneComponent.java      |    1 +
 src/java/net/sf/jabref/SidePaneHeader.java         |  119 --
 src/java/net/sf/jabref/TableColumnsTab.java        |    4 +-
 src/java/net/sf/jabref/Util.java                   |   64 +-
 src/java/net/sf/jabref/bst/.gitignore              |    1 +
 src/java/net/sf/jabref/bst/{bst.g => Bst.g}        |   34 +-
 src/java/net/sf/jabref/bst/BstLexer.java           | 1713 ++++++++------------
 src/java/net/sf/jabref/bst/BstParser.java          | 1396 +++++++++-------
 .../net/sf/jabref/export/CustomExportDialog.java   |    4 +-
 .../net/sf/jabref/export/CustomExportList.java     |    4 +-
 .../jabref/export/ExportCustomizationDialog.java   |    4 +-
 src/java/net/sf/jabref/export/FileActions.java     |    2 +-
 .../net/sf/jabref/export/LatexFieldFormatter.java  |    5 +-
 .../external/AutoSetExternalFileForEntries.java    |    7 +-
 .../net/sf/jabref/external/DroppedFileHandler.java |    3 +-
 .../net/sf/jabref/external/ExternalFilePanel.java  |   20 +-
 .../sf/jabref/external/ExternalFileTypeEditor.java |    4 +-
 .../external/ExternalFileTypeEntryEditor.java      |    4 +-
 src/java/net/sf/jabref/external/IconSelection.java |    4 +-
 .../jabref/external/PushToApplicationButton.java   |    4 +-
 src/java/net/sf/jabref/external/PushToVim.java     |    4 +-
 .../sf/jabref/external/SynchronizeFileField.java   |    7 +-
 .../sf/jabref/external/UpgradeExternalLinks.java   |   48 -
 .../net/sf/jabref/external/WriteXMPAction.java     |    4 +-
 .../net/sf/jabref/groups/AddToGroupAction.java     |    4 +-
 src/java/net/sf/jabref/groups/AutoGroupDialog.java |   12 +-
 .../jabref/groups/EntryTableTransferHandler.java   |    5 +-
 src/java/net/sf/jabref/groups/ExplicitGroup.java   |    6 +-
 src/java/net/sf/jabref/groups/GroupDialog.java     |    4 +-
 src/java/net/sf/jabref/groups/GroupSelector.java   |    6 +-
 src/java/net/sf/jabref/groups/KeywordGroup.java    |   16 +-
 src/java/net/sf/jabref/groups/SearchGroup.java     |   12 +-
 .../jabref/groups/UnsupportedVersionException.java |    3 +-
 src/java/net/sf/jabref/groups/VersionHandling.java |    4 +-
 src/java/net/sf/jabref/gui/AttachFileDialog.java   |    6 +-
 .../net/sf/jabref/gui/BibtexKeyPatternDialog.java  |    4 +-
 src/java/net/sf/jabref/gui/CleanUpAction.java      |  155 +-
 .../sf/jabref/gui/DatabasePropertiesDialog.java    |    4 +-
 src/java/net/sf/jabref/gui/DragDropPopupPane.java  |    2 +-
 .../sf/jabref/gui/EntryCustomizationDialog2.java   |    4 +-
 .../net/sf/jabref/gui/FetcherPreviewDialog.java    |  271 ++++
 src/java/net/sf/jabref/gui/FieldWeightDialog.java  |    4 +-
 .../net/sf/jabref/gui/FileListEntryEditor.java     |    4 +-
 .../net/sf/jabref/gui/GenFieldsCustomizer.java     |    4 +-
 .../net/sf/jabref/gui/ImportInspectionDialog.java  |    6 +-
 .../net/sf/jabref/gui/WaitForSaveOperation.java    |    4 +-
 .../net/sf/jabref/imports/ACMPortalFetcher.java    |  331 ++--
 src/java/net/sf/jabref/imports/ADSFetcher.java     |  176 ++
 src/java/net/sf/jabref/imports/BibtexParser.java   |    6 +-
 src/java/net/sf/jabref/imports/CaseKeeper.java     |   61 +
 src/java/net/sf/jabref/imports/CaseKeeperList.java |  395 +++++
 .../net/sf/jabref/imports/DOItoBibTeXFetcher.java  |  140 ++
 .../net/sf/jabref/imports/DiVAtoBibTeXFetcher.java |  143 ++
 .../imports/EntryFromFileCreatorManager.java       |   49 +-
 src/java/net/sf/jabref/imports/GeneralFetcher.java |  106 +-
 .../sf/jabref/imports/GoogleScholarFetcher.java    |  260 ++-
 src/java/net/sf/jabref/imports/HTMLConverter.java  |  614 ++++++-
 .../net/sf/jabref/imports/IEEEXploreFetcher.java   |  131 +-
 .../jabref/imports/ImportCustomizationDialog.java  |    4 +-
 src/java/net/sf/jabref/imports/OAI2Fetcher.java    |   20 +-
 .../net/sf/jabref/imports/OpenDatabaseAction.java  |    4 +-
 .../net/sf/jabref/imports/PdfContentImporter.java  |   38 +-
 .../net/sf/jabref/imports/PreviewEntryFetcher.java |   31 +
 src/java/net/sf/jabref/imports/ZipFileChooser.java |    2 +-
 .../sf/jabref/journals/ManageJournalsPanel.java    |    6 +-
 .../labelPattern/ResolveDuplicateLabelDialog.java  |    4 +-
 src/java/net/sf/jabref/net/CookieHandlerImpl.java  |    9 +-
 src/java/net/sf/jabref/net/URLDownload.java        |    1 -
 src/java/net/sf/jabref/oo/AdvancedCiteDialog.java  |    4 +-
 src/java/net/sf/jabref/oo/CitationManager.java     |    6 +-
 src/java/net/sf/jabref/oo/OpenOfficePanel.java     |    6 +-
 src/java/net/sf/jabref/oo/StyleSelectDialog.java   |    6 +-
 .../net/sf/jabref/plugin/ManagePluginsDialog.java  |    4 +-
 src/java/net/sf/jabref/remote/RemoteListener.java  |    5 +-
 src/java/net/sf/jabref/specialfields/Quality.java  |    2 +-
 .../SpecialFieldDatabaseChangeListener.java        |    2 +-
 src/java/net/sf/jabref/sql/DBConnectDialog.java    |    4 +-
 .../net/sf/jabref/sql/DBImportExportDialog.java    |    4 +-
 src/java/net/sf/jabref/sql/SQLUtil.java            |    2 +-
 .../sf/jabref/sql/exporter/PostgreSQLExporter.java |    2 +-
 .../net/sf/jabref/undo/CountingUndoManager.java    |   13 -
 .../net/sf/jabref/undo/UndoableInsertEntry.java    |   50 +-
 src/java/net/sf/jabref/util/ErrorConsole.java      |   96 +-
 src/java/net/sf/jabref/util/FileNameCleaner.java   |   45 +
 .../net/sf/jabref/util/ManageKeywordsAction.java   |    4 +-
 .../net/sf/jabref/util/MassSetFieldAction.java     |    4 +-
 .../jabref/wizard/auximport/gui/FromAuxDialog.java |    4 +-
 .../sf/jabref/wizard/text/gui/TextInputDialog.java |    4 +-
 src/java/spl/gui/ImportDialog.java                 |    4 +-
 src/java/spl/gui/MetaDataListDialog.java           |    6 +-
 src/plugins/net.sf.jabref.core/plugin.xml          |   37 +-
 src/resource/JabRef_da.properties                  |  152 +-
 src/resource/JabRef_de.properties                  |  155 +-
 src/resource/JabRef_en.properties                  |  108 +-
 src/resource/JabRef_fr.properties                  |  110 +-
 src/resource/JabRef_in.properties                  |  108 +-
 src/resource/JabRef_it.properties                  |  258 ++-
 src/resource/JabRef_ja.properties                  |  112 +-
 src/resource/JabRef_nl.properties                  |  109 +-
 src/resource/JabRef_no.properties                  |  116 +-
 src/resource/JabRef_pt_BR.properties               |  109 +-
 src/resource/JabRef_tr.properties                  |  112 +-
 src/resource/JabRef_vi.properties                  |  109 +-
 src/resource/JabRef_zh.properties                  |  108 +-
 src/resource/Menu_it.properties                    |    2 +-
 src/resource/build.properties                      |    6 +-
 src/txt/CHANGELOG                                  |   31 +
 src/txt/README                                     |    4 +-
 src/windows/nsis/setup.nsi                         |  105 +-
 178 files changed, 7888 insertions(+), 3188 deletions(-)

diff --git a/.classpath b/.classpath
new file mode 100644
index 0000000..13fe71e
--- /dev/null
+++ b/.classpath
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src/java"/>
+	<classpathentry excluding="extensions/|java/|osx/|osx/osxadapter/|txt/|windows/" kind="src" path="src"/>
+	<classpathentry exported="true" kind="lib" path="lib/plugin/commons-logging.jar"/>
+	<classpathentry exported="true" kind="lib" path="lib/spin.jar"/>
+	<classpathentry exported="true" kind="lib" path="lib/microba.jar"/>
+	<classpathentry exported="true" kind="lib" path="lib/antlr.jar"/>
+	<classpathentry exported="true" kind="lib" path="lib/plugin/jpf.jar"/>
+	<classpathentry exported="true" kind="lib" path="lib/plugin/jpf-boot.jar"/>
+	<classpathentry exported="true" kind="lib" path="lib/plugin/JPFCodeGenerator-rt.jar" sourcepath="/JPFCodeGenerator/src"/>
+	<classpathentry exported="true" kind="lib" path="lib/glazedlists-1.8.0_java15.jar"/>
+	<classpathentry kind="lib" path="lib/mysql-connector-java-5.0.7-bin.jar"/>
+	<classpathentry kind="lib" path="lib/spl/sciplore/xstream-1.4.1.jar"/>
+	<classpathentry kind="lib" path="lib/spl/sciplore/mrDlib-serialization-api.jar" sourcepath="/Serialization API"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6">
+		<accessrules>
+			<accessrule kind="accessible" pattern="**"/>
+		</accessrules>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/3"/>
+	<classpathentry exported="true" kind="con" path="org.eclipse.jdt.USER_LIBRARY/resources"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/sciplore"/>
+	<classpathentry kind="lib" path="lib/spl/jersey/mimepull-1.3.jar"/>
+	<classpathentry kind="lib" path="lib/oo/juh.jar"/>
+	<classpathentry kind="lib" path="lib/oo/jurt.jar"/>
+	<classpathentry kind="lib" path="lib/oo/ridl.jar"/>
+	<classpathentry kind="lib" path="lib/oo/unoil.jar"/>
+	<classpathentry kind="lib" path="lib/spl/jersey/jersey-client-1.14.jar"/>
+	<classpathentry kind="lib" path="lib/spl/jersey/jersey-core-1.14.jar"/>
+	<classpathentry kind="lib" path="lib/spl/jersey/jersey-multipart-1.14.jar"/>
+	<classpathentry kind="lib" path="lib/antlr-3.4-complete.jar"/>
+	<classpathentry kind="lib" path="lib/jgoodies-common-1.4.0.jar"/>
+	<classpathentry kind="lib" path="lib/jgoodies-forms-1.6.0.jar"/>
+	<classpathentry kind="lib" path="lib/jgoodies-looks-2.5.2.jar"/>
+	<classpathentry kind="lib" path="lib/fontbox-1.7.1.jar"/>
+	<classpathentry kind="lib" path="lib/jempbox-1.7.1.jar"/>
+	<classpathentry kind="lib" path="lib/pdfbox-1.7.1.jar"/>
+	<classpathentry kind="lib" path="lib/jayatana-1.2.4.jar"/>
+	<classpathentry kind="lib" path="lib/postgresql-9.2-1002.jdbc4.jar"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..08a55c0
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+.gradle
diff --git a/.idea/.name b/.idea/.name
new file mode 100644
index 0000000..0fb0660
--- /dev/null
+++ b/.idea/.name
@@ -0,0 +1 @@
+JabRef
\ No newline at end of file
diff --git a/.idea/ant.xml b/.idea/ant.xml
new file mode 100644
index 0000000..4674eea
--- /dev/null
+++ b/.idea/ant.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project 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="2" />
+      <properties />
+    </buildFile>
+  </component>
+</project>
+
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
new file mode 100644
index 0000000..a1b41c5
--- /dev/null
+++ b/.idea/compiler.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="CompilerConfiguration">
+    <option name="DEFAULT_COMPILER" value="Javac" />
+    <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>
+    <annotationProcessing enabled="false" useClasspath="true" />
+  </component>
+</project>
+
diff --git a/.idea/copyright/profiles_settings.xml b/.idea/copyright/profiles_settings.xml
new file mode 100644
index 0000000..3572571
--- /dev/null
+++ b/.idea/copyright/profiles_settings.xml
@@ -0,0 +1,5 @@
+<component name="CopyrightManager">
+  <settings default="">
+    <module2copyright />
+  </settings>
+</component>
\ No newline at end of file
diff --git a/.idea/encodings.xml b/.idea/encodings.xml
new file mode 100644
index 0000000..e206d70
--- /dev/null
+++ b/.idea/encodings.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="Encoding" useUTFGuessing="true" native2AsciiForPropertiesFiles="false" />
+</project>
+
diff --git a/.idea/libraries/jersey.xml b/.idea/libraries/jersey.xml
new file mode 100644
index 0000000..a86f467
--- /dev/null
+++ b/.idea/libraries/jersey.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="jersey">
+    <CLASSES>
+      <root url="jar://$PROJECT_DIR$/lib/spl/jersey/jersey-multipart-1.1.5.1.jar!/" />
+      <root url="jar://$PROJECT_DIR$/lib/spl/jersey/jersey-core-1.1.5.1.jar!/" />
+      <root url="jar://$PROJECT_DIR$/lib/spl/jersey/mimepull-1.3.jar!/" />
+      <root url="jar://$PROJECT_DIR$/lib/spl/jersey/jersey-client-1.1.5.1.jar!/" />
+      <root url="jar://$PROJECT_DIR$/lib/spl/jersey/jsr311-api-1.1.1.jar!/" />
+    </CLASSES>
+    <JAVADOC />
+    <SOURCES />
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/lib.xml b/.idea/libraries/lib.xml
new file mode 100644
index 0000000..ffb7135
--- /dev/null
+++ b/.idea/libraries/lib.xml
@@ -0,0 +1,19 @@
+<component name="libraryTable">
+  <library name="lib">
+    <CLASSES>
+      <root url="jar://$PROJECT_DIR$/lib/mysql-connector-java-5.0.7-bin.jar!/" />
+      <root url="jar://$PROJECT_DIR$/lib/spin.jar!/" />
+      <root url="jar://$PROJECT_DIR$/lib/microba.jar!/" />
+      <root url="jar://$PROJECT_DIR$/lib/antlr.jar!/" />
+      <root url="jar://$PROJECT_DIR$/lib/glazedlists-1.8.0_java15.jar!/" />
+      <root url="jar://$PROJECT_DIR$/lib/antlr-3.4-complete.jar!/" />
+      <root url="jar://$PROJECT_DIR$/lib/fontbox-1.7.1.jar!/" />
+      <root url="jar://$PROJECT_DIR$/lib/jgoodies-common-1.4.0.jar!/" />
+      <root url="jar://$PROJECT_DIR$/lib/jgoodies-forms-1.6.0.jar!/" />
+      <root url="jar://$PROJECT_DIR$/lib/jgoodies-looks-2.5.2.jar!/" />
+      <root url="jar://$PROJECT_DIR$/lib/pdfbox-1.7.1.jar!/" />
+    </CLASSES>
+    <JAVADOC />
+    <SOURCES />
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/oo.xml b/.idea/libraries/oo.xml
new file mode 100644
index 0000000..ae80dd4
--- /dev/null
+++ b/.idea/libraries/oo.xml
@@ -0,0 +1,12 @@
+<component name="libraryTable">
+  <library name="oo">
+    <CLASSES>
+      <root url="jar://$PROJECT_DIR$/lib/oo/unoil.jar!/" />
+      <root url="jar://$PROJECT_DIR$/lib/oo/juh.jar!/" />
+      <root url="jar://$PROJECT_DIR$/lib/oo/jurt.jar!/" />
+      <root url="jar://$PROJECT_DIR$/lib/oo/ridl.jar!/" />
+    </CLASSES>
+    <JAVADOC />
+    <SOURCES />
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/plugin.xml b/.idea/libraries/plugin.xml
new file mode 100644
index 0000000..529a8de
--- /dev/null
+++ b/.idea/libraries/plugin.xml
@@ -0,0 +1,14 @@
+<component name="libraryTable">
+  <library name="plugin">
+    <CLASSES>
+      <root url="jar://$PROJECT_DIR$/lib/plugin/JPFCodeGenerator-rt.jar!/" />
+      <root url="jar://$PROJECT_DIR$/lib/plugin/jpf-boot.jar!/" />
+      <root url="jar://$PROJECT_DIR$/lib/plugin/commons-logging.jar!/" />
+      <root url="jar://$PROJECT_DIR$/lib/plugin/jpf.jar!/" />
+      <root url="jar://$PROJECT_DIR$/lib/plugin/velocity-dep-1.5.jar!/" />
+      <root url="jar://$PROJECT_DIR$/lib/plugin/JPFCodeGenerator.jar!/" />
+    </CLASSES>
+    <JAVADOC />
+    <SOURCES />
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/sciplore.xml b/.idea/libraries/sciplore.xml
new file mode 100644
index 0000000..0c9b450
--- /dev/null
+++ b/.idea/libraries/sciplore.xml
@@ -0,0 +1,10 @@
+<component name="libraryTable">
+  <library name="sciplore">
+    <CLASSES>
+      <root url="jar://$PROJECT_DIR$/lib/spl/sciplore/mrDlib-serialization-api.jar!/" />
+      <root url="jar://$PROJECT_DIR$/lib/spl/sciplore/xstream-1.4.1.jar!/" />
+    </CLASSES>
+    <JAVADOC />
+    <SOURCES />
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..b1fa7e1
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="EntryPointsManager">
+    <entry_points version="2.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="ProjectResources">
+    <default-html-doctype>http://www.w3.org/1999/xhtml</default-html-doctype>
+  </component>
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_5" assert-keyword="true" jdk-15="true" project-jdk-name="1.7" project-jdk-type="JavaSDK">
+    <output url="file://$PROJECT_DIR$/out" />
+  </component>
+</project>
+
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..603f0d9
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectModuleManager">
+    <modules>
+      <module fileurl="file://$PROJECT_DIR$/src/Jabref.iml" filepath="$PROJECT_DIR$/src/Jabref.iml" />
+    </modules>
+  </component>
+</project>
+
diff --git a/.idea/scopes/scope_settings.xml b/.idea/scopes/scope_settings.xml
new file mode 100644
index 0000000..922003b
--- /dev/null
+++ b/.idea/scopes/scope_settings.xml
@@ -0,0 +1,5 @@
+<component name="DependencyValidationManager">
+  <state>
+    <option name="SKIP_IMPORT_STATEMENTS" value="false" />
+  </state>
+</component>
\ No newline at end of file
diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml
new file mode 100644
index 0000000..3b00020
--- /dev/null
+++ b/.idea/uiDesigner.xml
@@ -0,0 +1,125 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="Palette2">
+    <group name="Swing">
+      <item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
+      </item>
+      <item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
+      </item>
+      <item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
+      </item>
+      <item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.png" removable="false" auto-create-binding="false" can-attach-label="true">
+        <default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
+      </item>
+      <item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
+        <initial-values>
+          <property name="text" value="Button" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
+        <initial-values>
+          <property name="text" value="RadioButton" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
+        <initial-values>
+          <property name="text" value="CheckBox" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
+        <initial-values>
+          <property name="text" value="Label" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+          <preferred-size width="150" height="-1" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+          <preferred-size width="150" height="-1" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+          <preferred-size width="150" height="-1" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
+      </item>
+      <item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
+          <preferred-size width="200" height="200" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
+          <preferred-size width="200" height="200" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
+      </item>
+      <item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
+      </item>
+      <item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
+      </item>
+      <item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
+      </item>
+      <item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
+          <preferred-size width="-1" height="20" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
+      </item>
+      <item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
+      </item>
+    </group>
+  </component>
+</project>
+
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..2e0588c
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="VcsDirectoryMappings">
+    <mapping directory="" vcs="" />
+    <mapping directory="$PROJECT_DIR$/.." vcs="Git" />
+  </component>
+</project>
+
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
new file mode 100644
index 0000000..31026f0
--- /dev/null
+++ b/.idea/workspace.xml
@@ -0,0 +1,779 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ChangeListManager">
+    <list default="true" id="110fad89-c760-4067-8a03-8bd14c0eb411" name="Default" comment="" />
+    <ignored path="JabRef.iws" />
+    <ignored path=".idea/workspace.xml" />
+    <option name="TRACKING_ENABLED" value="true" />
+    <option name="SHOW_DIALOG" value="false" />
+    <option name="HIGHLIGHT_CONFLICTS" value="true" />
+    <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
+    <option name="LAST_RESOLUTION" value="IGNORE" />
+  </component>
+  <component name="ChangesViewManager" flattened_view="true" show_ignored="false" />
+  <component name="CreatePatchCommitExecutor">
+    <option name="PATCH_PATH" value="" />
+  </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="_JabRefPlugin.java" pinned="false" current="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/java/net/sf/jabref/plugin/core/generated/_JabRefPlugin.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state line="178" column="32" selection-start="6134" selection-end="6134" vertical-scroll-proportion="0.0">
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="JabRefPlugin.java" pinned="false" current="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/java/net/sf/jabref/plugin/core/JabRefPlugin.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state line="29" column="13" selection-start="1222" selection-end="1222" vertical-scroll-proportion="0.0">
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="PluginCore.java" pinned="false" current="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/java/net/sf/jabref/plugin/PluginCore.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state line="83" column="10" selection-start="3097" selection-end="3097" vertical-scroll-proportion="0.0">
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="BibtexParser.java" pinned="false" current="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/java/net/sf/jabref/imports/BibtexParser.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state line="378" column="46" selection-start="11423" selection-end="11423" vertical-scroll-proportion="0.0">
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="Globals.java" pinned="false" current="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/java/net/sf/jabref/Globals.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state line="1020" column="42" selection-start="39393" selection-end="39393" 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="100" column="33" selection-start="3911" selection-end="3911" vertical-scroll-proportion="0.0">
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="Util.java" pinned="false" current="true" current-in-tab="true">
+        <entry file="file://$PROJECT_DIR$/src/java/net/sf/jabref/Util.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state line="3168" column="16" selection-start="106476" selection-end="106476" vertical-scroll-proportion="0.14893617">
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="HTMLConverter.java" pinned="false" current="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/java/net/sf/jabref/imports/HTMLConverter.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state line="62" column="71" selection-start="3587" selection-end="3587" vertical-scroll-proportion="0.0">
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="EntryEditor.java" pinned="false" current="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/java/net/sf/jabref/EntryEditor.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state line="1418" column="38" selection-start="54407" selection-end="54407" vertical-scroll-proportion="0.0">
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="LabelPatternUtil.java" pinned="false" current="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/java/net/sf/jabref/labelPattern/LabelPatternUtil.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state line="170" column="27" selection-start="6273" selection-end="6273" 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="Git.Settings">
+    <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$/.." />
+  </component>
+  <component name="GradleLocalSettings">
+    <option name="expandStates">
+      <map>
+        <entry key="JabRef" value="true" />
+      </map>
+    </option>
+  </component>
+  <component name="IdeDocumentHistory">
+    <option name="changedFiles">
+      <list>
+        <option value="$PROJECT_DIR$/src/plugins/net.sf.jabref.core/plugin.xml" />
+        <option value="$PROJECT_DIR$/src/java/net/sf/jabref/net/URLDownload.java" />
+        <option value="$PROJECT_DIR$/src/txt/CHANGELOG" />
+        <option value="$PROJECT_DIR$/src/java/net/sf/jabref/imports/PreviewEntryFetcher.java" />
+        <option value="$PROJECT_DIR$/src/java/net/sf/jabref/gui/FetcherPreviewDialog.java" />
+        <option value="$PROJECT_DIR$/src/java/net/sf/jabref/imports/GoogleScholarFetcher.java" />
+        <option value="$PROJECT_DIR$/src/java/net/sf/jabref/imports/ACMPortalFetcher.java" />
+        <option value="$PROJECT_DIR$/src/java/net/sf/jabref/JabRefFrame.java" />
+        <option value="$PROJECT_DIR$/src/java/net/sf/jabref/imports/GeneralFetcher.java" />
+        <option value="$PROJECT_DIR$/src/help/ACMPortalHelp.html" />
+        <option value="$PROJECT_DIR$/src/help/GoogleScholarHelp.html" />
+        <option value="$PROJECT_DIR$/src/java/net/sf/jabref/plugin/core/generated/_JabRefPlugin.java" />
+        <option value="$PROJECT_DIR$/src/java/net/sf/jabref/plugin/PluginCore.java" />
+        <option value="$PROJECT_DIR$/src/java/net/sf/jabref/imports/BibtexParser.java" />
+        <option value="$PROJECT_DIR$/src/java/net/sf/jabref/JabRef.java" />
+        <option value="$PROJECT_DIR$/src/java/net/sf/jabref/Util.java" />
+      </list>
+    </option>
+  </component>
+  <component name="MavenRunner">
+    <option name="jreName" value="1.6" />
+  </component>
+  <component name="ModuleEditorState">
+    <option name="LAST_EDITED_MODULE_NAME" />
+    <option name="LAST_EDITED_TAB_NAME" />
+  </component>
+  <component name="ProjectFrameBounds">
+    <option name="y" value="31" />
+    <option name="width" value="1366" />
+    <option name="height" value="737" />
+  </component>
+  <component name="ProjectInspectionProfilesVisibleTreeState">
+    <entry key="Project Default">
+      <profile-state>
+        <expanded-state>
+          <State>
+            <id />
+          </State>
+        </expanded-state>
+        <selected-state>
+          <State>
+            <id>Abstraction issues</id>
+          </State>
+        </selected-state>
+      </profile-state>
+    </entry>
+  </component>
+  <component name="ProjectLevelVcsManager" settingsEditedManually="true">
+    <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="ProjectReloadState">
+    <option name="STATE" value="0" />
+  </component>
+  <component name="ProjectView">
+    <navigator currentView="ProjectPane" proportions="" version="1" splitterProportion="0.5">
+      <flattenPackages />
+      <showMembers />
+      <showModules />
+      <showLibraryContents />
+      <hideEmptyPackages />
+      <abbreviatePackageNames />
+      <autoscrollToSource />
+      <autoscrollFromSource />
+      <sortByType />
+    </navigator>
+    <panes>
+      <pane id="Scope">
+        <subPane subId="Project Files">
+          <PATH>
+            <PATH_ELEMENT USER_OBJECT="Root">
+              <option name="myItemId" value="" />
+              <option name="myItemType" value="" />
+            </PATH_ELEMENT>
+          </PATH>
+        </subPane>
+      </pane>
+      <pane id="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="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="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="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>
+      </pane>
+      <pane id="PackagesPane">
+        <subPane>
+          <PATH>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="JabRef" />
+              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PackageViewProjectNode" />
+            </PATH_ELEMENT>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="Jabref" />
+              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PackageViewModuleNode" />
+            </PATH_ELEMENT>
+          </PATH>
+        </subPane>
+      </pane>
+      <pane id="Favorites" />
+    </panes>
+  </component>
+  <component name="PropertiesComponent">
+    <property name="project.structure.last.edited" value="Libraries" />
+    <property name="GoToFile.includeJavaFiles" value="false" />
+    <property name="project.structure.proportion" value="0.15" />
+    <property name="OverrideImplement.combined" value="true" />
+    <property name="options.splitter.main.proportions" value="0.3" />
+    <property name="RESOURCE_BUNDLE_SPLITTER_PROPORTION" value="0.5" />
+    <property name="recentsLimit" value="5" />
+    <property name="MemberChooser.sorted" value="false" />
+    <property name="options.lastSelected" value="editor.preferences.appearance" />
+    <property name="project.structure.side.proportion" value="0.2" />
+    <property name="GoToClass.includeJavaFiles" value="false" />
+    <property name="MemberChooser.copyJavadoc" value="false" />
+    <property name="GoToClass.toSaveIncludeLibraries" value="false" />
+    <property name="MemberChooser.showClasses" value="true" />
+    <property name="GoToClass.includeLibraries" value="false" />
+    <property name="options.splitter.details.proportions" value="0.2" />
+    <property name="options.searchVisible" value="true" />
+    <property name="dynamic.classpath" value="false" />
+  </component>
+  <component name="RunManager" selected="Application.JabRef">
+    <configuration default="false" name="FetcherPreviewDialog" type="Application" factoryName="Application" temporary="true">
+      <option name="MAIN_CLASS_NAME" value="net.sf.jabref.gui.FetcherPreviewDialog" />
+      <option name="VM_PARAMETERS" value="" />
+      <option name="PROGRAM_PARAMETERS" value="" />
+      <option name="WORKING_DIRECTORY" value="file://$PROJECT_DIR$" />
+      <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
+      <option name="ALTERNATIVE_JRE_PATH" value="" />
+      <option name="ENABLE_SWING_INSPECTOR" value="false" />
+      <option name="ENV_VARIABLES" />
+      <option name="PASS_PARENT_ENVS" value="true" />
+      <module name="Jabref" />
+      <envs />
+      <RunnerSettings RunnerId="Run" />
+      <ConfigurationWrapper RunnerId="Run" />
+      <method />
+    </configuration>
+    <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" />
+      <method>
+        <option name="AntTarget" enabled="false" />
+        <option name="BuildArtifacts" enabled="false" />
+        <option name="Maven.BeforeRunTask" enabled="false" />
+      </method>
+    </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" />
+      <method>
+        <option name="AntTarget" enabled="false" />
+        <option name="BuildArtifacts" enabled="false" />
+        <option name="Make" enabled="true" />
+        <option name="Maven.BeforeRunTask" enabled="false" />
+      </method>
+    </configuration>
+    <configuration default="true" type="Application" factoryName="Application">
+      <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 />
+      <method>
+        <option name="AntTarget" enabled="false" />
+        <option name="BuildArtifacts" enabled="false" />
+        <option name="Make" enabled="true" />
+        <option name="Maven.BeforeRunTask" enabled="false" />
+      </method>
+    </configuration>
+    <configuration default="true" type="JUnit" factoryName="JUnit">
+      <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="TEST_SEARCH_SCOPE">
+        <value defaultName="moduleWithDependencies" />
+      </option>
+      <envs />
+      <patterns />
+      <method>
+        <option name="AntTarget" enabled="false" />
+        <option name="BuildArtifacts" enabled="false" />
+        <option name="Make" enabled="true" />
+        <option name="Maven.BeforeRunTask" enabled="false" />
+      </method>
+    </configuration>
+    <configuration default="false" name="JabRef" type="Application" factoryName="Application">
+      <option name="MAIN_CLASS_NAME" value="net.sf.jabref.JabRef" />
+      <option name="VM_PARAMETERS" value="" />
+      <option name="PROGRAM_PARAMETERS" value="" />
+      <option name="WORKING_DIRECTORY" value="file://$PROJECT_DIR$" />
+      <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
+      <option name="ALTERNATIVE_JRE_PATH" value="" />
+      <option name="ENABLE_SWING_INSPECTOR" value="false" />
+      <option name="ENV_VARIABLES" />
+      <option name="PASS_PARENT_ENVS" value="true" />
+      <module name="Jabref" />
+      <envs />
+      <RunnerSettings RunnerId="Run" />
+      <ConfigurationWrapper RunnerId="Run" />
+      <method />
+    </configuration>
+    <list size="2">
+      <item index="0" class="java.lang.String" itemvalue="Application.FetcherPreviewDialog" />
+      <item index="1" class="java.lang.String" itemvalue="Application.JabRef" />
+    </list>
+    <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="SliceManager">
+    <option name="analysisUIOptions">
+      <AnalysisUIOptions />
+    </option>
+  </component>
+  <component name="StructureViewFactory">
+    <option name="ACTIVE_ACTIONS" value="ALPHA_COMPARATOR" />
+  </component>
+  <component name="SvnConfiguration" maxAnnotateRevisions="500" myUseAcceleration="nothing" myAutoUpdateAfterCommit="false" cleanupOnStartRun="false">
+    <option name="USER" value="" />
+    <option name="PASSWORD" value="" />
+    <option name="mySSHConnectionTimeout" value="30000" />
+    <option name="mySSHReadTimeout" value="30000" />
+    <option name="LAST_MERGED_REVISION" />
+    <option name="MERGE_DRY_RUN" value="false" />
+    <option name="MERGE_DIFF_USE_ANCESTRY" value="true" />
+    <option name="UPDATE_LOCK_ON_DEMAND" value="false" />
+    <option name="IGNORE_SPACES_IN_MERGE" value="false" />
+    <option name="DETECT_NESTED_COPIES" value="true" />
+    <option name="CHECK_NESTED_FOR_QUICK_MERGE" value="false" />
+    <option name="IGNORE_SPACES_IN_ANNOTATE" value="true" />
+    <option name="SHOW_MERGE_SOURCES_IN_ANNOTATE" value="true" />
+    <option name="FORCE_UPDATE" value="false" />
+    <option name="IGNORE_EXTERNALS" value="false" />
+    <configuration useDefault="true">$USER_HOME$/.subversion_IDEA</configuration>
+    <myIsUseDefaultProxy>false</myIsUseDefaultProxy>
+  </component>
+  <component name="TaskManager">
+    <task active="true" id="Default" summary="Default task">
+      <changelist id="110fad89-c760-4067-8a03-8bd14c0eb411" name="Default" comment="" />
+      <created>1329409618362</created>
+      <updated>1329409618362</updated>
+    </task>
+    <servers />
+  </component>
+  <component name="ToolWindowManager">
+    <frame x="0" y="31" width="1366" height="737" extended-state="6" />
+    <editor active="false" />
+    <layout>
+      <window_info id="Changes" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32847896" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
+      <window_info id="JetGradle" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32928678" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
+      <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" content_ui="tabs" />
+      <window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.1107739" sideWeight="0.7815534" order="1" side_tool="false" content_ui="tabs" />
+      <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" content_ui="tabs" />
+      <window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="true" content_ui="tabs" />
+      <window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="2" side_tool="true" content_ui="tabs" />
+      <window_info id="Version Control" 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" content_ui="tabs" />
+      <window_info id="Messages" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.2184466" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
+      <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" content_ui="tabs" />
+      <window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.25037935" sideWeight="0.60355985" order="1" side_tool="true" content_ui="tabs" />
+      <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" content_ui="tabs" />
+      <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" content_ui="tabs" />
+      <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.25037935" sideWeight="0.16666667" order="0" side_tool="false" content_ui="combo" />
+      <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32847896" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
+      <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" content_ui="tabs" />
+      <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" content_ui="tabs" />
+      <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.23786408" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
+      <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" content_ui="tabs" />
+      <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" content_ui="combo" />
+      <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" content_ui="tabs" />
+    </layout>
+  </component>
+  <component name="VcsContentAnnotationSettings">
+    <option name="myLimit" value="2678400000" />
+  </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="CHECK_NEW_TODO" value="true" />
+    <option name="myTodoPanelSettings">
+      <value>
+        <are-packages-shown value="false" />
+        <are-modules-shown value="false" />
+        <flatten-packages value="false" />
+        <is-autoscroll-to-source value="false" />
+      </value>
+    </option>
+    <option name="PERFORM_UPDATE_IN_BACKGROUND" value="true" />
+    <option name="PERFORM_COMMIT_IN_BACKGROUND" value="true" />
+    <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="PERFORM_ROLLBACK_IN_BACKGROUND" value="false" />
+    <option name="CHECK_LOCALLY_CHANGED_CONFLICTS_IN_BACKGROUND" value="false" />
+    <option name="ENABLE_BACKGROUND_PROCESSES" value="false" />
+    <option name="CHANGED_ON_SERVER_INTERVAL" value="60" />
+    <option name="SHOW_ONLY_CHANGED_IN_SELECTION_DIFF" value="true" />
+    <option name="CHECK_COMMIT_MESSAGE_SPELLING" value="true" />
+    <option name="DEFAULT_PATCH_EXTENSION" value="patch" />
+    <option name="SHORT_DIFF_HORISONTALLY" value="true" />
+    <option name="SHORT_DIFF_EXTRA_LINES" value="2" />
+    <option name="SOFT_WRAPS_IN_SHORT_DIFF" value="true" />
+    <option name="INCLUDE_TEXT_INTO_PATCH" value="false" />
+    <option name="INCLUDE_TEXT_INTO_SHELF" value="false" />
+    <option name="CREATE_PATCH_EXPAND_DETAILS_DEFAULT" value="true" />
+    <option name="SHOW_FILE_HISTORY_DETAILS" value="true" />
+    <option name="SHOW_VCS_ERROR_NOTIFICATIONS" value="true" />
+    <option name="FORCE_NON_EMPTY_COMMENT" value="false" />
+    <option name="CLEAR_INITIAL_COMMIT_MESSAGE" value="false" />
+    <option name="LAST_COMMIT_MESSAGE" />
+    <option name="MAKE_NEW_CHANGELIST_ACTIVE" value="true" />
+    <option name="OPTIMIZE_IMPORTS_BEFORE_PROJECT_COMMIT" value="false" />
+    <option name="CHECK_FILES_UP_TO_DATE_BEFORE_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" />
+  </component>
+  <component name="XDebuggerManager">
+    <breakpoint-manager />
+  </component>
+  <component name="antWorkspaceConfiguration">
+    <option name="IS_AUTOSCROLL_TO_SOURCE" value="false" />
+    <option name="FILTER_TARGETS" value="true" />
+    <buildFile url="file://$PROJECT_DIR$/build.xml">
+      <antCommandLine value="" />
+      <runInBackground value="true" />
+      <targetFilters>
+        <filter targetName="non_osx" isVisible="false" />
+        <filter targetName="generate" isVisible="false" />
+        <filter targetName="test" isVisible="false" />
+        <filter targetName="docs" isVisible="false" />
+        <filter targetName="build" isVisible="true" />
+        <filter targetName="run" isVisible="true" />
+        <filter targetName="extensions" isVisible="false" />
+        <filter targetName="compiletest" isVisible="false" />
+        <filter targetName="win.installer" isVisible="false" />
+        <filter targetName="jalopy" isVisible="false" />
+        <filter targetName="clean" isVisible="true" />
+        <filter targetName="win.installer.clean" isVisible="false" />
+        <filter targetName="compile" isVisible="false" />
+        <filter targetName="jars" isVisible="false" />
+        <filter targetName="profile" isVisible="false" />
+        <filter targetName="osx" isVisible="false" />
+        <filter targetName="osxjar" isVisible="false" />
+        <filter targetName="runFromJar" isVisible="false" />
+        <filter targetName="javadocs" isVisible="false" />
+        <filter targetName="unjarlib" isVisible="false" />
+        <filter targetName="buildinfos" isVisible="false" />
+        <filter targetName="buildtest" isVisible="false" />
+        <filter targetName="extension-javadocs" isVisible="false" />
+        <filter targetName="win.installer.linux" isVisible="false" />
+      </targetFilters>
+      <treeView value="true" />
+      <verbose value="true" />
+      <viewClosedWhenNoErrors value="false" />
+      <expanded value="true" />
+    </buildFile>
+  </component>
+  <component name="editorHistoryManager">
+    <entry file="file://$PROJECT_DIR$/src/help/Autosave.html">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="0.0" />
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/help/ACMPortalHelp.html">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="24" column="82" selection-start="1282" selection-end="1361" vertical-scroll-proportion="0.0" />
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/java/net/sf/jabref/imports/EntryFetcher.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="0.0" />
+      </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="0" vertical-scroll-proportion="0.0" />
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/build.xml">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="165" column="17" selection-start="6867" selection-end="6867" vertical-scroll-proportion="0.0" />
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/java/net/sf/jabref/export/ExportFormats.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="208" column="63" selection-start="7795" selection-end="7795" vertical-scroll-proportion="0.0" />
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/java/net/sf/jabref/plugin/core/generated/_JabRefPlugin.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="178" column="32" selection-start="6134" selection-end="6134" vertical-scroll-proportion="0.0" />
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/java/net/sf/jabref/plugin/core/JabRefPlugin.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="29" column="13" selection-start="1222" selection-end="1222" vertical-scroll-proportion="0.0" />
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/java/net/sf/jabref/plugin/PluginCore.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="83" column="10" selection-start="3097" selection-end="3097" vertical-scroll-proportion="0.0" />
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/java/net/sf/jabref/JabRef.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="100" column="33" selection-start="3911" selection-end="3911" vertical-scroll-proportion="0.0">
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/java/net/sf/jabref/EntryEditor.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="1418" column="38" selection-start="54407" selection-end="54407" vertical-scroll-proportion="0.0" />
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/java/net/sf/jabref/labelPattern/LabelPatternUtil.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="170" column="27" selection-start="6273" selection-end="6273" vertical-scroll-proportion="0.0" />
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/java/net/sf/jabref/imports/HTMLConverter.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="62" column="71" selection-start="3587" selection-end="3587" vertical-scroll-proportion="0.0">
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/java/net/sf/jabref/imports/BibtexParser.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="378" column="46" selection-start="11423" selection-end="11423" vertical-scroll-proportion="0.0">
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/java/net/sf/jabref/Globals.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="1020" column="42" selection-start="39393" selection-end="39393" vertical-scroll-proportion="0.0">
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/java/net/sf/jabref/Util.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="3168" column="16" selection-start="106476" selection-end="106476" vertical-scroll-proportion="0.14893617">
+          <folding />
+        </state>
+      </provider>
+    </entry>
+  </component>
+  <component name="masterDetails">
+    <states>
+      <state key="ArtifactsStructureConfigurable.UI">
+        <settings>
+          <artifact-editor />
+          <splitter-proportions>
+            <option name="proportions">
+              <list>
+                <option value="0.2" />
+              </list>
+            </option>
+          </splitter-proportions>
+        </settings>
+      </state>
+      <state key="FacetStructureConfigurable.UI">
+        <settings>
+          <last-edited>No facets are configured</last-edited>
+          <splitter-proportions>
+            <option name="proportions">
+              <list>
+                <option value="0.2" />
+              </list>
+            </option>
+          </splitter-proportions>
+        </settings>
+      </state>
+      <state key="GlobalLibrariesConfigurable.UI">
+        <settings>
+          <splitter-proportions>
+            <option name="proportions">
+              <list>
+                <option value="0.2" />
+              </list>
+            </option>
+          </splitter-proportions>
+        </settings>
+      </state>
+      <state key="JdkListConfigurable.UI">
+        <settings>
+          <last-edited>1.6</last-edited>
+          <splitter-proportions>
+            <option name="proportions">
+              <list>
+                <option value="0.2" />
+              </list>
+            </option>
+          </splitter-proportions>
+        </settings>
+      </state>
+      <state key="ModuleStructureConfigurable.UI">
+        <settings>
+          <last-edited>Jabref</last-edited>
+          <splitter-proportions>
+            <option name="proportions">
+              <list>
+                <option value="0.2" />
+                <option value="0.5" />
+              </list>
+            </option>
+          </splitter-proportions>
+        </settings>
+      </state>
+      <state key="ProjectLibrariesConfigurable.UI">
+        <settings>
+          <last-edited>lib</last-edited>
+          <splitter-proportions>
+            <option name="proportions">
+              <list>
+                <option value="0.2" />
+              </list>
+            </option>
+          </splitter-proportions>
+        </settings>
+      </state>
+    </states>
+  </component>
+</project>
+
diff --git a/.project b/.project
new file mode 100644
index 0000000..ca82803
--- /dev/null
+++ b/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>Jabref</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/JabRef - MrDlib.userlibraries b/JabRef - MrDlib.userlibraries
deleted file mode 100644
index f53acbe..0000000
--- a/JabRef - MrDlib.userlibraries	
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<eclipse-userlibraries>
-  <library name="resources" />
-  <library name="sciplore">
-    <archive path="C:/Users/Christoph Arbeit/Documents/Arbeit/Hiwi/JabRef - MrDlib/lib/spl/intellij/annotations.jar" />
-    <archive path="C:/Users/Christoph Arbeit/Documents/Arbeit/Hiwi/JabRef - MrDlib/lib/spl/intellij/forms_rt.jar" />
-    <archive path="C:/Users/Christoph Arbeit/Documents/Arbeit/Hiwi/JabRef - MrDlib/lib/spl/jersey/jersey-client-1.1.5.1.jar" />
-    <archive path="C:/Users/Christoph Arbeit/Documents/Arbeit/Hiwi/JabRef - MrDlib/lib/spl/jersey/jersey-core-1.1.5.1.jar" />
-    <archive path="C:/Users/Christoph Arbeit/Documents/Arbeit/Hiwi/JabRef - MrDlib/lib/spl/jersey/jersey-multipart-1.1.5.1.jar" />
-    <archive path="C:/Users/Christoph Arbeit/Documents/Arbeit/Hiwi/JabRef - MrDlib/lib/spl/jersey/jsr311-api-1.1.1.jar" />
-    <archive path="C:/Users/Christoph Arbeit/Documents/Arbeit/Hiwi/JabRef - MrDlib/lib/spl/jersey/mimepull-1.3.jar" />
-    <archive path="C:/Users/Christoph Arbeit/Documents/Arbeit/Hiwi/JabRef - MrDlib/lib/spl/sciplore/SciPloreDBAccess.jar" />
-    <archive path="C:/Users/Christoph Arbeit/Documents/Arbeit/Hiwi/JabRef - MrDlib/lib/spl/jibx/bcel.jar" />
-    <archive path="C:/Users/Christoph Arbeit/Documents/Arbeit/Hiwi/JabRef - MrDlib/lib/spl/jibx/commons-logging-1.0.4.jar" />
-    <archive path="C:/Users/Christoph Arbeit/Documents/Arbeit/Hiwi/JabRef - MrDlib/lib/spl/jibx/jaxme-js-0.3.jar" />
-    <archive path="C:/Users/Christoph Arbeit/Documents/Arbeit/Hiwi/JabRef - MrDlib/lib/spl/jibx/jibx-bind.jar" />
-    <archive path="C:/Users/Christoph Arbeit/Documents/Arbeit/Hiwi/JabRef - MrDlib/lib/spl/jibx/jibx-extras.jar" />
-    <archive path="C:/Users/Christoph Arbeit/Documents/Arbeit/Hiwi/JabRef - MrDlib/lib/spl/jibx/jibx-run.jar" />
-    <archive path="C:/Users/Christoph Arbeit/Documents/Arbeit/Hiwi/JabRef - MrDlib/lib/spl/jibx/log4j-1.2.8.jar" />
-    <archive path="C:/Users/Christoph Arbeit/Documents/Arbeit/Hiwi/JabRef - MrDlib/lib/spl/jibx/xpp3.jar" />
-    <archive path="C:/Users/Christoph Arbeit/Documents/Arbeit/Hiwi/JabRef - MrDlib/lib/spl/bindings.jar" />
-    <archive path="C:/Users/Christoph Arbeit/Documents/Arbeit/Hiwi/JabRef - MrDlib/lib/spl/freemind.jar" />
-  </library>
-</eclipse-userlibraries>
-
diff --git a/build.gradle b/build.gradle
deleted file mode 100644
index 055a1ec..0000000
--- a/build.gradle
+++ /dev/null
@@ -1,15 +0,0 @@
-apply plugin: 'java'
-
-// with gradle 1.1, Sonar 3.2 is not working. One needs Sonar 3.1.1
-apply plugin: 'sonar'
-
-sourceSets {
-	main {
-		java {
-			srcDir 'src/java'
-		}
-		resources {
-			srcDir 'src/resource'
-		}
-	}
-}
diff --git a/build.number b/build.number
index 864e538..7496aca 100644
--- a/build.number
+++ b/build.number
@@ -1,3 +1,3 @@
 #Build Number for ANT. Do not edit!
-#Thu Oct 25 19:21:59 CEST 2012
-build.number=395
+#Sun Nov 18 13:50:10 CET 2012
+build.number=623
diff --git a/build.xml b/build.xml
index 868e9b3..787f722 100644
--- a/build.xml
+++ b/build.xml
@@ -9,13 +9,14 @@
              Jabref homepage:       http://jabref.sourceforge.net
              Jabref at SourceForge:    http://sourceforge.net/projects/jabref
              Jabref at FreeCode:       http://apps.freecode.com/projects/jabref
+             Jabref at Ohloh:          https://www.ohloh.net/p/jabref
              Jabref git repository: git://jabref.git.sourceforge.net/gitroot/jabref/jabref
 
              Further questions:
                help mailing list:   https://lists.sourceforge.net/lists/listinfo/jabref-users
 
    Precondition: 1. Ant should be installed.
-                 2. JAVA_HOME environment variable contains the path to JDK1.5 or higher
+                 2. JAVA_HOME environment variable contains the path to JDK1.6 or higher
                  3. ANT_HOME environment variable contains the path to ant's home directory
 
    Language: XML
@@ -34,7 +35,7 @@
      +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-->
 
 	<!-- some version information -->
-	<property name="jabref.version" value="2.9b" />
+	<property name="jabref.version" value="2.9b2" />
 	<property name="jabref.year" value="2012" />
 	<property name="jabref.placeholder.version" value="@version@" />
 	<property name="jabref.placeholder.year" value="@year@" />
@@ -75,8 +76,11 @@
 	<property name="extensions.dir" value="${src.dir}/extensions" />
 	<property name="layout.dir" value="${src.dir}/resource/layout" />
 	<property name="lib.dir" value="lib" />
+	<property name="buildlib.dir" value="buildlib" />
 	<property name="tests.dir" value="${src.dir}/tests" />
 
+	<property name="osxbin.dir" value="osx" />
+
 	<property name="nsis.executable" value="C:\Program files\NSIS\makensis.exe"/>
 	<property name="nsis.executable.linux" value="makensis"/>
 
@@ -96,20 +100,20 @@
 
 	<fileset id="jarsFileset" dir="${lib.dir}">
 		<include name="antlr.jar" />
-		<include name="antlr-3.0b5.jar" />
-        <include name="jgoodies-common-1.3.1.jar" />
-		<include name="jgoodies-looks-2.5.1.jar" />
-		<include name="jgoodies-forms-1.5.1.jar" />
+		<include name="antlr-3.4-complete.jar" />
+        <include name="jgoodies-common-1.4.0.jar" />
+		<include name="jgoodies-looks-2.5.2.jar" />
+		<include name="jgoodies-forms-1.6.0.jar" />
+		<include name="jayatana-1.2.4.jar" />
 		<include name="spin.jar" />
 		<include name="glazedlists-1.8.0_java15.jar" />
 		<include name="microba.jar" />
-		<include name="pdfbox-1.6.0.jar" />
-		<include name="jempbox-1.6.0.jar" />
-		<include name="fontbox-1.6.0.jar" />
+		<include name="pdfbox-1.7.1.jar" />
+		<include name="jempbox-1.7.1.jar" />
+		<include name="fontbox-1.7.1.jar" />
 		<include name="zoom-java.jar" />
     	<include name="mysql-connector-java-5.0.7-bin.jar" />
-		<include name="postgresql-9.1-902.jdbc4.jar" />
-        <!--<include name="substance-4.1.jar" />-->
+		<include name="postgresql-9.2-1002.jdbc4.jar" />
         <!-- Plugin runtime dependencies -->
 		<include name="plugin/JPFCodeGenerator-rt.jar" />
 		<include name="plugin/jpf.jar" />
@@ -158,7 +162,7 @@
 	<!-- Classpath for tests -->
 	<path id="classpathTest">
 		<path refid="classpath" />
-		<pathelement location="${lib.dir}/junit.jar" />
+		<pathelement location="${buildlib.dir}/junit.jar" />
 	</path>
 
 	<target name="run" depends="build">
@@ -196,13 +200,13 @@
 	<target name="compile" depends="generate">
 		<mkdir dir="${build.classes}" />
 		<javac debug="on" deprecation="on" destdir="${build.classes}" encoding="UTF8"
-		   source="1.5" target="1.5">
+		   source="1.6" target="1.6">
 			<src path="${java.dir}" />
 			<exclude name="tests/**" />
 			<exclude name="**/JabRefMain.java" />
 			<classpath refid="classpath" />
 		</javac>
-		<javac debug="off" deprecation="on" destdir="${build.classes}" source="1.4" target="1.4">
+		<javac debug="off" deprecation="on" destdir="${build.classes}" source="1.6" target="1.6">
 			<src path="${java.dir}" />
 			<include name="**/JabRefMain.java" />
 		</javac>
@@ -211,7 +215,7 @@
 	<!-- Compiles project including tests -->
 	<target name="compiletest">
 		<mkdir dir="${build.classes}" />
-		<javac debug="on" destdir="${build.classes}" source="1.5" target="1.5">
+		<javac debug="on" destdir="${build.classes}" source="1.6" target="1.6">
 			<src path="${java.dir}" />
 			<include name="tests/**" />
 			<classpath refid="classpathTest" />
@@ -222,14 +226,14 @@
 	<target name="osx">
 		<mkdir dir="${build.classes}" />
 
-		<javac srcdir="${osx.dir}" debug="off" destdir="${build.classes}" target="1.5">
+		<javac srcdir="${osx.dir}" debug="off" destdir="${build.classes}" target="1.6">
 		</javac>
 	</target>
 
 	<!-- Copies in the OSXAdapter class, which is compilable only on Mac  -->
 	<target name="non_osx">
 		<mkdir dir="${build.osx}" />
-		<copy file="${lib.dir}/OSXAdapter.class" todir="${build.osx}" />
+		<copy file="${osxbin.dir}/OSXAdapter.class" todir="${build.osx}" />
 	</target>
 
 	<!-- Jars up project -->
@@ -350,7 +354,7 @@ version=${jabref.version}</echo>
 	<!-- Creates javadocs -->
 	<target name="javadocs" depends="compile" description="Generates the javadocs">
 		<mkdir dir="${build.javadocs}" />
-		<javadoc sourcepath="${java.dir}" destdir="${build.javadocs}" author="true" version="true" windowtitle="JabRef API" link="http://java.sun.com/j2se/1.4.1/docs/api/">
+		<javadoc sourcepath="${java.dir}" destdir="${build.javadocs}" author="true" version="true" windowtitle="JabRef API" link="http://docs.oracle.com/javase/6/docs/api/">
 
 			<fileset dir="${java.dir}" defaultexcludes="yes">
 				<include name="**/*.java" />
@@ -370,7 +374,7 @@ version=${jabref.version}</echo>
 			</fileset>
 		</copy>
 
-		<javadoc sourcepath="${java.dir}" destdir="${build.extension-javadocs}" author="true" version="true" windowtitle="JabRef-Extensions API" link="http://java.sun.com/j2se/1.4.1/docs/api/" Overview="${extensions.dir}/API/overview.html" access="protected">
+		<javadoc sourcepath="${java.dir}" destdir="${build.extension-javadocs}" author="true" version="true" windowtitle="JabRef-Extensions API" link="http://docs.oracle.com/javase/6/docs/api/" Overview="${extensions.dir}/API/overview.html" access="protected">
 			<!-- 
                  create javadoc only selectively for classes that 
                  users extending JabRef are likely to use
@@ -444,12 +448,17 @@ version=${jabref.version}</echo>
                     jars="${build.lib}/${build.jar}"
                     icon="${images.dir}/JabRef-Logo.icns"
                     version="${jabref.version}"
-                    jvmversion="1.4+"
-                    stubfile="${lib.dir}/JavaApplicationStub"
+                    jvmversion="1.5+"
+                    stubfile="${osxbin.dir}/JavaApplicationStub"
                     signature="JABr">
             <documenttype name="BibTeX file" extensions="bib" role="Editor"
                           iconFile="${images.dir}/JabRef-Logo.icns"/>
         </jarbundler>
+        <!-- After running jarbundler we need to hack the Info.plist file: -->
+        <replace file="${build.lib}/JabRef.app/Contents/Info.plist" token="<key>CFBundleDocumentTypes</key>"
+            value="<key>NSPrincipalClass</key>${line.separator}
+   <string>NSApplication</string>${line.separator}
+   <key>CFBundleDocumentTypes</key>"/>
 	</target>
 
 
@@ -567,83 +576,6 @@ version=${jabref.version}</echo>
         What's about the software design ?!;-)
     ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-->
 
-	<target name="pmd" description="SOFTWAREDESIGN: Project Mess Detector !;-)">
-		<echo>Checking Project Mess Detection (PMD) rulesets.</echo>
-		<taskdef name="pmd" classname="net.sourceforge.pmd.ant.PMDTask">
-			<classpath>
-				<pathelement path="${classpath}" />
-				<fileset dir="${lib.dir}">
-					<include name="*.jar" />
-				</fileset>
-			</classpath>
-		</taskdef>
-		<!-- allowed Pretty Much Done rulsets -->
-		<!-- rulesets/basic.xml -->
-		<!-- rulesets/braces.xml -->
-		<!-- rulesets/codesize.xml-->
-		<!-- rulesets/controversial.xml-->
-		<!-- rulesets/coupling.xml-->
-		<!-- rulesets/design.xml -->
-		<!-- rulesets/experimental.xml -->
-		<!-- rulesets/favorites.xml -->
-		<!-- rulesets/imports.xml -->
-		<!-- rulesets/naming.xml -->
-		<!-- rulesets/javabean.xml -->
-		<!-- rulesets/junit.xml -->
-		<!-- rulesets/scratchpad.xml -->
-		<!-- rulesets/strictexception.xml -->
-		<!-- rulesets/strings.xml -->
-		<!-- rulesets/unusedcode.xml -->
-
-		<pmd rulesetfiles="rulesets/unusedcode.xml,rulesets/basic.xml" failonerror="no">
-			<formatter type="html" toFile="${build.dir}/pmd_report.html" />
-			<fileset dir="${src.dir}">
-				<include name="**/*.java" />
-			</fileset>
-		</pmd>
-
-		<!-- check for duplicated code -->
-		<echo>WARNING: use environment variable: ANT_OPTS=-Xmx512m or this task will fail.</echo>
-		<echo>Checking for duplicated code using the Copy/Paste Detector (CPD).</echo>
-		<taskdef name="cpd" classname="net.sourceforge.pmd.cpd.CPDTask">
-			<classpath>
-				<pathelement path="${classpath}" />
-				<fileset dir="${lib.dir}">
-					<include name="*.jar" />
-				</fileset>
-			</classpath>
-		</taskdef>
-		<cpd format="text" minimumTokenCount="100" outputFile="${build.dir}/duplicated_code_report.txt">
-			<fileset dir="${src.dir}">
-				<include name="**/*.java" />
-			</fileset>
-		</cpd>
-	</target>
-
-
-	<target name="javancss" description="SOFTWAREDESIGN: Determining the NCSS and CCN code metrics for JOELib.">
-		<taskdef name="javancss" classname="javancss.JavancssAntTask">
-			<classpath>
-				<pathelement path="${classpath}" />
-				<fileset dir="${lib.dir}">
-					<include name="*.jar" />
-				</fileset>
-			</classpath>
-		</taskdef>
-		<echo>Cyclomatic
-Complexity             Ease of       Risk
-Number (CCN)           maintenance
-(McCabe metric)
----------------------------------------------
-1-10, simple           easy          minimum
-11-20, complex         moderate      moderate
-21-50, more complex    hard          high
->50, unstable          very hard     very high
-
-</echo>
-		<javancss srcdir="${src.dir}" includes="**/*.java" excludes="jama/**/*.java, jmat/**/*.java, cformat/**/*.java" abortOnFail="false" ccnPerFuncMax="30" generateReport="true" outputfile="${build.dir}/javancss_report.plain" format="plain" packageMetrics="true" classMetrics="false" functionMetrics="false" />
-	</target>
-
 	<target name="jalopy" description="SOFTWAREDESIGN: source code formatter using the JOELib convention.">
 		<taskdef name="jalopy" classname="de.hunsicker.jalopy.plugin.ant.AntPlugin">
 			<classpath>
@@ -651,6 +583,9 @@ Number (CCN)           maintenance
 				<fileset dir="${lib.dir}">
 					<include name="*.jar" />
 				</fileset>
+				<fileset dir="${buildlib.dir}">
+					<include name="*.jar" />
+				</fileset>
 			</classpath>
 		</taskdef>
 		<jalopy fileformat="unix" convention="${src.dir}/java/jalopy.format.convention.xml" history="file" historymethod="adler32" loglevel="error" threads="2" classpathref="classpath" backup="bak">
@@ -660,6 +595,6 @@ Number (CCN)           maintenance
 		</jalopy>
 	</target>
 
-	<taskdef name="jarbundler" classpath="${lib.dir}/jarbundler-2.2.0.jar" classname="net.sourceforge.jarbundler.JarBundler" />
+	<taskdef name="jarbundler" classpath="${buildlib.dir}/jarbundler-2.2.0.jar" classname="net.sourceforge.jarbundler.JarBundler" />
 
 </project>
diff --git a/buildlib/jarbundler-2.2.0.jar b/buildlib/jarbundler-2.2.0.jar
new file mode 100644
index 0000000..1009748
Binary files /dev/null and b/buildlib/jarbundler-2.2.0.jar differ
diff --git a/jabref.ebuild b/jabref.ebuild
new file mode 100644
index 0000000..4e00a93
--- /dev/null
+++ b/jabref.ebuild
@@ -0,0 +1,79 @@
+#See also https://bugs.gentoo.org/show_bug.cgi?id=385751
+
+#=========== jabref ebuild hacked from dmol's 2.8.1 ==============
+# Copyright 1999-2012 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header:  $
+
+EAPI=4
+
+WANT_ANT_TASKS="dev-java/jarbundler:0"
+#docs aren't builded correctly?
+JAVA_PKG_IUSE=""
+inherit eutils java-pkg-2 java-ant-2
+
+MY_PV="${PV/_beta/b}"
+
+DESCRIPTION="GUI frontend for BibTeX, written in Java"
+HOMEPAGE="http://jabref.sourceforge.net/"
+SRC_URI="mirror://sourceforge/${PN}/JabRef-${MY_PV}-src.tar.bz2"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+IUSE="mysql"
+
+#do not include antlr-3, use shipped antlr-3.0b5.jar ?
+#       >=dev-java/antlr-3.1.3:3[java]
+CDEPEND="dev-java/spin:0
+        dev-java/glazedlists:1.8
+        dev-java/jempbox:1.7
+        dev-java/pdfbox:1.7
+        >=dev-java/antlr-2.7.3:0[java]
+        >=dev-java/jgoodies-forms-1.1.0:0
+        dev-java/jgoodies-looks:2.0
+        >=dev-java/microba-0.4.3:0
+        dev-java/commons-logging:0
+        dev-java/jpf:1.5
+        dev-java/jpfcodegen:0
+        dev-java/jgoodies-forms:0
+        mysql? ( dev-java/jdbc-mysql:0 )"
+
+RDEPEND=">=virtual/jre-1.6
+        ${CDEPEND}"
+
+DEPEND=">=virtual/jdk-1.6
+        ${CDEPEND}"
+
+S="${WORKDIR}/${PN}-${MY_PV}"
+
+JAVA_ANT_REWRITE_CLASSPATH="true"
+#EANT_ANT_TASKS="jarbundler"
+EANT_BUILD_TARGET="jars"
+EANT_DOC_TARGET="docs"
+
+#do not include antlr-3, use shipped antlr-3.0b5.jar
+EANT_GENTOO_CLASSPATH="antlr,commons-logging,glazedlists-1.8,jempbox-1.7,jgoodies-forms,jgoodies-looks-2.0,jpf-1.5,microba,pdfbox-1.7,spin"
+EANT_GENTOO_CLASSPATH_EXTRA="${S}/lib/antlr-3.0b5.jar"
+
+src_install() {
+        java-pkg_newjar build/lib/JabRef-${MY_PV}.jar
+        java-pkg_dojar lib/antlr-3.0b5.jar
+        java-pkg_dojar lib/plugin/JPFCodeGenerator-rt.jar
+
+        #are not builded? Investigate why
+        #use doc && java-pkg_dojavadoc build/docs/API
+        dodoc src/txt/README
+
+        java-pkg_dolauncher ${PN} \
+                --main net.sf.jabref.JabRef
+
+        dodir /usr/share/${PN}/lib/plugins
+        keepdir /usr/share/${PN}/lib/plugins
+
+        java-pkg_register-optional-dependency jdbc-mysql
+
+        newicon src/images/JabRef-icon-48.png JabRef-icon.png || die
+        make_desktop_entry ${PN} JabRef JabRef-icon Office
+        echo "MimeType=text/x-bibtex;" >> "${D}/usr/share/applications/${PN}-${PN}.desktop"
+}
diff --git a/osx/JavaApplicationStub b/osx/JavaApplicationStub
new file mode 100644
index 0000000..d0d2cd5
Binary files /dev/null and b/osx/JavaApplicationStub differ
diff --git a/osx/OSXAdapter.class b/osx/OSXAdapter.class
new file mode 100644
index 0000000..8451e95
Binary files /dev/null and b/osx/OSXAdapter.class differ
diff --git a/src/Jabref.iml b/src/Jabref.iml
new file mode 100644
index 0000000..48f7c03
--- /dev/null
+++ b/src/Jabref.iml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="JAVA_MODULE" version="4">
+  <component name="NewModuleRootManager" inherit-compiler-output="true">
+    <exclude-output />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/java" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/resource" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/images" isTestSource="false" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="library" name="jersey" level="project" />
+    <orderEntry type="library" name="sciplore" level="project" />
+    <orderEntry type="library" name="oo" level="project" />
+    <orderEntry type="library" name="plugin" level="project" />
+    <orderEntry type="library" name="lib" level="project" />
+  </component>
+</module>
+
diff --git a/src/help/ACMPortalHelp.html b/src/help/ACMPortalHelp.html
index fd0f736..1833c12 100644
--- a/src/help/ACMPortalHelp.html
+++ b/src/help/ACMPortalHelp.html
@@ -18,12 +18,8 @@
 
     <p>You may choose which database to search and you may opt to download the abstracts along with the cite information for each entry, by checking the <b>Include abstracts</b> checkbox.</p>
 
-	<p>To avoid excessive pressure on
-    the ACM Portal web site, JabRef will refuse to download
-    entries for more than a given number.
-	</p>
-
-	<p>At this point, frequent connections to ACM Portal will get your IP banned for hours. So JabRef will wait 5 seconds between each connection and the download process will be very slow.
+	<p>Frequent connections to ACM Portal may get your IP banned for hours. To avoid this, JabRef will for each search display a
+        preview of the first page of entries returned by the server. You can then choose which entries to download.
 	</p>
 
 	<p>Please email Aaron Chen <b>nextAaron at gmail.com</b> for any suggestions.</p>
diff --git a/src/help/About.html b/src/help/About.html
index fc12f1d..1ad1823 100755
--- a/src/help/About.html
+++ b/src/help/About.html
@@ -7,7 +7,7 @@
         <h1>JabRef version @version@</h1>
 
         <div id="logo">
-        <img src="/images/JabRef-icon-48.png" alt="JabRef logo"/><br/>© 2003- at year@
+        <img src="../images/JabRef-icon-48.png" alt="JabRef logo"/><br/>© 2003- at year@
         </div>
 
 	<p>JabRef is free software: you can redistribute it and/or modify it
@@ -23,6 +23,7 @@
         Kolja Brix,
         Frédéric Darboux,
         Guillaume Gardey,
+        Oscar Gustafsson,
         Cyrille d'Haese,
         Oliver Kopp,
         S M Mahbub Murshed,
@@ -92,7 +93,7 @@
         <h2>Third-party software used:</h2>
 
         <p>JabRef uses JGoodies
-        Looks 2.0.4 and JGoodies Forms 1.0.5, distributed by
+        Looks and JGoodies Forms, distributed by
         JGoodies (<code>http://www.jgoodies.com</code>) under the
         terms of the BSD License (see
         <code>http://www.opensource.org/licenses/bsd-license.html</code>
@@ -119,7 +120,7 @@
         (<code>http://publicobject.com/glazedlists</code>), which
         is distributed under the Lesser General Public License.</p>
 
-        <p>JabRef also uses the threading library Spin 1.3.1, which
+        <p>JabRef also uses the threading library Spin, which
         is distributed under the terms of the Lesser General Public
         License.</p>
 
@@ -136,5 +137,10 @@
         <p>JabRef uses the FontBox, JempBox, and PDFBox libraries for PDF
         handling, which are distributed under the Apache License. See 
         <code>http://pdfbox.apache.org</code> for more information.</p>
+        
+        <p>Under Ubuntu, JabRef uses Java Ayatana to add support for Unity Global
+            menu integration, which is licensed under the MIT License.
+            See <code>http://code.google.com/p/java-swing-ayatana/</code>
+         for more information.
 </body>
 </html>
diff --git a/src/help/Contents.html b/src/help/Contents.html
index fd40cb0..a15eb23 100755
--- a/src/help/Contents.html
+++ b/src/help/Contents.html
@@ -55,8 +55,11 @@
       <li><a href="OpenOfficeIntegration.html">Using JabRef with OpenOffice.org or LibreOffice</a></li>
       <li><a href="ACMPortalHelp.html">Fetching entries from <em>ACM</em> Portal</a></li>
       <li><a href="CiteSeerHelp.html">Fetching entries from <em>CiteSeerX</em></a></li>
+      <li><a href="DiVAtoBibTeXHelp.html">Fetching entries from <em>DiVA</em></a></li>
+      <li><a href="DOItoBibTeXHelp.html">Fetching entries using the <em>DOI to BibTeX Converter</em></a></li>
+      <li><a href="GoogleScholarHelp.html">Fetching entries from <em>Google Scholar</em></a></li>
       <li><a href="IEEEXploreHelp.html">Fetching entries from <em>IEEExplore</em></a></li>
-      <li><a href="ISBNtoBibTeXHelp.html">Fetching entries using the <em>ISBN to BibTeX Converter</em></a>
+      <li><a href="ISBNtoBibTeXHelp.html">Fetching entries using the <em>ISBN to BibTeX Converter</em></a></li>
       <li><a href="MedlineHelp.html">Fetching entries from <em>Medline</em></a></li>
       <li><a href="JSTOR.html"><em>JStor</em> search</a></li>
       <li><a href="ScienceDirect.html"><em>ScienceDirect</em> search</a></li>
diff --git a/src/help/DOItoBibTeXHelp.html b/src/help/DOItoBibTeXHelp.html
new file mode 100644
index 0000000..8348d53
--- /dev/null
+++ b/src/help/DOItoBibTeXHelp.html
@@ -0,0 +1,20 @@
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+</head>
+
+<body>
+    <h1>Fetching entries using the Digital Object Identifier (DOI)</h1>
+
+    <p>To use this feature, choose <b>Search -> Web search</b>, and the
+    search interface will appear in the side pane. Select <b>DOI to BibTeX</b> in the dropdown menu.</p>
+
+    <p>This fetcher uses <a href="http://dx.doi.org/">http://dx.doi.org/</a>
+    to convert an DOI to a BibTeX entry.</p>
+
+    <p>Enter the DOI in the search field and press <b>Enter</b> or the <b>Fetch</b>
+    button. The entry will be fetched and added to your currently active
+    database. In case an error occurs, it is shown in a popup.</p>
+
+</body>
+</html>
diff --git a/src/help/DiVAtoBibTeXHelp.html b/src/help/DiVAtoBibTeXHelp.html
new file mode 100644
index 0000000..7d3a27a
--- /dev/null
+++ b/src/help/DiVAtoBibTeXHelp.html
@@ -0,0 +1,22 @@
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+</head>
+
+<body>
+    <h1>Fetching entries from DiVA</h1>
+            
+    <p><a href="http://www.diva-portal.org/">DiVA (Digitala Vetenskapliga Arkivet)</a> is a database
+        with publications from about <a href="http://www.diva-portal.org/smash/aboutdiva.jsf">30</a>
+        Swedish universities and colleges of higher education.
+        
+    <p>To use this feature, choose <b>Search -> Web search</b>, and the
+    search interface will appear in the side pane. Select <b>DiVA</b> in the dropdown menu.</p>
+
+    <p>Enter the DiVA identifier, e.g., <b>diva2:260746</b> in the search field
+        and press <b>Enter</b> or the <b>Fetch</b>
+    button. The entry will be fetched and added to your currently active
+    database. In case an error occurs, it is shown in a popup.</p>
+
+</body>
+</html>
diff --git a/src/help/GoogleScholarHelp.html b/src/help/GoogleScholarHelp.html
new file mode 100644
index 0000000..870a4a4
--- /dev/null
+++ b/src/help/GoogleScholarHelp.html
@@ -0,0 +1,23 @@
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+</head>
+
+<body>
+
+    <h1>Search Google Scholar</h1>
+
+    <p>JabRef can search and download citations from Google Scholar.
+    To use this feature, choose <b>Search -> Web search</b>, and the search interface will appear in the
+    side pane. Select <b>Google Scholar</b> in the dropdown menu.</p>
+
+    <p>To start a search, enter the words of your query, and press
+    <b>Enter</b> or the <b>Fetch</b> button.</p>
+
+    <p>Frequent connections to Google Scholar will cause Google to display a CAPTCHA challenge which JabRef
+        cannot pass. To avoid this, JabRef will for each search display a preview of the first page of
+        entries returned by the server. You can then choose which entries to download.
+  	</p>
+
+</body>
+</html>
diff --git a/src/help/IEEEXploreHelp.html b/src/help/IEEEXploreHelp.html
index 25360a6..8c51500 100644
--- a/src/help/IEEEXploreHelp.html
+++ b/src/help/IEEEXploreHelp.html
@@ -22,6 +22,6 @@
 
     <p>The option to download BibTeX citations directly from IEEEXplore is not working yet.</p>
 
-    <p>Please email Aaron Chen <b>nextAaron at gmail.com</b> for any suggestions.</p>
+    <p>Please email Oscar Gustafsson <b>ogib73 at gmail.com</b> or Aaron Chen <b>nextAaron at gmail.com</b> for any suggestions.</p>
 </body>
 </html>
diff --git a/src/help/ISBNtoBibTeXHelp.html b/src/help/ISBNtoBibTeXHelp.html
index 931659c..01daaf3 100644
--- a/src/help/ISBNtoBibTeXHelp.html
+++ b/src/help/ISBNtoBibTeXHelp.html
@@ -13,7 +13,7 @@
     to convert an ISBN to a BibTeX entry.</p>
 
     <p>Enter the ISBN number in the search field and press <b>Enter</b> or the <b>Fetch</b>
-    button. The entry will be fetched will be added to your currently active
+    button. The entry will be fetched and added to your currently active
     database. In case an error occurs, it is shown in a popup.</p>
 
 </body>
diff --git a/src/help/RevisionHistory.html b/src/help/RevisionHistory.html
index fe55ae7..f1752ce 100644
--- a/src/help/RevisionHistory.html
+++ b/src/help/RevisionHistory.html
@@ -6,6 +6,37 @@
 <body>
 
   <h1>Revision history</h1>
+    <h3>2.9 beta 2</h3>
+    <ul>
+      <li>Can control if the HTML converter should create subscripts and superscripts
+      as text or an equation via the preferences</li>
+      <li>Added initial support for adding curly brackets {} for certain
+        key words to keep the character case independent of .bst, e.g., for
+        names and abbreviations (use via "Cleanup entries") and can be controlled 
+        via preferences if it should be used at searches</li>
+      <li>Fixed author and DOI import from IEEE Xplore.</li>
+      <li>Improved import of equations in IEEE Xplore titles handling images, (sub) and /spl / representations</li>
+      <li>Rewrote the HTML import in a more general way. A few characters need to be added.</li>
+      <li>IEEE Xplore abstract fetching should now be working again.</li>
+      <li>Added DOI to BibTex entry fetcher.</li>
+      <li>Added ADS (The SAO/NASA Astrophysics Data System) fetcher by Ryo Igarashi (patch #120).</li>
+      <li>Reintroduced Google Scholar and ACM portal fetcher with entry preview to reduce server load.</li>
+      <li>Added alternate entry fetcher type where a preview can be displayed so the user can choose
+        which entries to download. This can reduce server load significantly and prevent users from
+        getting locked out of search services.</li>
+      <li>Fix for exception and minor bugs in HTML import parsing (patch 3575998 by Daniel Sv�rd)</li>
+      <li>HTML import handles more characters. Cleanup can also do HTML cleanup. (Patch 3582375 by Oscar Gustafsson)</li>
+      <li>During file renaming: More illegal characters are removed (idea by Sarel Botha)</li>
+      <li>Rudimentary support for IEEEtranBSTCTL added (patch 3582376 by Oscar Gustafsson)</li>
+      <li>":" is not filtered from the BibTeX keys any more (patch 3582376 by Oscar Gustafsson)</li>
+      <li>Changed internal look&feel setting (based on patch 3580605)</li>
+      <li>Custom importers nested in jars should be supported now (bug 3582838)</li>
+      <li>PDFContentImporter uses the DOI fetcher to fetch the BibTeX for the entry (if a DOI exists at the first page).</li>
+      <li>Moved migration of legacy PDF/PS fields from legacy tools to clean up dialog.</li>
+      <li>MHT files can now also be linked by drag'n'drop without the need to configure "external file types".</li>
+      <li>Adds support for Ubunut's global menu and HUD integration by using java-swing-ayatana (feature #796).</li>
+      <li>Updates PostgreSQL support to PostgreSQL 9.2</li>
+    </ul>
     <h3>2.9 beta</h3>
     <ul>
       <li>Replaced notification dialog after moving/renaming linked file by status message.</li>
diff --git a/src/help/da/About.html b/src/help/da/About.html
index 7517e1e..a3b5fa7 100755
--- a/src/help/da/About.html
+++ b/src/help/da/About.html
@@ -7,7 +7,7 @@
         <h1>JabRef version @version@</h1>
 
         <div id="logo">
-        <img src="/images/JabRef-icon-48.png" alt="JabRef logo"/><br/>© 2003- at year@
+        <img src="../../images/JabRef-icon-48.png" alt="JabRef logo"/><br/>© 2003- at year@
         </div>
 
         <p>JabRef kan frit distribueres under betingelserne i
@@ -22,6 +22,7 @@
         Kolja Brix,
         Frédéric Darboux,
         Guillaume Gardey,
+        Oscar Gustafsson,
         Cyrille d'Haese,
         Oliver Kopp,
         S M Mahbub Murshed,
@@ -89,7 +90,7 @@
 
         <h2>Tredjepartssoftware anvendt:</h2>
 
-        <p>JabRef bruger JGoodies Looks 2.0.4 og JGoodies Forms 1.0.5,
+        <p>JabRef bruger JGoodies Looks og JGoodies Forms,
         distribueret af JGoodies
         (<code>http://www.jgoodies.com</code>) under betingelserne i
         BSD License (se
@@ -116,8 +117,8 @@
         (<code>http://publicobject.com/glazedlists</code>), som
         distribueres under Lesser General Public License.</p>
 
-        <p>JabRef benytter også trådbiblioteket Spin
-        1.3.1, som distribueres under betingelserne i Lesser General
+        <p>JabRef benytter også trådbiblioteket Spin, 
+            som distribueres under betingelserne i Lesser General
         Public License.</p>
 
         <p>Der er brugt visse GUI-komponenter fra Microba-biblioteket,
diff --git a/src/help/de/About.html b/src/help/de/About.html
index dca4399..38069b1 100644
--- a/src/help/de/About.html
+++ b/src/help/de/About.html
@@ -7,7 +7,7 @@
         <h1>JabRef Version @version@</h1>
 
         <div id="logo">
-        <img src="/images/JabRef-icon-48.png" alt="JabRef logo"/><br/>© 2003- at year@
+        <img src="../../images/JabRef-icon-48.png" alt="JabRef logo"/><br/>© 2003- at year@
         </div>
 
         <p>JabRef ist frei verfügbar unter den Bedingungen der
@@ -21,6 +21,7 @@
         Kolja Brix,
         Frédéric Darboux,
         Guillaume Gardey,
+        Oscar Gustafsson,
         Cyrille d'Haese,
         Oliver Kopp,
         S. M. Mahbub Murshed,
@@ -87,7 +88,7 @@
         <h2>Benutzte Fremdsoftware:</h2>
 
         <p>JabRef benutzt JGoodies
-        Looks 2.0.4 und JGoodiesForms 1.0.5, das von JGoodies
+        Looks und JGoodies Forms, das von JGoodies
         (<code>http://www.jgoodies.com</code>) unter den
         Bedingungen der BSD-Lizenz vertrieben wird (siehe
         <code>http://www.opensource.org/licenses/bsd-license.html</code>
@@ -115,7 +116,7 @@
         vertrieben wird.</p>
 
         <p>JabRef benutzt darüber hinaus die "threading
-        library" Spin 1.3.1, die ebenfalls unter den Bedingungen
+        library" Spin, die ebenfalls unter den Bedingungen
         der Lesser General Public License vertrieben wird.</p>
 
         <p>Für die einfache Auswahl und den Umgang mit
diff --git a/src/help/fr/About.html b/src/help/fr/About.html
index f3dcd82..6570168 100644
--- a/src/help/fr/About.html
+++ b/src/help/fr/About.html
@@ -8,7 +8,7 @@
         <h1>JabRef version @version@</h1>
 
         <div id="logo">
-        <img src="/images/JabRef-icon-48.png" alt="JabRef logo"/><br/>© 2003- at year@
+        <img src="../../images/JabRef-icon-48.png" alt="JabRef logo"/><br/>© 2003- at year@
         </div>
 
         <p>JabRef est librement distribuable selon les termes de la
@@ -30,6 +30,7 @@
         Kolja Brix,
         Frédéric Darboux,
         Guillaume Gardey,
+        Oscar Gustafsson,
         Cyrille d'Haese,
         Oliver Kopp,
         S M Mahbub Murshed,
diff --git a/src/help/fr/Contents.html b/src/help/fr/Contents.html
index d557d34..427680d 100644
--- a/src/help/fr/Contents.html
+++ b/src/help/fr/Contents.html
@@ -14,6 +14,7 @@
       <li><a href="BaseFrameHelp.html">La fenêtre principale de JabRef</a></li>
       <li><a href="EntryEditorHelp.html">Éditeur d'entrées</a></li>
       <li><a href="Autosave.html">Sauvegarde automatique</a></li>
+      <li><a href="SpecialFieldsHelp.html">Champs spéciaux</a></li>
     </ul>
 
     <h2>Champs</h2>
@@ -54,7 +55,10 @@
       <li><a href="OpenOfficeIntegration.html">Utiliser JabRef avec OpenOffice.org ou LibreOffice</a></li>
       <li><a href="ACMPortalHelp.html">Récupération des entrées depuis le portail <em>ACM</em></a></li>
       <li><a href="CiteSeerHelp.html">Récupération des entrées depuis <em>CiteSeerX</em></a></li>
+      <li><a href="DOItoBibTeXHelp.html">Récupération des entrées avec le convertisseur <em>DOI vers BibTeX</em></a></li>
+      <li><a href="GoogleScholarHelp.html">Récupération des entrées depuis <em>Google Scholar</em></a></li>      
       <li><a href="IEEEXploreHelp.html">Récupération des entrées depuis <em>IEEExplore</em></a></li>
+      <li><a href="ISBNtoBibTeXHelp.html">Récupération des entrées avec le convertisseur <em>ISBN vers BibTeX</em></a></li>
       <li><a href="MedlineHelp.html">Récupération des entrées depuis <em>Medline</em></a></li>
       <li><a href="JSTOR.html">Récupération des entrées depuis <em>JStor</em></a></li>
       <li><a href="ScienceDirect.html">Récupération des entrées depuis <em>ScienceDirect</em></a></li>
diff --git a/src/help/fr/DOItoBibTeXHelp.html b/src/help/fr/DOItoBibTeXHelp.html
new file mode 100644
index 0000000..476927f
--- /dev/null
+++ b/src/help/fr/DOItoBibTeXHelp.html
@@ -0,0 +1,24 @@
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+</head>
+
+<body>
+    <h1>Récupération d'entrées en utilisant
+         l'identifiant d'objet numérique (DOI)</h1>
+
+    <p>Pour utiliser cette fonction, choisissez <b>Recherche -> recherche Web</b>,
+    et l'interface de recherche s'affichera dans le panneau latéral.
+    Sélectionnez <b>DOI vers BibTeX</b> dans le menu déroulant.</p>
+
+    <p>Ce moteur de recherche utilise
+    <a href="http://dx.doi.org/">http://dx.doi.org/</a>
+    pour convertir un DOI en une entrée BibTeX.</p>
+
+    <p>Entrer le DOI dans le champ de recherche et presser sur <b>Entrer</b>
+        ou sur le bouton <b>Recherche</b>.
+        L'entrée sera récupérée et ajoutée à votre base actuellement active.
+        En cas de survenue d'une erreur, elle s'affichera dans une fenêtre.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/src/help/fr/GoogleScholarHelp.html b/src/help/fr/GoogleScholarHelp.html
new file mode 100644
index 0000000..8a65818
--- /dev/null
+++ b/src/help/fr/GoogleScholarHelp.html
@@ -0,0 +1,26 @@
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+</head>
+
+<body>
+
+    <h1>Recherche Google Scholar</h1>
+
+    <p>JabRef peut rechercher et télécharger des citations depuis Google Scholar.
+    Pour utiliser cette fonction, choisissez <b>Recherche -> recherche Web</b>,
+    et l'interface de recherche s'affichera dans le panneau latéral.
+    Sélectionnez <b>Google Scholar</b> dans le menu déroulant.</p>
+        
+    
+    <p>Pour démarrer une recherche, entrer les mots de votre requête
+        et presser sur <b>Entrer</b> ou sur le bouton <b>Recherche</b>.</p>
+
+    <p>De fréquentes connexions à Google Scholar feront que Google affichera un
+        test CAPTCHA que JabRef ne peut pas passer. Pour éviter cette situation,
+        JabRef affichera pour chaque recherche une prévisualisation de la 
+        première page des entrées renvoyées par le serveur. Vous pouvez alors
+        choisir quelles entrées doivent être téléchargées.</p>
+
+</body>
+</html>
diff --git a/src/help/fr/ISBNtoBibTeXHelp.html b/src/help/fr/ISBNtoBibTeXHelp.html
new file mode 100644
index 0000000..129f9f5
--- /dev/null
+++ b/src/help/fr/ISBNtoBibTeXHelp.html
@@ -0,0 +1,23 @@
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+</head>
+
+<body>
+    <h1>Récupération d'entrées à partir du numéro ISBN</h1>
+    
+    <p>Pour utiliser cette fonction, choisissez <b>Recherche -> recherche Web</b>,
+        et l'interface de recherche s'affichera dans le panneau latéral.
+        Sélectionnez <b>ISBN vers BibTeX</b> dans le menu déroulant.</p>
+
+    <p>Ce moteur de recherche utilise
+        <a href="http://manas.tungare.name/software/isbn-to-bibtex/">Manas Tungare's ISBN to BibTeX Converter</a>
+        pour convertir un ISBN en une entrée BibTeX.</p>
+
+    <p>Entrer le numéro ISBN dans le champ de recherche et presser sur <b>Entrer</b>
+        ou sur le bouton <b>Recherche</b>.
+        L'entrée sera récupérée et ajoutée à votre base actuellement active.
+        En cas de survenue d'une erreur, elle s'affichera dans une fenêtre.</p>
+
+</body>
+</html>
diff --git a/src/help/fr/RevisionHistory.html b/src/help/fr/RevisionHistory.html
index 767fe59..dbc2deb 100644
--- a/src/help/fr/RevisionHistory.html
+++ b/src/help/fr/RevisionHistory.html
@@ -6,6 +6,63 @@
 <body>
 
   <h1>Historique des révisions (en anglais)</h1>
+  <h3>2.9 beta</h3>
+    <ul>
+      <li>Replaced notification dialog after moving/renaming linked file by status message.</li>
+      <li>Replaced dialog warnings about empty/duplicate key in entry editor by status line messages,
+      to prevent lockup if Save button is pressed directly.</li>
+      <li>Replaced window icon with 48x48 image.</li>
+      <li>Added local undo/redo handling for entry editor text fields.</li>
+      <li>Added special field functionality for ranking, marking as relevant,
+      marking as quality assured, and prioritizing. Can be enabled by "Entry table columns".
+      Based on the work by Igor Chernyavsky, Florian Straßer, and Marius Kleiner.</li>
+      <li>Added PDF preview functionality to the preview panel. Configurable via "Entry preview" settings.</li>
+      <li>Group edit dialog now closes when Escape is pressed.</li>
+      <li>Fixed MS bib import, month was lost on import.</li>
+      <li>Generate key action in entry editor now honors key overwrite settings.</li>
+      <li>Fixed bug when importing XMP data from PDF, file will now be linked from the new entry.</li>
+      <li>Fixed bug in layout processing - quoted formatter argments are now handled correctly.</li>
+      <li>Fixed bug 3545394: null and curly brackets in custom export filter.</li>
+      <li>Added "Manage keywords" popup menu to manage common keywords of selected entries.</li>
+      <li>Added support for pushing citations to TeXstudio (requires TeXstudio >=2.4)</li>
+      <li>Text-based citations can now be imported using FreeCite by Brown University
+      (http://freecite.library.brown.edu). By Kai Mindermann and Daniel Maurer.</li>
+      <li>JabRef supports synchronization of unlinked PDFs. Feature request "[2163626] Scan database - find unlinked files".
+      Based on patch 3122104. </li>
+      <li>Added command line argument -d/-prdef for resetting preferences to default values. Can
+      reset a comma-separated list of preference values, or all values.</li>
+      <li>Added small right-click popup menu at each tab</li>
+      <li>A PDF can also be dropped to the preview panel to trigger linking it</li>
+      <li>Drag'n'drop of text from the preview panel to other applications is now working</li>
+      <li>Added highlighting in preview area for search text (based on patch 3121914 by
+      Maximilian Lengsfeld).</li>
+      <li>New context menu option "Switch preview layout" in the preview panel. </li>
+      <li>BibTeX key generator patterns can now be stored in per database (implements feature 3495993)</li>
+      <li>Braces around author names are now dropped internally. They remain in the .bib though
+      Effects (incomplete list): Authors in the main window are shown without braces,
+      autocompletion does not show these braces</li>
+      <li>Autocompletion: ";" is now also a delimiter allowing "keyword1; keyword2" in the keyword fields</li>
+      <li>Autocompletion: the amount of characters to trigger autocompletion may now be configured
+      (default is 2)</li>
+      <li>Autocompletion: in case lower case letters are used, the search is case-insenstive,
+      otherwise the search is case sensitive.</li>
+      <li>Autocompletion: new preference to choose how to deal with first names 
+      (always full/always abbreviated/both full and abbreviated)</li>
+      <li>Added functionality "clean up entries" 
+      - Includes clean up DOI functionality by Florian Straßer and Marius Kleiner
+        (move of DOIs from ee, note, and url field is supported)
+      - Option to rename PDF of entry according to configured PDF-naming-scheme
+        (by Florian Straßer and Marius Kleiner)
+      - make file paths relative
+      - clean up month (functionality based on patch 3470076 by Mathias Walter)
+      - clean up pages
+      - fix superscripts</li>
+    <li>New "ISBN to BibTeX" fetcher. Uses the online "ISBN to BibTeX Converter" service by Manas Tungare.</li>
+    <li>Added support for drag'n'drop of tabs by Florian Straßer and Marius Kleiner.</li>
+    <li>PDF import dialog now always stores settings: checkbox removed</li>
+    <li>float search now also jumps to first entry if entry editor is opened</li>
+    <li>usability improvements of "content selectors"</li>
+    </ul>
   <h3>Version 2.8.1</h3>
     <ul><li>New DBLP fetcher. Patch 3462232 by Sascha Hunold.</li>
     <li>Disabled ACM portal fetcher to avoid users of getting banned.</li>
diff --git a/src/help/fr/SpecialFieldsHelp.html b/src/help/fr/SpecialFieldsHelp.html
new file mode 100644
index 0000000..cdd77dd
--- /dev/null
+++ b/src/help/fr/SpecialFieldsHelp.html
@@ -0,0 +1,50 @@
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+</head>
+
+<body>
+
+<h1>Special Fields</h1>
+
+<p>Special fields offer the functionality </p>
+<ul>
+<li>rate read papers</li>
+<li>mark papers as relevant for the work</li>
+<li>mark Bibtex entries as quality assured, and </li>
+<li>prioritize unread papers.</li>
+</ul>
+<p>
+The main difference from the marked entry is that the rated entry is not floating by default and only highlight the number column. Thus, an entry may be both marked and rated.
+</p>
+<p>
+Each special field may be turned on and off in the settings.
+</p>
+
+<h2>Types of Fields</h2>
+
+<h3>Ranking</h3>
+<p>The aim is to add a functionality to set a range of “positive” ratings. JabRef offers a rank from one to five stars to rate papers.</p>
+
+<h3>Relevance</h3>
+<p>An entry may be marked as relevant.</p>
+
+<h3>Quality Assured</h3>
+<p>An entry may be marked as quality assured. The intention is to mark Bibtex entries, where a thorough checking of the field contents has been done.</p>
+
+<h3>Priority</h3>
+<p>One may prioritize entries from prio3 (low) to prio1 (high). The main intention is to prioritize unread papers.</p>
+
+<h2>Storage in the Bibtex Entry</h2>
+<p>Internally, each special field is stored in a separate Bibtex field. If “Write values of
+special fields as separate fields to BibTeX” is active, these fields are also written when the
+database is saved. JabRef also offers synchronizing the fields with keywords. This is enabled by the
+setting “Synchronize with keywords”. If this setting is active, then each change in a
+special field is reflected in the keyword field. Vice versa, each change in a keyword also leads to
+a change in the special field. Additionally, when loading a the database or pasting a new entry, the
+keywords are used to set the special field values.
+</p>
+
+</body>
+</html>
+
diff --git a/src/help/in/About.html b/src/help/in/About.html
index d7fe464..9ccbfe8 100755
--- a/src/help/in/About.html
+++ b/src/help/in/About.html
@@ -7,7 +7,7 @@
         <h1>JabRef versi @version@</h1>
 
         <div id="logo">
-        <img src="/images/JabRef-icon-48.png" alt="JabRef logo"/><br/>© 2003- at year@
+        <img src="../../images/JabRef-icon-48.png" alt="JabRef logo"/><br/>© 2003- at year@
         </div>
 
         <p>JabRef dapat disebarkan tanpa bayar mengikut syarat dari
@@ -22,6 +22,7 @@
         Kolja Brix,
         Frédéric Darboux,
         Guillaume Gardey,
+        Oscar Gustafsson,
         Cyrille d'Haese,
         Oliver Kopp,
         S M Mahbub Murshed,
@@ -91,7 +92,7 @@
         <h2>Program tambahan yang digunakan:</h2>
 
         <p>JabRef menggunakan JGoodies
-        Looks 2.0.4 dan JGoodies Forms 1.0.5, yang disebarkan oleh
+        Looks dan JGoodies Forms, yang disebarkan oleh
         JGoodies (<code>http://www.jgoodies.com</code>) mengikuti syarat dari Lisensi (Lihat
         <code>http://www.opensource.org/licenses/bsd-license.html</code>
         untuk perincian lanjut).</p>
@@ -117,7 +118,7 @@
         (<code>http://publicobject.com/glazedlists</code>), yang
         disebarkan mengikut Lisensi Lesser General Public.</p>
 
-        <p>JabRef juga menggunakan threading library Spin 1.3.1, yang
+        <p>JabRef juga menggunakan threading library Spin, yang
         disebarkan mengikut syarat Lisensi Lesser General Public
         .</p>
 
diff --git a/src/help/ja/About.html b/src/help/ja/About.html
index 5776819..bc5b2aa 100755
--- a/src/help/ja/About.html
+++ b/src/help/ja/About.html
@@ -8,7 +8,7 @@
         <h1>JabRef 第 @version@ 版</h1>
 
         <div id="logo">
-        <img src="/images/JabRef-icon-48.png" alt="JabRef logo"/><br/>© 2003- at year@
+        <img src="../../images/JabRef-icon-48.png" alt="JabRef logo"/><br/>© 2003- at year@
         </div>
 
         <p>JabRefは、GNU <a href="License.html">General Public License</a>, version 2の下で自由に配布可能です。</p>
@@ -21,6 +21,7 @@
         Kolja Brix,
         Frédéric Darboux,
         Guillaume Gardey,
+        Oscar Gustafsson,
         Cyrille d'Haese,
         Oliver Kopp,
         S M Mahbub Murshed,
@@ -90,7 +91,7 @@
 
         <h2>使用しているサードパーティ・ソフトウェア:</h2>
 
-        <p>JabRefは、JGoodies (<code>http://www.jgoodies.com</code>) がBSDライセンス (詳細については<code>http://www.opensource.org/licenses/bsd-license.html</code>を参照) の下で配布しているJGoodies Looks 2.0.4およびJGoodies Forms 1.0.5を使用しています。</p>
+        <p>JabRefは、JGoodies (<code>http://www.jgoodies.com</code>) がBSDライセンス (詳細については<code>http://www.opensource.org/licenses/bsd-license.html</code>を参照) の下で配布しているJGoodies Looks およびJGoodies Forms を使用しています。</p>
 
         <p>また、<a href="../jgoodies.html">これらの条件</a>で配布されているKarsten Lentzschによる二つのクラス (SimpleInternalFrameおよびUIFSplitPane) も含まれています。</p>
 
@@ -100,7 +101,7 @@
 
         <p>JabRefは、表の表示とフィルタリングにGlazed Listsライブラリ (<code>http://publicobject.com/glazedlists</code>) を使用しています。これはLesser General Public Licenseの下で配布されています。</p>
 
-        <p>JabRefは、スレッディングライブラリSpin 1.3.1も使用しており、これはLesser General Public Licenseの下で配布されています。</p>
+        <p>JabRefは、スレッディングライブラリSpin も使用しており、これはLesser General Public Licenseの下で配布されています。</p>
 
         <p>Microbaライブラリ由来のいくつかのGUIコンポーネントが使用されており、これはBSDスタイルライセンスの下でライセンスされています。詳しい情報については<code>http://sourceforge.net/projects/microba/</code>をご覧ください。</p>
 
diff --git a/src/help/jgoodies.html b/src/help/jgoodies.html
index 4170aab..f201c22 100644
--- a/src/help/jgoodies.html
+++ b/src/help/jgoodies.html
@@ -6,7 +6,7 @@
 <body>
     <h1>JGoodies</h1>
 
-    Copyright (c) 2003 JGoodies Karsten Lentzsch. All Rights
+    Copyright (c) 2002-2012 JGoodies Karsten Lentzsch. All Rights
     Reserved. 
 
     <p>Redistribution and use in source and binary forms, with or
diff --git a/src/images/JabRef-Logo.icns b/src/images/JabRef-Logo.icns
index 7f30a50..85a4e0a 100644
Binary files a/src/images/JabRef-Logo.icns and b/src/images/JabRef-Logo.icns differ
diff --git a/src/images/JabRef-icon-mac.svg b/src/images/JabRef-icon-mac.svg
new file mode 100644
index 0000000..9269439
--- /dev/null
+++ b/src/images/JabRef-icon-mac.svg
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://web.resource.org/cc/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="48" height="48" id="svg2" sodipodi:version="0.32" inkscape:version="0.45" sodipodi:docbase="/Us [...]
+  <defs id="defs4">
+    <linearGradient id="linearGradient3183">
+      <stop style="stop-color:#4f5f8f;stop-opacity:1;" offset="0" id="stop3185"/>
+      <stop style="stop-color:#3a4669;stop-opacity:1;" offset="1" id="stop3187"/>
+    </linearGradient>
+    <linearGradient id="linearGradient3167">
+      <stop id="stop3169" offset="0" style="stop-color:#ffffff;stop-opacity:1;"/>
+      <stop id="stop3171" offset="1" style="stop-color:#ffffff;stop-opacity:0;"/>
+    </linearGradient>
+    <linearGradient id="linearGradient2915">
+      <stop id="stop2917" offset="0" style="stop-color:white;stop-opacity:1;"/>
+      <stop id="stop2919" offset="1" style="stop-color:#dadce0;stop-opacity:1;"/>
+    </linearGradient>
+    <linearGradient id="linearGradient2909">
+      <stop id="stop2911" offset="0" style="stop-color:white;stop-opacity:1;"/>
+      <stop id="stop2913" offset="1" style="stop-color:#cfd1d7;stop-opacity:1;"/>
+    </linearGradient>
+    <linearGradient id="linearGradient2897">
+      <stop style="stop-color:#dadee7;stop-opacity:1;" offset="0" id="stop2899"/>
+      <stop style="stop-color:#1e68c6;stop-opacity:1;" offset="1" id="stop2901"/>
+    </linearGradient>
+    <linearGradient id="linearGradient2889">
+      <stop style="stop-color:#e0e4ee;stop-opacity:1;" offset="0" id="stop2891"/>
+      <stop style="stop-color:#e0e4ee;stop-opacity:0;" offset="1" id="stop2893"/>
+    </linearGradient>
+    <linearGradient inkscape:collect="always" xlink:href="#linearGradient2915" id="linearGradient2971" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.115225,0,0,1,-1.889007,46.1244)" x1="329.18756" y1="289.87192" x2="598.66205" y2="548.62866"/>
+    <linearGradient inkscape:collect="always" xlink:href="#linearGradient2909" id="linearGradient2974" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.082601,0,0,1,-1.374219,40)" x1="145.45497" y1="332.74286" x2="326.12537" y2="576.18854"/>
+    <linearGradient inkscape:collect="always" xlink:href="#linearGradient2909" id="linearGradient2983" gradientUnits="userSpaceOnUse" gradientTransform="matrix(8.119652e-2,0,0,7.966468e-2,422.1323,954.272)" x1="145.45497" y1="332.74286" x2="326.12537" y2="576.18854"/>
+    <linearGradient inkscape:collect="always" xlink:href="#linearGradient2915" id="linearGradient2985" gradientUnits="userSpaceOnUse" gradientTransform="matrix(8.119652e-2,0,0,7.966468e-2,424.2434,954.7598)" x1="329.18756" y1="289.87192" x2="598.66205" y2="548.62866"/>
+    <linearGradient inkscape:collect="always" xlink:href="#linearGradient2909" id="linearGradient3878" gradientUnits="userSpaceOnUse" gradientTransform="matrix(3.824753e-2,0,0,3.538487e-2,403.2956,1005.814)" x1="145.45497" y1="332.74286" x2="326.12537" y2="576.18854"/>
+    <linearGradient inkscape:collect="always" xlink:href="#linearGradient2915" id="linearGradient3880" gradientUnits="userSpaceOnUse" gradientTransform="matrix(3.863231e-2,4.140938e-3,-3.672702e-3,3.351102e-2,404.9189,1005.265)" x1="329.18756" y1="289.87192" x2="598.66205" y2="548.62866"/>
+    <linearGradient inkscape:collect="always" xlink:href="#linearGradient3167" id="linearGradient3165" x1="413.51489" y1="1009.7088" x2="418.98639" y2="1030.8461" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.1676489,0,0,1.0769432,-42.634492,-73.039372)"/>
+    <linearGradient inkscape:collect="always" xlink:href="#linearGradient3167" id="linearGradient3181" x1="405.51611" y1="1009.0013" x2="412.79776" y2="1017.7543" gradientUnits="userSpaceOnUse"/>
+    <linearGradient inkscape:collect="always" xlink:href="#linearGradient3183" id="linearGradient3189" x1="403.69495" y1="1008.1696" x2="426.66931" y2="1033.0624" gradientUnits="userSpaceOnUse"/>
+    <linearGradient inkscape:collect="always" xlink:href="#linearGradient3167" id="linearGradient3217" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.1676489,0,0,1.0769432,-60.486221,-72.099807)" x1="413.51489" y1="1009.7088" x2="418.98639" y2="1030.8461"/>
+    <linearGradient inkscape:collect="always" xlink:href="#linearGradient3167" id="linearGradient3219" gradientUnits="userSpaceOnUse" x1="405.51611" y1="1009.0013" x2="412.79776" y2="1017.7543" gradientTransform="matrix(1.7988326,0,0,1.7988326,-724.41667,-1811.5399)"/>
+    <linearGradient inkscape:collect="always" xlink:href="#linearGradient2915" id="linearGradient3221" gradientUnits="userSpaceOnUse" gradientTransform="matrix(6.9493059e-2,7.4488542e-3,-6.6065761e-3,6.0280715e-2,3.9646274,-3.2364708)" x1="329.18756" y1="289.87192" x2="598.66205" y2="548.62866"/>
+    <linearGradient inkscape:collect="always" xlink:href="#linearGradient2909" id="linearGradient3223" gradientUnits="userSpaceOnUse" gradientTransform="matrix(6.8800903e-2,0,0,6.3651458e-2,1.0445825,-2.2489117)" x1="145.45497" y1="332.74286" x2="326.12537" y2="576.18854"/>
+    <linearGradient inkscape:collect="always" xlink:href="#linearGradient3183" id="linearGradient3225" gradientUnits="userSpaceOnUse" x1="403.69495" y1="1008.1696" x2="426.66931" y2="1033.0624" gradientTransform="matrix(1.7988326,0,0,1.7988326,-724.41667,-1811.5399)"/>
+  </defs>
+  <sodipodi:namedview id="base" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" gridtolerance="50" guidetolerance="10" objecttolerance="10" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="5.3216135" inkscape:cx="38.815775" inkscape:cy="21.291729" inkscape:document-units="px" inkscape:current-layer="layer1" showgrid="false" inkscape:guide-bbox="false" showguides="true" inkscape:window-width="1118" inkscape:window-height="800" inkscape:window-x="0" inkscape: [...]
+  <metadata id="metadata7">
+    <rdf:RDF>
+      <cc:Work rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g inkscape:label="Layer 1" inkscape:groupmode="layer" id="layer1">
+    <rect style="opacity:1;fill:url(#linearGradient3225);fill-opacity:1" id="rect2184" width="44.9123" height="44.777832" x="1.7629348" y="1.9884412" inkscape:export-xdpi="173.03" inkscape:export-ydpi="173.03" inkscape:export-filename="/home/alver/div/smalltheme/jabrefIkon-48.png" ry="5.0703583"/>
+    <path style="fill:url(#linearGradient3223);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" d="M 9.230458,6.042987 C 14.734544,6.042987 19.283468,6.1753811 19.283468,6.1753811 C 19.283468,6.1753811 24.803851,10.308919 21.946441,34.112871 C 21.123493,38.723638 17.071461,42.817062 12.120427,42.817062 C 7.1693556,42.817062 4.3251315,39.89288 4.3251315,36.482293 C 9.4349678,38.791815 13.223794,37.622933 14.544767,37 [...]
+    <path style="fill:url(#linearGradient3221);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.05348015px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" d="M 23.393566,6.0886773 C 36.731928,6.7477697 46.75263,17.557136 33.602104,24.722605 C 29.911636,27.055511 39.058934,38.657261 42.60508,43.909313 C 33.547329,40.892132 25.628364,31.6634 26.201311,25.390871 C 26.584264,20.852056 33.99263,21.159118 34.298737,18.36607 C 34.604827,15.573203 29.431546,15.86983 23.393 [...]
+    <path style="opacity:0.71111115;fill:url(#linearGradient3219);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" d="M 2.416732,36.468262 C 2.1420683,34.306425 1.8027545,27.329653 1.7829493,20.312407 C 1.7631442,13.294981 0.060980919,7.0555498 3.0662725,3.5749887 C 6.0762591,0.089031076 14.405519,2.018279 22.367854,2.0531764 C 30.330189,2.0882535 38.094615,2.0878938 40.143881,2.2639995 C 42.187661,2.4397454 19.2027 [...]
+  </g>
+</svg>
\ No newline at end of file
diff --git a/src/images/reference_list.xcf b/src/images/reference_list.xcf
new file mode 100644
index 0000000..6333b88
Binary files /dev/null and b/src/images/reference_list.xcf differ
diff --git a/src/java/net/sf/jabref/AdvancedTab.java b/src/java/net/sf/jabref/AdvancedTab.java
index f652a59..fb8f332 100644
--- a/src/java/net/sf/jabref/AdvancedTab.java
+++ b/src/java/net/sf/jabref/AdvancedTab.java
@@ -44,8 +44,15 @@ public class AdvancedTab extends JPanel implements PrefsTab {
     JPanel p1 = new JPanel(),
         p2 = new JPanel();
     String oldLnf = "";
-    boolean oldUseDef, oldBiblMode=false;
+    boolean oldUseDef, oldBiblMode=false, oldConvertToEquation, oldCaseKeeperOnSearch;
     int oldPort = -1;
+    
+    public final static String PREF_IMPORT_CONVERT_TO_EQUATION = "importFileConvertToEquation"; 
+    public final static String PREF_IMPORT_FILENAMEPATTERN = "importFileNamePattern"; 
+	
+    private JCheckBox useConvertToEquation;
+    private JCheckBox useCaseKeeperOnSearch;
+	
 
     public AdvancedTab(JabRefPreferences prefs, HelpDialog diag) {
         _prefs = prefs;
@@ -67,8 +74,9 @@ public class AdvancedTab extends JPanel implements PrefsTab {
             clName.setEnabled(((JCheckBox)e.getSource()).isSelected());
         }
         });
-
-
+    useConvertToEquation = new JCheckBox(Globals.lang("Prefer converting subscripts and superscripts to equations rather than text"));
+    useCaseKeeperOnSearch = new JCheckBox(Globals.lang("Add {} to specified title words on search to keep the correct case"));
+	
     FormLayout layout = new FormLayout
         ("1dlu, 8dlu, left:pref, 4dlu, fill:3dlu",//, 4dlu, fill:pref",// 4dlu, left:pref, 4dlu",
          "");
@@ -77,9 +85,7 @@ public class AdvancedTab extends JPanel implements PrefsTab {
 
     if (!Globals.ON_MAC) {
         builder.appendSeparator(Globals.lang("Look and feel"));
-        JLabel lab = new JLabel(Globals.lang("Default look and feel")+": "
-                 +(Globals.ON_WIN ? GUIGlobals.windowsDefaultLookAndFeel :
-                   GUIGlobals.linuxDefaultLookAndFeel));
+        JLabel lab = new JLabel(Globals.lang("Default look and feel")+": "+UIManager.getSystemLookAndFeelClassName());
         builder.nextLine();
         builder.append(pan);
         builder.append(lab);
@@ -141,6 +147,15 @@ public class AdvancedTab extends JPanel implements PrefsTab {
     builder.append(new JPanel());
     builder.append(biblatexMode);
     
+    builder.nextLine();    
+    builder.appendSeparator(Globals.lang("Import conversions"));
+    builder.nextLine();
+    builder.append(new JPanel());
+    builder.append(useConvertToEquation);
+    builder.nextLine();
+    builder.append(pan);
+    builder.append(useCaseKeeperOnSearch);
+        
     pan = builder.getPanel();
     pan.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
     setLayout(new BorderLayout());
@@ -162,6 +177,10 @@ public class AdvancedTab extends JPanel implements PrefsTab {
         useIEEEAbrv.setSelected(Globals.prefs.getBoolean("useIEEEAbrv"));
         oldBiblMode = Globals.prefs.getBoolean("biblatexMode");
         biblatexMode.setSelected(oldBiblMode);
+        oldConvertToEquation = Globals.prefs.getBoolean("useConvertToEquation");
+        useConvertToEquation.setSelected(oldConvertToEquation);
+        oldCaseKeeperOnSearch = Globals.prefs.getBoolean("useCaseKeeperOnSearch");
+        useCaseKeeperOnSearch.setSelected(oldCaseKeeperOnSearch);
     }
 
     public void storeSettings() {
@@ -177,7 +196,7 @@ public class AdvancedTab extends JPanel implements PrefsTab {
             int port = Integer.parseInt(remoteServerPort.getText());
             if (port != oldPort) {
                 _prefs.putInt("remoteServerPort", port);
-                /*JOptionPane.showMessageDialog(null, Globals.lang("You have changed the menu and label font size. "
+                /*JOptionPane.showMessageDialog(null, Glbals.lang("You have changed the menu and label font size. "
                         + "You must restart JabRef for this to come into effect."), Globals.lang("Changed font settings"),
                         JOptionPane.WARNING_MESSAGE);*/
             }
@@ -217,6 +236,9 @@ public class AdvancedTab extends JPanel implements PrefsTab {
             		.concat("You must restart JabRef for this change to come into effect."),
                     Globals.lang("BibLaTeX mode"), JOptionPane.WARNING_MESSAGE);
         }
+        
+        _prefs.putBoolean("useConvertToEquation", useConvertToEquation.isSelected());
+        _prefs.putBoolean("useCaseKeeperOnSearch", useCaseKeeperOnSearch.isSelected());
     }
 
     public boolean readyToClose() {
diff --git a/src/java/net/sf/jabref/BasePanel.java b/src/java/net/sf/jabref/BasePanel.java
index 034c052..e6a2c41 100644
--- a/src/java/net/sf/jabref/BasePanel.java
+++ b/src/java/net/sf/jabref/BasePanel.java
@@ -314,7 +314,6 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
 	}
 
     public void output(String s) {
-    //Util.pr("\""+s+"\""+(SwingUtilities.isEventDispatchThread()));
         if (!suppressOutput)
             frame.output(s);
     }
@@ -607,10 +606,10 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
                           undoManager.addEdit(ce);
                           //entryTable.clearSelection();
                           //entryTable.revalidate();
-                          output(Globals.lang("Pasted")+" "+
-                                 (bes.length>1 ? bes.length+" "+
-                                  Globals.lang("entries") : "1 "+Globals.lang("entry"))
-                                 +".");
+                          output(Globals.lang("Pasted") + " " +
+                                  (bes.length > 1 ? bes.length + " " +
+                                          Globals.lang("entries") : "1 " + Globals.lang("entry"))
+                                  + ".");
                           markBaseChanged();
                         	  
                           if (Globals.prefs.getBoolean("autoOpenForm")) {
@@ -1016,8 +1015,8 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
 
                         if (keys.size() == bes.length)
                             // All entries had keys.
-                            output(Globals.lang((bes.length > 1) ? "Copied keys"
-                                                : "Copied key")+".");
+                            output(bes.length > 1 ? Globals.lang("Copied keys")
+                                                  : Globals.lang("Copied key")+".");
                         else
                             output(Globals.lang("Warning")+": "+(bes.length-keys.size())
                                    +" "+Globals.lang("out of")+" "+bes.length+" "+
@@ -1524,15 +1523,10 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
               
               for (SpecialFieldValue prio: Priority.getInstance().getValues()) {
 	              actions.put(prio.getActionName(), prio.getAction(this.frame));
-//	            		  new SpecialFieldAction(frame, Priority.getInstance(), strPrio, false, 
-//	            				  Globals.lang("Set priority to").concat(" ").concat(strPrio), "Set priority %0 for %1 entries"));
               }
               
               for (SpecialFieldValue prio: Rank.getInstance().getValues()) {
 	              actions.put(prio.getActionName(), prio.getAction(this.frame));
-//	              actions.put(prio.getActionName(),
-//	            		  new SpecialFieldAction(frame, Priority.getInstance(), strPrio, false, 
-//	            				  Globals.lang("Set ranking to").concat(" ").concat(strPrio), "Set rank %0 for %1 entries"));
               }
               
               actions.put("togglePreview", new BaseAction() {
@@ -1599,7 +1593,6 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
         actions.put("autoSetPdf", new AutoSetExternalFileForEntries(this, "pdf"));
         actions.put("autoSetPs", new AutoSetExternalFileForEntries(this, "ps"));
         actions.put("autoSetFile", new SynchronizeFileField(this));
-        actions.put("upgradeLinks", new UpgradeExternalLinks(this));
 
         actions.put("back", new BaseAction() {
             public void action() throws Throwable {
@@ -2738,6 +2731,7 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
                 markBaseChanged();
                 frame.output(name);
             } catch (CannotUndoException ex) {
+                ex.printStackTrace();
                 frame.output(Globals.lang("Nothing to undo")+".");
             }
             // After everything, enable/disable the undo/redo actions
diff --git a/src/java/net/sf/jabref/BibLatexEntryTypes.java b/src/java/net/sf/jabref/BibLatexEntryTypes.java
index 0f76c57..6710da0 100644
--- a/src/java/net/sf/jabref/BibLatexEntryTypes.java
+++ b/src/java/net/sf/jabref/BibLatexEntryTypes.java
@@ -799,6 +799,42 @@ public class BibLatexEntryTypes {
 	}
     };
 
+       /**
+     * This type is used for IEEEtran.bst to control various 
+     * be repeated or not. Not a very elegant solution, but it works...
+     */
+    public static final BibtexEntryType IEEETRANBSTCTL = new BibtexEntryType() {
+            public String getName()
+            {
+                return "IEEEtranBSTCTL";
+            }
+
+            public String[] getOptionalFields()
+            {
+                return new String[] {
+                "ctluse_article_number", "ctluse_paper", "ctluse_forced_etal",
+                "ctlmax_names_forced_etal", "ctlnames_show_etal", "ctluse_alt_spacing",
+                "ctlalt_stretch_factor", "ctldash_repeated_names", "ctlname_format_string",
+                "ctlname_latex_cmd", "ctlname_url_prefix"
+                };
+            }
+
+            public String[] getRequiredFields()
+            {
+                return null;
+            }
+
+            public String describeRequiredFields()
+            {
+                return "None";
+            }
+
+            public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database)
+            {
+		return true;
+           }
+        };
+
     // Unsupported types and custom types left out
 
     /*public static final BibtexEntryType ARTICLE = new BibtexEntryType() {
diff --git a/src/java/net/sf/jabref/BibtexEntryType.java b/src/java/net/sf/jabref/BibtexEntryType.java
index d257e07..f60c269 100644
--- a/src/java/net/sf/jabref/BibtexEntryType.java
+++ b/src/java/net/sf/jabref/BibtexEntryType.java
@@ -791,6 +791,48 @@ public abstract class BibtexEntryType implements Comparable<BibtexEntryType>
         };
 
     /**
+     * This type is used for IEEEtran.bst to control various 
+     * be repeated or not. Not a very elegant solution, but it works...
+     */
+    public static final BibtexEntryType IEEETRANBSTCTL =
+        new BibtexEntryType()
+        {
+            public String getName()
+            {
+                return "IEEEtranBSTCTL";
+            }
+
+            public String[] getOptionalFields()
+            {
+                return new String[] {
+                "ctluse_article_number", "ctluse_paper", "ctluse_forced_etal",
+                "ctlmax_names_forced_etal", "ctlnames_show_etal", "ctluse_alt_spacing",
+                "ctlalt_stretch_factor", "ctldash_repeated_names", "ctlname_format_string",
+                "ctlname_latex_cmd", "ctlname_url_prefix"
+                };
+            }
+
+            public String[] getRequiredFields()
+            {
+                return null;
+            }
+
+            public String describeRequiredFields()
+            {
+                return "None";
+            }
+
+            public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database)
+            {
+		return true;
+           }
+
+            public boolean isVisibleAtNewEntryDialog() {
+            	return false;
+            }
+};
+
+    /**
      * This type is provided as an emergency choice if the user makes
      * customization changes that remove the type of an entry.
      */
@@ -863,6 +905,10 @@ public abstract class BibtexEntryType implements Comparable<BibtexEntryType>
 	    if (opt[i].equals(field)) return true;
 	return false;
     }
+    
+    public boolean isVisibleAtNewEntryDialog() {
+    	return true;
+    }
 
     public static TreeMap<String, BibtexEntryType> ALL_TYPES = new TreeMap<String, BibtexEntryType>();
     public static TreeMap<String, BibtexEntryType> STANDARD_TYPES = new TreeMap<String, BibtexEntryType>();
@@ -888,6 +934,7 @@ public abstract class BibtexEntryType implements Comparable<BibtexEntryType>
             ALL_TYPES.put("periodical", PERIODICAL);
             ALL_TYPES.put("misc", MISC);
             ALL_TYPES.put("other", OTHER);
+            ALL_TYPES.put("ieeetranbstctl", IEEETRANBSTCTL);
         }
         else {
             ALL_TYPES.put("article", BibLatexEntryTypes.ARTICLE);
@@ -919,6 +966,7 @@ public abstract class BibtexEntryType implements Comparable<BibtexEntryType>
 	    ALL_TYPES.put("phdthesis", BibLatexEntryTypes.PHDTHESIS);
 	    ALL_TYPES.put("techreport", BibLatexEntryTypes.TECHREPORT);
 	    ALL_TYPES.put("www", BibLatexEntryTypes.WWW);
+            ALL_TYPES.put("ieeetranbstctl", BibLatexEntryTypes.IEEETRANBSTCTL);
         }
 
         // We need a record of the standard types, in case the user wants
diff --git a/src/java/net/sf/jabref/ContentSelectorDialog2.java b/src/java/net/sf/jabref/ContentSelectorDialog2.java
index e684bf0..81ea895 100644
--- a/src/java/net/sf/jabref/ContentSelectorDialog2.java
+++ b/src/java/net/sf/jabref/ContentSelectorDialog2.java
@@ -26,7 +26,7 @@ import javax.swing.*;
 import javax.swing.event.ListSelectionEvent;
 import javax.swing.event.ListSelectionListener;
 
-import com.jgoodies.forms.builder.ButtonBarBuilder2;
+import com.jgoodies.forms.builder.ButtonBarBuilder;
 
 public class ContentSelectorDialog2 extends JDialog {
 
@@ -474,7 +474,7 @@ public class ContentSelectorDialog2 extends JDialog {
 	wordEditPan.add(wordEditField);
 
 	// Add buttons:
-        ButtonBarBuilder2 bsb = new ButtonBarBuilder2(buttonPan);
+        ButtonBarBuilder bsb = new ButtonBarBuilder(buttonPan);
         bsb.addGlue();
         bsb.addButton(ok);
 	    bsb.addButton(apply);
diff --git a/src/java/net/sf/jabref/EntryTypeDialog.java b/src/java/net/sf/jabref/EntryTypeDialog.java
index 1b2bba3..4fcb93a 100644
--- a/src/java/net/sf/jabref/EntryTypeDialog.java
+++ b/src/java/net/sf/jabref/EntryTypeDialog.java
@@ -26,7 +26,7 @@ import java.awt.event.WindowEvent;
 
 import javax.swing.*;
 
-import com.jgoodies.forms.builder.ButtonBarBuilder2;
+import com.jgoodies.forms.builder.ButtonBarBuilder;
 
 public class EntryTypeDialog extends JDialog implements ActionListener {
 
@@ -79,7 +79,7 @@ public class EntryTypeDialog extends JDialog implements ActionListener {
 	cancel.getActionMap().put("close", cancelAction);
 
 	//buttons.add(ok);
-    ButtonBarBuilder2 bb = new ButtonBarBuilder2(buttons);
+    ButtonBarBuilder bb = new ButtonBarBuilder(buttons);
     //buttons.setBorder(BorderFactory.createEmptyBorder(2,2,2,2));
     bb.addGlue();
     bb.addButton(cancel);
@@ -94,18 +94,21 @@ public class EntryTypeDialog extends JDialog implements ActionListener {
 	con.insets = new Insets(4, 4, 4, 4);
 	int col = 0;
 
-	for (BibtexEntryType tp : BibtexEntryType.ALL_TYPES.values()){
-        TypeButton b = new TypeButton(Util.nCase(tp.getName()), tp);
-	    b.addActionListener(this);
-	    // Check if we should finish the row.
-	    col++;
-	    if (col == COLNUM) {
-		col = 0;
-		con.gridwidth = GridBagConstraints.REMAINDER;
-	    } else
-		con.gridwidth = 1;
-	    gbl.setConstraints(b, con);
-	    pan.add(b);
+	for (BibtexEntryType tp : BibtexEntryType.ALL_TYPES.values()) {
+		if (tp.isVisibleAtNewEntryDialog()) {
+			TypeButton b = new TypeButton(Util.nCase(tp.getName()), tp);
+			b.addActionListener(this);
+			// Check if we should finish the row.
+			col++;
+			if (col == COLNUM) {
+				col = 0;
+				con.gridwidth = GridBagConstraints.REMAINDER;
+			} else {
+				con.gridwidth = 1;
+			}
+			gbl.setConstraints(b, con);
+			pan.add(b);
+		}
 	}
 	pan.setBorder(BorderFactory.createTitledBorder
 		      (BorderFactory.createEtchedBorder(),
diff --git a/src/java/net/sf/jabref/ExternalTab.java b/src/java/net/sf/jabref/ExternalTab.java
index 5f1c709..b6b05c3 100644
--- a/src/java/net/sf/jabref/ExternalTab.java
+++ b/src/java/net/sf/jabref/ExternalTab.java
@@ -15,7 +15,7 @@
 */
 package net.sf.jabref;
 
-import java.awt.BorderLayout;
+import java.awt.*;
 import java.awt.event.ItemEvent;
 import java.awt.event.ItemListener;
 import java.awt.event.ActionListener;
@@ -174,15 +174,19 @@ public class ExternalTab extends JPanel implements PrefsTab {
 		builder.appendSeparator(Globals.lang("External programs"));
 
 		builder.nextLine();
-		
-        addSettingsButton(new PushToLyx(), builder);
-        addSettingsButton(new PushToEmacs(), builder);
-        addSettingsButton(new PushToWinEdt(), builder);
-        addSettingsButton(new PushToVim(), builder);
-        addSettingsButton(new PushToLatexEditor(), builder);
-        addSettingsButton(new PushToTeXstudio(), builder);
-
-        //builder.nextLine();
+
+        JPanel butpan = new JPanel();
+        butpan.setLayout(new GridLayout(2,3));
+        addSettingsButton(new PushToLyx(), butpan);
+        addSettingsButton(new PushToEmacs(), butpan);
+        addSettingsButton(new PushToWinEdt(), butpan);
+        addSettingsButton(new PushToVim(), butpan);
+        addSettingsButton(new PushToLatexEditor(), butpan);
+        addSettingsButton(new PushToTeXstudio(), butpan);
+        builder.append(new JPanel());
+        builder.append(butpan, 3);
+
+        builder.nextLine();
         builder.append(pan);
         builder.append(editFileTypes);
         
@@ -192,18 +196,25 @@ public class ExternalTab extends JPanel implements PrefsTab {
 
     }
 
-    private void addSettingsButton(final PushToApplication pt, DefaultFormBuilder b) {
-        b.append(new JPanel());
-        b.append(Globals.lang("Settings for %0", pt.getName())+":");
-        JButton button = new JButton(pt.getIcon());
+    private void addSettingsButton(final PushToApplication pt, JPanel p) {
+        //if (b.getColumn() < 2)
+        //    b.append(new JPanel());
+        //JPanel pan = new JPanel();
+        //pan.setLayout(new BorderLayout());
+        //pan.add(new JLabel(Globals.lang("Settings for %0", pt.getApplicationName())), BorderLayout.CENTER);
+        JButton button = new JButton(Globals.lang("Settings for %0", pt.getApplicationName()),
+                pt.getIcon());
         button.addActionListener(new ActionListener() {
             public void actionPerformed(ActionEvent event) {
                 PushToApplicationButton.showSettingsDialog(_frame, pt, pt.getSettingsPanel());
             }
         });
-
-        b.append(button);
-        b.nextLine();
+        p.add(button);//, BorderLayout.CENTER);
+        //b.append(button);
+        //b.nextLine();
+        //b.append(pan);
+        //if (b.getColumn() >= 6)
+        //    b.nextLine();
     }
 
 	public void setValues() {
diff --git a/src/java/net/sf/jabref/FindUnlinkedFilesDialog.java b/src/java/net/sf/jabref/FindUnlinkedFilesDialog.java
index 0aded7a..9e518cf 100644
--- a/src/java/net/sf/jabref/FindUnlinkedFilesDialog.java
+++ b/src/java/net/sf/jabref/FindUnlinkedFilesDialog.java
@@ -23,12 +23,7 @@ import java.awt.event.WindowEvent;
 import java.io.File;
 import java.io.FileFilter;
 import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Enumeration;
-import java.util.Iterator;
-import java.util.List;
-import java.util.TreeMap;
-import java.util.Vector;
+import java.util.*;
 
 import javax.swing.AbstractAction;
 import javax.swing.Action;
@@ -60,12 +55,13 @@ import javax.swing.tree.TreeModel;
 import javax.swing.tree.TreeNode;
 import javax.swing.tree.TreePath;
 
-import com.jgoodies.forms.builder.ButtonBarBuilder2;
+import com.jgoodies.forms.builder.ButtonBarBuilder;
 
 import net.sf.jabref.imports.EntryFromFileCreator;
 import net.sf.jabref.imports.EntryFromFileCreatorManager;
 import net.sf.jabref.imports.UnlinkedFilesCrawler;
 import net.sf.jabref.imports.UnlinkedPDFFileFilter;
+import net.sf.jabref.undo.CountingUndoManager;
 
 /**
  * GUI Dialog for the feature "Find unlinked files".
@@ -109,8 +105,8 @@ public class FindUnlinkedFilesDialog extends JDialog {
 
 	protected JButton buttonBrowse;
 	protected JButton buttonScan;
-	protected JButton buttonOk;
-	protected JButton buttonCancel;
+	protected JButton buttonApply;
+	protected JButton buttonClose;
 
 	/* Options for the TreeView */
 	protected JButton buttonOptionSelectAll;
@@ -171,6 +167,7 @@ public class FindUnlinkedFilesDialog extends JDialog {
 		lastSelectedDirectory = loadLastSelectedDirectory();
 		
 		initialize();
+        buttonApply.setEnabled(false);
 	}
 	
 	/**
@@ -528,8 +525,8 @@ public class FindUnlinkedFilesDialog extends JDialog {
 
 		progressBarImporting.setVisible(true);
 		labelImportingInfo.setVisible(true);
-		buttonOk.setVisible(false);
-		buttonCancel.setVisible(false);
+		buttonApply.setVisible(false);
+		buttonClose.setVisible(false);
 		disOrEnableDialog(false);
 		
 		labelImportingInfo.setEnabled(true);
@@ -545,14 +542,17 @@ public class FindUnlinkedFilesDialog extends JDialog {
 		threadState = new int[] {1};
 		new Thread(new Runnable() {
 			public void run() {
-				List<String> errors = creatorManager.addEntrysFromFiles(fileList, database, entryType, checkBoxWhyIsThereNoGetSelectedStupidSwing,  new ChangeListener() {
+                List<String> errors = new LinkedList<String>();
+                int count = creatorManager.addEntrysFromFiles(fileList, database, frame.basePanel(),
+                        entryType,
+                        checkBoxWhyIsThereNoGetSelectedStupidSwing,  new ChangeListener() {
 					int counter = 0;
 					public void stateChanged(ChangeEvent e) {
 						progressBarImporting.setValue(++counter);
 						progressBarImporting.setString(counter + " of " + progressBarImporting.getMaximum());
 					}
-				});
-				importFinishedHandler(errors);
+				}, errors);
+				importFinishedHandler(count, errors);
 			}
 		}).start();
 		
@@ -562,7 +562,7 @@ public class FindUnlinkedFilesDialog extends JDialog {
 	 * 
 	 * @param errors
 	 */
-	protected void importFinishedHandler(List<String> errors) {
+	protected void importFinishedHandler(int count, List<String> errors) {
 		
 		if (errors != null && errors.size() > 0) {
 			
@@ -582,11 +582,11 @@ public class FindUnlinkedFilesDialog extends JDialog {
 		
 		progressBarImporting.setVisible(false);
 		labelImportingInfo.setVisible(false);
-		buttonOk.setVisible(true);
-		buttonCancel.setVisible(true);
-		
+		buttonApply.setVisible(true);
+		buttonClose.setVisible(true);
 		disOrEnableDialog(true);
-		setDefaultCloseOperation(DISPOSE_ON_CLOSE);
+        setDefaultCloseOperation(DISPOSE_ON_CLOSE);
+        frame.basePanel().markBaseChanged();
 	}
 	
 	/**
@@ -609,10 +609,10 @@ public class FindUnlinkedFilesDialog extends JDialog {
 		progressBarSearching.setVisible(false);
 		labelSearchingDirectoryInfo.setVisible(false);
 		buttonScan.setVisible(true);
-		
 		actionSelectAll.actionPerformed(null);
 		
 		disOrEnableDialog(true);
+        buttonApply.setEnabled(true);
 	}
 
 	/**
@@ -648,13 +648,13 @@ public class FindUnlinkedFilesDialog extends JDialog {
 			}
 		};
 		
-		buttonOk.addActionListener(actionListenerImportEntrys);
+		buttonApply.addActionListener(actionListenerImportEntrys);
 		
-		buttonCancel.addActionListener(new ActionListener() {
-			public void actionPerformed(ActionEvent e) {
-				dispose();
-			}
-		});
+		buttonClose.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                dispose();
+            }
+        });
 	}
 
 	/**
@@ -737,15 +737,14 @@ public class FindUnlinkedFilesDialog extends JDialog {
 		buttonScan = new JButton(Globals.lang("Scan directory"));
 		buttonScan.setMnemonic('S');
 		buttonScan.setToolTipText(Globals.lang("Searches the selected directory for unlinked files."));
-		buttonOk = new JButton(Globals.lang("Ok"));
-		buttonOk.setMnemonic('I');
-		buttonOk.setToolTipText(Globals.lang("Starts the import of bibtex entries."));
-		buttonCancel = new JButton(Globals.lang("Cancel"));
-		buttonCancel.setToolTipText(Globals.lang("Leave this dialog."));
-		buttonCancel.setMnemonic('C');
+		buttonApply = new JButton(Globals.lang("Apply"));
+		buttonApply.setMnemonic('I');
+		buttonApply.setToolTipText(Globals.lang("Starts the import of bibtex entries."));
+		buttonClose = new JButton(Globals.lang("Close"));
+		buttonClose.setToolTipText(Globals.lang("Leave this dialog."));
+		buttonClose.setMnemonic('C');
 
 		
-		
 		/* Options for the TreeView */
 		buttonOptionSelectAll = new JButton();
 		buttonOptionSelectAll.setMnemonic('A');
@@ -873,10 +872,10 @@ public class FindUnlinkedFilesDialog extends JDialog {
 		addComponent(gbl, getContentPane(), panelButtons, GridBagConstraints.HORIZONTAL, GridBagConstraints.CENTER, new Insets(10, 6, 10, 6),
 				0, 3, 1, 1, 0, 0, 0, 0);
 		
-	    ButtonBarBuilder2 bb = new ButtonBarBuilder2();
+	    ButtonBarBuilder bb = new ButtonBarBuilder();
         bb.addGlue();
-        bb.addButton(buttonOk);
-        bb.addButton(buttonCancel);
+        bb.addButton(buttonApply);
+        bb.addButton(buttonClose);
         bb.addGlue();
 
         bb.getPanel().setBorder(BorderFactory.createEmptyBorder(5,5,5,5));        
diff --git a/src/java/net/sf/jabref/GUIGlobals.java b/src/java/net/sf/jabref/GUIGlobals.java
index 0c4517e..f40c306 100644
--- a/src/java/net/sf/jabref/GUIGlobals.java
+++ b/src/java/net/sf/jabref/GUIGlobals.java
@@ -49,15 +49,7 @@ public class GUIGlobals {
 	helpTitle = "JabRef help",
 	TYPE_HEADER = "entrytype",
 	NUMBER_COL = "#",
-	encPrefix = "Encoding: ", // Part of the signature in written bib files.
-	linuxDefaultLookAndFeel = "com.jgoodies.looks.plastic.Plastic3DLookAndFeel",
-
-    //linuxDefaultLookAndFeel = "com.sun.java.swing.plaf.gtk.GTKLookAndFeel",
-    //linuxDefaultLookAndFeel = "org.jvnet.substance.skin.SubstanceCremeCoffeeLookAndFeel",
-    //linuxDefaultLookAndFeel = "org.jvnet.substance.skin.SubstanceNebulaLookAndFeel",
-    //linuxDefaultLookAndFeel = "org.jvnet.substance.skin.SubstanceBusinessLookAndFeel",
-    windowsDefaultLookAndFeel = "com.jgoodies.looks.windows.WindowsLookAndFeel";
-    //windowsDefaultLookAndFeel = "com.sun.java.swing.plaf.windows.WindowsLookAndFeel";
+	encPrefix = "Encoding: "; // Part of the signature in written bib files.
 
 	public static Font CURRENTFONT,
 	typeNameFont,
diff --git a/src/java/net/sf/jabref/GeneralTab.java b/src/java/net/sf/jabref/GeneralTab.java
index 0c1cc0f..c2c8edf 100644
--- a/src/java/net/sf/jabref/GeneralTab.java
+++ b/src/java/net/sf/jabref/GeneralTab.java
@@ -226,8 +226,8 @@ public class GeneralTab extends JPanel implements PrefsTab {
         _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."),
+            JOptionPane.showMessageDialog(null, Globals.lang("To disable the memory stick mode"
+            		+ " rename or remove the jabref.xml file in the same folder as JabRef."),
             		Globals.lang("Memory Stick Mode"),
             		JOptionPane.INFORMATION_MESSAGE);
         }
diff --git a/src/java/net/sf/jabref/Globals.java b/src/java/net/sf/jabref/Globals.java
index 320fb93..583e38d 100644
--- a/src/java/net/sf/jabref/Globals.java
+++ b/src/java/net/sf/jabref/Globals.java
@@ -28,9 +28,12 @@ import java.util.MissingResourceException;
 import java.util.ResourceBundle;
 import java.util.logging.ConsoleHandler;
 import java.util.logging.Filter;
+import java.util.logging.Formatter;
 import java.util.logging.Handler;
 import java.util.logging.LogRecord;
 import java.util.logging.Logger;
+import java.util.logging.SimpleFormatter;
+import java.util.logging.StreamHandler;
 import java.util.regex.Pattern;
 
 import net.sf.jabref.collab.FileUpdateMonitor;
@@ -190,9 +193,7 @@ public class Globals {
     public static final int NEWLINE_LENGTH = System.getProperty("line.separator").length();
 
     // Instantiate logger:
-    // TODO: Doesn't work in Java 5:
-    // private static Logger logger = Logger.getLogger(Logger.GLOBAL_LOGGER_NAME);
-    private static Logger logger = Logger.getLogger("global");
+    private static Logger logger = Logger.getLogger(Logger.GLOBAL_LOGGER_NAME);
 
     /**
 	 * true if we have unix newlines
@@ -1393,4 +1394,44 @@ public class Globals {
 		return pattern;
 	}
 
+	/**
+	 * With Java 7, one could directly set a format for the SimpleFormatter
+	 * (http://stackoverflow.com/a/10722260/873282) and use that in a StreamHandler.
+	 * As JabRef is compatible with Java6, we have to write our own Handler
+	 */
+	private static class StdoutConsoleHandler extends Handler {
+
+		@Override
+        public void close() throws SecurityException {
+        }
+
+		@Override
+        public void flush() {
+			System.out.flush();
+        }
+
+		@Override
+        public void publish(LogRecord record) {
+	        System.out.println(record.getMessage());
+	        System.out.flush();
+        }
+	}
+
+	public static void setupLogging() {
+		// get the root logger. It is NOT GLOBAL_LOGGER_NAME
+	    Logger rootLogger = Logger.getLogger("");
+	    
+	    // disable console logging by removing all handlers
+	    Handler[] handlers = rootLogger.getHandlers();
+	    for(Handler handler : handlers) {
+	        rootLogger.removeHandler(handler);
+	    }
+
+	    // add new handler logging to System.out
+		StdoutConsoleHandler h = new StdoutConsoleHandler();
+		rootLogger.addHandler(h);
+
+		rootLogger.addHandler(errorConsole);
+    }
+
 }
diff --git a/src/java/net/sf/jabref/JabRef.java b/src/java/net/sf/jabref/JabRef.java
index 0af1817..ae57a65 100644
--- a/src/java/net/sf/jabref/JabRef.java
+++ b/src/java/net/sf/jabref/JabRef.java
@@ -15,20 +15,40 @@
 */
 package net.sf.jabref;
 
-import com.jgoodies.looks.FontPolicies;
-import com.jgoodies.looks.FontPolicy;
-import com.jgoodies.looks.FontSet;
-import com.jgoodies.looks.FontSets;
 import com.jgoodies.looks.plastic.Plastic3DLookAndFeel;
-import com.jgoodies.looks.windows.WindowsLookAndFeel;
+import com.jgoodies.looks.plastic.theme.SkyBluer;
 import gnu.dtools.ritopt.BooleanOption;
 import gnu.dtools.ritopt.Options;
 import gnu.dtools.ritopt.StringOption;
-import net.sf.jabref.export.*;
-import net.sf.jabref.imports.*;
+
+import java.awt.Font;
+import java.awt.Frame;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Vector;
+import java.util.prefs.BackingStoreException;
+
+import javax.swing.*;
+
+import net.sf.jabref.export.AutoSaveManager;
+import net.sf.jabref.export.ExportFormats;
+import net.sf.jabref.export.FileActions;
+import net.sf.jabref.export.IExportFormat;
+import net.sf.jabref.export.SaveException;
+import net.sf.jabref.export.SaveSession;
+import net.sf.jabref.imports.AutosaveStartupPrompter;
+import net.sf.jabref.imports.EntryFetcher;
+import net.sf.jabref.imports.ImportInspectionCommandLine;
+import net.sf.jabref.imports.OpenDatabaseAction;
+import net.sf.jabref.imports.ParserResult;
 import net.sf.jabref.plugin.PluginCore;
-import net.sf.jabref.plugin.SidePanePlugin;
 import net.sf.jabref.plugin.PluginInstaller;
+import net.sf.jabref.plugin.SidePanePlugin;
 import net.sf.jabref.plugin.core.JabRefPlugin;
 import net.sf.jabref.plugin.core.generated._JabRefPlugin;
 import net.sf.jabref.plugin.core.generated._JabRefPlugin.EntryFetcherExtension;
@@ -36,19 +56,6 @@ import net.sf.jabref.remote.RemoteListener;
 import net.sf.jabref.util.Pair;
 import net.sf.jabref.wizard.auximport.AuxCommandLine;
 
-import javax.swing.*;
-import javax.swing.plaf.metal.MetalLookAndFeel;
-import java.awt.*;
-import java.awt.event.KeyEvent;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.util.*;
-import java.util.List;
-import java.util.prefs.BackingStoreException;
-
-import spin.Spin;
-
 /**
  * JabRef Main Class - The application gets started here.
  *
@@ -94,6 +101,7 @@ public class JabRef {
         }
 
         Globals.startBackgroundTasks();
+        Globals.setupLogging();
 		Globals.prefs = prefs;
         String langStr = prefs.get("language");
         String[] parts = langStr.split("_");
@@ -623,6 +631,29 @@ public class JabRef {
 
         return new ParserResult(result);
     }
+    
+    private void setLookAndFeel() {
+        // * Look first into the Preferences
+        // * Fallback to the System Look & Fell
+        try {
+            String systemLnF = UIManager.getSystemLookAndFeelClassName();
+            if (!Globals.prefs.getBoolean("useDefaultLookAndFeel"))
+                systemLnF = Globals.prefs.get("lookAndFeel");
+
+            // At all cost, avoid ending up with the Metal look and feel:
+            if (systemLnF.equals("javax.swing.plaf.metal.MetalLookAndFeel")) {
+                Plastic3DLookAndFeel lnf = new Plastic3DLookAndFeel();
+                Plastic3DLookAndFeel.setCurrentTheme(new SkyBluer());
+                com.jgoodies.looks.Options.setPopupDropShadowEnabled(true);
+                UIManager.setLookAndFeel(lnf);
+            }
+            else {
+                UIManager.setLookAndFeel(systemLnF);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
 
 	public void openWindow(Vector<ParserResult> loaded) {
         if (!graphicFailure && !disableGui.isInvoked()) {
@@ -646,135 +677,13 @@ public class JabRef {
             // Set antialiasing on everywhere. This only works in JRE >= 1.5.
             // Or... it doesn't work, period.
             //System.setProperty("swing.aatext", "true");
-            // If we are not on Mac, deal with font sizes and LookAndFeels:
-            if (!Globals.ON_MAC) {
-                int fontSizes = Globals.prefs.getInt("menuFontSize");
-                boolean overrideDefaultFonts = Globals.prefs.getBoolean("overrideDefaultFonts");
-                String defaultLookAndFeel;
-
-                if (Globals.ON_WIN)
-                    defaultLookAndFeel = GUIGlobals.windowsDefaultLookAndFeel;
-                else
-                    defaultLookAndFeel = GUIGlobals.linuxDefaultLookAndFeel;
-
-                String lookAndFeel = null;
-
-                if (!Globals.prefs.getBoolean("useDefaultLookAndFeel"))
-                    lookAndFeel = Globals.prefs.get("lookAndFeel");
-                else
-                    lookAndFeel = defaultLookAndFeel;
-
-                LookAndFeel lnf = null;
-                Object objLnf = null;
-
-
-                try {
-                    if (lookAndFeel != null)
-                        objLnf = Class.forName(lookAndFeel).newInstance();
-                    else
-                        objLnf = Class.forName(defaultLookAndFeel).newInstance();
-                } catch (Exception ex) {
-                    ex.printStackTrace();
-                    if (splashScreen != null) {// do this only if splashscreen was actually created
-                        splashScreen.dispose();
-                        splashScreen = null;
-                    }
-                    JOptionPane.showMessageDialog(null, Globals.lang("Error setting look and feel")+
-                        ": "+lookAndFeel);
-                    try {
-                        objLnf = Class.forName(defaultLookAndFeel).newInstance();
-                    } catch (Exception ex2) {
-                    }
-                }
-
-                if (objLnf != null)
-                    lnf = (LookAndFeel) objLnf;
-
-                // Set font sizes if we are using a JGoodies look and feel.
-                if ((lnf != null) && (lnf instanceof Plastic3DLookAndFeel)) {
-
-                    //UIManager.put("jgoodies.popupDropShadowEnabled", Boolean.TRUE);
-                    MetalLookAndFeel.setCurrentTheme(new
-                     com.jgoodies.looks.plastic.theme.SkyBluer());
-
-                    // Set a "model" icon size, so menu items are evenly spaced even though
-                    // only some items have icons. We load an arbitrary icon and look at
-                    // its size to determine what size to use:
-                    int defaultIconSize = GUIGlobals.getImage("open").getIconWidth();
-                    com.jgoodies.looks.Options.setDefaultIconSize
-                            (new Dimension(defaultIconSize, defaultIconSize));
-
-
-                    if (overrideDefaultFonts) {
-                        FontSet fontSet = FontSets.createDefaultFontSet(
-                            new Font("Tahoma", Font.PLAIN, fontSizes),    // control font
-                            new Font("Tahoma", Font.PLAIN, fontSizes),    // menu font
-                            new Font("Tahoma", Font.BOLD, fontSizes)     // title font
-                            );
-                        FontPolicy fixedPolicy = FontPolicies.createFixedPolicy(fontSet);
-                        Plastic3DLookAndFeel.setFontPolicy(fixedPolicy);
-                    }
-
-                    //Plastic3DLookAndFeel plLnf = (Plastic3DLookAndFeel) lnf;
-                }
-                else if ((lnf != null) && (lnf instanceof WindowsLookAndFeel)) {
-
-                    // Set a "model" icon size, so menu items are evenly spaced even though
-                    // only some items have icons. We load an arbitrary icon and look at
-                    // its size to determine what size to use:
-                    int defaultIconSize = GUIGlobals.getImage("open").getIconWidth();
-                    com.jgoodies.looks.Options.setDefaultIconSize
-                        (new Dimension(defaultIconSize, defaultIconSize));
-
-                    if (overrideDefaultFonts) {
-                        FontSet fontSet = FontSets.createDefaultFontSet(
-                            new Font("Tahoma", Font.PLAIN, fontSizes),    // control font
-                            new Font("Tahoma", Font.PLAIN, fontSizes),    // menu font
-                            new Font("Tahoma", Font.BOLD, fontSizes)     // title font
-                            );
-                        FontPolicy fixedPolicy = FontPolicies.createFixedPolicy(fontSet);
-                        WindowsLookAndFeel.setFontPolicy(fixedPolicy);
-                    }
-
-                    //WindowsLookAndFeel plLnf = (WindowsLookAndFeel) lnf;
-                }
-
-                if (lnf != null) {
-                    try {
-
-                        UIManager.setLookAndFeel(lnf);
-
-                        if (!Globals.ON_WIN) {
-                            UIManager.put("SimpleInternalFrame.activeTitleBackground", GUIGlobals.gradientBlue);
-                        }
-
-                        if (!Globals.ON_WIN && !Globals.ON_MAC) {
-                            // For Linux, add Enter as button click key:
-                            UIDefaults def = UIManager.getDefaults();
-                            InputMap im = (InputMap)def.get("Button.focusInputMap");
-                            im.put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0, false), "pressed");
-                            im.put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0, true), "released");
-                        }
-                    } catch (Throwable ex) {
-                        ex.printStackTrace();
-                        System.err.println("Trying to set system default Look&Feel...");
-
-                        // if desired lnf could not be set, try system default
-                        try {
-                            UIManager.setLookAndFeel(UIManager
-                                .getSystemLookAndFeelClassName());
-                        } catch (Throwable e) {
-                            e.printStackTrace();
-                        }
-                    }
-
-                    //LookAndFeel lnf = new com.sun.java.swing.plaf.gtk.GTKLookAndFeel();
-                    //Look1AndFeel lnf = new
-                    // com.incors.plaf.kunststoff.KunststoffLookAndFeel();
-                    //com.incors.plaf.kunststoff.KunststoffLookAndFeel.setCurrentTheme(new
-                    // com.incors.plaf.kunststoff.themes.KunststoffDesktopTheme());
-                }
+            // TODO test and maybe remove this! I found this commented out with no additional info ( payload at lavabit.com )
 
+            // Set the Look & Feel for Swing.
+            try {
+                setLookAndFeel();
+            } catch (Throwable e) {
+                e.printStackTrace();
             }
 
 
diff --git a/src/java/net/sf/jabref/JabRefFrame.java b/src/java/net/sf/jabref/JabRefFrame.java
index 80a3cfa..a5d86f1 100644
--- a/src/java/net/sf/jabref/JabRefFrame.java
+++ b/src/java/net/sf/jabref/JabRefFrame.java
@@ -1,4 +1,4 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
+/*  Copyright (C) 2003-2012 JabRef contributors.
     This program is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
     the Free Software Foundation; either version 2 of the License, or
@@ -40,6 +40,8 @@ import javax.swing.*;
 import javax.swing.event.ChangeEvent;
 import javax.swing.event.ChangeListener;
 
+import org.java.ayatana.ApplicationMenu;
+
 import net.sf.jabref.export.*;
 import net.sf.jabref.external.ExternalFileTypeEditor;
 import net.sf.jabref.external.PushToApplicationButton;
@@ -335,9 +337,7 @@ public class JabRefFrame extends JFrame implements OutputPrinter {
     manageJournals = new ManageJournalsAction(this),
     databaseProperties = new DatabasePropertiesAction(),
     bibtexKeyPattern = new BibtexKeyPatternAction(),
-    upgradeExternalLinks = new GeneralAction("upgradeLinks", "Upgrade external links",
-            Globals.lang("Upgrade external PDF/PS links to use the '%0' field.", GUIGlobals.FILE_FIELD)),
-      errorConsole = Globals.errorConsole.getAction(this),
+    errorConsole = Globals.errorConsole.getAction(this),
     test = new GeneralAction("test", "Test"),
 
     dbConnect = new GeneralAction("dbConnect", "Connect to external SQL database",
@@ -550,6 +550,13 @@ public class JabRefFrame extends JFrame implements OutputPrinter {
                 }
             }
         });
+
+        // The following sets up integration with Unity's global menu, but currently (Nov 18, 2012)
+        // this doesn't work with OpenJDK 6 (leads to crash), only with 7.
+        String javaVersion = System.getProperty("java.version", null);
+        if (javaVersion.compareTo("1.7") >= 0)
+            ApplicationMenu.tryInstall(this);
+
     }
 
     public void setWindowTitle() {
@@ -924,6 +931,7 @@ public JabRefPreferences prefs() {
     status.add(statusLine);
     con.weightx = 0;
     con.gridwidth = GridBagConstraints.REMAINDER;
+    con.insets = new Insets(2, 4, 2, 2);
     gbl.setConstraints(progressBar, con);
     status.add(progressBar);
     con.weightx = 1;
@@ -1378,8 +1386,6 @@ public JabRefPreferences prefs() {
       checkAndFix.add(autoSetPdf);
       checkAndFix.add(autoSetPs);
       checkAndFix.add(integrityCheckAction);
-      //checkAndFix.addSeparator();
-      checkAndFix.add(upgradeExternalLinks);
       tools.add(checkAndFix);
 
       mb.add(tools);
@@ -1428,11 +1434,10 @@ public JabRefPreferences prefs() {
       helpMenu.add(help);
       helpMenu.add(contents);
       helpMenu.addSeparator();
-//old about    helpMenu.add(about);
+      helpMenu.add(errorConsole);
+      helpMenu.addSeparator();
       helpMenu.add(about);
       mb.add(helpMenu);
-      helpMenu.addSeparator();
-      helpMenu.add(errorConsole);
   }
 
     public static JMenu subMenu(String name) {
@@ -1571,7 +1576,6 @@ public JabRefPreferences prefs() {
   
 
  public void output(final String s) {
-
       SwingUtilities.invokeLater(new Runnable() {
           public void run() {
               statusLine.setText(s);
@@ -2463,7 +2467,7 @@ class SaveSessionAction
     class BibtexKeyPatternAction extends MnemonicAwareAction {
         BibtexKeyPatternDialog bibtexKeyPatternDialog = null;
         public BibtexKeyPatternAction() {
-            putValue(NAME, "Bibtexkey patterns");
+            putValue(NAME, "Bibtex key patterns");
         }
 
         public void actionPerformed(ActionEvent e) {
diff --git a/src/java/net/sf/jabref/JabRefMain.java b/src/java/net/sf/jabref/JabRefMain.java
index e049f52..4cca8f0 100644
--- a/src/java/net/sf/jabref/JabRefMain.java
+++ b/src/java/net/sf/jabref/JabRefMain.java
@@ -55,10 +55,10 @@ public class JabRefMain {
 
         String javaVersion = System.getProperty("java.version", null);
 
-        if (javaVersion.compareTo("1.5") < 0) {
+        if (javaVersion.compareTo("1.6") < 0) {
             String javaVersionWarning = "\n" + 
-                "WARNING: You are running Java version 1.4 or lower (" + javaVersion + " to be exact).\n" +
-                "         JabRef needs at least a Java Runtime Environment 1.5 or higher.\n" +
+                "WARNING: You are running Java version 1.6 or lower (" + javaVersion + " to be exact).\n" +
+                "         JabRef needs at least a Java Runtime Environment 1.6 or higher.\n" +
                 "         JabRef should not start properly and output an error message\n" +
                 "         (probably java.lang.UnsupportedClassVersionError ... (Unsupported major.minor version 49.0)\n" +
                 "         See http://jabref.sf.net/faq.php for more information.\n";
@@ -162,12 +162,12 @@ public class JabRefMain {
             String errorMessage = 
                 exceptionToString(e) + "\n" +
                 "This means that your Java version (" + javaVersion + ") is not high enough to run JabRef.\n" +
-                		"Please update your Java Runtime Environment to a version 1.5 or higher.\n";
+                		"Please update your Java Runtime Environment to a version 1.6 or higher.\n";
             
             System.out.println(errorMessage);
             
             JEditorPane pane = new JEditorPane("text/html", 
-                "<html>You are using Java version " + javaVersion + ", but JabRef needs version 1.5 or higher." +
+                "<html>You are using Java version " + javaVersion + ", but JabRef needs version 1.6 or higher." +
                 "<p>Please update your Java Runtime Environment.</p>" +
                 "<p>For more information visit <b>http://jabref.sf.net/faq.php</b>.</p></html>");
             pane.setEditable(false);
diff --git a/src/java/net/sf/jabref/JabRefPreferences.java b/src/java/net/sf/jabref/JabRefPreferences.java
index 81b8dc6..6c4aebc 100644
--- a/src/java/net/sf/jabref/JabRefPreferences.java
+++ b/src/java/net/sf/jabref/JabRefPreferences.java
@@ -494,6 +494,8 @@ public class JabRefPreferences {
         defaults.put(REG_EXP_SEARCH_EXPRESSION_KEY, defaultExpression);
         defaults.put(USE_REG_EXP_SEARCH_KEY, Boolean.FALSE);
         defaults.put("useIEEEAbrv", Boolean.TRUE);
+        defaults.put("useConvertToEquation", Boolean.FALSE);
+        defaults.put("useCaseKeeperOnSearch", Boolean.TRUE);
 
 	defaults.put("userFileDir", GUIGlobals.FILE_FIELD + "Directory");
 	try {
@@ -1134,6 +1136,7 @@ public class JabRefPreferences {
         list.add(new ExternalFileType("CHM", "chm", "application/mshelp", "gnochm", "www"));
         list.add(new ExternalFileType("TIFF image", "tiff", "image/tiff", "gimp", "picture"));
         list.add(new ExternalFileType("URL", "html", "text/html", "firefox", "www"));
+        list.add(new ExternalFileType("MHT", "mht", "multipart/related", "firefox", "www"));
         list.add(new ExternalFileType("ePUB", "epub", "application/epub+zip", "firefox", "www"));
 
         // On all OSes there is a generic application available to handle file opening,
diff --git a/src/java/net/sf/jabref/PrefsDialog3.java b/src/java/net/sf/jabref/PrefsDialog3.java
index b76c5a9..5c5c14c 100644
--- a/src/java/net/sf/jabref/PrefsDialog3.java
+++ b/src/java/net/sf/jabref/PrefsDialog3.java
@@ -34,7 +34,7 @@ import net.sf.jabref.groups.GroupsPrefsTab;
 import net.sf.jabref.gui.MainTable;
 import net.sf.jabref.gui.FileDialogs;
 
-import com.jgoodies.forms.builder.ButtonBarBuilder2;
+import com.jgoodies.forms.builder.ButtonBarBuilder;
 
 /**
  * Preferences dialog. Contains a TabbedPane, and tabs will be defined in
@@ -137,7 +137,7 @@ public class PrefsDialog3 extends JDialog {
 		CancelAction cancelAction = new CancelAction();
 		cancel.addActionListener(cancelAction);
 		lower.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));
-		ButtonBarBuilder2 bb = new ButtonBarBuilder2(lower);
+		ButtonBarBuilder bb = new ButtonBarBuilder(lower);
 		bb.addGlue();
         bb.addButton(ok);
         bb.addButton(cancel);
diff --git a/src/java/net/sf/jabref/SearchManager2.java b/src/java/net/sf/jabref/SearchManager2.java
index 0b71a5b..b9381ff 100644
--- a/src/java/net/sf/jabref/SearchManager2.java
+++ b/src/java/net/sf/jabref/SearchManager2.java
@@ -244,14 +244,10 @@ public class SearchManager2 extends SidePaneComponent
 
     JPanel main = new JPanel();
     main.setLayout(gbl);
-    //SidePaneHeader header = new SidePaneHeader("Search", GUIGlobals.searchIconFile, this);
     con.gridwidth = GridBagConstraints.REMAINDER;
     con.fill = GridBagConstraints.BOTH;
         con.weightx = 1;
-    //con.insets = new Insets(0, 0, 2,  0);
-    //gbl.setConstraints(header, con);
-    //add(header);
-        //con.insets = new Insets(0, 0, 0,  0);
+
         gbl.setConstraints(searchField,con);
         main.add(searchField) ;
         //con.gridwidth = 1;
diff --git a/src/java/net/sf/jabref/SidePaneComponent.java b/src/java/net/sf/jabref/SidePaneComponent.java
index 0111892..3d0053a 100644
--- a/src/java/net/sf/jabref/SidePaneComponent.java
+++ b/src/java/net/sf/jabref/SidePaneComponent.java
@@ -45,6 +45,7 @@ public abstract class SidePaneComponent extends SimpleInternalFrame {
 		close.setMargin(new Insets(0, 0, 0, 0));
 		// tlb.setOpaque(false);
 		close.setBorder(null);
+        tlb.setFloatable(false);
 		tlb.add(close);
 		close.addActionListener(new CloseButtonListener());
 		setToolBar(tlb);
diff --git a/src/java/net/sf/jabref/SidePaneHeader.java b/src/java/net/sf/jabref/SidePaneHeader.java
deleted file mode 100644
index be9819d..0000000
--- a/src/java/net/sf/jabref/SidePaneHeader.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-import javax.swing.*;
-import java.awt.*;
-import java.awt.event.ActionListener;
-import java.awt.event.ActionEvent;
-import java.net.URL;
-
-public class SidePaneHeader extends JPanel implements ActionListener {
-
-  private JButton close = new JButton(GUIGlobals.getImage("close2"));
-    private JLabel nameLabel;
-    private SidePaneComponent parent;
-    private GridBagLayout gbl = new GridBagLayout();
-    private GridBagConstraints con = new GridBagConstraints();
-
-    /*
-    public SidePaneHeader(String name, URL image, JButton button,
-			  JComponent parent_) {
-
-			  }*/
-
-    public SidePaneHeader(String name, URL image, SidePaneComponent parent_) {
-    addPart(name, image, parent_);
-    }
-
-    public void paintComponent(Graphics g) {
-      Graphics2D g2 = (Graphics2D)g;
-      Paint oldPaint = g2.getPaint();
-      //g2.putColor(Color.red);
-      Insets ins = getInsets();
-      int width = getWidth() - ins.left - ins.right,
-          height = getHeight() - ins.top - ins.bottom;
-      //g2.setPaint(new GradientPaint(0, 0, GUIGlobals.gradientGray,
-     //                              width, height, GUIGlobals.gradientBlue, false));
-     g2.setPaint(new GradientPaint(ins.left, ins.top, GUIGlobals.gradientGray,
-                                   width, height, GUIGlobals.gradientBlue, false));
-      g2.fillRect(ins.left, ins.top, width-1, height);
-      //g2.fillRect(0, 0, 100, 10);
-      g2.setPaint(oldPaint);
-      //super.paintComponent(g);
-    }
-
-    //public boolean isOpaque() { return true; }
-
-    private void addPart(String name, URL image, SidePaneComponent parent_) {
-    parent = parent_;
-    setLayout(gbl);
-        //setPreferredSize(new Dimension(GUIGlobals.SPLIT_PANE_DIVIDER_LOCATION, 18));
-        //setMinimumSize(new Dimension(GUIGlobals.SPLIT_PANE_DIVIDER_LOCATION, 18));
-    //imageIcon = new JLabel(new ImageIcon(image));
-    nameLabel = new JLabel(Globals.lang(name), new ImageIcon(image),
-                   SwingConstants.LEFT);
-//        setBackground(new Color(0, 0, 175)); //SystemColor.activeCaption);
-
-        //close.setOpaque(false);
-        nameLabel.setForeground(new Color(230, 230, 230));
-    //nameLabel.setPreferredSize(new Dimension(70, 24));
-        /*AbstractAction close = new AbstractAction("Close", new ImageIcon(GUIGlobals.closeIconFile)) {
-          public void actionPerformed(ActionEvent e) {
-            parent.hideAway();
-          }
-        };
-	close.putValue(close.SHORT_DESCRIPTION, "Close");
-        JToolBar tlb = new JToolBar();
-        tlb.setFloatable(false);
-        tlb.setMargin(new Insets(0,0,0,0));
-        tlb.setSize(20, 20);
-        tlb.add(close);*/
-  //close.setMargin(new Insets(0,0,0,0));
-  //close.setRolloverEnabled(true);
-  close.setBorder(null);
-  close.setOpaque(false);
-  close.setPreferredSize(new Dimension(15, 15));
-  close.setMaximumSize(new Dimension(15, 15));
-  close.setMinimumSize(new Dimension(15, 15));
-  close.addActionListener(this);
-
-  //setBorder(BorderFactory.createEtchedBorder());
-  //setBorder(BorderFactory.createMatteBorder(1,1,1,2,new Color(150,150,150)));
-    //add(imageIcon, BorderLayout.WEST);
-    con.insets = new Insets(1, 1, 1, 1);
-    con.gridwidth = 1;
-    con.anchor = GridBagConstraints.WEST;
-    con.fill = GridBagConstraints.NONE;
-    gbl.setConstraints(nameLabel, con);
-    add(nameLabel);
-    JPanel pan = new JPanel();
-        pan.setOpaque(false);
-    con.fill = GridBagConstraints.HORIZONTAL;
-    con.weightx = 1;
-    gbl.setConstraints(pan, con);
-    add(pan);
-    con.weightx = 0;
-    con.fill = GridBagConstraints.NONE;
-    con.gridwidth = GridBagConstraints.REMAINDER;
-        gbl.setConstraints(close, con);
-    add(close);
-    }
-
-    public void actionPerformed(ActionEvent e) {
-    parent.hideAway(); //setVisible(false);
-    }
-}
diff --git a/src/java/net/sf/jabref/TableColumnsTab.java b/src/java/net/sf/jabref/TableColumnsTab.java
index 1466947..146dd3f 100644
--- a/src/java/net/sf/jabref/TableColumnsTab.java
+++ b/src/java/net/sf/jabref/TableColumnsTab.java
@@ -206,13 +206,13 @@ class TableColumnsTab extends JPanel implements PrefsTab {
 				writeSpecialFields.setEnabled(isEnabled);
 			}
 		});
-		rankingColumn = new JCheckBox(Globals.lang("Show ranking"));
+		rankingColumn = new JCheckBox(Globals.lang("Show rank"));
 		rankingColumn.addChangeListener(new ChangeListener() {
 			public void stateChanged(ChangeEvent event) {
 				compactRankingColumn.setEnabled(rankingColumn.isSelected());
 			}
 		});
-		compactRankingColumn = new JCheckBox(Globals.lang("Compact ranking"));
+		compactRankingColumn = new JCheckBox(Globals.lang("Compact rank"));
 		qualityColumn = new JCheckBox(Globals.lang("Show quality"));
 		priorityColumn = new JCheckBox(Globals.lang("Show priority"));
 		relevanceColumn = new JCheckBox(Globals.lang("Show relevance"));
diff --git a/src/java/net/sf/jabref/Util.java b/src/java/net/sf/jabref/Util.java
index 926b038..636d29f 100644
--- a/src/java/net/sf/jabref/Util.java
+++ b/src/java/net/sf/jabref/Util.java
@@ -31,6 +31,7 @@ import java.net.MalformedURLException;
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.net.URL;
+import java.net.URLConnection;
 import java.net.URLDecoder;
 import java.nio.charset.Charset;
 import java.nio.charset.CharsetEncoder;
@@ -88,6 +89,7 @@ import net.sf.jabref.labelPattern.LabelPatternUtil;
 import net.sf.jabref.net.URLDownload;
 import net.sf.jabref.undo.NamedCompound;
 import net.sf.jabref.undo.UndoableFieldChange;
+import net.sf.jabref.util.FileNameCleaner;
 
 import com.jgoodies.forms.builder.DefaultFormBuilder;
 import com.jgoodies.forms.layout.FormLayout;
@@ -558,7 +560,7 @@ public class Util {
 
 		if (fieldName.equals("url")) { // html
 			try {
-				link = sanitizeUrl(link);
+                link = sanitizeUrl(link);
                 ExternalFileType fileType = Globals.prefs.getExternalFileTypeByExt("html");
 				if (Globals.ON_MAC) {
 
@@ -926,10 +928,15 @@ public static boolean openExternalFileUnknown(JabRefFrame frame, BibtexEntry ent
         }
 
         // converts doi-only link to full http address
-        if (checkForPlainDOI(link)) {
+        // Morten Alver 6 Nov 2012: this extracts a nonfunctional DOI from some complete
+        // http addresses (e.g. http://onlinelibrary.wiley.com/doi/10.1002/rra.999/abstract, where
+        // the trailing "/abstract" is included but doesn't lead to a resolvable DOI).
+        // To prevent mangling of working URLs I'm disabling this check if the link is already
+        // a full http link:
+        if (checkForPlainDOI(link) && !link.startsWith("http://")) {
             link = Globals.DOI_LOOKUP_PREFIX + getDOI(link);
         }
-        
+
 		link = link.replaceAll("\\+", "%2B");
 
 		try {
@@ -1914,9 +1921,20 @@ public static boolean openExternalFileUnknown(JabRefFrame frame, BibtexEntry ent
      * @return A CompoundEdit specifying the undo operation for the whole operation.
      */
     public static NamedCompound upgradePdfPsToFile(BibtexDatabase database, String[] fields) {
+    	return upgradePdfPsToFile(database.getEntryMap().values(), fields);
+    }
+
+    /**
+     * Collect file links from the given set of fields, and add them to the list contained
+     * in the field GUIGlobals.FILE_FIELD.
+     * @param entries The entries to modify.
+     * @param fields The fields to find links in.
+     * @return A CompoundEdit specifying the undo operation for the whole operation.
+     */
+    public static NamedCompound upgradePdfPsToFile(Collection<BibtexEntry> entries, String[] fields) {
         NamedCompound ce = new NamedCompound(Globals.lang("Move external links to 'file' field"));
         
-        for (BibtexEntry entry : database.getEntryMap().values()){
+        for (BibtexEntry entry : entries){
             FileListTableModel tableModel = new FileListTableModel();
             // If there are already links in the file field, keep those on top:
             String oldFileContent = entry.getField(GUIGlobals.FILE_FIELD);
@@ -2998,6 +3016,13 @@ public static boolean openExternalFileUnknown(JabRefFrame frame, BibtexEntry ent
     }
 
 
+    /**
+     * Determines filename provided by an entry in a database
+     *
+     * @param database the database, where the entry is located
+     * @param entry the entry to which the file should be linked to
+     * @return a suggested fileName
+     */
     public static String getLinkedFileName(BibtexDatabase database, BibtexEntry entry) {
         String targetName = entry.getCiteKey() == null ? "default" : entry.getCiteKey();
 		StringReader sr = new StringReader(Globals.prefs.get(ImportSettingsTab.PREF_IMPORT_FILENAMEPATTERN));
@@ -3011,10 +3036,7 @@ public static boolean openExternalFileUnknown(JabRefFrame frame, BibtexEntry ent
 			targetName = layout.doLayout(entry, database);
 		}
 		//Removes illegal characters from filename
-		String[] illegalChars = {"\\","/",":","*","?","\"","<",">","|"};
-		for(String s : illegalChars) {
-			targetName = targetName.replace(s, "");
-		}
+		targetName = FileNameCleaner.cleanFileName(targetName);
         return targetName;
     }
     
@@ -3049,7 +3071,7 @@ public static boolean openExternalFileUnknown(JabRefFrame frame, BibtexEntry ent
    	 * Remove the http://... from DOI
    	 * 
    	 * @param doi - may not be null
-   	 * @return first DOI in the given String (without http://... prefix)
+   	 * @return first DOI in the given String (without http://... prefix). If no DOI exists, the complete string is returned
    	 */
    	public static String getDOI(String doi) {
         Matcher matcher = PATTERN_PLAINDOI.matcher(doi);
@@ -3137,14 +3159,14 @@ public static boolean openExternalFileUnknown(JabRefFrame frame, BibtexEntry ent
 	}
 	
 	/**
-	 * @param nc indicates the undo named compound. May be null
+	 * @param ce indicates the undo named compound. May be null
 	 */
 	public static void updateField(BibtexEntry be, String field, String newValue, NamedCompound ce) {
 		updateField(be, field, newValue, ce, false);
 	}
 
 	/**
-	 * @param nc indicates the undo named compound. May be null
+	 * @param ce indicates the undo named compound. May be null
 	 */
 	public static void updateField(BibtexEntry be, String field, String newValue, NamedCompound ce, Boolean nullFieldIfValueIsTheSame) {
 		String oldValue = be.getField(field);
@@ -3172,5 +3194,25 @@ public static boolean openExternalFileUnknown(JabRefFrame frame, BibtexEntry ent
 	    im.put(Globals.prefs.getKey("Close dialog"), "close");
 	    am.put("close", cancelAction);
     }
+
+	/**
+	 * Download the URL and return contents as a String.
+	 * @param source
+	 * @return
+	 * @throws IOException
+	 */
+	public static String getResults(URLConnection source) throws IOException {
+	    
+	    InputStream in = source.getInputStream();
+	    StringBuffer sb = new StringBuffer();
+	    byte[] buffer = new byte[256];
+	    while(true) {
+	        int bytesRead = in.read(buffer);
+	        if(bytesRead == -1) break;
+	        for (int i=0; i<bytesRead; i++)
+	            sb.append((char)buffer[i]);
+	    }
+	    return sb.toString();
+	}
 }
 
diff --git a/src/java/net/sf/jabref/bst/.gitignore b/src/java/net/sf/jabref/bst/.gitignore
new file mode 100644
index 0000000..5a43c09
--- /dev/null
+++ b/src/java/net/sf/jabref/bst/.gitignore
@@ -0,0 +1 @@
+Bst.tokens
diff --git a/src/java/net/sf/jabref/bst/bst.g b/src/java/net/sf/jabref/bst/Bst.g
similarity index 65%
rename from src/java/net/sf/jabref/bst/bst.g
rename to src/java/net/sf/jabref/bst/Bst.g
index 6ad12b3..24f4f74 100644
--- a/src/java/net/sf/jabref/bst/bst.g
+++ b/src/java/net/sf/jabref/bst/Bst.g
@@ -11,19 +11,27 @@ tokens {
 	COMMANDS;
 }
 
+// applies only to the parser:
+ at header {// Generated by ANTLR
+package net.sf.jabref.bst;}
+
+// applies only to the lexer:
+ at lexer::header {// Generated by ANTLR
+package net.sf.jabref.bst;}
+
 program : commands+ -> ^(COMMANDS commands+);
 
 commands 
-	: STRINGS^^ idList
-	| INTEGERS^^ idList
-	| FUNCTION^^ id stack
-	| MACRO^^ id '{'! STRING '}'!
-	| READ^^
-	| EXECUTE^^ '{'! function '}'!
-	| ITERATE^^ '{'! function '}'!
-	| REVERSE^^ '{'! function '}'!
-	| ENTRY^^ idList0 idList0 idList0
-	| SORT^^;
+	: STRINGS^ idList
+	| INTEGERS^ idList
+	| FUNCTION^ id stack
+	| MACRO^ id '{'! STRING '}'!
+	| READ^
+	| EXECUTE^ '{'! function '}'!
+	| ITERATE^ '{'! function '}'!
+	| REVERSE^ '{'! function '}'!
+	| ENTRY^ idList0 idList0 idList0
+	| SORT^;
 
 identifier 
 	: IDENTIFIER;
@@ -80,9 +88,9 @@ fragment NUMERAL
 	: ('0'..'9');
 	
 WS
-	: (' '|'\t'|'\n')+ {channel=99;} ;
+	: (' '|'\t'|'\n')+ {_channel=99;} ;
 	
 LINE_COMMENT
-    : '%' ~('\n'|'\r')* '\r'? '\n' {channel=99;}
+    : '%' ~('\n'|'\r')* '\r'? '\n' {_channel=99;}
     ;
-	
\ No newline at end of file
+	
diff --git a/src/java/net/sf/jabref/bst/BstLexer.java b/src/java/net/sf/jabref/bst/BstLexer.java
index bee5599..fe9ec15 100644
--- a/src/java/net/sf/jabref/bst/BstLexer.java
+++ b/src/java/net/sf/jabref/bst/BstLexer.java
@@ -1,701 +1,541 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
+// $ANTLR 3.4 C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g 2012-10-28 23:48:28
+// Generated by ANTLR
 package net.sf.jabref.bst;
 
-// $ANTLR 3.0b5 Bst.g 2006-11-23 23:20:24
-
-import org.antlr.runtime.CharStream;
-import org.antlr.runtime.EarlyExitException;
-import org.antlr.runtime.Lexer;
-import org.antlr.runtime.MismatchedSetException;
-import org.antlr.runtime.NoViableAltException;
-import org.antlr.runtime.RecognitionException;
-import org.antlr.runtime.Token;
+import org.antlr.runtime.*;
+import java.util.Stack;
+import java.util.List;
+import java.util.ArrayList;
 
+ at SuppressWarnings({"all", "warnings", "unchecked"})
 public class BstLexer extends Lexer {
-    public static final int LETTER=21;
-    public static final int T29=29;
-    public static final int T33=33;
-    public static final int INTEGERS=9;
-    public static final int ENTRY=6;
-    public static final int WS=23;
-    public static final int COMMANDS=7;
-    public static final int STRING=12;
-    public static final int T28=28;
-    public static final int EXECUTE=14;
-    public static final int LINE_COMMENT=24;
-    public static final int SORT=17;
-    public static final int STACK=5;
-    public static final int REVERSE=16;
-    public static final int QUOTED=20;
-    public static final int T25=25;
-    public static final int INTEGER=19;
-    public static final int ITERATE=15;
-    public static final int FUNCTION=10;
-    public static final int T26=26;
     public static final int EOF=-1;
-    public static final int T32=32;
-    public static final int Tokens=34;
-    public static final int STRINGS=8;
-    public static final int T31=31;
-    public static final int T27=27;
-    public static final int IDENTIFIER=18;
-    public static final int MACRO=11;
-    public static final int T30=30;
-    public static final int IDLIST=4;
-    public static final int NUMERAL=22;
-    public static final int READ=13;
-    public BstLexer() {
-        
-    } 
+    public static final int T__25=25;
+    public static final int T__26=26;
+    public static final int T__27=27;
+    public static final int T__28=28;
+    public static final int T__29=29;
+    public static final int T__30=30;
+    public static final int T__31=31;
+    public static final int T__32=32;
+    public static final int T__33=33;
+    public static final int COMMANDS=4;
+    public static final int ENTRY=5;
+    public static final int EXECUTE=6;
+    public static final int FUNCTION=7;
+    public static final int IDENTIFIER=8;
+    public static final int IDLIST=9;
+    public static final int INTEGER=10;
+    public static final int INTEGERS=11;
+    public static final int ITERATE=12;
+    public static final int LETTER=13;
+    public static final int LINE_COMMENT=14;
+    public static final int MACRO=15;
+    public static final int NUMERAL=16;
+    public static final int QUOTED=17;
+    public static final int READ=18;
+    public static final int REVERSE=19;
+    public static final int SORT=20;
+    public static final int STACK=21;
+    public static final int STRING=22;
+    public static final int STRINGS=23;
+    public static final int WS=24;
+
+    // delegates
+    // delegators
+    public Lexer[] getDelegates() {
+        return new Lexer[] {};
+    }
+
+    public BstLexer() {} 
     public BstLexer(CharStream input) {
-        super(input);
+        this(input, new RecognizerSharedState());
     }
-    public String getGrammarFileName() { return "Bst.g"; }
+    public BstLexer(CharStream input, RecognizerSharedState state) {
+        super(input,state);
+    }
+    public String getGrammarFileName() { return "C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g"; }
 
-    // $ANTLR start T25
-    public void mT25() throws RecognitionException {
+    // $ANTLR start "T__25"
+    public final void mT__25() throws RecognitionException {
         try {
-            ruleNestingLevel++;
-            int _type = T25;
-            int _start = getCharIndex();
-            int _line = getLine();
-            int _charPosition = getCharPositionInLine();
-            int _channel = Token.DEFAULT_CHANNEL;
-            // Bst.g:3:7: ( '{' )
-            // Bst.g:3:7: '{'
+            int _type = T__25;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:5:7: ( '*' )
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:5:9: '*'
             {
-            match('{'); 
+            match('*'); 
 
             }
 
-
-
-                    if ( token==null && ruleNestingLevel==1 ) {
-                        emit(_type,_line,_charPosition,_channel,_start,getCharIndex()-1);
-                    }
-
-                        }
+            state.type = _type;
+            state.channel = _channel;
+        }
         finally {
-            ruleNestingLevel--;
+        	// do for sure before leaving
         }
     }
-    // $ANTLR end T25
+    // $ANTLR end "T__25"
 
-    // $ANTLR start T26
-    public void mT26() throws RecognitionException {
+    // $ANTLR start "T__26"
+    public final void mT__26() throws RecognitionException {
         try {
-            ruleNestingLevel++;
-            int _type = T26;
-            int _start = getCharIndex();
-            int _line = getLine();
-            int _charPosition = getCharPositionInLine();
-            int _channel = Token.DEFAULT_CHANNEL;
-            // Bst.g:4:7: ( '}' )
-            // Bst.g:4:7: '}'
+            int _type = T__26;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:6:7: ( '+' )
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:6:9: '+'
             {
-            match('}'); 
+            match('+'); 
 
             }
 
-
-
-                    if ( token==null && ruleNestingLevel==1 ) {
-                        emit(_type,_line,_charPosition,_channel,_start,getCharIndex()-1);
-                    }
-
-                        }
+            state.type = _type;
+            state.channel = _channel;
+        }
         finally {
-            ruleNestingLevel--;
+        	// do for sure before leaving
         }
     }
-    // $ANTLR end T26
+    // $ANTLR end "T__26"
 
-    // $ANTLR start T27
-    public void mT27() throws RecognitionException {
+    // $ANTLR start "T__27"
+    public final void mT__27() throws RecognitionException {
         try {
-            ruleNestingLevel++;
-            int _type = T27;
-            int _start = getCharIndex();
-            int _line = getLine();
-            int _charPosition = getCharPositionInLine();
-            int _channel = Token.DEFAULT_CHANNEL;
-            // Bst.g:5:7: ( '<' )
-            // Bst.g:5:7: '<'
+            int _type = T__27;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:7:7: ( '-' )
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:7:9: '-'
             {
-            match('<'); 
+            match('-'); 
 
             }
 
-
-
-                    if ( token==null && ruleNestingLevel==1 ) {
-                        emit(_type,_line,_charPosition,_channel,_start,getCharIndex()-1);
-                    }
-
-                        }
+            state.type = _type;
+            state.channel = _channel;
+        }
         finally {
-            ruleNestingLevel--;
+        	// do for sure before leaving
         }
     }
-    // $ANTLR end T27
+    // $ANTLR end "T__27"
 
-    // $ANTLR start T28
-    public void mT28() throws RecognitionException {
+    // $ANTLR start "T__28"
+    public final void mT__28() throws RecognitionException {
         try {
-            ruleNestingLevel++;
-            int _type = T28;
-            int _start = getCharIndex();
-            int _line = getLine();
-            int _charPosition = getCharPositionInLine();
-            int _channel = Token.DEFAULT_CHANNEL;
-            // Bst.g:6:7: ( '>' )
-            // Bst.g:6:7: '>'
+            int _type = T__28;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:8:7: ( ':=' )
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:8:9: ':='
             {
-            match('>'); 
-
-            }
+            match(":="); 
 
 
 
-                    if ( token==null && ruleNestingLevel==1 ) {
-                        emit(_type,_line,_charPosition,_channel,_start,getCharIndex()-1);
-                    }
+            }
 
-                        }
+            state.type = _type;
+            state.channel = _channel;
+        }
         finally {
-            ruleNestingLevel--;
+        	// do for sure before leaving
         }
     }
-    // $ANTLR end T28
+    // $ANTLR end "T__28"
 
-    // $ANTLR start T29
-    public void mT29() throws RecognitionException {
+    // $ANTLR start "T__29"
+    public final void mT__29() throws RecognitionException {
         try {
-            ruleNestingLevel++;
-            int _type = T29;
-            int _start = getCharIndex();
-            int _line = getLine();
-            int _charPosition = getCharPositionInLine();
-            int _channel = Token.DEFAULT_CHANNEL;
-            // Bst.g:7:7: ( '=' )
-            // Bst.g:7:7: '='
+            int _type = T__29;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:9:7: ( '<' )
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:9:9: '<'
             {
-            match('='); 
+            match('<'); 
 
             }
 
-
-
-                    if ( token==null && ruleNestingLevel==1 ) {
-                        emit(_type,_line,_charPosition,_channel,_start,getCharIndex()-1);
-                    }
-
-                        }
+            state.type = _type;
+            state.channel = _channel;
+        }
         finally {
-            ruleNestingLevel--;
+        	// do for sure before leaving
         }
     }
-    // $ANTLR end T29
+    // $ANTLR end "T__29"
 
-    // $ANTLR start T30
-    public void mT30() throws RecognitionException {
+    // $ANTLR start "T__30"
+    public final void mT__30() throws RecognitionException {
         try {
-            ruleNestingLevel++;
-            int _type = T30;
-            int _start = getCharIndex();
-            int _line = getLine();
-            int _charPosition = getCharPositionInLine();
-            int _channel = Token.DEFAULT_CHANNEL;
-            // Bst.g:8:7: ( '+' )
-            // Bst.g:8:7: '+'
+            int _type = T__30;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:10:7: ( '=' )
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:10:9: '='
             {
-            match('+'); 
+            match('='); 
 
             }
 
-
-
-                    if ( token==null && ruleNestingLevel==1 ) {
-                        emit(_type,_line,_charPosition,_channel,_start,getCharIndex()-1);
-                    }
-
-                        }
+            state.type = _type;
+            state.channel = _channel;
+        }
         finally {
-            ruleNestingLevel--;
+        	// do for sure before leaving
         }
     }
-    // $ANTLR end T30
+    // $ANTLR end "T__30"
 
-    // $ANTLR start T31
-    public void mT31() throws RecognitionException {
+    // $ANTLR start "T__31"
+    public final void mT__31() throws RecognitionException {
         try {
-            ruleNestingLevel++;
-            int _type = T31;
-            int _start = getCharIndex();
-            int _line = getLine();
-            int _charPosition = getCharPositionInLine();
-            int _channel = Token.DEFAULT_CHANNEL;
-            // Bst.g:9:7: ( '-' )
-            // Bst.g:9:7: '-'
+            int _type = T__31;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:11:7: ( '>' )
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:11:9: '>'
             {
-            match('-'); 
+            match('>'); 
 
             }
 
-
-
-                    if ( token==null && ruleNestingLevel==1 ) {
-                        emit(_type,_line,_charPosition,_channel,_start,getCharIndex()-1);
-                    }
-
-                        }
+            state.type = _type;
+            state.channel = _channel;
+        }
         finally {
-            ruleNestingLevel--;
+        	// do for sure before leaving
         }
     }
-    // $ANTLR end T31
+    // $ANTLR end "T__31"
 
-    // $ANTLR start T32
-    public void mT32() throws RecognitionException {
+    // $ANTLR start "T__32"
+    public final void mT__32() throws RecognitionException {
         try {
-            ruleNestingLevel++;
-            int _type = T32;
-            int _start = getCharIndex();
-            int _line = getLine();
-            int _charPosition = getCharPositionInLine();
-            int _channel = Token.DEFAULT_CHANNEL;
-            // Bst.g:10:7: ( ':=' )
-            // Bst.g:10:7: ':='
+            int _type = T__32;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:12:7: ( '{' )
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:12:9: '{'
             {
-            match(":="); 
-
+            match('{'); 
 
             }
 
-
-
-                    if ( token==null && ruleNestingLevel==1 ) {
-                        emit(_type,_line,_charPosition,_channel,_start,getCharIndex()-1);
-                    }
-
-                        }
+            state.type = _type;
+            state.channel = _channel;
+        }
         finally {
-            ruleNestingLevel--;
+        	// do for sure before leaving
         }
     }
-    // $ANTLR end T32
+    // $ANTLR end "T__32"
 
-    // $ANTLR start T33
-    public void mT33() throws RecognitionException {
+    // $ANTLR start "T__33"
+    public final void mT__33() throws RecognitionException {
         try {
-            ruleNestingLevel++;
-            int _type = T33;
-            int _start = getCharIndex();
-            int _line = getLine();
-            int _charPosition = getCharPositionInLine();
-            int _channel = Token.DEFAULT_CHANNEL;
-            // Bst.g:11:7: ( '*' )
-            // Bst.g:11:7: '*'
+            int _type = T__33;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:13:7: ( '}' )
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:13:9: '}'
             {
-            match('*'); 
+            match('}'); 
 
             }
 
-
-
-                    if ( token==null && ruleNestingLevel==1 ) {
-                        emit(_type,_line,_charPosition,_channel,_start,getCharIndex()-1);
-                    }
-
-                        }
+            state.type = _type;
+            state.channel = _channel;
+        }
         finally {
-            ruleNestingLevel--;
+        	// do for sure before leaving
         }
     }
-    // $ANTLR end T33
+    // $ANTLR end "T__33"
 
-    // $ANTLR start STRINGS
-    public void mSTRINGS() throws RecognitionException {
+    // $ANTLR start "STRINGS"
+    public final void mSTRINGS() throws RecognitionException {
         try {
-            ruleNestingLevel++;
             int _type = STRINGS;
-            int _start = getCharIndex();
-            int _line = getLine();
-            int _charPosition = getCharPositionInLine();
-            int _channel = Token.DEFAULT_CHANNEL;
-            // Bst.g:53:11: ( 'STRINGS' )
-            // Bst.g:53:11: 'STRINGS'
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:61:9: ( 'STRINGS' )
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:61:11: 'STRINGS'
             {
             match("STRINGS"); 
 
 
-            }
-
-
 
-                    if ( token==null && ruleNestingLevel==1 ) {
-                        emit(_type,_line,_charPosition,_channel,_start,getCharIndex()-1);
-                    }
+            }
 
-                        }
+            state.type = _type;
+            state.channel = _channel;
+        }
         finally {
-            ruleNestingLevel--;
+        	// do for sure before leaving
         }
     }
-    // $ANTLR end STRINGS
+    // $ANTLR end "STRINGS"
 
-    // $ANTLR start INTEGERS
-    public void mINTEGERS() throws RecognitionException {
+    // $ANTLR start "INTEGERS"
+    public final void mINTEGERS() throws RecognitionException {
         try {
-            ruleNestingLevel++;
             int _type = INTEGERS;
-            int _start = getCharIndex();
-            int _line = getLine();
-            int _charPosition = getCharPositionInLine();
-            int _channel = Token.DEFAULT_CHANNEL;
-            // Bst.g:54:12: ( 'INTEGERS' )
-            // Bst.g:54:12: 'INTEGERS'
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:62:10: ( 'INTEGERS' )
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:62:12: 'INTEGERS'
             {
             match("INTEGERS"); 
 
 
-            }
 
+            }
 
-
-                    if ( token==null && ruleNestingLevel==1 ) {
-                        emit(_type,_line,_charPosition,_channel,_start,getCharIndex()-1);
-                    }
-
-                        }
+            state.type = _type;
+            state.channel = _channel;
+        }
         finally {
-            ruleNestingLevel--;
+        	// do for sure before leaving
         }
     }
-    // $ANTLR end INTEGERS
+    // $ANTLR end "INTEGERS"
 
-    // $ANTLR start FUNCTION
-    public void mFUNCTION() throws RecognitionException {
+    // $ANTLR start "FUNCTION"
+    public final void mFUNCTION() throws RecognitionException {
         try {
-            ruleNestingLevel++;
             int _type = FUNCTION;
-            int _start = getCharIndex();
-            int _line = getLine();
-            int _charPosition = getCharPositionInLine();
-            int _channel = Token.DEFAULT_CHANNEL;
-            // Bst.g:55:12: ( 'FUNCTION' )
-            // Bst.g:55:12: 'FUNCTION'
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:63:10: ( 'FUNCTION' )
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:63:12: 'FUNCTION'
             {
             match("FUNCTION"); 
 
 
-            }
-
 
+            }
 
-                    if ( token==null && ruleNestingLevel==1 ) {
-                        emit(_type,_line,_charPosition,_channel,_start,getCharIndex()-1);
-                    }
-
-                        }
+            state.type = _type;
+            state.channel = _channel;
+        }
         finally {
-            ruleNestingLevel--;
+        	// do for sure before leaving
         }
     }
-    // $ANTLR end FUNCTION
+    // $ANTLR end "FUNCTION"
 
-    // $ANTLR start EXECUTE
-    public void mEXECUTE() throws RecognitionException {
+    // $ANTLR start "EXECUTE"
+    public final void mEXECUTE() throws RecognitionException {
         try {
-            ruleNestingLevel++;
             int _type = EXECUTE;
-            int _start = getCharIndex();
-            int _line = getLine();
-            int _charPosition = getCharPositionInLine();
-            int _channel = Token.DEFAULT_CHANNEL;
-            // Bst.g:56:11: ( 'EXECUTE' )
-            // Bst.g:56:11: 'EXECUTE'
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:64:9: ( 'EXECUTE' )
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:64:11: 'EXECUTE'
             {
             match("EXECUTE"); 
 
 
-            }
-
 
+            }
 
-                    if ( token==null && ruleNestingLevel==1 ) {
-                        emit(_type,_line,_charPosition,_channel,_start,getCharIndex()-1);
-                    }
-
-                        }
+            state.type = _type;
+            state.channel = _channel;
+        }
         finally {
-            ruleNestingLevel--;
+        	// do for sure before leaving
         }
     }
-    // $ANTLR end EXECUTE
+    // $ANTLR end "EXECUTE"
 
-    // $ANTLR start SORT
-    public void mSORT() throws RecognitionException {
+    // $ANTLR start "SORT"
+    public final void mSORT() throws RecognitionException {
         try {
-            ruleNestingLevel++;
             int _type = SORT;
-            int _start = getCharIndex();
-            int _line = getLine();
-            int _charPosition = getCharPositionInLine();
-            int _channel = Token.DEFAULT_CHANNEL;
-            // Bst.g:57:8: ( 'SORT' )
-            // Bst.g:57:8: 'SORT'
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:65:6: ( 'SORT' )
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:65:8: 'SORT'
             {
             match("SORT"); 
 
 
-            }
 
+            }
 
-
-                    if ( token==null && ruleNestingLevel==1 ) {
-                        emit(_type,_line,_charPosition,_channel,_start,getCharIndex()-1);
-                    }
-
-                        }
+            state.type = _type;
+            state.channel = _channel;
+        }
         finally {
-            ruleNestingLevel--;
+        	// do for sure before leaving
         }
     }
-    // $ANTLR end SORT
+    // $ANTLR end "SORT"
 
-    // $ANTLR start ITERATE
-    public void mITERATE() throws RecognitionException {
+    // $ANTLR start "ITERATE"
+    public final void mITERATE() throws RecognitionException {
         try {
-            ruleNestingLevel++;
             int _type = ITERATE;
-            int _start = getCharIndex();
-            int _line = getLine();
-            int _charPosition = getCharPositionInLine();
-            int _channel = Token.DEFAULT_CHANNEL;
-            // Bst.g:58:11: ( 'ITERATE' )
-            // Bst.g:58:11: 'ITERATE'
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:66:9: ( 'ITERATE' )
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:66:11: 'ITERATE'
             {
             match("ITERATE"); 
 
 
-            }
-
-
 
-                    if ( token==null && ruleNestingLevel==1 ) {
-                        emit(_type,_line,_charPosition,_channel,_start,getCharIndex()-1);
-                    }
+            }
 
-                        }
+            state.type = _type;
+            state.channel = _channel;
+        }
         finally {
-            ruleNestingLevel--;
+        	// do for sure before leaving
         }
     }
-    // $ANTLR end ITERATE
+    // $ANTLR end "ITERATE"
 
-    // $ANTLR start REVERSE
-    public void mREVERSE() throws RecognitionException {
+    // $ANTLR start "REVERSE"
+    public final void mREVERSE() throws RecognitionException {
         try {
-            ruleNestingLevel++;
             int _type = REVERSE;
-            int _start = getCharIndex();
-            int _line = getLine();
-            int _charPosition = getCharPositionInLine();
-            int _channel = Token.DEFAULT_CHANNEL;
-            // Bst.g:59:11: ( 'REVERSE' )
-            // Bst.g:59:11: 'REVERSE'
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:67:9: ( 'REVERSE' )
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:67:11: 'REVERSE'
             {
             match("REVERSE"); 
 
 
-            }
-
-
 
-                    if ( token==null && ruleNestingLevel==1 ) {
-                        emit(_type,_line,_charPosition,_channel,_start,getCharIndex()-1);
-                    }
+            }
 
-                        }
+            state.type = _type;
+            state.channel = _channel;
+        }
         finally {
-            ruleNestingLevel--;
+        	// do for sure before leaving
         }
     }
-    // $ANTLR end REVERSE
+    // $ANTLR end "REVERSE"
 
-    // $ANTLR start ENTRY
-    public void mENTRY() throws RecognitionException {
+    // $ANTLR start "ENTRY"
+    public final void mENTRY() throws RecognitionException {
         try {
-            ruleNestingLevel++;
             int _type = ENTRY;
-            int _start = getCharIndex();
-            int _line = getLine();
-            int _charPosition = getCharPositionInLine();
-            int _channel = Token.DEFAULT_CHANNEL;
-            // Bst.g:60:9: ( 'ENTRY' )
-            // Bst.g:60:9: 'ENTRY'
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:68:7: ( 'ENTRY' )
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:68:9: 'ENTRY'
             {
             match("ENTRY"); 
 
 
-            }
-
 
+            }
 
-                    if ( token==null && ruleNestingLevel==1 ) {
-                        emit(_type,_line,_charPosition,_channel,_start,getCharIndex()-1);
-                    }
-
-                        }
+            state.type = _type;
+            state.channel = _channel;
+        }
         finally {
-            ruleNestingLevel--;
+        	// do for sure before leaving
         }
     }
-    // $ANTLR end ENTRY
+    // $ANTLR end "ENTRY"
 
-    // $ANTLR start READ
-    public void mREAD() throws RecognitionException {
+    // $ANTLR start "READ"
+    public final void mREAD() throws RecognitionException {
         try {
-            ruleNestingLevel++;
             int _type = READ;
-            int _start = getCharIndex();
-            int _line = getLine();
-            int _charPosition = getCharPositionInLine();
-            int _channel = Token.DEFAULT_CHANNEL;
-            // Bst.g:61:8: ( 'READ' )
-            // Bst.g:61:8: 'READ'
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:69:6: ( 'READ' )
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:69:8: 'READ'
             {
             match("READ"); 
 
 
-            }
-
-
 
-                    if ( token==null && ruleNestingLevel==1 ) {
-                        emit(_type,_line,_charPosition,_channel,_start,getCharIndex()-1);
-                    }
+            }
 
-                        }
+            state.type = _type;
+            state.channel = _channel;
+        }
         finally {
-            ruleNestingLevel--;
+        	// do for sure before leaving
         }
     }
-    // $ANTLR end READ
+    // $ANTLR end "READ"
 
-    // $ANTLR start MACRO
-    public void mMACRO() throws RecognitionException {
+    // $ANTLR start "MACRO"
+    public final void mMACRO() throws RecognitionException {
         try {
-            ruleNestingLevel++;
             int _type = MACRO;
-            int _start = getCharIndex();
-            int _line = getLine();
-            int _charPosition = getCharPositionInLine();
-            int _channel = Token.DEFAULT_CHANNEL;
-            // Bst.g:62:9: ( 'MACRO' )
-            // Bst.g:62:9: 'MACRO'
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:70:7: ( 'MACRO' )
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:70:9: 'MACRO'
             {
             match("MACRO"); 
 
 
-            }
 
+            }
 
-
-                    if ( token==null && ruleNestingLevel==1 ) {
-                        emit(_type,_line,_charPosition,_channel,_start,getCharIndex()-1);
-                    }
-
-                        }
+            state.type = _type;
+            state.channel = _channel;
+        }
         finally {
-            ruleNestingLevel--;
+        	// do for sure before leaving
         }
     }
-    // $ANTLR end MACRO
+    // $ANTLR end "MACRO"
 
-    // $ANTLR start QUOTED
-    public void mQUOTED() throws RecognitionException {
+    // $ANTLR start "QUOTED"
+    public final void mQUOTED() throws RecognitionException {
         try {
-            ruleNestingLevel++;
             int _type = QUOTED;
-            int _start = getCharIndex();
-            int _line = getLine();
-            int _charPosition = getCharPositionInLine();
-            int _channel = Token.DEFAULT_CHANNEL;
-            // Bst.g:65:4: ( '\\'' IDENTIFIER )
-            // Bst.g:65:4: '\\'' IDENTIFIER
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:73:2: ( '\\'' IDENTIFIER )
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:73:4: '\\'' IDENTIFIER
             {
             match('\''); 
-            mIDENTIFIER(); 
-
-            }
 
+            mIDENTIFIER(); 
 
 
-                    if ( token==null && ruleNestingLevel==1 ) {
-                        emit(_type,_line,_charPosition,_channel,_start,getCharIndex()-1);
-                    }
+            }
 
-                        }
+            state.type = _type;
+            state.channel = _channel;
+        }
         finally {
-            ruleNestingLevel--;
+        	// do for sure before leaving
         }
     }
-    // $ANTLR end QUOTED
+    // $ANTLR end "QUOTED"
 
-    // $ANTLR start IDENTIFIER
-    public void mIDENTIFIER() throws RecognitionException {
+    // $ANTLR start "IDENTIFIER"
+    public final void mIDENTIFIER() throws RecognitionException {
         try {
-            ruleNestingLevel++;
             int _type = IDENTIFIER;
-            int _start = getCharIndex();
-            int _line = getLine();
-            int _charPosition = getCharPositionInLine();
-            int _channel = Token.DEFAULT_CHANNEL;
-            // Bst.g:68:4: ( LETTER ( LETTER | NUMERAL )* )
-            // Bst.g:68:4: LETTER ( LETTER | NUMERAL )*
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:76:2: ( LETTER ( LETTER | NUMERAL )* )
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:76:4: LETTER ( LETTER | NUMERAL )*
             {
             mLETTER(); 
-            // Bst.g:68:11: ( LETTER | NUMERAL )*
+
+
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:76:11: ( LETTER | NUMERAL )*
             loop1:
             do {
-                int alt1=3;
+                int alt1=2;
                 int LA1_0 = input.LA(1);
-                if ( (LA1_0=='$'||LA1_0=='.'||(LA1_0>='A' && LA1_0<='Z')||(LA1_0>='a' && LA1_0<='z')) ) {
+
+                if ( (LA1_0=='$'||LA1_0=='.'||(LA1_0 >= '0' && LA1_0 <= '9')||(LA1_0 >= 'A' && LA1_0 <= 'Z')||(LA1_0 >= 'a' && LA1_0 <= 'z')) ) {
                     alt1=1;
                 }
-                else if ( ((LA1_0>='0' && LA1_0<='9')) ) {
-                    alt1=2;
-                }
 
 
                 switch (alt1) {
             	case 1 :
-            	    // Bst.g:68:12: LETTER
+            	    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:
             	    {
-            	    mLETTER(); 
-
+            	    if ( input.LA(1)=='$'||input.LA(1)=='.'||(input.LA(1) >= '0' && input.LA(1) <= '9')||(input.LA(1) >= 'A' && input.LA(1) <= 'Z')||(input.LA(1) >= 'a' && input.LA(1) <= 'z') ) {
+            	        input.consume();
+            	    }
+            	    else {
+            	        MismatchedSetException mse = new MismatchedSetException(null,input);
+            	        recover(mse);
+            	        throw mse;
             	    }
-            	    break;
-            	case 2 :
-            	    // Bst.g:68:19: NUMERAL
-            	    {
-            	    mNUMERAL(); 
+
 
             	    }
             	    break;
@@ -708,81 +548,73 @@ public class BstLexer extends Lexer {
 
             }
 
-
-
-                    if ( token==null && ruleNestingLevel==1 ) {
-                        emit(_type,_line,_charPosition,_channel,_start,getCharIndex()-1);
-                    }
-
-                        }
+            state.type = _type;
+            state.channel = _channel;
+        }
         finally {
-            ruleNestingLevel--;
+        	// do for sure before leaving
         }
     }
-    // $ANTLR end IDENTIFIER
+    // $ANTLR end "IDENTIFIER"
 
-    // $ANTLR start LETTER
-    public void mLETTER() throws RecognitionException {
+    // $ANTLR start "LETTER"
+    public final void mLETTER() throws RecognitionException {
         try {
-            ruleNestingLevel++;
-            // Bst.g:71:4: ( ('a'..'z'|'A'..'Z'|'.'|'$'))
-            // Bst.g:71:4: ('a'..'z'|'A'..'Z'|'.'|'$')
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:79:2: ( ( 'a' .. 'z' | 'A' .. 'Z' | '.' | '$' ) )
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:
             {
-            if ( input.LA(1)=='$'||input.LA(1)=='.'||(input.LA(1)>='A' && input.LA(1)<='Z')||(input.LA(1)>='a' && input.LA(1)<='z') ) {
+            if ( input.LA(1)=='$'||input.LA(1)=='.'||(input.LA(1) >= 'A' && input.LA(1) <= 'Z')||(input.LA(1) >= 'a' && input.LA(1) <= 'z') ) {
                 input.consume();
-
             }
             else {
-                MismatchedSetException mse =
-                    new MismatchedSetException(null,input);
-                recover(mse);    throw mse;
+                MismatchedSetException mse = new MismatchedSetException(null,input);
+                recover(mse);
+                throw mse;
             }
 
 
             }
 
+
         }
         finally {
-            ruleNestingLevel--;
+        	// do for sure before leaving
         }
     }
-    // $ANTLR end LETTER
+    // $ANTLR end "LETTER"
 
-    // $ANTLR start STRING
-    public void mSTRING() throws RecognitionException {
+    // $ANTLR start "STRING"
+    public final void mSTRING() throws RecognitionException {
         try {
-            ruleNestingLevel++;
             int _type = STRING;
-            int _start = getCharIndex();
-            int _line = getLine();
-            int _charPosition = getCharPositionInLine();
-            int _channel = Token.DEFAULT_CHANNEL;
-            // Bst.g:74:4: ( '\"' (~ '\"' )* '\"' )
-            // Bst.g:74:4: '\"' (~ '\"' )* '\"'
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:82:2: ( '\"' (~ ( '\"' ) )* '\"' )
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:82:4: '\"' (~ ( '\"' ) )* '\"'
             {
             match('\"'); 
-            // Bst.g:74:8: (~ '\"' )*
+
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:82:8: (~ ( '\"' ) )*
             loop2:
             do {
                 int alt2=2;
                 int LA2_0 = input.LA(1);
-                if ( ((LA2_0>='\u0000' && LA2_0<='!')||(LA2_0>='#' && LA2_0<='\uFFFE')) ) {
+
+                if ( ((LA2_0 >= '\u0000' && LA2_0 <= '!')||(LA2_0 >= '#' && LA2_0 <= '\uFFFF')) ) {
                     alt2=1;
                 }
 
 
                 switch (alt2) {
             	case 1 :
-            	    // Bst.g:74:9: ~ '\"'
+            	    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:
             	    {
-            	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='!')||(input.LA(1)>='#' && input.LA(1)<='\uFFFE') ) {
+            	    if ( (input.LA(1) >= '\u0000' && input.LA(1) <= '!')||(input.LA(1) >= '#' && input.LA(1) <= '\uFFFF') ) {
             	        input.consume();
-
             	    }
             	    else {
-            	        MismatchedSetException mse =
-            	            new MismatchedSetException(null,input);
-            	        recover(mse);    throw mse;
+            	        MismatchedSetException mse = new MismatchedSetException(null,input);
+            	        recover(mse);
+            	        throw mse;
             	    }
 
 
@@ -794,54 +626,48 @@ public class BstLexer extends Lexer {
                 }
             } while (true);
 
+
             match('\"'); 
 
             }
 
-
-
-                    if ( token==null && ruleNestingLevel==1 ) {
-                        emit(_type,_line,_charPosition,_channel,_start,getCharIndex()-1);
-                    }
-
-                        }
+            state.type = _type;
+            state.channel = _channel;
+        }
         finally {
-            ruleNestingLevel--;
+        	// do for sure before leaving
         }
     }
-    // $ANTLR end STRING
+    // $ANTLR end "STRING"
 
-    // $ANTLR start INTEGER
-    public void mINTEGER() throws RecognitionException {
+    // $ANTLR start "INTEGER"
+    public final void mINTEGER() throws RecognitionException {
         try {
-            ruleNestingLevel++;
             int _type = INTEGER;
-            int _start = getCharIndex();
-            int _line = getLine();
-            int _charPosition = getCharPositionInLine();
-            int _channel = Token.DEFAULT_CHANNEL;
-            // Bst.g:77:4: ( '#' ( ('+'|'-'))? ( NUMERAL )+ )
-            // Bst.g:77:4: '#' ( ('+'|'-'))? ( NUMERAL )+
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:85:2: ( '#' ( '+' | '-' )? ( NUMERAL )+ )
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:85:4: '#' ( '+' | '-' )? ( NUMERAL )+
             {
             match('#'); 
-            // Bst.g:77:8: ( ('+'|'-'))?
+
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:85:8: ( '+' | '-' )?
             int alt3=2;
             int LA3_0 = input.LA(1);
+
             if ( (LA3_0=='+'||LA3_0=='-') ) {
                 alt3=1;
             }
             switch (alt3) {
                 case 1 :
-                    // Bst.g:77:9: ('+'|'-')
+                    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:
                     {
                     if ( input.LA(1)=='+'||input.LA(1)=='-' ) {
                         input.consume();
-
                     }
                     else {
-                        MismatchedSetException mse =
-                            new MismatchedSetException(null,input);
-                        recover(mse);    throw mse;
+                        MismatchedSetException mse = new MismatchedSetException(null,input);
+                        recover(mse);
+                        throw mse;
                     }
 
 
@@ -850,22 +676,32 @@ public class BstLexer extends Lexer {
 
             }
 
-            // Bst.g:77:19: ( NUMERAL )+
+
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:85:19: ( NUMERAL )+
             int cnt4=0;
             loop4:
             do {
                 int alt4=2;
                 int LA4_0 = input.LA(1);
-                if ( ((LA4_0>='0' && LA4_0<='9')) ) {
+
+                if ( ((LA4_0 >= '0' && LA4_0 <= '9')) ) {
                     alt4=1;
                 }
 
 
                 switch (alt4) {
             	case 1 :
-            	    // Bst.g:77:19: NUMERAL
+            	    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:
             	    {
-            	    mNUMERAL(); 
+            	    if ( (input.LA(1) >= '0' && input.LA(1) <= '9') ) {
+            	        input.consume();
+            	    }
+            	    else {
+            	        MismatchedSetException mse = new MismatchedSetException(null,input);
+            	        recover(mse);
+            	        throw mse;
+            	    }
+
 
             	    }
             	    break;
@@ -882,78 +718,72 @@ public class BstLexer extends Lexer {
 
             }
 
-
-
-                    if ( token==null && ruleNestingLevel==1 ) {
-                        emit(_type,_line,_charPosition,_channel,_start,getCharIndex()-1);
-                    }
-
-                        }
+            state.type = _type;
+            state.channel = _channel;
+        }
         finally {
-            ruleNestingLevel--;
+        	// do for sure before leaving
         }
     }
-    // $ANTLR end INTEGER
+    // $ANTLR end "INTEGER"
 
-    // $ANTLR start NUMERAL
-    public void mNUMERAL() throws RecognitionException {
+    // $ANTLR start "NUMERAL"
+    public final void mNUMERAL() throws RecognitionException {
         try {
-            ruleNestingLevel++;
-            // Bst.g:80:4: ( ( '0' .. '9' ) )
-            // Bst.g:80:4: ( '0' .. '9' )
-            {
-            // Bst.g:80:4: ( '0' .. '9' )
-            // Bst.g:80:5: '0' .. '9'
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:88:2: ( ( '0' .. '9' ) )
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:
             {
-            matchRange('0','9'); 
-
+            if ( (input.LA(1) >= '0' && input.LA(1) <= '9') ) {
+                input.consume();
+            }
+            else {
+                MismatchedSetException mse = new MismatchedSetException(null,input);
+                recover(mse);
+                throw mse;
             }
 
 
             }
 
+
         }
         finally {
-            ruleNestingLevel--;
+        	// do for sure before leaving
         }
     }
-    // $ANTLR end NUMERAL
+    // $ANTLR end "NUMERAL"
 
-    // $ANTLR start WS
-    public void mWS() throws RecognitionException {
+    // $ANTLR start "WS"
+    public final void mWS() throws RecognitionException {
         try {
-            ruleNestingLevel++;
             int _type = WS;
-            int _start = getCharIndex();
-            int _line = getLine();
-            int _charPosition = getCharPositionInLine();
-            int _channel = Token.DEFAULT_CHANNEL;
-            // Bst.g:82:9: ( ( (' '|'\\t'|'\\r'|'\\n'))+ )
-            // Bst.g:82:9: ( (' '|'\\t'|'\\r'|'\\n'))+
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:91:2: ( ( ' ' | '\\t' | '\\n' )+ )
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:91:4: ( ' ' | '\\t' | '\\n' )+
             {
-            // Bst.g:82:9: ( (' '|'\\t'|'\\r'|'\\n'))+
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:91:4: ( ' ' | '\\t' | '\\n' )+
             int cnt5=0;
             loop5:
             do {
                 int alt5=2;
                 int LA5_0 = input.LA(1);
-                if ( ((LA5_0>='\t' && LA5_0<='\n')||LA5_0=='\r'||LA5_0==' ') ) {
+
+                if ( ((LA5_0 >= '\t' && LA5_0 <= '\n')||LA5_0==' ') ) {
                     alt5=1;
                 }
 
 
                 switch (alt5) {
             	case 1 :
-            	    // Bst.g:82:13: (' '|'\\t'|'\\r'|'\\n')
+            	    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:
             	    {
-            	    if ( (input.LA(1)>='\t' && input.LA(1)<='\n')||input.LA(1)=='\r'||input.LA(1)==' ' ) {
+            	    if ( (input.LA(1) >= '\t' && input.LA(1) <= '\n')||input.LA(1)==' ' ) {
             	        input.consume();
-
             	    }
             	    else {
-            	        MismatchedSetException mse =
-            	            new MismatchedSetException(null,input);
-            	        recover(mse);    throw mse;
+            	        MismatchedSetException mse = new MismatchedSetException(null,input);
+            	        recover(mse);
+            	        throw mse;
             	    }
 
 
@@ -969,58 +799,52 @@ public class BstLexer extends Lexer {
                 cnt5++;
             } while (true);
 
-             _channel=HIDDEN; 
-
-            }
 
+            _channel=99;
 
+            }
 
-                    if ( token==null && ruleNestingLevel==1 ) {
-                        emit(_type,_line,_charPosition,_channel,_start,getCharIndex()-1);
-                    }
-
-                        }
+            state.type = _type;
+            state.channel = _channel;
+        }
         finally {
-            ruleNestingLevel--;
+        	// do for sure before leaving
         }
     }
-    // $ANTLR end WS
+    // $ANTLR end "WS"
 
-    // $ANTLR start LINE_COMMENT
-    public void mLINE_COMMENT() throws RecognitionException {
+    // $ANTLR start "LINE_COMMENT"
+    public final void mLINE_COMMENT() throws RecognitionException {
         try {
-            ruleNestingLevel++;
             int _type = LINE_COMMENT;
-            int _start = getCharIndex();
-            int _line = getLine();
-            int _charPosition = getCharPositionInLine();
-            int _channel = Token.DEFAULT_CHANNEL;
-            // Bst.g:90:7: ( '%' (~ ('\\n'|'\\r'))* ( '\\r' )? '\\n' )
-            // Bst.g:90:7: '%' (~ ('\\n'|'\\r'))* ( '\\r' )? '\\n'
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:94:5: ( '%' (~ ( '\\n' | '\\r' ) )* ( '\\r' )? '\\n' )
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:94:7: '%' (~ ( '\\n' | '\\r' ) )* ( '\\r' )? '\\n'
             {
             match('%'); 
-            // Bst.g:90:11: (~ ('\\n'|'\\r'))*
+
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:94:11: (~ ( '\\n' | '\\r' ) )*
             loop6:
             do {
                 int alt6=2;
                 int LA6_0 = input.LA(1);
-                if ( ((LA6_0>='\u0000' && LA6_0<='\t')||(LA6_0>='\u000B' && LA6_0<='\f')||(LA6_0>='\u000E' && LA6_0<='\uFFFE')) ) {
+
+                if ( ((LA6_0 >= '\u0000' && LA6_0 <= '\t')||(LA6_0 >= '\u000B' && LA6_0 <= '\f')||(LA6_0 >= '\u000E' && LA6_0 <= '\uFFFF')) ) {
                     alt6=1;
                 }
 
 
                 switch (alt6) {
             	case 1 :
-            	    // Bst.g:90:11: ~ ('\\n'|'\\r')
+            	    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:
             	    {
-            	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='\t')||(input.LA(1)>='\u000B' && input.LA(1)<='\f')||(input.LA(1)>='\u000E' && input.LA(1)<='\uFFFE') ) {
+            	    if ( (input.LA(1) >= '\u0000' && input.LA(1) <= '\t')||(input.LA(1) >= '\u000B' && input.LA(1) <= '\f')||(input.LA(1) >= '\u000E' && input.LA(1) <= '\uFFFF') ) {
             	        input.consume();
-
             	    }
             	    else {
-            	        MismatchedSetException mse =
-            	            new MismatchedSetException(null,input);
-            	        recover(mse);    throw mse;
+            	        MismatchedSetException mse = new MismatchedSetException(null,input);
+            	        recover(mse);
+            	        throw mse;
             	    }
 
 
@@ -1032,15 +856,17 @@ public class BstLexer extends Lexer {
                 }
             } while (true);
 
-            // Bst.g:90:25: ( '\\r' )?
+
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:94:25: ( '\\r' )?
             int alt7=2;
             int LA7_0 = input.LA(1);
+
             if ( (LA7_0=='\r') ) {
                 alt7=1;
             }
             switch (alt7) {
                 case 1 :
-                    // Bst.g:90:25: '\\r'
+                    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:94:25: '\\r'
                     {
                     match('\r'); 
 
@@ -1049,623 +875,225 @@ public class BstLexer extends Lexer {
 
             }
 
-            match('\n'); 
-             _channel=HIDDEN; 
-
-            }
 
+            match('\n'); 
 
+            _channel=99;
 
-                    if ( token==null && ruleNestingLevel==1 ) {
-                        emit(_type,_line,_charPosition,_channel,_start,getCharIndex()-1);
-                    }
+            }
 
-                        }
+            state.type = _type;
+            state.channel = _channel;
+        }
         finally {
-            ruleNestingLevel--;
+        	// do for sure before leaving
         }
     }
-    // $ANTLR end LINE_COMMENT
+    // $ANTLR end "LINE_COMMENT"
 
     public void mTokens() throws RecognitionException {
-        // Bst.g:1:10: ( T25 | T26 | T27 | T28 | T29 | T30 | T31 | T32 | T33 | STRINGS | INTEGERS | FUNCTION | EXECUTE | SORT | ITERATE | REVERSE | ENTRY | READ | MACRO | QUOTED | IDENTIFIER | STRING | INTEGER | WS | LINE_COMMENT )
+        // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:1:8: ( T__25 | T__26 | T__27 | T__28 | T__29 | T__30 | T__31 | T__32 | T__33 | STRINGS | INTEGERS | FUNCTION | EXECUTE | SORT | ITERATE | REVERSE | ENTRY | READ | MACRO | QUOTED | IDENTIFIER | STRING | INTEGER | WS | LINE_COMMENT )
         int alt8=25;
-        switch ( input.LA(1) ) {
-        case '{':
-            alt8=1;
-            break;
-        case '}':
-            alt8=2;
-            break;
-        case '<':
-            alt8=3;
-            break;
-        case '>':
-            alt8=4;
-            break;
-        case '=':
-            alt8=5;
-            break;
-        case '+':
-            alt8=6;
-            break;
-        case '-':
-            alt8=7;
-            break;
-        case ':':
-            alt8=8;
-            break;
-        case '*':
-            alt8=9;
-            break;
-        case 'S':
-            switch ( input.LA(2) ) {
-            case 'T':
-                int LA8_22 = input.LA(3);
-                if ( (LA8_22=='R') ) {
-                    int LA8_31 = input.LA(4);
-                    if ( (LA8_31=='I') ) {
-                        int LA8_41 = input.LA(5);
-                        if ( (LA8_41=='N') ) {
-                            int LA8_51 = input.LA(6);
-                            if ( (LA8_51=='G') ) {
-                                int LA8_61 = input.LA(7);
-                                if ( (LA8_61=='S') ) {
-                                    int LA8_69 = input.LA(8);
-                                    if ( (LA8_69=='$'||LA8_69=='.'||(LA8_69>='0' && LA8_69<='9')||(LA8_69>='A' && LA8_69<='Z')||(LA8_69>='a' && LA8_69<='z')) ) {
-                                        alt8=21;
-                                    }
-                                    else {
-                                        alt8=10;}
-                                }
-                                else {
-                                    alt8=21;}
-                            }
-                            else {
-                                alt8=21;}
-                        }
-                        else {
-                            alt8=21;}
-                    }
-                    else {
-                        alt8=21;}
-                }
-                else {
-                    alt8=21;}
-                break;
-            case 'O':
-                int LA8_23 = input.LA(3);
-                if ( (LA8_23=='R') ) {
-                    int LA8_32 = input.LA(4);
-                    if ( (LA8_32=='T') ) {
-                        int LA8_42 = input.LA(5);
-                        if ( (LA8_42=='$'||LA8_42=='.'||(LA8_42>='0' && LA8_42<='9')||(LA8_42>='A' && LA8_42<='Z')||(LA8_42>='a' && LA8_42<='z')) ) {
-                            alt8=21;
-                        }
-                        else {
-                            alt8=14;}
-                    }
-                    else {
-                        alt8=21;}
-                }
-                else {
-                    alt8=21;}
-                break;
-            default:
-                alt8=21;}
-
-            break;
-        case 'I':
-            switch ( input.LA(2) ) {
-            case 'T':
-                int LA8_24 = input.LA(3);
-                if ( (LA8_24=='E') ) {
-                    int LA8_33 = input.LA(4);
-                    if ( (LA8_33=='R') ) {
-                        int LA8_43 = input.LA(5);
-                        if ( (LA8_43=='A') ) {
-                            int LA8_53 = input.LA(6);
-                            if ( (LA8_53=='T') ) {
-                                int LA8_62 = input.LA(7);
-                                if ( (LA8_62=='E') ) {
-                                    int LA8_70 = input.LA(8);
-                                    if ( (LA8_70=='$'||LA8_70=='.'||(LA8_70>='0' && LA8_70<='9')||(LA8_70>='A' && LA8_70<='Z')||(LA8_70>='a' && LA8_70<='z')) ) {
-                                        alt8=21;
-                                    }
-                                    else {
-                                        alt8=15;}
-                                }
-                                else {
-                                    alt8=21;}
-                            }
-                            else {
-                                alt8=21;}
-                        }
-                        else {
-                            alt8=21;}
-                    }
-                    else {
-                        alt8=21;}
-                }
-                else {
-                    alt8=21;}
-                break;
-            case 'N':
-                int LA8_25 = input.LA(3);
-                if ( (LA8_25=='T') ) {
-                    int LA8_34 = input.LA(4);
-                    if ( (LA8_34=='E') ) {
-                        int LA8_44 = input.LA(5);
-                        if ( (LA8_44=='G') ) {
-                            int LA8_54 = input.LA(6);
-                            if ( (LA8_54=='E') ) {
-                                int LA8_63 = input.LA(7);
-                                if ( (LA8_63=='R') ) {
-                                    int LA8_71 = input.LA(8);
-                                    if ( (LA8_71=='S') ) {
-                                        int LA8_77 = input.LA(9);
-                                        if ( (LA8_77=='$'||LA8_77=='.'||(LA8_77>='0' && LA8_77<='9')||(LA8_77>='A' && LA8_77<='Z')||(LA8_77>='a' && LA8_77<='z')) ) {
-                                            alt8=21;
-                                        }
-                                        else {
-                                            alt8=11;}
-                                    }
-                                    else {
-                                        alt8=21;}
-                                }
-                                else {
-                                    alt8=21;}
-                            }
-                            else {
-                                alt8=21;}
-                        }
-                        else {
-                            alt8=21;}
-                    }
-                    else {
-                        alt8=21;}
-                }
-                else {
-                    alt8=21;}
-                break;
-            default:
-                alt8=21;}
-
-            break;
-        case 'F':
-            int LA8_12 = input.LA(2);
-            if ( (LA8_12=='U') ) {
-                int LA8_26 = input.LA(3);
-                if ( (LA8_26=='N') ) {
-                    int LA8_35 = input.LA(4);
-                    if ( (LA8_35=='C') ) {
-                        int LA8_45 = input.LA(5);
-                        if ( (LA8_45=='T') ) {
-                            int LA8_55 = input.LA(6);
-                            if ( (LA8_55=='I') ) {
-                                int LA8_64 = input.LA(7);
-                                if ( (LA8_64=='O') ) {
-                                    int LA8_72 = input.LA(8);
-                                    if ( (LA8_72=='N') ) {
-                                        int LA8_78 = input.LA(9);
-                                        if ( (LA8_78=='$'||LA8_78=='.'||(LA8_78>='0' && LA8_78<='9')||(LA8_78>='A' && LA8_78<='Z')||(LA8_78>='a' && LA8_78<='z')) ) {
-                                            alt8=21;
-                                        }
-                                        else {
-                                            alt8=12;}
-                                    }
-                                    else {
-                                        alt8=21;}
-                                }
-                                else {
-                                    alt8=21;}
-                            }
-                            else {
-                                alt8=21;}
-                        }
-                        else {
-                            alt8=21;}
-                    }
-                    else {
-                        alt8=21;}
-                }
-                else {
-                    alt8=21;}
-            }
-            else {
-                alt8=21;}
-            break;
-        case 'E':
-            switch ( input.LA(2) ) {
-            case 'N':
-                int LA8_27 = input.LA(3);
-                if ( (LA8_27=='T') ) {
-                    int LA8_36 = input.LA(4);
-                    if ( (LA8_36=='R') ) {
-                        int LA8_46 = input.LA(5);
-                        if ( (LA8_46=='Y') ) {
-                            int LA8_56 = input.LA(6);
-                            if ( (LA8_56=='$'||LA8_56=='.'||(LA8_56>='0' && LA8_56<='9')||(LA8_56>='A' && LA8_56<='Z')||(LA8_56>='a' && LA8_56<='z')) ) {
-                                alt8=21;
-                            }
-                            else {
-                                alt8=17;}
-                        }
-                        else {
-                            alt8=21;}
-                    }
-                    else {
-                        alt8=21;}
-                }
-                else {
-                    alt8=21;}
-                break;
-            case 'X':
-                int LA8_28 = input.LA(3);
-                if ( (LA8_28=='E') ) {
-                    int LA8_37 = input.LA(4);
-                    if ( (LA8_37=='C') ) {
-                        int LA8_47 = input.LA(5);
-                        if ( (LA8_47=='U') ) {
-                            int LA8_57 = input.LA(6);
-                            if ( (LA8_57=='T') ) {
-                                int LA8_66 = input.LA(7);
-                                if ( (LA8_66=='E') ) {
-                                    int LA8_73 = input.LA(8);
-                                    if ( (LA8_73=='$'||LA8_73=='.'||(LA8_73>='0' && LA8_73<='9')||(LA8_73>='A' && LA8_73<='Z')||(LA8_73>='a' && LA8_73<='z')) ) {
-                                        alt8=21;
-                                    }
-                                    else {
-                                        alt8=13;}
-                                }
-                                else {
-                                    alt8=21;}
-                            }
-                            else {
-                                alt8=21;}
-                        }
-                        else {
-                            alt8=21;}
-                    }
-                    else {
-                        alt8=21;}
-                }
-                else {
-                    alt8=21;}
-                break;
-            default:
-                alt8=21;}
-
-            break;
-        case 'R':
-            int LA8_14 = input.LA(2);
-            if ( (LA8_14=='E') ) {
-                switch ( input.LA(3) ) {
-                case 'A':
-                    int LA8_38 = input.LA(4);
-                    if ( (LA8_38=='D') ) {
-                        int LA8_48 = input.LA(5);
-                        if ( (LA8_48=='$'||LA8_48=='.'||(LA8_48>='0' && LA8_48<='9')||(LA8_48>='A' && LA8_48<='Z')||(LA8_48>='a' && LA8_48<='z')) ) {
-                            alt8=21;
-                        }
-                        else {
-                            alt8=18;}
-                    }
-                    else {
-                        alt8=21;}
-                    break;
-                case 'V':
-                    int LA8_39 = input.LA(4);
-                    if ( (LA8_39=='E') ) {
-                        int LA8_49 = input.LA(5);
-                        if ( (LA8_49=='R') ) {
-                            int LA8_59 = input.LA(6);
-                            if ( (LA8_59=='S') ) {
-                                int LA8_67 = input.LA(7);
-                                if ( (LA8_67=='E') ) {
-                                    int LA8_74 = input.LA(8);
-                                    if ( (LA8_74=='$'||LA8_74=='.'||(LA8_74>='0' && LA8_74<='9')||(LA8_74>='A' && LA8_74<='Z')||(LA8_74>='a' && LA8_74<='z')) ) {
-                                        alt8=21;
-                                    }
-                                    else {
-                                        alt8=16;}
-                                }
-                                else {
-                                    alt8=21;}
-                            }
-                            else {
-                                alt8=21;}
-                        }
-                        else {
-                            alt8=21;}
-                    }
-                    else {
-                        alt8=21;}
-                    break;
-                default:
-                    alt8=21;}
-
-            }
-            else {
-                alt8=21;}
-            break;
-        case 'M':
-            int LA8_15 = input.LA(2);
-            if ( (LA8_15=='A') ) {
-                int LA8_30 = input.LA(3);
-                if ( (LA8_30=='C') ) {
-                    int LA8_40 = input.LA(4);
-                    if ( (LA8_40=='R') ) {
-                        int LA8_50 = input.LA(5);
-                        if ( (LA8_50=='O') ) {
-                            int LA8_60 = input.LA(6);
-                            if ( (LA8_60=='$'||LA8_60=='.'||(LA8_60>='0' && LA8_60<='9')||(LA8_60>='A' && LA8_60<='Z')||(LA8_60>='a' && LA8_60<='z')) ) {
-                                alt8=21;
-                            }
-                            else {
-                                alt8=19;}
-                        }
-                        else {
-                            alt8=21;}
-                    }
-                    else {
-                        alt8=21;}
-                }
-                else {
-                    alt8=21;}
-            }
-            else {
-                alt8=21;}
-            break;
-        case '\'':
-            alt8=20;
-            break;
-        case '$':
-        case '.':
-        case 'A':
-        case 'B':
-        case 'C':
-        case 'D':
-        case 'G':
-        case 'H':
-        case 'J':
-        case 'K':
-        case 'L':
-        case 'N':
-        case 'O':
-        case 'P':
-        case 'Q':
-        case 'T':
-        case 'U':
-        case 'V':
-        case 'W':
-        case 'X':
-        case 'Y':
-        case 'Z':
-        case 'a':
-        case 'b':
-        case 'c':
-        case 'd':
-        case 'e':
-        case 'f':
-        case 'g':
-        case 'h':
-        case 'i':
-        case 'j':
-        case 'k':
-        case 'l':
-        case 'm':
-        case 'n':
-        case 'o':
-        case 'p':
-        case 'q':
-        case 'r':
-        case 's':
-        case 't':
-        case 'u':
-        case 'v':
-        case 'w':
-        case 'x':
-        case 'y':
-        case 'z':
-            alt8=21;
-            break;
-        case '\"':
-            alt8=22;
-            break;
-        case '#':
-            alt8=23;
-            break;
-        case '\t':
-        case '\n':
-        case '\r':
-        case ' ':
-            alt8=24;
-            break;
-        case '%':
-            alt8=25;
-            break;
-        default:
-            NoViableAltException nvae =
-                new NoViableAltException("1:1: Tokens : ( T25 | T26 | T27 | T28 | T29 | T30 | T31 | T32 | T33 | STRINGS | INTEGERS | FUNCTION | EXECUTE | SORT | ITERATE | REVERSE | ENTRY | READ | MACRO | QUOTED | IDENTIFIER | STRING | INTEGER | WS | LINE_COMMENT );", 8, 0, input);
-
-            throw nvae;
-        }
-
+        alt8 = dfa8.predict(input);
         switch (alt8) {
             case 1 :
-                // Bst.g:1:10: T25
+                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:1:10: T__25
                 {
-                mT25(); 
+                mT__25(); 
+
 
                 }
                 break;
             case 2 :
-                // Bst.g:1:14: T26
+                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:1:16: T__26
                 {
-                mT26(); 
+                mT__26(); 
+
 
                 }
                 break;
             case 3 :
-                // Bst.g:1:18: T27
+                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:1:22: T__27
                 {
-                mT27(); 
+                mT__27(); 
+
 
                 }
                 break;
             case 4 :
-                // Bst.g:1:22: T28
+                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:1:28: T__28
                 {
-                mT28(); 
+                mT__28(); 
+
 
                 }
                 break;
             case 5 :
-                // Bst.g:1:26: T29
+                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:1:34: T__29
                 {
-                mT29(); 
+                mT__29(); 
+
 
                 }
                 break;
             case 6 :
-                // Bst.g:1:30: T30
+                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:1:40: T__30
                 {
-                mT30(); 
+                mT__30(); 
+
 
                 }
                 break;
             case 7 :
-                // Bst.g:1:34: T31
+                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:1:46: T__31
                 {
-                mT31(); 
+                mT__31(); 
+
 
                 }
                 break;
             case 8 :
-                // Bst.g:1:38: T32
+                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:1:52: T__32
                 {
-                mT32(); 
+                mT__32(); 
+
 
                 }
                 break;
             case 9 :
-                // Bst.g:1:42: T33
+                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:1:58: T__33
                 {
-                mT33(); 
+                mT__33(); 
+
 
                 }
                 break;
             case 10 :
-                // Bst.g:1:46: STRINGS
+                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:1:64: STRINGS
                 {
                 mSTRINGS(); 
 
+
                 }
                 break;
             case 11 :
-                // Bst.g:1:54: INTEGERS
+                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:1:72: INTEGERS
                 {
                 mINTEGERS(); 
 
+
                 }
                 break;
             case 12 :
-                // Bst.g:1:63: FUNCTION
+                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:1:81: FUNCTION
                 {
                 mFUNCTION(); 
 
+
                 }
                 break;
             case 13 :
-                // Bst.g:1:72: EXECUTE
+                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:1:90: EXECUTE
                 {
                 mEXECUTE(); 
 
+
                 }
                 break;
             case 14 :
-                // Bst.g:1:80: SORT
+                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:1:98: SORT
                 {
                 mSORT(); 
 
+
                 }
                 break;
             case 15 :
-                // Bst.g:1:85: ITERATE
+                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:1:103: ITERATE
                 {
                 mITERATE(); 
 
+
                 }
                 break;
             case 16 :
-                // Bst.g:1:93: REVERSE
+                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:1:111: REVERSE
                 {
                 mREVERSE(); 
 
+
                 }
                 break;
             case 17 :
-                // Bst.g:1:101: ENTRY
+                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:1:119: ENTRY
                 {
                 mENTRY(); 
 
+
                 }
                 break;
             case 18 :
-                // Bst.g:1:107: READ
+                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:1:125: READ
                 {
                 mREAD(); 
 
+
                 }
                 break;
             case 19 :
-                // Bst.g:1:112: MACRO
+                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:1:130: MACRO
                 {
                 mMACRO(); 
 
+
                 }
                 break;
             case 20 :
-                // Bst.g:1:118: QUOTED
+                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:1:136: QUOTED
                 {
                 mQUOTED(); 
 
+
                 }
                 break;
             case 21 :
-                // Bst.g:1:125: IDENTIFIER
+                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:1:143: IDENTIFIER
                 {
                 mIDENTIFIER(); 
 
+
                 }
                 break;
             case 22 :
-                // Bst.g:1:136: STRING
+                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:1:154: STRING
                 {
                 mSTRING(); 
 
+
                 }
                 break;
             case 23 :
-                // Bst.g:1:143: INTEGER
+                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:1:161: INTEGER
                 {
                 mINTEGER(); 
 
+
                 }
                 break;
             case 24 :
-                // Bst.g:1:151: WS
+                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:1:169: WS
                 {
                 mWS(); 
 
+
                 }
                 break;
             case 25 :
-                // Bst.g:1:154: LINE_COMMENT
+                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:1:172: LINE_COMMENT
                 {
                 mLINE_COMMENT(); 
 
+
                 }
                 break;
 
@@ -1674,6 +1102,167 @@ public class BstLexer extends Lexer {
     }
 
 
+    protected DFA8 dfa8 = new DFA8(this);
+    static final String DFA8_eotS =
+        "\12\uffff\6\21\6\uffff\24\21\1\64\6\21\1\73\2\21\1\uffff\4\21\1"+
+        "\102\1\21\1\uffff\1\104\5\21\1\uffff\1\21\1\uffff\1\113\1\21\1\115"+
+        "\1\21\1\117\1\120\1\uffff\1\121\1\uffff\1\122\4\uffff";
+    static final String DFA8_eofS =
+        "\123\uffff";
+    static final String DFA8_minS =
+        "\1\11\11\uffff\1\117\1\116\1\125\1\116\1\105\1\101\6\uffff\2\122"+
+        "\1\124\1\105\1\116\1\105\1\124\1\101\1\103\1\111\1\124\1\105\1\122"+
+        "\2\103\1\122\1\105\1\104\1\122\1\116\1\44\1\107\1\101\1\124\1\125"+
+        "\1\131\1\122\1\44\1\117\1\107\1\uffff\1\105\1\124\1\111\1\124\1"+
+        "\44\1\123\1\uffff\1\44\1\123\1\122\1\105\1\117\1\105\1\uffff\1\105"+
+        "\1\uffff\1\44\1\123\1\44\1\116\2\44\1\uffff\1\44\1\uffff\1\44\4"+
+        "\uffff";
+    static final String DFA8_maxS =
+        "\1\175\11\uffff\2\124\1\125\1\130\1\105\1\101\6\uffff\2\122\1\124"+
+        "\1\105\1\116\1\105\1\124\1\126\1\103\1\111\1\124\1\105\1\122\2\103"+
+        "\1\122\1\105\1\104\1\122\1\116\1\172\1\107\1\101\1\124\1\125\1\131"+
+        "\1\122\1\172\1\117\1\107\1\uffff\1\105\1\124\1\111\1\124\1\172\1"+
+        "\123\1\uffff\1\172\1\123\1\122\1\105\1\117\1\105\1\uffff\1\105\1"+
+        "\uffff\1\172\1\123\1\172\1\116\2\172\1\uffff\1\172\1\uffff\1\172"+
+        "\4\uffff";
+    static final String DFA8_acceptS =
+        "\1\uffff\1\1\1\2\1\3\1\4\1\5\1\6\1\7\1\10\1\11\6\uffff\1\24\1\25"+
+        "\1\26\1\27\1\30\1\31\36\uffff\1\16\6\uffff\1\22\6\uffff\1\21\1\uffff"+
+        "\1\23\6\uffff\1\12\1\uffff\1\17\1\uffff\1\15\1\20\1\13\1\14";
+    static final String DFA8_specialS =
+        "\123\uffff}>";
+    static final String[] DFA8_transitionS = {
+            "\2\24\25\uffff\1\24\1\uffff\1\22\1\23\1\21\1\25\1\uffff\1\20"+
+            "\2\uffff\1\1\1\2\1\uffff\1\3\1\21\13\uffff\1\4\1\uffff\1\5\1"+
+            "\6\1\7\2\uffff\4\21\1\15\1\14\2\21\1\13\3\21\1\17\4\21\1\16"+
+            "\1\12\7\21\6\uffff\32\21\1\10\1\uffff\1\11",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "\1\27\4\uffff\1\26",
+            "\1\30\5\uffff\1\31",
+            "\1\32",
+            "\1\34\11\uffff\1\33",
+            "\1\35",
+            "\1\36",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "\1\37",
+            "\1\40",
+            "\1\41",
+            "\1\42",
+            "\1\43",
+            "\1\44",
+            "\1\45",
+            "\1\47\24\uffff\1\46",
+            "\1\50",
+            "\1\51",
+            "\1\52",
+            "\1\53",
+            "\1\54",
+            "\1\55",
+            "\1\56",
+            "\1\57",
+            "\1\60",
+            "\1\61",
+            "\1\62",
+            "\1\63",
+            "\1\21\11\uffff\1\21\1\uffff\12\21\7\uffff\32\21\6\uffff\32"+
+            "\21",
+            "\1\65",
+            "\1\66",
+            "\1\67",
+            "\1\70",
+            "\1\71",
+            "\1\72",
+            "\1\21\11\uffff\1\21\1\uffff\12\21\7\uffff\32\21\6\uffff\32"+
+            "\21",
+            "\1\74",
+            "\1\75",
+            "",
+            "\1\76",
+            "\1\77",
+            "\1\100",
+            "\1\101",
+            "\1\21\11\uffff\1\21\1\uffff\12\21\7\uffff\32\21\6\uffff\32"+
+            "\21",
+            "\1\103",
+            "",
+            "\1\21\11\uffff\1\21\1\uffff\12\21\7\uffff\32\21\6\uffff\32"+
+            "\21",
+            "\1\105",
+            "\1\106",
+            "\1\107",
+            "\1\110",
+            "\1\111",
+            "",
+            "\1\112",
+            "",
+            "\1\21\11\uffff\1\21\1\uffff\12\21\7\uffff\32\21\6\uffff\32"+
+            "\21",
+            "\1\114",
+            "\1\21\11\uffff\1\21\1\uffff\12\21\7\uffff\32\21\6\uffff\32"+
+            "\21",
+            "\1\116",
+            "\1\21\11\uffff\1\21\1\uffff\12\21\7\uffff\32\21\6\uffff\32"+
+            "\21",
+            "\1\21\11\uffff\1\21\1\uffff\12\21\7\uffff\32\21\6\uffff\32"+
+            "\21",
+            "",
+            "\1\21\11\uffff\1\21\1\uffff\12\21\7\uffff\32\21\6\uffff\32"+
+            "\21",
+            "",
+            "\1\21\11\uffff\1\21\1\uffff\12\21\7\uffff\32\21\6\uffff\32"+
+            "\21",
+            "",
+            "",
+            "",
+            ""
+    };
+
+    static final short[] DFA8_eot = DFA.unpackEncodedString(DFA8_eotS);
+    static final short[] DFA8_eof = DFA.unpackEncodedString(DFA8_eofS);
+    static final char[] DFA8_min = DFA.unpackEncodedStringToUnsignedChars(DFA8_minS);
+    static final char[] DFA8_max = DFA.unpackEncodedStringToUnsignedChars(DFA8_maxS);
+    static final short[] DFA8_accept = DFA.unpackEncodedString(DFA8_acceptS);
+    static final short[] DFA8_special = DFA.unpackEncodedString(DFA8_specialS);
+    static final short[][] DFA8_transition;
+
+    static {
+        int numStates = DFA8_transitionS.length;
+        DFA8_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA8_transition[i] = DFA.unpackEncodedString(DFA8_transitionS[i]);
+        }
+    }
+
+    class DFA8 extends DFA {
+
+        public DFA8(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 8;
+            this.eot = DFA8_eot;
+            this.eof = DFA8_eof;
+            this.min = DFA8_min;
+            this.max = DFA8_max;
+            this.accept = DFA8_accept;
+            this.special = DFA8_special;
+            this.transition = DFA8_transition;
+        }
+        public String getDescription() {
+            return "1:1: Tokens : ( T__25 | T__26 | T__27 | T__28 | T__29 | T__30 | T__31 | T__32 | T__33 | STRINGS | INTEGERS | FUNCTION | EXECUTE | SORT | ITERATE | REVERSE | ENTRY | READ | MACRO | QUOTED | IDENTIFIER | STRING | INTEGER | WS | LINE_COMMENT );";
+        }
+    }
  
 
-}
+}
\ No newline at end of file
diff --git a/src/java/net/sf/jabref/bst/BstParser.java b/src/java/net/sf/jabref/bst/BstParser.java
index 4ea5194..0a24e22 100644
--- a/src/java/net/sf/jabref/bst/BstParser.java
+++ b/src/java/net/sf/jabref/bst/BstParser.java
@@ -1,122 +1,125 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
+// $ANTLR 3.4 C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g 2012-10-28 23:48:28
+// Generated by ANTLR
 package net.sf.jabref.bst;
 
-// $ANTLR 3.0b5 Bst.g 2006-11-23 23:20:24
-
-import java.util.ArrayList;
+import org.antlr.runtime.*;
+import java.util.Stack;
 import java.util.List;
+import java.util.ArrayList;
 
-import org.antlr.runtime.BitSet;
-import org.antlr.runtime.EarlyExitException;
-import org.antlr.runtime.NoViableAltException;
-import org.antlr.runtime.Parser;
-import org.antlr.runtime.ParserRuleReturnScope;
-import org.antlr.runtime.RecognitionException;
-import org.antlr.runtime.Token;
-import org.antlr.runtime.TokenStream;
-import org.antlr.runtime.tree.CommonTreeAdaptor;
-import org.antlr.runtime.tree.TreeAdaptor;
-
- at SuppressWarnings({"unused", "unchecked"})
+import org.antlr.runtime.tree.*;
+
+
+ at SuppressWarnings({"all", "warnings", "unchecked"})
 public class BstParser extends Parser {
     public static final String[] tokenNames = new String[] {
-        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "IDLIST", "STACK", "ENTRY", "COMMANDS", "STRINGS", "INTEGERS", "FUNCTION", "MACRO", "STRING", "READ", "EXECUTE", "ITERATE", "REVERSE", "SORT", "IDENTIFIER", "INTEGER", "QUOTED", "LETTER", "NUMERAL", "WS", "LINE_COMMENT", "'{'", "'}'", "'<'", "'>'", "'='", "'+'", "'-'", "':='", "'*'"
+        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "COMMANDS", "ENTRY", "EXECUTE", "FUNCTION", "IDENTIFIER", "IDLIST", "INTEGER", "INTEGERS", "ITERATE", "LETTER", "LINE_COMMENT", "MACRO", "NUMERAL", "QUOTED", "READ", "REVERSE", "SORT", "STACK", "STRING", "STRINGS", "WS", "'*'", "'+'", "'-'", "':='", "'<'", "'='", "'>'", "'{'", "'}'"
     };
-    public static final int LETTER=21;
-    public static final int ENTRY=6;
-    public static final int INTEGERS=9;
-    public static final int WS=23;
-    public static final int COMMANDS=7;
-    public static final int STRING=12;
-    public static final int EXECUTE=14;
-    public static final int LINE_COMMENT=24;
-    public static final int SORT=17;
-    public static final int STACK=5;
-    public static final int REVERSE=16;
-    public static final int QUOTED=20;
-    public static final int INTEGER=19;
-    public static final int ITERATE=15;
-    public static final int FUNCTION=10;
+
     public static final int EOF=-1;
-    public static final int STRINGS=8;
-    public static final int IDENTIFIER=18;
-    public static final int MACRO=11;
-    public static final int IDLIST=4;
-    public static final int NUMERAL=22;
-    public static final int READ=13;
-
-        public BstParser(TokenStream input) {
-            super(input);
-        }
-        
-    protected TreeAdaptor adaptor = new CommonTreeAdaptor();
+    public static final int T__25=25;
+    public static final int T__26=26;
+    public static final int T__27=27;
+    public static final int T__28=28;
+    public static final int T__29=29;
+    public static final int T__30=30;
+    public static final int T__31=31;
+    public static final int T__32=32;
+    public static final int T__33=33;
+    public static final int COMMANDS=4;
+    public static final int ENTRY=5;
+    public static final int EXECUTE=6;
+    public static final int FUNCTION=7;
+    public static final int IDENTIFIER=8;
+    public static final int IDLIST=9;
+    public static final int INTEGER=10;
+    public static final int INTEGERS=11;
+    public static final int ITERATE=12;
+    public static final int LETTER=13;
+    public static final int LINE_COMMENT=14;
+    public static final int MACRO=15;
+    public static final int NUMERAL=16;
+    public static final int QUOTED=17;
+    public static final int READ=18;
+    public static final int REVERSE=19;
+    public static final int SORT=20;
+    public static final int STACK=21;
+    public static final int STRING=22;
+    public static final int STRINGS=23;
+    public static final int WS=24;
+
+    // delegates
+    public Parser[] getDelegates() {
+        return new Parser[] {};
+    }
+
+    // delegators
 
-    public void setTreeAdaptor(TreeAdaptor adaptor) {
-        this.adaptor = adaptor;
+
+    public BstParser(TokenStream input) {
+        this(input, new RecognizerSharedState());
     }
-    public TreeAdaptor getTreeAdaptor() {
-        return adaptor;
+    public BstParser(TokenStream input, RecognizerSharedState state) {
+        super(input, state);
     }
 
-    public String[] getTokenNames() { return tokenNames; }
-    public String getGrammarFileName() { return "Bst.g"; }
+protected TreeAdaptor adaptor = new CommonTreeAdaptor();
+
+public void setTreeAdaptor(TreeAdaptor adaptor) {
+    this.adaptor = adaptor;
+}
+public TreeAdaptor getTreeAdaptor() {
+    return adaptor;
+}
+    public String[] getTokenNames() { return BstParser.tokenNames; }
+    public String getGrammarFileName() { return "C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g"; }
 
 
     public static class program_return extends ParserRuleReturnScope {
         Object tree;
         public Object getTree() { return tree; }
-    }
+    };
+
 
-    // $ANTLR start program
-    // Bst.g:14:1: program : ( commands )+ -> ^( COMMANDS ( commands )+ ) ;
-    public program_return program() throws RecognitionException {   
-        program_return retval = new program_return();
+    // $ANTLR start "program"
+    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:22:1: program : ( commands )+ -> ^( COMMANDS ( commands )+ ) ;
+    public final BstParser.program_return program() throws RecognitionException {
+        BstParser.program_return retval = new BstParser.program_return();
         retval.start = input.LT(1);
 
+
         Object root_0 = null;
 
-        commands_return commands1 = null;
+        BstParser.commands_return commands1 =null;
 
-        List list_commands=new ArrayList();
 
+        RewriteRuleSubtreeStream stream_commands=new RewriteRuleSubtreeStream(adaptor,"rule commands");
         try {
-            // Bst.g:14:11: ( ( commands )+ -> ^( COMMANDS ( commands )+ ) )
-            // Bst.g:14:11: ( commands )+
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:22:9: ( ( commands )+ -> ^( COMMANDS ( commands )+ ) )
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:22:11: ( commands )+
             {
-            // Bst.g:14:11: ( commands )+
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:22:11: ( commands )+
             int cnt1=0;
             loop1:
             do {
                 int alt1=2;
                 int LA1_0 = input.LA(1);
-                if ( (LA1_0==ENTRY||(LA1_0>=STRINGS && LA1_0<=MACRO)||(LA1_0>=READ && LA1_0<=SORT)) ) {
+
+                if ( ((LA1_0 >= ENTRY && LA1_0 <= FUNCTION)||(LA1_0 >= INTEGERS && LA1_0 <= ITERATE)||LA1_0==MACRO||(LA1_0 >= READ && LA1_0 <= SORT)||LA1_0==STRINGS) ) {
                     alt1=1;
                 }
 
 
                 switch (alt1) {
             	case 1 :
-            	    // Bst.g:14:11: commands
+            	    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:22:11: commands
             	    {
-            	    pushFollow(FOLLOW_commands_in_program45);
+            	    pushFollow(FOLLOW_commands_in_program62);
             	    commands1=commands();
-            	    _fsp--;
 
-            	    list_commands.add(commands1.tree);
+            	    state._fsp--;
+
+            	    stream_commands.add(commands1.getTree());
 
             	    }
             	    break;
@@ -132,29 +135,33 @@ public class BstParser extends Parser {
 
 
             // AST REWRITE
-            
-			int i_0 = 0;
+            // elements: commands
+            // token labels: 
+            // rule labels: retval
+            // token list labels: 
+            // rule list labels: 
+            // wildcard labels: 
             retval.tree = root_0;
-            root_0 = adaptor.nil();
-            // 14:21: -> ^( COMMANDS ( commands )+ )
-            {
-                // Bst.g:14:24: ^( COMMANDS ( commands )+ )
-                {
-                Object root_1 = adaptor.nil();
-                root_1 = adaptor.becomeRoot(adaptor.create(COMMANDS, "COMMANDS"), root_1);
+            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);
 
-                // Bst.g:14:35: ( commands )+
+            root_0 = (Object)adaptor.nil();
+            // 22:21: -> ^( COMMANDS ( commands )+ )
+            {
+                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:22:24: ^( COMMANDS ( commands )+ )
                 {
-                int n_1 = list_commands == null ? 0 : list_commands.size();
-                 
-
-
-                if ( n_1==0 ) throw new RuntimeException("Must have more than one element for (...)+ loops");
-                for (int i_1=0; i_1<n_1; i_1++) {
-                    adaptor.addChild(root_1, list_commands.get(i_1));
+                Object root_1 = (Object)adaptor.nil();
+                root_1 = (Object)adaptor.becomeRoot(
+                (Object)adaptor.create(COMMANDS, "COMMANDS")
+                , root_1);
 
+                if ( !(stream_commands.hasNext()) ) {
+                    throw new RewriteEarlyExitException();
                 }
+                while ( stream_commands.hasNext() ) {
+                    adaptor.addChild(root_1, stream_commands.nextTree());
+
                 }
+                stream_commands.reset();
 
                 adaptor.addChild(root_0, root_1);
                 }
@@ -162,36 +169,45 @@ public class BstParser extends Parser {
             }
 
 
+            retval.tree = root_0;
 
             }
 
+            retval.stop = input.LT(-1);
+
+
+            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
+            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
+
         }
         catch (RecognitionException re) {
             reportError(re);
             recover(input,re);
-        }
-        finally {
-            retval.stop = input.LT(-1);
+    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
 
-                retval.tree = adaptor.rulePostProcessing(root_0);
-                adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
+        }
 
-       }
+        finally {
+        	// do for sure before leaving
+        }
         return retval;
     }
-    // $ANTLR end program
+    // $ANTLR end "program"
+
 
     public static class commands_return extends ParserRuleReturnScope {
         Object tree;
         public Object getTree() { return tree; }
-    }
+    };
 
-    // $ANTLR start commands
-    // Bst.g:16:1: commands : ( STRINGS^^ idList | INTEGERS^^ idList | FUNCTION^^ id stack | MACRO^^ id '{'! STRING '}'! | READ^^ | EXECUTE^^ '{'! function '}'! | ITERATE^^ '{'! function '}'! | REVERSE^^ '{'! function '}'! | ENTRY^^ idList0 idList0 idList0 | SORT^^ );
-    public commands_return commands() throws RecognitionException {   
-        commands_return retval = new commands_return();
+
+    // $ANTLR start "commands"
+    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:24:1: commands : ( STRINGS ^ idList | INTEGERS ^ idList | FUNCTION ^ id stack | MACRO ^ id '{' ! STRING '}' !| READ ^| EXECUTE ^ '{' ! function '}' !| ITERATE ^ '{' ! function '}' !| REVERSE ^ '{' ! function '}' !| ENTRY ^ idList0 idList0 idList0 | SORT ^);
+    public final BstParser.commands_return commands() throws RecognitionException {
+        BstParser.commands_return retval = new BstParser.commands_return();
         retval.start = input.LT(1);
 
+
         Object root_0 = null;
 
         Token STRINGS2=null;
@@ -213,27 +229,27 @@ public class BstParser extends Parser {
         Token char_literal26=null;
         Token ENTRY27=null;
         Token SORT31=null;
-        idList_return idList3 = null;
+        BstParser.idList_return idList3 =null;
 
-        idList_return idList5 = null;
+        BstParser.idList_return idList5 =null;
 
-        id_return id7 = null;
+        BstParser.id_return id7 =null;
 
-        stack_return stack8 = null;
+        BstParser.stack_return stack8 =null;
 
-        id_return id10 = null;
+        BstParser.id_return id10 =null;
 
-        function_return function17 = null;
+        BstParser.function_return function17 =null;
 
-        function_return function21 = null;
+        BstParser.function_return function21 =null;
 
-        function_return function25 = null;
+        BstParser.function_return function25 =null;
 
-        idList0_return idList028 = null;
+        BstParser.idList0_return idList028 =null;
 
-        idList0_return idList029 = null;
+        BstParser.idList0_return idList029 =null;
 
-        idList0_return idList030 = null;
+        BstParser.idList0_return idList030 =null;
 
 
         Object STRINGS2_tree=null;
@@ -257,282 +273,355 @@ public class BstParser extends Parser {
         Object SORT31_tree=null;
 
         try {
-            // Bst.g:17:4: ( STRINGS^^ idList | INTEGERS^^ idList | FUNCTION^^ id stack | MACRO^^ id '{'! STRING '}'! | READ^^ | EXECUTE^^ '{'! function '}'! | ITERATE^^ '{'! function '}'! | REVERSE^^ '{'! function '}'! | ENTRY^^ idList0 idList0 idList0 | SORT^^ )
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:25:2: ( STRINGS ^ idList | INTEGERS ^ idList | FUNCTION ^ id stack | MACRO ^ id '{' ! STRING '}' !| READ ^| EXECUTE ^ '{' ! function '}' !| ITERATE ^ '{' ! function '}' !| REVERSE ^ '{' ! function '}' !| ENTRY ^ idList0 idList0 idList0 | SORT ^)
             int alt2=10;
             switch ( input.LA(1) ) {
             case STRINGS:
+                {
                 alt2=1;
+                }
                 break;
             case INTEGERS:
+                {
                 alt2=2;
+                }
                 break;
             case FUNCTION:
+                {
                 alt2=3;
+                }
                 break;
             case MACRO:
+                {
                 alt2=4;
+                }
                 break;
             case READ:
+                {
                 alt2=5;
+                }
                 break;
             case EXECUTE:
+                {
                 alt2=6;
+                }
                 break;
             case ITERATE:
+                {
                 alt2=7;
+                }
                 break;
             case REVERSE:
+                {
                 alt2=8;
+                }
                 break;
             case ENTRY:
+                {
                 alt2=9;
+                }
                 break;
             case SORT:
+                {
                 alt2=10;
+                }
                 break;
             default:
                 NoViableAltException nvae =
-                    new NoViableAltException("16:1: commands : ( STRINGS^^ idList | INTEGERS^^ idList | FUNCTION^^ id stack | MACRO^^ id '{'! STRING '}'! | READ^^ | EXECUTE^^ '{'! function '}'! | ITERATE^^ '{'! function '}'! | REVERSE^^ '{'! function '}'! | ENTRY^^ idList0 idList0 idList0 | SORT^^ );", 2, 0, input);
+                    new NoViableAltException("", 2, 0, input);
 
                 throw nvae;
+
             }
 
             switch (alt2) {
                 case 1 :
-                    // Bst.g:17:4: STRINGS^^ idList
+                    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:25:4: STRINGS ^ idList
                     {
-                    root_0 = adaptor.nil();
+                    root_0 = (Object)adaptor.nil();
 
-                    STRINGS2=input.LT(1);
-                    match(input,STRINGS,FOLLOW_STRINGS_in_commands65); 
-                    STRINGS2_tree = adaptor.create(STRINGS2);
-                    root_0 = adaptor.becomeRoot(STRINGS2_tree, root_0);
 
-                    pushFollow(FOLLOW_idList_in_commands68);
+                    STRINGS2=(Token)match(input,STRINGS,FOLLOW_STRINGS_in_commands82); 
+                    STRINGS2_tree = 
+                    (Object)adaptor.create(STRINGS2)
+                    ;
+                    root_0 = (Object)adaptor.becomeRoot(STRINGS2_tree, root_0);
+
+
+                    pushFollow(FOLLOW_idList_in_commands85);
                     idList3=idList();
-                    _fsp--;
 
-                    adaptor.addChild(root_0, idList3.tree);
+                    state._fsp--;
+
+                    adaptor.addChild(root_0, idList3.getTree());
 
                     }
                     break;
                 case 2 :
-                    // Bst.g:18:4: INTEGERS^^ idList
+                    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:26:4: INTEGERS ^ idList
                     {
-                    root_0 = adaptor.nil();
+                    root_0 = (Object)adaptor.nil();
+
+
+                    INTEGERS4=(Token)match(input,INTEGERS,FOLLOW_INTEGERS_in_commands90); 
+                    INTEGERS4_tree = 
+                    (Object)adaptor.create(INTEGERS4)
+                    ;
+                    root_0 = (Object)adaptor.becomeRoot(INTEGERS4_tree, root_0);
 
-                    INTEGERS4=input.LT(1);
-                    match(input,INTEGERS,FOLLOW_INTEGERS_in_commands73); 
-                    INTEGERS4_tree = adaptor.create(INTEGERS4);
-                    root_0 = adaptor.becomeRoot(INTEGERS4_tree, root_0);
 
-                    pushFollow(FOLLOW_idList_in_commands76);
+                    pushFollow(FOLLOW_idList_in_commands93);
                     idList5=idList();
-                    _fsp--;
 
-                    adaptor.addChild(root_0, idList5.tree);
+                    state._fsp--;
+
+                    adaptor.addChild(root_0, idList5.getTree());
 
                     }
                     break;
                 case 3 :
-                    // Bst.g:19:4: FUNCTION^^ id stack
+                    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:27:4: FUNCTION ^ id stack
                     {
-                    root_0 = adaptor.nil();
+                    root_0 = (Object)adaptor.nil();
+
+
+                    FUNCTION6=(Token)match(input,FUNCTION,FOLLOW_FUNCTION_in_commands98); 
+                    FUNCTION6_tree = 
+                    (Object)adaptor.create(FUNCTION6)
+                    ;
+                    root_0 = (Object)adaptor.becomeRoot(FUNCTION6_tree, root_0);
 
-                    FUNCTION6=input.LT(1);
-                    match(input,FUNCTION,FOLLOW_FUNCTION_in_commands81); 
-                    FUNCTION6_tree = adaptor.create(FUNCTION6);
-                    root_0 = adaptor.becomeRoot(FUNCTION6_tree, root_0);
 
-                    pushFollow(FOLLOW_id_in_commands84);
+                    pushFollow(FOLLOW_id_in_commands101);
                     id7=id();
-                    _fsp--;
 
-                    adaptor.addChild(root_0, id7.tree);
-                    pushFollow(FOLLOW_stack_in_commands86);
+                    state._fsp--;
+
+                    adaptor.addChild(root_0, id7.getTree());
+
+                    pushFollow(FOLLOW_stack_in_commands103);
                     stack8=stack();
-                    _fsp--;
 
-                    adaptor.addChild(root_0, stack8.tree);
+                    state._fsp--;
+
+                    adaptor.addChild(root_0, stack8.getTree());
 
                     }
                     break;
                 case 4 :
-                    // Bst.g:20:4: MACRO^^ id '{'! STRING '}'!
+                    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:28:4: MACRO ^ id '{' ! STRING '}' !
                     {
-                    root_0 = adaptor.nil();
+                    root_0 = (Object)adaptor.nil();
+
+
+                    MACRO9=(Token)match(input,MACRO,FOLLOW_MACRO_in_commands108); 
+                    MACRO9_tree = 
+                    (Object)adaptor.create(MACRO9)
+                    ;
+                    root_0 = (Object)adaptor.becomeRoot(MACRO9_tree, root_0);
 
-                    MACRO9=input.LT(1);
-                    match(input,MACRO,FOLLOW_MACRO_in_commands91); 
-                    MACRO9_tree = adaptor.create(MACRO9);
-                    root_0 = adaptor.becomeRoot(MACRO9_tree, root_0);
 
-                    pushFollow(FOLLOW_id_in_commands94);
+                    pushFollow(FOLLOW_id_in_commands111);
                     id10=id();
-                    _fsp--;
-
-                    adaptor.addChild(root_0, id10.tree);
-                    char_literal11=input.LT(1);
-                    match(input,25,FOLLOW_25_in_commands96); 
-                    STRING12=input.LT(1);
-                    match(input,STRING,FOLLOW_STRING_in_commands99); 
-                    STRING12_tree = adaptor.create(STRING12);
+
+                    state._fsp--;
+
+                    adaptor.addChild(root_0, id10.getTree());
+
+                    char_literal11=(Token)match(input,32,FOLLOW_32_in_commands113); 
+
+                    STRING12=(Token)match(input,STRING,FOLLOW_STRING_in_commands116); 
+                    STRING12_tree = 
+                    (Object)adaptor.create(STRING12)
+                    ;
                     adaptor.addChild(root_0, STRING12_tree);
 
-                    char_literal13=input.LT(1);
-                    match(input,26,FOLLOW_26_in_commands101); 
+
+                    char_literal13=(Token)match(input,33,FOLLOW_33_in_commands118); 
 
                     }
                     break;
                 case 5 :
-                    // Bst.g:21:4: READ^^
+                    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:29:4: READ ^
                     {
-                    root_0 = adaptor.nil();
+                    root_0 = (Object)adaptor.nil();
 
-                    READ14=input.LT(1);
-                    match(input,READ,FOLLOW_READ_in_commands107); 
-                    READ14_tree = adaptor.create(READ14);
-                    root_0 = adaptor.becomeRoot(READ14_tree, root_0);
+
+                    READ14=(Token)match(input,READ,FOLLOW_READ_in_commands124); 
+                    READ14_tree = 
+                    (Object)adaptor.create(READ14)
+                    ;
+                    root_0 = (Object)adaptor.becomeRoot(READ14_tree, root_0);
 
 
                     }
                     break;
                 case 6 :
-                    // Bst.g:22:4: EXECUTE^^ '{'! function '}'!
+                    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:30:4: EXECUTE ^ '{' ! function '}' !
                     {
-                    root_0 = adaptor.nil();
+                    root_0 = (Object)adaptor.nil();
+
 
-                    EXECUTE15=input.LT(1);
-                    match(input,EXECUTE,FOLLOW_EXECUTE_in_commands113); 
-                    EXECUTE15_tree = adaptor.create(EXECUTE15);
-                    root_0 = adaptor.becomeRoot(EXECUTE15_tree, root_0);
+                    EXECUTE15=(Token)match(input,EXECUTE,FOLLOW_EXECUTE_in_commands130); 
+                    EXECUTE15_tree = 
+                    (Object)adaptor.create(EXECUTE15)
+                    ;
+                    root_0 = (Object)adaptor.becomeRoot(EXECUTE15_tree, root_0);
 
-                    char_literal16=input.LT(1);
-                    match(input,25,FOLLOW_25_in_commands116); 
-                    pushFollow(FOLLOW_function_in_commands119);
+
+                    char_literal16=(Token)match(input,32,FOLLOW_32_in_commands133); 
+
+                    pushFollow(FOLLOW_function_in_commands136);
                     function17=function();
-                    _fsp--;
 
-                    adaptor.addChild(root_0, function17.tree);
-                    char_literal18=input.LT(1);
-                    match(input,26,FOLLOW_26_in_commands121); 
+                    state._fsp--;
+
+                    adaptor.addChild(root_0, function17.getTree());
+
+                    char_literal18=(Token)match(input,33,FOLLOW_33_in_commands138); 
 
                     }
                     break;
                 case 7 :
-                    // Bst.g:23:4: ITERATE^^ '{'! function '}'!
+                    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:31:4: ITERATE ^ '{' ! function '}' !
                     {
-                    root_0 = adaptor.nil();
+                    root_0 = (Object)adaptor.nil();
+
+
+                    ITERATE19=(Token)match(input,ITERATE,FOLLOW_ITERATE_in_commands144); 
+                    ITERATE19_tree = 
+                    (Object)adaptor.create(ITERATE19)
+                    ;
+                    root_0 = (Object)adaptor.becomeRoot(ITERATE19_tree, root_0);
 
-                    ITERATE19=input.LT(1);
-                    match(input,ITERATE,FOLLOW_ITERATE_in_commands127); 
-                    ITERATE19_tree = adaptor.create(ITERATE19);
-                    root_0 = adaptor.becomeRoot(ITERATE19_tree, root_0);
 
-                    char_literal20=input.LT(1);
-                    match(input,25,FOLLOW_25_in_commands130); 
-                    pushFollow(FOLLOW_function_in_commands133);
+                    char_literal20=(Token)match(input,32,FOLLOW_32_in_commands147); 
+
+                    pushFollow(FOLLOW_function_in_commands150);
                     function21=function();
-                    _fsp--;
 
-                    adaptor.addChild(root_0, function21.tree);
-                    char_literal22=input.LT(1);
-                    match(input,26,FOLLOW_26_in_commands135); 
+                    state._fsp--;
+
+                    adaptor.addChild(root_0, function21.getTree());
+
+                    char_literal22=(Token)match(input,33,FOLLOW_33_in_commands152); 
 
                     }
                     break;
                 case 8 :
-                    // Bst.g:24:4: REVERSE^^ '{'! function '}'!
+                    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:32:4: REVERSE ^ '{' ! function '}' !
                     {
-                    root_0 = adaptor.nil();
+                    root_0 = (Object)adaptor.nil();
+
+
+                    REVERSE23=(Token)match(input,REVERSE,FOLLOW_REVERSE_in_commands158); 
+                    REVERSE23_tree = 
+                    (Object)adaptor.create(REVERSE23)
+                    ;
+                    root_0 = (Object)adaptor.becomeRoot(REVERSE23_tree, root_0);
 
-                    REVERSE23=input.LT(1);
-                    match(input,REVERSE,FOLLOW_REVERSE_in_commands141); 
-                    REVERSE23_tree = adaptor.create(REVERSE23);
-                    root_0 = adaptor.becomeRoot(REVERSE23_tree, root_0);
 
-                    char_literal24=input.LT(1);
-                    match(input,25,FOLLOW_25_in_commands144); 
-                    pushFollow(FOLLOW_function_in_commands147);
+                    char_literal24=(Token)match(input,32,FOLLOW_32_in_commands161); 
+
+                    pushFollow(FOLLOW_function_in_commands164);
                     function25=function();
-                    _fsp--;
 
-                    adaptor.addChild(root_0, function25.tree);
-                    char_literal26=input.LT(1);
-                    match(input,26,FOLLOW_26_in_commands149); 
+                    state._fsp--;
+
+                    adaptor.addChild(root_0, function25.getTree());
+
+                    char_literal26=(Token)match(input,33,FOLLOW_33_in_commands166); 
 
                     }
                     break;
                 case 9 :
-                    // Bst.g:25:4: ENTRY^^ idList0 idList0 idList0
+                    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:33:4: ENTRY ^ idList0 idList0 idList0
                     {
-                    root_0 = adaptor.nil();
+                    root_0 = (Object)adaptor.nil();
+
+
+                    ENTRY27=(Token)match(input,ENTRY,FOLLOW_ENTRY_in_commands172); 
+                    ENTRY27_tree = 
+                    (Object)adaptor.create(ENTRY27)
+                    ;
+                    root_0 = (Object)adaptor.becomeRoot(ENTRY27_tree, root_0);
 
-                    ENTRY27=input.LT(1);
-                    match(input,ENTRY,FOLLOW_ENTRY_in_commands155); 
-                    ENTRY27_tree = adaptor.create(ENTRY27);
-                    root_0 = adaptor.becomeRoot(ENTRY27_tree, root_0);
 
-                    pushFollow(FOLLOW_idList0_in_commands158);
+                    pushFollow(FOLLOW_idList0_in_commands175);
                     idList028=idList0();
-                    _fsp--;
 
-                    adaptor.addChild(root_0, idList028.tree);
-                    pushFollow(FOLLOW_idList0_in_commands160);
+                    state._fsp--;
+
+                    adaptor.addChild(root_0, idList028.getTree());
+
+                    pushFollow(FOLLOW_idList0_in_commands177);
                     idList029=idList0();
-                    _fsp--;
 
-                    adaptor.addChild(root_0, idList029.tree);
-                    pushFollow(FOLLOW_idList0_in_commands162);
+                    state._fsp--;
+
+                    adaptor.addChild(root_0, idList029.getTree());
+
+                    pushFollow(FOLLOW_idList0_in_commands179);
                     idList030=idList0();
-                    _fsp--;
 
-                    adaptor.addChild(root_0, idList030.tree);
+                    state._fsp--;
+
+                    adaptor.addChild(root_0, idList030.getTree());
 
                     }
                     break;
                 case 10 :
-                    // Bst.g:26:4: SORT^^
+                    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:34:4: SORT ^
                     {
-                    root_0 = adaptor.nil();
+                    root_0 = (Object)adaptor.nil();
 
-                    SORT31=input.LT(1);
-                    match(input,SORT,FOLLOW_SORT_in_commands167); 
-                    SORT31_tree = adaptor.create(SORT31);
-                    root_0 = adaptor.becomeRoot(SORT31_tree, root_0);
+
+                    SORT31=(Token)match(input,SORT,FOLLOW_SORT_in_commands184); 
+                    SORT31_tree = 
+                    (Object)adaptor.create(SORT31)
+                    ;
+                    root_0 = (Object)adaptor.becomeRoot(SORT31_tree, root_0);
 
 
                     }
                     break;
 
             }
+            retval.stop = input.LT(-1);
+
+
+            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
+            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
+
         }
         catch (RecognitionException re) {
             reportError(re);
             recover(input,re);
-        }
-        finally {
-            retval.stop = input.LT(-1);
+    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
 
-                retval.tree = adaptor.rulePostProcessing(root_0);
-                adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
+        }
 
-       }
+        finally {
+        	// do for sure before leaving
+        }
         return retval;
     }
-    // $ANTLR end commands
+    // $ANTLR end "commands"
+
 
     public static class identifier_return extends ParserRuleReturnScope {
         Object tree;
         public Object getTree() { return tree; }
-    }
+    };
+
 
-    // $ANTLR start identifier
-    // Bst.g:28:1: identifier : IDENTIFIER ;
-    public identifier_return identifier() throws RecognitionException {   
-        identifier_return retval = new identifier_return();
+    // $ANTLR start "identifier"
+    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:36:1: identifier : IDENTIFIER ;
+    public final BstParser.identifier_return identifier() throws RecognitionException {
+        BstParser.identifier_return retval = new BstParser.identifier_return();
         retval.start = input.LT(1);
 
+
         Object root_0 = null;
 
         Token IDENTIFIER32=null;
@@ -540,128 +629,148 @@ public class BstParser extends Parser {
         Object IDENTIFIER32_tree=null;
 
         try {
-            // Bst.g:29:4: ( IDENTIFIER )
-            // Bst.g:29:4: IDENTIFIER
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:37:2: ( IDENTIFIER )
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:37:4: IDENTIFIER
             {
-            root_0 = adaptor.nil();
+            root_0 = (Object)adaptor.nil();
+
 
-            IDENTIFIER32=input.LT(1);
-            match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_identifier178); 
-            IDENTIFIER32_tree = adaptor.create(IDENTIFIER32);
+            IDENTIFIER32=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_identifier195); 
+            IDENTIFIER32_tree = 
+            (Object)adaptor.create(IDENTIFIER32)
+            ;
             adaptor.addChild(root_0, IDENTIFIER32_tree);
 
 
             }
 
+            retval.stop = input.LT(-1);
+
+
+            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
+            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
+
         }
         catch (RecognitionException re) {
             reportError(re);
             recover(input,re);
-        }
-        finally {
-            retval.stop = input.LT(-1);
+    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
 
-                retval.tree = adaptor.rulePostProcessing(root_0);
-                adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
+        }
 
-       }
+        finally {
+        	// do for sure before leaving
+        }
         return retval;
     }
-    // $ANTLR end identifier
+    // $ANTLR end "identifier"
+
 
     public static class id_return extends ParserRuleReturnScope {
         Object tree;
         public Object getTree() { return tree; }
-    }
+    };
 
-    // $ANTLR start id
-    // Bst.g:31:1: id : '{'! identifier '}'! ;
-    public id_return id() throws RecognitionException {   
-        id_return retval = new id_return();
+
+    // $ANTLR start "id"
+    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:39:1: id : '{' ! identifier '}' !;
+    public final BstParser.id_return id() throws RecognitionException {
+        BstParser.id_return retval = new BstParser.id_return();
         retval.start = input.LT(1);
 
+
         Object root_0 = null;
 
         Token char_literal33=null;
         Token char_literal35=null;
-        identifier_return identifier34 = null;
+        BstParser.identifier_return identifier34 =null;
 
 
         Object char_literal33_tree=null;
         Object char_literal35_tree=null;
 
         try {
-            // Bst.g:32:4: ( '{'! identifier '}'! )
-            // Bst.g:32:4: '{'! identifier '}'!
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:40:2: ( '{' ! identifier '}' !)
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:40:4: '{' ! identifier '}' !
             {
-            root_0 = adaptor.nil();
+            root_0 = (Object)adaptor.nil();
+
 
-            char_literal33=input.LT(1);
-            match(input,25,FOLLOW_25_in_id188); 
-            pushFollow(FOLLOW_identifier_in_id191);
+            char_literal33=(Token)match(input,32,FOLLOW_32_in_id205); 
+
+            pushFollow(FOLLOW_identifier_in_id208);
             identifier34=identifier();
-            _fsp--;
 
-            adaptor.addChild(root_0, identifier34.tree);
-            char_literal35=input.LT(1);
-            match(input,26,FOLLOW_26_in_id193); 
+            state._fsp--;
+
+            adaptor.addChild(root_0, identifier34.getTree());
+
+            char_literal35=(Token)match(input,33,FOLLOW_33_in_id210); 
 
             }
 
+            retval.stop = input.LT(-1);
+
+
+            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
+            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
+
         }
         catch (RecognitionException re) {
             reportError(re);
             recover(input,re);
-        }
-        finally {
-            retval.stop = input.LT(-1);
+    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
 
-                retval.tree = adaptor.rulePostProcessing(root_0);
-                adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
+        }
 
-       }
+        finally {
+        	// do for sure before leaving
+        }
         return retval;
     }
-    // $ANTLR end id
+    // $ANTLR end "id"
+
 
     public static class idList_return extends ParserRuleReturnScope {
         Object tree;
         public Object getTree() { return tree; }
-    }
+    };
+
 
-    // $ANTLR start idList
-    // Bst.g:34:1: idList : '{' ( identifier )+ '}' -> ^( IDLIST ( identifier )+ ) ;
-    
-	public idList_return idList() throws RecognitionException {   
-        idList_return retval = new idList_return();
+    // $ANTLR start "idList"
+    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:42:1: idList : '{' ( identifier )+ '}' -> ^( IDLIST ( identifier )+ ) ;
+    public final BstParser.idList_return idList() throws RecognitionException {
+        BstParser.idList_return retval = new BstParser.idList_return();
         retval.start = input.LT(1);
 
+
         Object root_0 = null;
 
         Token char_literal36=null;
         Token char_literal38=null;
-        identifier_return identifier37 = null;
+        BstParser.identifier_return identifier37 =null;
+
 
-        List list_identifier=new ArrayList();
-        List list_26=new ArrayList();
-        List list_25=new ArrayList();
         Object char_literal36_tree=null;
         Object char_literal38_tree=null;
-
+        RewriteRuleTokenStream stream_32=new RewriteRuleTokenStream(adaptor,"token 32");
+        RewriteRuleTokenStream stream_33=new RewriteRuleTokenStream(adaptor,"token 33");
+        RewriteRuleSubtreeStream stream_identifier=new RewriteRuleSubtreeStream(adaptor,"rule identifier");
         try {
-            // Bst.g:35:4: ( '{' ( identifier )+ '}' -> ^( IDLIST ( identifier )+ ) )
-            // Bst.g:35:4: '{' ( identifier )+ '}'
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:43:2: ( '{' ( identifier )+ '}' -> ^( IDLIST ( identifier )+ ) )
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:43:4: '{' ( identifier )+ '}'
             {
-            char_literal36=input.LT(1);
-            match(input,25,FOLLOW_25_in_idList205); 
-            list_25.add(char_literal36);
+            char_literal36=(Token)match(input,32,FOLLOW_32_in_idList222);  
+            stream_32.add(char_literal36);
 
-            // Bst.g:35:8: ( identifier )+
+
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:43:8: ( identifier )+
             int cnt3=0;
             loop3:
             do {
                 int alt3=2;
                 int LA3_0 = input.LA(1);
+
                 if ( (LA3_0==IDENTIFIER) ) {
                     alt3=1;
                 }
@@ -669,13 +778,14 @@ public class BstParser extends Parser {
 
                 switch (alt3) {
             	case 1 :
-            	    // Bst.g:35:8: identifier
+            	    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:43:8: identifier
             	    {
-            	    pushFollow(FOLLOW_identifier_in_idList207);
+            	    pushFollow(FOLLOW_identifier_in_idList224);
             	    identifier37=identifier();
-            	    _fsp--;
 
-            	    list_identifier.add(identifier37.tree);
+            	    state._fsp--;
+
+            	    stream_identifier.add(identifier37.getTree());
 
             	    }
             	    break;
@@ -689,34 +799,39 @@ public class BstParser extends Parser {
                 cnt3++;
             } while (true);
 
-            char_literal38=input.LT(1);
-            match(input,26,FOLLOW_26_in_idList210); 
-            list_26.add(char_literal38);
+
+            char_literal38=(Token)match(input,33,FOLLOW_33_in_idList227);  
+            stream_33.add(char_literal38);
 
 
             // AST REWRITE
-            int i_0 = 0;
+            // elements: identifier
+            // token labels: 
+            // rule labels: retval
+            // token list labels: 
+            // rule list labels: 
+            // wildcard labels: 
             retval.tree = root_0;
-            root_0 = adaptor.nil();
-            // 35:24: -> ^( IDLIST ( identifier )+ )
-            {
-                // Bst.g:35:27: ^( IDLIST ( identifier )+ )
-                {
-                Object root_1 = adaptor.nil();
-                root_1 = adaptor.becomeRoot(adaptor.create(IDLIST, "IDLIST"), root_1);
+            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);
 
-                // Bst.g:35:36: ( identifier )+
+            root_0 = (Object)adaptor.nil();
+            // 43:24: -> ^( IDLIST ( identifier )+ )
+            {
+                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:43:27: ^( IDLIST ( identifier )+ )
                 {
-                int n_1 = list_identifier == null ? 0 : list_identifier.size();
-                 
-
-
-                if ( n_1==0 ) throw new RuntimeException("Must have more than one element for (...)+ loops");
-                for (int i_1=0; i_1<n_1; i_1++) {
-                    adaptor.addChild(root_1, list_identifier.get(i_1));
+                Object root_1 = (Object)adaptor.nil();
+                root_1 = (Object)adaptor.becomeRoot(
+                (Object)adaptor.create(IDLIST, "IDLIST")
+                , root_1);
 
+                if ( !(stream_identifier.hasNext()) ) {
+                    throw new RewriteEarlyExitException();
                 }
+                while ( stream_identifier.hasNext() ) {
+                    adaptor.addChild(root_1, stream_identifier.nextTree());
+
                 }
+                stream_identifier.reset();
 
                 adaptor.addChild(root_0, root_1);
                 }
@@ -724,61 +839,71 @@ public class BstParser extends Parser {
             }
 
 
+            retval.tree = root_0;
 
             }
 
+            retval.stop = input.LT(-1);
+
+
+            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
+            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
+
         }
         catch (RecognitionException re) {
             reportError(re);
             recover(input,re);
-        }
-        finally {
-            retval.stop = input.LT(-1);
+    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
 
-                retval.tree = adaptor.rulePostProcessing(root_0);
-                adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
+        }
 
-       }
+        finally {
+        	// do for sure before leaving
+        }
         return retval;
     }
-    // $ANTLR end idList
+    // $ANTLR end "idList"
+
 
     public static class idList0_return extends ParserRuleReturnScope {
         Object tree;
         public Object getTree() { return tree; }
-    }
+    };
+
 
-    // $ANTLR start idList0
-    // Bst.g:37:1: idList0 : '{' ( identifier )* '}' -> ^( IDLIST ( identifier )* ) ;
-    public idList0_return idList0() throws RecognitionException {   
-        idList0_return retval = new idList0_return();
+    // $ANTLR start "idList0"
+    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:45:1: idList0 : '{' ( identifier )* '}' -> ^( IDLIST ( identifier )* ) ;
+    public final BstParser.idList0_return idList0() throws RecognitionException {
+        BstParser.idList0_return retval = new BstParser.idList0_return();
         retval.start = input.LT(1);
 
+
         Object root_0 = null;
 
         Token char_literal39=null;
         Token char_literal41=null;
-        identifier_return identifier40 = null;
+        BstParser.identifier_return identifier40 =null;
+
 
-        List list_identifier=new ArrayList();
-        List list_26=new ArrayList();
-        List list_25=new ArrayList();
         Object char_literal39_tree=null;
         Object char_literal41_tree=null;
-
+        RewriteRuleTokenStream stream_32=new RewriteRuleTokenStream(adaptor,"token 32");
+        RewriteRuleTokenStream stream_33=new RewriteRuleTokenStream(adaptor,"token 33");
+        RewriteRuleSubtreeStream stream_identifier=new RewriteRuleSubtreeStream(adaptor,"rule identifier");
         try {
-            // Bst.g:38:4: ( '{' ( identifier )* '}' -> ^( IDLIST ( identifier )* ) )
-            // Bst.g:38:4: '{' ( identifier )* '}'
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:46:2: ( '{' ( identifier )* '}' -> ^( IDLIST ( identifier )* ) )
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:46:4: '{' ( identifier )* '}'
             {
-            char_literal39=input.LT(1);
-            match(input,25,FOLLOW_25_in_idList0230); 
-            list_25.add(char_literal39);
+            char_literal39=(Token)match(input,32,FOLLOW_32_in_idList0247);  
+            stream_32.add(char_literal39);
 
-            // Bst.g:38:8: ( identifier )*
+
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:46:8: ( identifier )*
             loop4:
             do {
                 int alt4=2;
                 int LA4_0 = input.LA(1);
+
                 if ( (LA4_0==IDENTIFIER) ) {
                     alt4=1;
                 }
@@ -786,13 +911,14 @@ public class BstParser extends Parser {
 
                 switch (alt4) {
             	case 1 :
-            	    // Bst.g:38:8: identifier
+            	    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:46:8: identifier
             	    {
-            	    pushFollow(FOLLOW_identifier_in_idList0232);
+            	    pushFollow(FOLLOW_identifier_in_idList0249);
             	    identifier40=identifier();
-            	    _fsp--;
 
-            	    list_identifier.add(identifier40.tree);
+            	    state._fsp--;
+
+            	    stream_identifier.add(identifier40.getTree());
 
             	    }
             	    break;
@@ -802,33 +928,37 @@ public class BstParser extends Parser {
                 }
             } while (true);
 
-            char_literal41=input.LT(1);
-            match(input,26,FOLLOW_26_in_idList0235); 
-            list_26.add(char_literal41);
+
+            char_literal41=(Token)match(input,33,FOLLOW_33_in_idList0252);  
+            stream_33.add(char_literal41);
 
 
             // AST REWRITE
-            int i_0 = 0;
+            // elements: identifier
+            // token labels: 
+            // rule labels: retval
+            // token list labels: 
+            // rule list labels: 
+            // wildcard labels: 
             retval.tree = root_0;
-            root_0 = adaptor.nil();
-            // 38:24: -> ^( IDLIST ( identifier )* )
-            {
-                // Bst.g:38:27: ^( IDLIST ( identifier )* )
-                {
-                Object root_1 = adaptor.nil();
-                root_1 = adaptor.becomeRoot(adaptor.create(IDLIST, "IDLIST"), root_1);
+            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);
 
-                // Bst.g:38:36: ( identifier )*
+            root_0 = (Object)adaptor.nil();
+            // 46:24: -> ^( IDLIST ( identifier )* )
+            {
+                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:46:27: ^( IDLIST ( identifier )* )
                 {
-                int n_1 = list_identifier == null ? 0 : list_identifier.size();
-                 
-
+                Object root_1 = (Object)adaptor.nil();
+                root_1 = (Object)adaptor.becomeRoot(
+                (Object)adaptor.create(IDLIST, "IDLIST")
+                , root_1);
 
-                for (int i_1=0; i_1<n_1; i_1++) {
-                    adaptor.addChild(root_1, list_identifier.get(i_1));
+                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:46:36: ( identifier )*
+                while ( stream_identifier.hasNext() ) {
+                    adaptor.addChild(root_1, stream_identifier.nextTree());
 
                 }
-                }
+                stream_identifier.reset();
 
                 adaptor.addChild(root_0, root_1);
                 }
@@ -836,36 +966,45 @@ public class BstParser extends Parser {
             }
 
 
+            retval.tree = root_0;
 
             }
 
+            retval.stop = input.LT(-1);
+
+
+            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
+            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
+
         }
         catch (RecognitionException re) {
             reportError(re);
             recover(input,re);
-        }
-        finally {
-            retval.stop = input.LT(-1);
+    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
 
-                retval.tree = adaptor.rulePostProcessing(root_0);
-                adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
+        }
 
-       }
+        finally {
+        	// do for sure before leaving
+        }
         return retval;
     }
-    // $ANTLR end idList0
+    // $ANTLR end "idList0"
+
 
     public static class function_return extends ParserRuleReturnScope {
         Object tree;
         public Object getTree() { return tree; }
-    }
+    };
 
-    // $ANTLR start function
-    // Bst.g:40:1: function : ( '<' | '>' | '=' | '+' | '-' | ':=' | '*' | identifier );
-    public function_return function() throws RecognitionException {   
-        function_return retval = new function_return();
+
+    // $ANTLR start "function"
+    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:48:1: function : ( '<' | '>' | '=' | '+' | '-' | ':=' | '*' | identifier );
+    public final BstParser.function_return function() throws RecognitionException {
+        BstParser.function_return retval = new BstParser.function_return();
         retval.start = input.LT(1);
 
+
         Object root_0 = null;
 
         Token char_literal42=null;
@@ -875,7 +1014,7 @@ public class BstParser extends Parser {
         Token char_literal46=null;
         Token string_literal47=null;
         Token char_literal48=null;
-        identifier_return identifier49 = null;
+        BstParser.identifier_return identifier49 =null;
 
 
         Object char_literal42_tree=null;
@@ -887,214 +1026,257 @@ public class BstParser extends Parser {
         Object char_literal48_tree=null;
 
         try {
-            // Bst.g:41:4: ( '<' | '>' | '=' | '+' | '-' | ':=' | '*' | identifier )
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:49:2: ( '<' | '>' | '=' | '+' | '-' | ':=' | '*' | identifier )
             int alt5=8;
             switch ( input.LA(1) ) {
-            case 27:
+            case 29:
+                {
                 alt5=1;
+                }
                 break;
-            case 28:
+            case 31:
+                {
                 alt5=2;
+                }
                 break;
-            case 29:
+            case 30:
+                {
                 alt5=3;
+                }
                 break;
-            case 30:
+            case 26:
+                {
                 alt5=4;
+                }
                 break;
-            case 31:
+            case 27:
+                {
                 alt5=5;
+                }
                 break;
-            case 32:
+            case 28:
+                {
                 alt5=6;
+                }
                 break;
-            case 33:
+            case 25:
+                {
                 alt5=7;
+                }
                 break;
             case IDENTIFIER:
+                {
                 alt5=8;
+                }
                 break;
             default:
                 NoViableAltException nvae =
-                    new NoViableAltException("40:1: function : ( '<' | '>' | '=' | '+' | '-' | ':=' | '*' | identifier );", 5, 0, input);
+                    new NoViableAltException("", 5, 0, input);
 
                 throw nvae;
+
             }
 
             switch (alt5) {
                 case 1 :
-                    // Bst.g:41:4: '<'
+                    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:49:4: '<'
                     {
-                    root_0 = adaptor.nil();
+                    root_0 = (Object)adaptor.nil();
+
 
-                    char_literal42=input.LT(1);
-                    match(input,27,FOLLOW_27_in_function254); 
-                    char_literal42_tree = adaptor.create(char_literal42);
+                    char_literal42=(Token)match(input,29,FOLLOW_29_in_function271); 
+                    char_literal42_tree = 
+                    (Object)adaptor.create(char_literal42)
+                    ;
                     adaptor.addChild(root_0, char_literal42_tree);
 
 
                     }
                     break;
                 case 2 :
-                    // Bst.g:41:10: '>'
+                    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:49:10: '>'
                     {
-                    root_0 = adaptor.nil();
+                    root_0 = (Object)adaptor.nil();
 
-                    char_literal43=input.LT(1);
-                    match(input,28,FOLLOW_28_in_function258); 
-                    char_literal43_tree = adaptor.create(char_literal43);
+
+                    char_literal43=(Token)match(input,31,FOLLOW_31_in_function275); 
+                    char_literal43_tree = 
+                    (Object)adaptor.create(char_literal43)
+                    ;
                     adaptor.addChild(root_0, char_literal43_tree);
 
 
                     }
                     break;
                 case 3 :
-                    // Bst.g:41:16: '='
+                    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:49:16: '='
                     {
-                    root_0 = adaptor.nil();
+                    root_0 = (Object)adaptor.nil();
+
 
-                    char_literal44=input.LT(1);
-                    match(input,29,FOLLOW_29_in_function262); 
-                    char_literal44_tree = adaptor.create(char_literal44);
+                    char_literal44=(Token)match(input,30,FOLLOW_30_in_function279); 
+                    char_literal44_tree = 
+                    (Object)adaptor.create(char_literal44)
+                    ;
                     adaptor.addChild(root_0, char_literal44_tree);
 
 
                     }
                     break;
                 case 4 :
-                    // Bst.g:41:22: '+'
+                    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:49:22: '+'
                     {
-                    root_0 = adaptor.nil();
+                    root_0 = (Object)adaptor.nil();
+
 
-                    char_literal45=input.LT(1);
-                    match(input,30,FOLLOW_30_in_function266); 
-                    char_literal45_tree = adaptor.create(char_literal45);
+                    char_literal45=(Token)match(input,26,FOLLOW_26_in_function283); 
+                    char_literal45_tree = 
+                    (Object)adaptor.create(char_literal45)
+                    ;
                     adaptor.addChild(root_0, char_literal45_tree);
 
 
                     }
                     break;
                 case 5 :
-                    // Bst.g:41:28: '-'
+                    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:49:28: '-'
                     {
-                    root_0 = adaptor.nil();
+                    root_0 = (Object)adaptor.nil();
 
-                    char_literal46=input.LT(1);
-                    match(input,31,FOLLOW_31_in_function270); 
-                    char_literal46_tree = adaptor.create(char_literal46);
+
+                    char_literal46=(Token)match(input,27,FOLLOW_27_in_function287); 
+                    char_literal46_tree = 
+                    (Object)adaptor.create(char_literal46)
+                    ;
                     adaptor.addChild(root_0, char_literal46_tree);
 
 
                     }
                     break;
                 case 6 :
-                    // Bst.g:41:34: ':='
+                    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:49:34: ':='
                     {
-                    root_0 = adaptor.nil();
+                    root_0 = (Object)adaptor.nil();
+
 
-                    string_literal47=input.LT(1);
-                    match(input,32,FOLLOW_32_in_function274); 
-                    string_literal47_tree = adaptor.create(string_literal47);
+                    string_literal47=(Token)match(input,28,FOLLOW_28_in_function291); 
+                    string_literal47_tree = 
+                    (Object)adaptor.create(string_literal47)
+                    ;
                     adaptor.addChild(root_0, string_literal47_tree);
 
 
                     }
                     break;
                 case 7 :
-                    // Bst.g:41:41: '*'
+                    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:49:41: '*'
                     {
-                    root_0 = adaptor.nil();
+                    root_0 = (Object)adaptor.nil();
 
-                    char_literal48=input.LT(1);
-                    match(input,33,FOLLOW_33_in_function278); 
-                    char_literal48_tree = adaptor.create(char_literal48);
+
+                    char_literal48=(Token)match(input,25,FOLLOW_25_in_function295); 
+                    char_literal48_tree = 
+                    (Object)adaptor.create(char_literal48)
+                    ;
                     adaptor.addChild(root_0, char_literal48_tree);
 
 
                     }
                     break;
                 case 8 :
-                    // Bst.g:41:47: identifier
+                    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:49:47: identifier
                     {
-                    root_0 = adaptor.nil();
+                    root_0 = (Object)adaptor.nil();
+
 
-                    pushFollow(FOLLOW_identifier_in_function282);
+                    pushFollow(FOLLOW_identifier_in_function299);
                     identifier49=identifier();
-                    _fsp--;
 
-                    adaptor.addChild(root_0, identifier49.tree);
+                    state._fsp--;
+
+                    adaptor.addChild(root_0, identifier49.getTree());
 
                     }
                     break;
 
             }
+            retval.stop = input.LT(-1);
+
+
+            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
+            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
+
         }
         catch (RecognitionException re) {
             reportError(re);
             recover(input,re);
-        }
-        finally {
-            retval.stop = input.LT(-1);
+    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
 
-                retval.tree = adaptor.rulePostProcessing(root_0);
-                adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
+        }
 
-       }
+        finally {
+        	// do for sure before leaving
+        }
         return retval;
     }
-    // $ANTLR end function
+    // $ANTLR end "function"
+
 
     public static class stack_return extends ParserRuleReturnScope {
         Object tree;
         public Object getTree() { return tree; }
-    }
+    };
 
-    // $ANTLR start stack
-    // Bst.g:43:1: stack : '{' ( stackitem )+ '}' -> ^( STACK ( stackitem )+ ) ;
-    public stack_return stack() throws RecognitionException {   
-        stack_return retval = new stack_return();
+
+    // $ANTLR start "stack"
+    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:51:1: stack : '{' ( stackitem )+ '}' -> ^( STACK ( stackitem )+ ) ;
+    public final BstParser.stack_return stack() throws RecognitionException {
+        BstParser.stack_return retval = new BstParser.stack_return();
         retval.start = input.LT(1);
 
+
         Object root_0 = null;
 
         Token char_literal50=null;
         Token char_literal52=null;
-        stackitem_return stackitem51 = null;
+        BstParser.stackitem_return stackitem51 =null;
+
 
-        List list_stackitem=new ArrayList();
-        List list_26=new ArrayList();
-        List list_25=new ArrayList();
         Object char_literal50_tree=null;
         Object char_literal52_tree=null;
-
+        RewriteRuleTokenStream stream_32=new RewriteRuleTokenStream(adaptor,"token 32");
+        RewriteRuleTokenStream stream_33=new RewriteRuleTokenStream(adaptor,"token 33");
+        RewriteRuleSubtreeStream stream_stackitem=new RewriteRuleSubtreeStream(adaptor,"rule stackitem");
         try {
-            // Bst.g:44:4: ( '{' ( stackitem )+ '}' -> ^( STACK ( stackitem )+ ) )
-            // Bst.g:44:4: '{' ( stackitem )+ '}'
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:52:2: ( '{' ( stackitem )+ '}' -> ^( STACK ( stackitem )+ ) )
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:52:4: '{' ( stackitem )+ '}'
             {
-            char_literal50=input.LT(1);
-            match(input,25,FOLLOW_25_in_stack293); 
-            list_25.add(char_literal50);
+            char_literal50=(Token)match(input,32,FOLLOW_32_in_stack310);  
+            stream_32.add(char_literal50);
+
 
-            // Bst.g:44:8: ( stackitem )+
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:52:8: ( stackitem )+
             int cnt6=0;
             loop6:
             do {
                 int alt6=2;
                 int LA6_0 = input.LA(1);
-                if ( (LA6_0==STRING||(LA6_0>=IDENTIFIER && LA6_0<=QUOTED)||LA6_0==25||(LA6_0>=27 && LA6_0<=33)) ) {
+
+                if ( (LA6_0==IDENTIFIER||LA6_0==INTEGER||LA6_0==QUOTED||LA6_0==STRING||(LA6_0 >= 25 && LA6_0 <= 32)) ) {
                     alt6=1;
                 }
 
 
                 switch (alt6) {
             	case 1 :
-            	    // Bst.g:44:8: stackitem
+            	    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:52:8: stackitem
             	    {
-            	    pushFollow(FOLLOW_stackitem_in_stack295);
+            	    pushFollow(FOLLOW_stackitem_in_stack312);
             	    stackitem51=stackitem();
-            	    _fsp--;
 
-            	    list_stackitem.add(stackitem51.tree);
+            	    state._fsp--;
+
+            	    stream_stackitem.add(stackitem51.getTree());
 
             	    }
             	    break;
@@ -1108,34 +1290,39 @@ public class BstParser extends Parser {
                 cnt6++;
             } while (true);
 
-            char_literal52=input.LT(1);
-            match(input,26,FOLLOW_26_in_stack298); 
-            list_26.add(char_literal52);
+
+            char_literal52=(Token)match(input,33,FOLLOW_33_in_stack315);  
+            stream_33.add(char_literal52);
 
 
             // AST REWRITE
-            int i_0 = 0;
+            // elements: stackitem
+            // token labels: 
+            // rule labels: retval
+            // token list labels: 
+            // rule list labels: 
+            // wildcard labels: 
             retval.tree = root_0;
-            root_0 = adaptor.nil();
-            // 44:23: -> ^( STACK ( stackitem )+ )
-            {
-                // Bst.g:44:26: ^( STACK ( stackitem )+ )
-                {
-                Object root_1 = adaptor.nil();
-                root_1 = adaptor.becomeRoot(adaptor.create(STACK, "STACK"), root_1);
+            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);
 
-                // Bst.g:44:34: ( stackitem )+
+            root_0 = (Object)adaptor.nil();
+            // 52:23: -> ^( STACK ( stackitem )+ )
+            {
+                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:52:26: ^( STACK ( stackitem )+ )
                 {
-                int n_1 = list_stackitem == null ? 0 : list_stackitem.size();
-                 
-
-
-                if ( n_1==0 ) throw new RuntimeException("Must have more than one element for (...)+ loops");
-                for (int i_1=0; i_1<n_1; i_1++) {
-                    adaptor.addChild(root_1, list_stackitem.get(i_1));
+                Object root_1 = (Object)adaptor.nil();
+                root_1 = (Object)adaptor.becomeRoot(
+                (Object)adaptor.create(STACK, "STACK")
+                , root_1);
 
+                if ( !(stream_stackitem.hasNext()) ) {
+                    throw new RewriteEarlyExitException();
                 }
+                while ( stream_stackitem.hasNext() ) {
+                    adaptor.addChild(root_1, stream_stackitem.nextTree());
+
                 }
+                stream_stackitem.reset();
 
                 adaptor.addChild(root_0, root_1);
                 }
@@ -1143,44 +1330,53 @@ public class BstParser extends Parser {
             }
 
 
+            retval.tree = root_0;
 
             }
 
+            retval.stop = input.LT(-1);
+
+
+            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
+            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
+
         }
         catch (RecognitionException re) {
             reportError(re);
             recover(input,re);
-        }
-        finally {
-            retval.stop = input.LT(-1);
+    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
 
-                retval.tree = adaptor.rulePostProcessing(root_0);
-                adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
+        }
 
-       }
+        finally {
+        	// do for sure before leaving
+        }
         return retval;
     }
-    // $ANTLR end stack
+    // $ANTLR end "stack"
+
 
     public static class stackitem_return extends ParserRuleReturnScope {
         Object tree;
         public Object getTree() { return tree; }
-    }
+    };
 
-    // $ANTLR start stackitem
-    // Bst.g:46:1: stackitem : ( function | STRING | INTEGER | QUOTED | stack );
-    public stackitem_return stackitem() throws RecognitionException {   
-        stackitem_return retval = new stackitem_return();
+
+    // $ANTLR start "stackitem"
+    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:54:1: stackitem : ( function | STRING | INTEGER | QUOTED | stack );
+    public final BstParser.stackitem_return stackitem() throws RecognitionException {
+        BstParser.stackitem_return retval = new BstParser.stackitem_return();
         retval.start = input.LT(1);
 
+
         Object root_0 = null;
 
         Token STRING54=null;
         Token INTEGER55=null;
         Token QUOTED56=null;
-        function_return function53 = null;
+        BstParser.function_return function53 =null;
 
-        stack_return stack57 = null;
+        BstParser.stack_return stack57 =null;
 
 
         Object STRING54_tree=null;
@@ -1188,181 +1384,209 @@ public class BstParser extends Parser {
         Object QUOTED56_tree=null;
 
         try {
-            // Bst.g:47:4: ( function | STRING | INTEGER | QUOTED | stack )
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:55:2: ( function | STRING | INTEGER | QUOTED | stack )
             int alt7=5;
             switch ( input.LA(1) ) {
             case IDENTIFIER:
+            case 25:
+            case 26:
             case 27:
             case 28:
             case 29:
             case 30:
             case 31:
-            case 32:
-            case 33:
+                {
                 alt7=1;
+                }
                 break;
             case STRING:
+                {
                 alt7=2;
+                }
                 break;
             case INTEGER:
+                {
                 alt7=3;
+                }
                 break;
             case QUOTED:
+                {
                 alt7=4;
+                }
                 break;
-            case 25:
+            case 32:
+                {
                 alt7=5;
+                }
                 break;
             default:
                 NoViableAltException nvae =
-                    new NoViableAltException("46:1: stackitem : ( function | STRING | INTEGER | QUOTED | stack );", 7, 0, input);
+                    new NoViableAltException("", 7, 0, input);
 
                 throw nvae;
+
             }
 
             switch (alt7) {
                 case 1 :
-                    // Bst.g:47:4: function
+                    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:55:4: function
                     {
-                    root_0 = adaptor.nil();
+                    root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_function_in_stackitem317);
+
+                    pushFollow(FOLLOW_function_in_stackitem334);
                     function53=function();
-                    _fsp--;
 
-                    adaptor.addChild(root_0, function53.tree);
+                    state._fsp--;
+
+                    adaptor.addChild(root_0, function53.getTree());
 
                     }
                     break;
                 case 2 :
-                    // Bst.g:48:4: STRING
+                    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:56:4: STRING
                     {
-                    root_0 = adaptor.nil();
+                    root_0 = (Object)adaptor.nil();
+
 
-                    STRING54=input.LT(1);
-                    match(input,STRING,FOLLOW_STRING_in_stackitem322); 
-                    STRING54_tree = adaptor.create(STRING54);
+                    STRING54=(Token)match(input,STRING,FOLLOW_STRING_in_stackitem339); 
+                    STRING54_tree = 
+                    (Object)adaptor.create(STRING54)
+                    ;
                     adaptor.addChild(root_0, STRING54_tree);
 
 
                     }
                     break;
                 case 3 :
-                    // Bst.g:49:4: INTEGER
+                    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:57:4: INTEGER
                     {
-                    root_0 = adaptor.nil();
+                    root_0 = (Object)adaptor.nil();
 
-                    INTEGER55=input.LT(1);
-                    match(input,INTEGER,FOLLOW_INTEGER_in_stackitem328); 
-                    INTEGER55_tree = adaptor.create(INTEGER55);
+
+                    INTEGER55=(Token)match(input,INTEGER,FOLLOW_INTEGER_in_stackitem345); 
+                    INTEGER55_tree = 
+                    (Object)adaptor.create(INTEGER55)
+                    ;
                     adaptor.addChild(root_0, INTEGER55_tree);
 
 
                     }
                     break;
                 case 4 :
-                    // Bst.g:50:4: QUOTED
+                    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:58:4: QUOTED
                     {
-                    root_0 = adaptor.nil();
+                    root_0 = (Object)adaptor.nil();
+
 
-                    QUOTED56=input.LT(1);
-                    match(input,QUOTED,FOLLOW_QUOTED_in_stackitem334); 
-                    QUOTED56_tree = adaptor.create(QUOTED56);
+                    QUOTED56=(Token)match(input,QUOTED,FOLLOW_QUOTED_in_stackitem351); 
+                    QUOTED56_tree = 
+                    (Object)adaptor.create(QUOTED56)
+                    ;
                     adaptor.addChild(root_0, QUOTED56_tree);
 
 
                     }
                     break;
                 case 5 :
-                    // Bst.g:51:4: stack
+                    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:59:4: stack
                     {
-                    root_0 = adaptor.nil();
+                    root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_stack_in_stackitem339);
+
+                    pushFollow(FOLLOW_stack_in_stackitem356);
                     stack57=stack();
-                    _fsp--;
 
-                    adaptor.addChild(root_0, stack57.tree);
+                    state._fsp--;
+
+                    adaptor.addChild(root_0, stack57.getTree());
 
                     }
                     break;
 
             }
+            retval.stop = input.LT(-1);
+
+
+            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
+            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
+
         }
         catch (RecognitionException re) {
             reportError(re);
             recover(input,re);
-        }
-        finally {
-            retval.stop = input.LT(-1);
+    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
 
-                retval.tree = adaptor.rulePostProcessing(root_0);
-                adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
+        }
 
-       }
+        finally {
+        	// do for sure before leaving
+        }
         return retval;
     }
-    // $ANTLR end stackitem
+    // $ANTLR end "stackitem"
 
+    // Delegated rules
 
- 
 
-    public static final BitSet FOLLOW_commands_in_program45 = new BitSet(new long[]{0x000000000003EF42L});
-    public static final BitSet FOLLOW_STRINGS_in_commands65 = new BitSet(new long[]{0x0000000002000000L});
-    public static final BitSet FOLLOW_idList_in_commands68 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_INTEGERS_in_commands73 = new BitSet(new long[]{0x0000000002000000L});
-    public static final BitSet FOLLOW_idList_in_commands76 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_FUNCTION_in_commands81 = new BitSet(new long[]{0x0000000002000000L});
-    public static final BitSet FOLLOW_id_in_commands84 = new BitSet(new long[]{0x0000000002000000L});
-    public static final BitSet FOLLOW_stack_in_commands86 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_MACRO_in_commands91 = new BitSet(new long[]{0x0000000002000000L});
-    public static final BitSet FOLLOW_id_in_commands94 = new BitSet(new long[]{0x0000000002000000L});
-    public static final BitSet FOLLOW_25_in_commands96 = new BitSet(new long[]{0x0000000000001000L});
-    public static final BitSet FOLLOW_STRING_in_commands99 = new BitSet(new long[]{0x0000000004000000L});
-    public static final BitSet FOLLOW_26_in_commands101 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_READ_in_commands107 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_EXECUTE_in_commands113 = new BitSet(new long[]{0x0000000002000000L});
-    public static final BitSet FOLLOW_25_in_commands116 = new BitSet(new long[]{0x00000003F8040000L});
-    public static final BitSet FOLLOW_function_in_commands119 = new BitSet(new long[]{0x0000000004000000L});
-    public static final BitSet FOLLOW_26_in_commands121 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ITERATE_in_commands127 = new BitSet(new long[]{0x0000000002000000L});
-    public static final BitSet FOLLOW_25_in_commands130 = new BitSet(new long[]{0x00000003F8040000L});
-    public static final BitSet FOLLOW_function_in_commands133 = new BitSet(new long[]{0x0000000004000000L});
-    public static final BitSet FOLLOW_26_in_commands135 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_REVERSE_in_commands141 = new BitSet(new long[]{0x0000000002000000L});
-    public static final BitSet FOLLOW_25_in_commands144 = new BitSet(new long[]{0x00000003F8040000L});
-    public static final BitSet FOLLOW_function_in_commands147 = new BitSet(new long[]{0x0000000004000000L});
-    public static final BitSet FOLLOW_26_in_commands149 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ENTRY_in_commands155 = new BitSet(new long[]{0x0000000002000000L});
-    public static final BitSet FOLLOW_idList0_in_commands158 = new BitSet(new long[]{0x0000000002000000L});
-    public static final BitSet FOLLOW_idList0_in_commands160 = new BitSet(new long[]{0x0000000002000000L});
-    public static final BitSet FOLLOW_idList0_in_commands162 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_SORT_in_commands167 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_IDENTIFIER_in_identifier178 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_25_in_id188 = new BitSet(new long[]{0x0000000000040000L});
-    public static final BitSet FOLLOW_identifier_in_id191 = new BitSet(new long[]{0x0000000004000000L});
-    public static final BitSet FOLLOW_26_in_id193 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_25_in_idList205 = new BitSet(new long[]{0x0000000000040000L});
-    public static final BitSet FOLLOW_identifier_in_idList207 = new BitSet(new long[]{0x0000000004040000L});
-    public static final BitSet FOLLOW_26_in_idList210 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_25_in_idList0230 = new BitSet(new long[]{0x0000000004040000L});
-    public static final BitSet FOLLOW_identifier_in_idList0232 = new BitSet(new long[]{0x0000000004040000L});
-    public static final BitSet FOLLOW_26_in_idList0235 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_27_in_function254 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_28_in_function258 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_29_in_function262 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_30_in_function266 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_31_in_function270 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_32_in_function274 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_33_in_function278 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_identifier_in_function282 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_25_in_stack293 = new BitSet(new long[]{0x00000003FA1C1000L});
-    public static final BitSet FOLLOW_stackitem_in_stack295 = new BitSet(new long[]{0x00000003FE1C1000L});
-    public static final BitSet FOLLOW_26_in_stack298 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_function_in_stackitem317 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_STRING_in_stackitem322 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_INTEGER_in_stackitem328 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_QUOTED_in_stackitem334 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_stack_in_stackitem339 = new BitSet(new long[]{0x0000000000000002L});
+ 
 
-}
+    public static final BitSet FOLLOW_commands_in_program62 = new BitSet(new long[]{0x00000000009C98E2L});
+    public static final BitSet FOLLOW_STRINGS_in_commands82 = new BitSet(new long[]{0x0000000100000000L});
+    public static final BitSet FOLLOW_idList_in_commands85 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_INTEGERS_in_commands90 = new BitSet(new long[]{0x0000000100000000L});
+    public static final BitSet FOLLOW_idList_in_commands93 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_FUNCTION_in_commands98 = new BitSet(new long[]{0x0000000100000000L});
+    public static final BitSet FOLLOW_id_in_commands101 = new BitSet(new long[]{0x0000000100000000L});
+    public static final BitSet FOLLOW_stack_in_commands103 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_MACRO_in_commands108 = new BitSet(new long[]{0x0000000100000000L});
+    public static final BitSet FOLLOW_id_in_commands111 = new BitSet(new long[]{0x0000000100000000L});
+    public static final BitSet FOLLOW_32_in_commands113 = new BitSet(new long[]{0x0000000000400000L});
+    public static final BitSet FOLLOW_STRING_in_commands116 = new BitSet(new long[]{0x0000000200000000L});
+    public static final BitSet FOLLOW_33_in_commands118 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_READ_in_commands124 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_EXECUTE_in_commands130 = new BitSet(new long[]{0x0000000100000000L});
+    public static final BitSet FOLLOW_32_in_commands133 = new BitSet(new long[]{0x00000000FE000100L});
+    public static final BitSet FOLLOW_function_in_commands136 = new BitSet(new long[]{0x0000000200000000L});
+    public static final BitSet FOLLOW_33_in_commands138 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ITERATE_in_commands144 = new BitSet(new long[]{0x0000000100000000L});
+    public static final BitSet FOLLOW_32_in_commands147 = new BitSet(new long[]{0x00000000FE000100L});
+    public static final BitSet FOLLOW_function_in_commands150 = new BitSet(new long[]{0x0000000200000000L});
+    public static final BitSet FOLLOW_33_in_commands152 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_REVERSE_in_commands158 = new BitSet(new long[]{0x0000000100000000L});
+    public static final BitSet FOLLOW_32_in_commands161 = new BitSet(new long[]{0x00000000FE000100L});
+    public static final BitSet FOLLOW_function_in_commands164 = new BitSet(new long[]{0x0000000200000000L});
+    public static final BitSet FOLLOW_33_in_commands166 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ENTRY_in_commands172 = new BitSet(new long[]{0x0000000100000000L});
+    public static final BitSet FOLLOW_idList0_in_commands175 = new BitSet(new long[]{0x0000000100000000L});
+    public static final BitSet FOLLOW_idList0_in_commands177 = new BitSet(new long[]{0x0000000100000000L});
+    public static final BitSet FOLLOW_idList0_in_commands179 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_SORT_in_commands184 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_IDENTIFIER_in_identifier195 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_32_in_id205 = new BitSet(new long[]{0x0000000000000100L});
+    public static final BitSet FOLLOW_identifier_in_id208 = new BitSet(new long[]{0x0000000200000000L});
+    public static final BitSet FOLLOW_33_in_id210 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_32_in_idList222 = new BitSet(new long[]{0x0000000000000100L});
+    public static final BitSet FOLLOW_identifier_in_idList224 = new BitSet(new long[]{0x0000000200000100L});
+    public static final BitSet FOLLOW_33_in_idList227 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_32_in_idList0247 = new BitSet(new long[]{0x0000000200000100L});
+    public static final BitSet FOLLOW_identifier_in_idList0249 = new BitSet(new long[]{0x0000000200000100L});
+    public static final BitSet FOLLOW_33_in_idList0252 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_29_in_function271 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_31_in_function275 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_30_in_function279 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_26_in_function283 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_27_in_function287 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_28_in_function291 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_25_in_function295 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_identifier_in_function299 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_32_in_stack310 = new BitSet(new long[]{0x00000001FE420500L});
+    public static final BitSet FOLLOW_stackitem_in_stack312 = new BitSet(new long[]{0x00000003FE420500L});
+    public static final BitSet FOLLOW_33_in_stack315 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_function_in_stackitem334 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_STRING_in_stackitem339 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_INTEGER_in_stackitem345 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_QUOTED_in_stackitem351 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_stack_in_stackitem356 = new BitSet(new long[]{0x0000000000000002L});
+
+}
\ No newline at end of file
diff --git a/src/java/net/sf/jabref/export/CustomExportDialog.java b/src/java/net/sf/jabref/export/CustomExportDialog.java
index f012274..83bbdab 100644
--- a/src/java/net/sf/jabref/export/CustomExportDialog.java
+++ b/src/java/net/sf/jabref/export/CustomExportDialog.java
@@ -30,7 +30,7 @@ import net.sf.jabref.JabRefFrame;
 import net.sf.jabref.Util;
 import net.sf.jabref.gui.FileDialogs;
 
-import com.jgoodies.forms.builder.ButtonBarBuilder2;
+import com.jgoodies.forms.builder.ButtonBarBuilder;
 
 /**
  * Dialog for creating or modifying custom exports.
@@ -176,7 +176,7 @@ class CustomExportDialog extends JDialog {
     gbl.setConstraints(extension, con);
     main.add(extension);
 
-    ButtonBarBuilder2 bb = new ButtonBarBuilder2(buttons);
+    ButtonBarBuilder bb = new ButtonBarBuilder(buttons);
     buttons.setBorder(BorderFactory.createEmptyBorder(2,2,2,2));
     bb.addGlue();
     bb.addButton(ok);
diff --git a/src/java/net/sf/jabref/export/CustomExportList.java b/src/java/net/sf/jabref/export/CustomExportList.java
index 05e4a75..528774b 100644
--- a/src/java/net/sf/jabref/export/CustomExportList.java
+++ b/src/java/net/sf/jabref/export/CustomExportList.java
@@ -70,8 +70,8 @@ public class CustomExportList {
                 formats.put(format.getConsoleName(), format);
     			list.add(s);
             } else {
-                System.out.println(Globals.lang("Error initializing custom export format from string '%0'",
-                    Globals.prefs.get("customExportFormat" + i)));
+            	String customExportFormat = Globals.prefs.get("customExportFormat" + i);
+                System.out.println(Globals.lang("Error initializing custom export format from string '%0'", customExportFormat));
             }
 			i++;
 		}
diff --git a/src/java/net/sf/jabref/export/ExportCustomizationDialog.java b/src/java/net/sf/jabref/export/ExportCustomizationDialog.java
index 6669de4..08fd4ae 100644
--- a/src/java/net/sf/jabref/export/ExportCustomizationDialog.java
+++ b/src/java/net/sf/jabref/export/ExportCustomizationDialog.java
@@ -27,7 +27,7 @@ import javax.swing.table.TableColumnModel;
 
 import net.sf.jabref.*;
 
-import com.jgoodies.forms.builder.ButtonBarBuilder2;
+import com.jgoodies.forms.builder.ButtonBarBuilder;
 import ca.odell.glazedlists.gui.TableFormat;
 import ca.odell.glazedlists.swing.EventTableModel;
 
@@ -137,7 +137,7 @@ public class ExportCustomizationDialog extends JDialog {
     //am.put("close", closeAction);
     main.setLayout(new BorderLayout());
     main.add(sp, BorderLayout.CENTER);
-    ButtonBarBuilder2 bb = new ButtonBarBuilder2(buttons);
+    ButtonBarBuilder bb = new ButtonBarBuilder(buttons);
     buttons.setBorder(BorderFactory.createEmptyBorder(2,2,2,2));
     bb.addGlue();
     bb.addButton(addExport);
diff --git a/src/java/net/sf/jabref/export/FileActions.java b/src/java/net/sf/jabref/export/FileActions.java
index c546ff6..9443875 100644
--- a/src/java/net/sf/jabref/export/FileActions.java
+++ b/src/java/net/sf/jabref/export/FileActions.java
@@ -398,7 +398,7 @@ public class FileActions
                 e.printStackTrace();
                 throw new SaveException(ex.getMessage()+"\n"+
                         Globals.lang("Warning: could not complete file repair; your file may "
-                        +"have been corrupted. Error message: ")+e.getMessage());
+                        +"have been corrupted. Error message")+": "+e.getMessage());
             }
             throw new SaveException(ex.getMessage(), be);
     }
diff --git a/src/java/net/sf/jabref/export/LatexFieldFormatter.java b/src/java/net/sf/jabref/export/LatexFieldFormatter.java
index 67c763e..3a47ca0 100644
--- a/src/java/net/sf/jabref/export/LatexFieldFormatter.java
+++ b/src/java/net/sf/jabref/export/LatexFieldFormatter.java
@@ -120,9 +120,8 @@ public class LatexFieldFormatter implements FieldFormatter {
                 if (pos2 == -1) {
                     if (!neverFailOnHashes) {
                         throw new IllegalArgumentException
-                                (Globals.lang("The # character is not allowed in BibTeX fields") + ".\n" +
-                                        Globals.lang("In JabRef, use pairs of # characters to indicate "
-                                                + "a string.") + "\n" +
+                                (Globals.lang("The # character is not allowed in BibTeX strings unless escaped as in '\\#'.") + "\n" +
+                                        Globals.lang("In JabRef, use pairs of # characters to indicate a string.") + "\n" +
                                         Globals.lang("Note that the entry causing the problem has been selected."));
                     } else {
                         pos1 = text.length(); // just write out the rest of the text, and throw no exception
diff --git a/src/java/net/sf/jabref/external/AutoSetExternalFileForEntries.java b/src/java/net/sf/jabref/external/AutoSetExternalFileForEntries.java
index 0e3bc98..3b3fefc 100644
--- a/src/java/net/sf/jabref/external/AutoSetExternalFileForEntries.java
+++ b/src/java/net/sf/jabref/external/AutoSetExternalFileForEntries.java
@@ -28,7 +28,7 @@ import net.sf.jabref.gui.AttachFileDialog;
 import net.sf.jabref.undo.NamedCompound;
 import net.sf.jabref.undo.UndoableFieldChange;
 
-import com.jgoodies.forms.builder.ButtonBarBuilder2;
+import com.jgoodies.forms.builder.ButtonBarBuilder;
 import com.jgoodies.forms.builder.DefaultFormBuilder;
 import com.jgoodies.forms.layout.FormLayout;
 
@@ -268,8 +268,7 @@ public class AutoSetExternalFileForEntries extends AbstractWorker {
             builder.appendSeparator(Globals.lang("Check links"));
 
             description = new JLabel("<HTML>" +
-                    Globals.lang("This makes JabRef look up each %0 link and check if the file exists. If not, you will "
-                            + "be given options<BR>to resolve the problem.", fn)
+                    Globals.lang("This makes JabRef look up each %0 link and check if the file exists. If not, you will be given options<BR>to resolve the problem.", fn)
                     + "</HTML>");
             builder.append(description);
             builder.nextLine();
@@ -281,7 +280,7 @@ public class AutoSetExternalFileForEntries extends AbstractWorker {
             JPanel main = builder.getPanel();
             main.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
 
-            ButtonBarBuilder2 bb = new ButtonBarBuilder2();
+            ButtonBarBuilder bb = new ButtonBarBuilder();
             bb.addGlue();
             bb.addButton(ok);
             bb.addButton(cancel);
diff --git a/src/java/net/sf/jabref/external/DroppedFileHandler.java b/src/java/net/sf/jabref/external/DroppedFileHandler.java
index 1438aec..a700d90 100644
--- a/src/java/net/sf/jabref/external/DroppedFileHandler.java
+++ b/src/java/net/sf/jabref/external/DroppedFileHandler.java
@@ -292,8 +292,7 @@ public class DroppedFileHandler {
         }
 
         JLabel confirmationMessage = new JLabel(
-            Globals
-                .lang("The PDF contains one or several bibtex-records.\nDo you want to import these as new entries into the current database?"));
+            Globals.lang("The PDF contains one or several bibtex-records.\nDo you want to import these as new entries into the current database?"));
 
         int reply = JOptionPane.showConfirmDialog(frame, confirmationMessage, Globals.lang(
             "XMP metadata found in PDF: %0", fileName), JOptionPane.YES_NO_CANCEL_OPTION,
diff --git a/src/java/net/sf/jabref/external/ExternalFilePanel.java b/src/java/net/sf/jabref/external/ExternalFilePanel.java
index ceba2d6..20b591d 100644
--- a/src/java/net/sf/jabref/external/ExternalFilePanel.java
+++ b/src/java/net/sf/jabref/external/ExternalFilePanel.java
@@ -189,18 +189,18 @@ public class ExternalFilePanel extends JPanel {
 					XMPUtil.writeXMP(finalFile, getEntry(), getDatabase());
 					output(Globals.lang("Wrote XMP to '%0'.", finalFile.getName()));
 				} catch (IOException e) {
-					JOptionPane.showMessageDialog(editor.getParent(), Globals.lang(
-						"Error writing XMP to file: %0", e.getLocalizedMessage()), Globals
-						.lang("Writing XMP"), JOptionPane.ERROR_MESSAGE);
+					JOptionPane.showMessageDialog(editor.getParent(), 
+            Globals.lang("Error writing XMP to file: %0", e.getLocalizedMessage()), 
+					  Globals.lang("Writing XMP"), JOptionPane.ERROR_MESSAGE);
 					Globals.logger(Globals.lang("Error writing XMP to file: %0", finalFile
 						.getAbsolutePath()));
 					output(Globals.lang("Error writing XMP to file: %0", finalFile.getName()));
 					
 				} catch (TransformerException e) {
-					JOptionPane.showMessageDialog(editor.getParent(), Globals.lang(
-						"Error converting Bibtex to XMP: %0", e.getLocalizedMessage()), Globals
-						.lang("Writing XMP"), JOptionPane.ERROR_MESSAGE);
-					Globals.logger(Globals.lang("Error while converting BibtexEntry to XMP %0",
+					JOptionPane.showMessageDialog(editor.getParent(), 
+            Globals.lang("Error converting Bibtex to XMP: %0", e.getLocalizedMessage()), 
+            Globals.lang("Writing XMP"), JOptionPane.ERROR_MESSAGE);
+					  Globals.logger(Globals.lang("Error while converting BibtexEntry to XMP %0",
 						finalFile.getAbsolutePath()));
 					output(Globals.lang("Error converting XMP to '%0'...", finalFile.getName()));
 				}
@@ -326,12 +326,10 @@ public class ExternalFilePanel extends JPanel {
                     }
 					if (directory == null) {
                         if (dirs.length > 0)
-                            JOptionPane.showMessageDialog(parent, Globals.lang(
-                                "Could not find directory for %0-files: %1", fieldName, dirs[0]),
+                            JOptionPane.showMessageDialog(parent, Globals.lang("Could not find directory for %0-files: %1", fieldName, dirs[0]),
                                 Globals.lang("Download file"), JOptionPane.ERROR_MESSAGE);
                         else
-                            JOptionPane.showMessageDialog(parent, Globals.lang(
-                                "No directory defined for %0-files", fieldName),
+                            JOptionPane.showMessageDialog(parent, Globals.lang("No directory defined for %0-files", fieldName),
                                 Globals.lang("Download file"), JOptionPane.ERROR_MESSAGE);
 						return;
 					}
diff --git a/src/java/net/sf/jabref/external/ExternalFileTypeEditor.java b/src/java/net/sf/jabref/external/ExternalFileTypeEditor.java
index 6a26238..f5543ca 100644
--- a/src/java/net/sf/jabref/external/ExternalFileTypeEditor.java
+++ b/src/java/net/sf/jabref/external/ExternalFileTypeEditor.java
@@ -33,7 +33,7 @@ import net.sf.jabref.Globals;
 import net.sf.jabref.JabRefFrame;
 import net.sf.jabref.MnemonicAwareAction;
 
-import com.jgoodies.forms.builder.ButtonBarBuilder2;
+import com.jgoodies.forms.builder.ButtonBarBuilder;
 import com.jgoodies.forms.builder.ButtonStackBuilder;
 
 /**
@@ -156,7 +156,7 @@ public class ExternalFileTypeEditor extends JDialog {
         bs.addButton(toDefaults);
         upper.add(bs.getPanel(), BorderLayout.EAST);
 
-        ButtonBarBuilder2 bb = new ButtonBarBuilder2();
+        ButtonBarBuilder bb = new ButtonBarBuilder();
         bb.addGlue();
         bb.addButton(ok);
         bb.addButton(cancel);
diff --git a/src/java/net/sf/jabref/external/ExternalFileTypeEntryEditor.java b/src/java/net/sf/jabref/external/ExternalFileTypeEntryEditor.java
index fc45ad6..519e154 100644
--- a/src/java/net/sf/jabref/external/ExternalFileTypeEntryEditor.java
+++ b/src/java/net/sf/jabref/external/ExternalFileTypeEntryEditor.java
@@ -29,7 +29,7 @@ import net.sf.jabref.GUIGlobals;
 import net.sf.jabref.Globals;
 import net.sf.jabref.gui.FileDialogs;
 
-import com.jgoodies.forms.builder.ButtonBarBuilder2;
+import com.jgoodies.forms.builder.ButtonBarBuilder;
 import com.jgoodies.forms.builder.DefaultFormBuilder;
 import com.jgoodies.forms.layout.FormLayout;
 
@@ -110,7 +110,7 @@ public class ExternalFileTypeEntryEditor {
             builder.append(application);
             builder.append(browseBut);
         }
-        ButtonBarBuilder2 bb = new ButtonBarBuilder2();
+        ButtonBarBuilder bb = new ButtonBarBuilder();
         bb.addGlue();
         bb.addButton(ok);
         bb.addButton(cancel);
diff --git a/src/java/net/sf/jabref/external/IconSelection.java b/src/java/net/sf/jabref/external/IconSelection.java
index 4728e9a..945812f 100644
--- a/src/java/net/sf/jabref/external/IconSelection.java
+++ b/src/java/net/sf/jabref/external/IconSelection.java
@@ -28,7 +28,7 @@ import javax.swing.*;
 import net.sf.jabref.GUIGlobals;
 import net.sf.jabref.Globals;
 
-import com.jgoodies.forms.builder.ButtonBarBuilder2;
+import com.jgoodies.forms.builder.ButtonBarBuilder;
 
 /**
  * Dialog box for choosing an icon for an external file type.
@@ -128,7 +128,7 @@ public class IconSelection extends JDialog {
         icons.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
         icons.setLayoutOrientation(JList.HORIZONTAL_WRAP);
 
-        ButtonBarBuilder2 bb = new ButtonBarBuilder2();
+        ButtonBarBuilder bb = new ButtonBarBuilder();
         bb.addGlue();
         bb.addButton(ok);
         bb.addButton(cancel);
diff --git a/src/java/net/sf/jabref/external/PushToApplicationButton.java b/src/java/net/sf/jabref/external/PushToApplicationButton.java
index 29c3c43..f031d0b 100644
--- a/src/java/net/sf/jabref/external/PushToApplicationButton.java
+++ b/src/java/net/sf/jabref/external/PushToApplicationButton.java
@@ -15,7 +15,7 @@
 */
 package net.sf.jabref.external;
 
-import com.jgoodies.forms.builder.ButtonBarBuilder2;
+import com.jgoodies.forms.builder.ButtonBarBuilder;
 import net.sf.jabref.GUIGlobals;
 import net.sf.jabref.Globals;
 import net.sf.jabref.JabRefFrame;
@@ -216,7 +216,7 @@ public class PushToApplicationButton implements ActionListener {
         final JDialog diag = dg;
         options.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
         diag.getContentPane().add(options, BorderLayout.CENTER);
-        ButtonBarBuilder2 bb = new ButtonBarBuilder2();
+        ButtonBarBuilder bb = new ButtonBarBuilder();
         JButton ok = new JButton(Globals.lang("Ok"));
         JButton cancel = new JButton(Globals.lang("Cancel"));
         bb.addGlue();
diff --git a/src/java/net/sf/jabref/external/PushToVim.java b/src/java/net/sf/jabref/external/PushToVim.java
index 608b9f8..b4539d1 100644
--- a/src/java/net/sf/jabref/external/PushToVim.java
+++ b/src/java/net/sf/jabref/external/PushToVim.java
@@ -144,8 +144,8 @@ public class PushToVim implements PushToApplication {
                 panel.frame(),
                 "<HTML>"+
                 Globals.lang("Could not connect to Vim server. Make sure that "
-                +"Vim is running<BR>with correct server name."
-                +"</HTML>"),
+														 +"Vim is running<BR>with correct server name.")
+                +"</HTML>",
                 Globals.lang("Error"), JOptionPane.ERROR_MESSAGE);
         else if (couldNotRunClient)
             JOptionPane.showMessageDialog(
diff --git a/src/java/net/sf/jabref/external/SynchronizeFileField.java b/src/java/net/sf/jabref/external/SynchronizeFileField.java
index 4eb0bce..4a44488 100644
--- a/src/java/net/sf/jabref/external/SynchronizeFileField.java
+++ b/src/java/net/sf/jabref/external/SynchronizeFileField.java
@@ -15,7 +15,7 @@
 */
 package net.sf.jabref.external;
 
-import com.jgoodies.forms.builder.ButtonBarBuilder2;
+import com.jgoodies.forms.builder.ButtonBarBuilder;
 import com.jgoodies.forms.builder.DefaultFormBuilder;
 import com.jgoodies.forms.layout.FormLayout;
 import net.sf.jabref.*;
@@ -355,8 +355,7 @@ public class SynchronizeFileField extends AbstractWorker {
             builder.appendSeparator(Globals.lang("Check links"));
 
             description = new JLabel("<HTML>" +
-                    Globals.lang("This makes JabRef look up each %0 extension and check if the file exists. If not, you will "
-                            + "be given options<BR>to resolve the problem.", fn)
+                    Globals.lang("This makes JabRef look up each %0 extension and check if the file exists. If not, you will be given options<BR>to resolve the problem.", fn)
                     + "</HTML>");
             builder.append(description);
             builder.nextLine();
@@ -368,7 +367,7 @@ public class SynchronizeFileField extends AbstractWorker {
             JPanel main = builder.getPanel();
             main.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
 
-            ButtonBarBuilder2 bb = new ButtonBarBuilder2();
+            ButtonBarBuilder bb = new ButtonBarBuilder();
             bb.addGlue();
             bb.addButton(ok);
             bb.addButton(cancel);
diff --git a/src/java/net/sf/jabref/external/UpgradeExternalLinks.java b/src/java/net/sf/jabref/external/UpgradeExternalLinks.java
deleted file mode 100644
index 9d7badf..0000000
--- a/src/java/net/sf/jabref/external/UpgradeExternalLinks.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.external;
-
-import javax.swing.JOptionPane;
-
-import net.sf.jabref.*;
-import net.sf.jabref.undo.NamedCompound;
-
-/**
- * Action for upgrading old-style (pre 2.3) PS/PDF links to the new "file" field.
- */
-public class UpgradeExternalLinks extends BaseAction {
-
-    private BasePanel panel;
-
-    public UpgradeExternalLinks(BasePanel panel) {
-
-        this.panel = panel;
-    }
-
-    public void action() throws Throwable {
-
-        int answer = JOptionPane.showConfirmDialog(panel.frame(),
-                Globals.lang("This will move all external links from the 'pdf' and 'ps' fields "
-                    +"into the '%0' field. Proceed?", GUIGlobals.FILE_FIELD), Globals.lang("Upgrade external links"),
-                JOptionPane.YES_NO_OPTION);
-        if (answer !=  JOptionPane.YES_OPTION)
-            return;
-        NamedCompound ce = Util.upgradePdfPsToFile(panel.database(), new String[] {"pdf", "ps"});
-        panel.undoManager.addEdit(ce);
-        panel.markBaseChanged();
-        panel.output(Globals.lang("Upgraded links."));
-    }
-}
diff --git a/src/java/net/sf/jabref/external/WriteXMPAction.java b/src/java/net/sf/jabref/external/WriteXMPAction.java
index f87875d..6a460a6 100644
--- a/src/java/net/sf/jabref/external/WriteXMPAction.java
+++ b/src/java/net/sf/jabref/external/WriteXMPAction.java
@@ -31,7 +31,7 @@ import net.sf.jabref.gui.FileListTableModel;
 import net.sf.jabref.gui.FileListEntry;
 import net.sf.jabref.util.XMPUtil;
 
-import com.jgoodies.forms.builder.ButtonBarBuilder2;
+import com.jgoodies.forms.builder.ButtonBarBuilder;
 
 /**
  * 
@@ -244,7 +244,7 @@ public class WriteXMPAction extends AbstractWorker {
 
 			// progressArea.setPreferredSize(new Dimension(300, 300));
 
-			ButtonBarBuilder2 bb = new ButtonBarBuilder2();
+			ButtonBarBuilder bb = new ButtonBarBuilder();
 			bb.addGlue();
 			bb.addButton(okButton);
 			bb.addRelatedGap();
diff --git a/src/java/net/sf/jabref/groups/AddToGroupAction.java b/src/java/net/sf/jabref/groups/AddToGroupAction.java
index 358f3cc..30d57c8 100644
--- a/src/java/net/sf/jabref/groups/AddToGroupAction.java
+++ b/src/java/net/sf/jabref/groups/AddToGroupAction.java
@@ -43,8 +43,8 @@ public class AddToGroupAction extends AbstractAction {
         m_panel = panel;
     }
     public AddToGroupAction(boolean move) {
-        super(Globals.lang(move ? "Assign entry selection exclusively to this group"
-                : "Add entry selection to this group")); // JZTODO lyrics
+        super(move?Globals.lang("Assign entry selection exclusively to this group")
+                  :Globals.lang("Add entry selection to this group"));
         m_move = move;
     }
     public void setBasePanel(BasePanel panel) {
diff --git a/src/java/net/sf/jabref/groups/AutoGroupDialog.java b/src/java/net/sf/jabref/groups/AutoGroupDialog.java
index 63f6c7f..7941043 100644
--- a/src/java/net/sf/jabref/groups/AutoGroupDialog.java
+++ b/src/java/net/sf/jabref/groups/AutoGroupDialog.java
@@ -36,7 +36,7 @@ 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.ButtonBarBuilder2;
+import com.jgoodies.forms.builder.ButtonBarBuilder;
 import com.jgoodies.forms.layout.FormLayout;
 
 /**
@@ -52,11 +52,9 @@ class AutoGroupDialog extends JDialog implements CaretListener {
         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
-    JButton ok = new JButton(Globals.lang("Ok")), cancel = new JButton(Globals
-            .lang("Cancel"));
+    JCheckBox nd = new JCheckBox(Globals.lang("Use the following delimiter character(s):"));
+    JButton ok = new JButton(Globals.lang("Ok")), 
+    		cancel = new JButton(Globals.lang("Cancel"));
     JPanel main = new JPanel(), opt = new JPanel();
     private boolean ok_pressed = false;
     private GroupTreeNode m_groupsRoot;
@@ -183,7 +181,7 @@ class AutoGroupDialog extends JDialog implements CaretListener {
         b.append(editors, 5);
         b.nextLine();
         
-        ButtonBarBuilder2 bb = new ButtonBarBuilder2(opt);
+        ButtonBarBuilder bb = new ButtonBarBuilder(opt);
         bb.addGlue();
         bb.addButton(ok);
         bb.addButton(cancel);
diff --git a/src/java/net/sf/jabref/groups/EntryTableTransferHandler.java b/src/java/net/sf/jabref/groups/EntryTableTransferHandler.java
index 3ad47f8..3e744e4 100644
--- a/src/java/net/sf/jabref/groups/EntryTableTransferHandler.java
+++ b/src/java/net/sf/jabref/groups/EntryTableTransferHandler.java
@@ -429,8 +429,7 @@ public class EntryTableTransferHandler extends TransferHandler {
 					// No error message, since we want to try importing the
 					// file?
 					//
-					// Util.showQuickErrorDialog(frame, Globals.lang("Open
-					// database"), e);
+					// Util.showQuickErrorDialog(frame, Globals.lang("Open database"), e);
 				}
 				continue;
 			}
@@ -483,7 +482,7 @@ public class EntryTableTransferHandler extends TransferHandler {
 
 					BibtexDatabase database = frame.basePanel().database();
 
-					NamedCompound ce = new NamedCompound(Globals.lang("Drog PDF"));
+					NamedCompound ce = new NamedCompound(Glbals.lang("Drop PDF"));
 
 					while (it.hasNext()) {
 						BibtexEntry e = (BibtexEntry) it.next();
diff --git a/src/java/net/sf/jabref/groups/ExplicitGroup.java b/src/java/net/sf/jabref/groups/ExplicitGroup.java
index 6765f44..d352eeb 100644
--- a/src/java/net/sf/jabref/groups/ExplicitGroup.java
+++ b/src/java/net/sf/jabref/groups/ExplicitGroup.java
@@ -221,13 +221,13 @@ public class ExplicitGroup extends AbstractGroup implements SearchRule {
 
     public String getShortDescription() {
         StringBuffer sb = new StringBuffer();
-        sb.append("<b>").append(getName()).append(Globals.lang("</b> - static group"));
+        sb.append("<b>").append(getName()).append("</b> -").append(Globals.lang("static group"));
         switch (getHierarchicalContext()) {
         case AbstractGroup.INCLUDING:
-            sb.append(Globals.lang(", includes subgroups"));
+            sb.append(", ").append(Globals.lang("includes subgroups"));
             break;
         case AbstractGroup.REFINING:
-            sb.append(Globals.lang(", refines supergroup"));
+        	sb.append(", ").append(Globals.lang("refines supergroup"));
             break;
         default:
             break;
diff --git a/src/java/net/sf/jabref/groups/GroupDialog.java b/src/java/net/sf/jabref/groups/GroupDialog.java
index 23b6cd9..d7014f8 100644
--- a/src/java/net/sf/jabref/groups/GroupDialog.java
+++ b/src/java/net/sf/jabref/groups/GroupDialog.java
@@ -43,7 +43,7 @@ import net.sf.jabref.Util;
 import net.sf.jabref.search.SearchExpressionParser;
 import antlr.collections.AST;
 
-import com.jgoodies.forms.builder.ButtonBarBuilder2;
+import com.jgoodies.forms.builder.ButtonBarBuilder;
 import com.jgoodies.forms.builder.DefaultFormBuilder;
 import com.jgoodies.forms.layout.FormLayout;
 
@@ -178,7 +178,7 @@ class GroupDialog extends JDialog {
                 // ... for buttons panel
                 FormLayout layoutBP = new FormLayout("pref, 4dlu, pref", "p");
                 layoutBP.setColumnGroups(new int[][] { { 1, 3 } });
-                ButtonBarBuilder2 builderBP = new ButtonBarBuilder2();
+                ButtonBarBuilder builderBP = new ButtonBarBuilder();
                 builderBP.addGlue();
                 builderBP.addButton(m_ok);
                 builderBP.addButton(m_cancel);
diff --git a/src/java/net/sf/jabref/groups/GroupSelector.java b/src/java/net/sf/jabref/groups/GroupSelector.java
index 72f6114..d375739 100644
--- a/src/java/net/sf/jabref/groups/GroupSelector.java
+++ b/src/java/net/sf/jabref/groups/GroupSelector.java
@@ -343,11 +343,7 @@ public class GroupSelector extends SidePaneComponent implements
 
         JPanel main = new JPanel();
         main.setLayout(gbl);
-        /*SidePaneHeader header = new SidePaneHeader("Groups",
-                GUIGlobals.groupsIconFile, this);
-        con.gridwidth = GridBagConstraints.REMAINDER;
-        gbl.setConstraints(header, con);
-        main.add(header);*/
+
         con.fill = GridBagConstraints.BOTH;
         //con.insets = new Insets(0, 0, 2, 0);
         con.weightx = 1;
diff --git a/src/java/net/sf/jabref/groups/KeywordGroup.java b/src/java/net/sf/jabref/groups/KeywordGroup.java
index 38901bf..786b3f2 100644
--- a/src/java/net/sf/jabref/groups/KeywordGroup.java
+++ b/src/java/net/sf/jabref/groups/KeywordGroup.java
@@ -373,15 +373,21 @@ public class KeywordGroup extends AbstractGroup implements SearchRule {
             sb.append("<i>").append(Util.quoteForHTML(getName())).append("</i>");
 		else
 			sb.append(Util.quoteForHTML(getName()));
-        sb.append(Globals.lang("</b> - dynamic group (<b>")).append(m_searchField).
-            append(Globals.lang("</b> contains <b>")).
-            append(Util.quoteForHTML(m_searchExpression)).append("</b>)");
+			sb.append("</b> - ");
+            sb.append(Globals.lang("dynamic group"));
+            sb.append("<b>");
+            sb.append(m_searchField);
+            sb.append("</b>");
+            sb.append(Globals.lang("contains"));
+            sb.append(" <b>");
+            sb.append(Util.quoteForHTML(m_searchExpression));
+            sb.append("</b>)");
 		switch (getHierarchicalContext()) {
 		case AbstractGroup.INCLUDING:
-			sb.append(Globals.lang(", includes subgroups"));
+            sb.append(", ").append(Globals.lang("includes subgroups"));
 			break;
 		case AbstractGroup.REFINING:
-			sb.append(Globals.lang(", refines supergroup"));
+        	sb.append(", ").append(Globals.lang("refines supergroup"));
 			break;
 		default:
 			break;
diff --git a/src/java/net/sf/jabref/groups/SearchGroup.java b/src/java/net/sf/jabref/groups/SearchGroup.java
index 1e3a533..562df53 100644
--- a/src/java/net/sf/jabref/groups/SearchGroup.java
+++ b/src/java/net/sf/jabref/groups/SearchGroup.java
@@ -384,16 +384,18 @@ public class SearchGroup extends AbstractGroup implements SearchRule {
             sb.append("<i>").append(Util.quoteForHTML(getName())).append("</i>");
 		else
 			sb.append(Util.quoteForHTML(getName()));
-            /*sb.append(Globals.lang("</b> - dynamic group (search expression: <b>")).*/
-            sb.append(Globals.lang("</b> - dynamic group (")+ Globals.lang("search expression: <b>")).
-                    
+			sb.append("</b> - ");
+			sb.append(Globals.lang("dynamic group"));
+			sb.append(" (");
+			sb.append(Globals.lang("search expression"));
+			sb.append(" <b>").
             append(Util.quoteForHTML(m_searchExpression)).append("</b>)");
 		switch (getHierarchicalContext()) {
 		case AbstractGroup.INCLUDING:
-			sb.append(Globals.lang(", includes subgroups"));
+            sb.append(", ").append(Globals.lang("includes subgroups"));
 			break;
 		case AbstractGroup.REFINING:
-			sb.append(Globals.lang(", refines supergroup"));
+        	sb.append(", ").append(Globals.lang("refines supergroup"));
 			break;
 		default:
 			break;
diff --git a/src/java/net/sf/jabref/groups/UnsupportedVersionException.java b/src/java/net/sf/jabref/groups/UnsupportedVersionException.java
index 73662f7..f144f00 100644
--- a/src/java/net/sf/jabref/groups/UnsupportedVersionException.java
+++ b/src/java/net/sf/jabref/groups/UnsupportedVersionException.java
@@ -19,7 +19,6 @@ import net.sf.jabref.Globals;
 
 public class UnsupportedVersionException extends Exception {
     public UnsupportedVersionException(String groupType, int version) {
-        super(Globals.lang("Unsupported version of class %0: %1", groupType, ""
-                + version));
+        super(Globals.lang("Unsupported version of class %0: %1", groupType, Integer.toString(version)));
     }
 }
diff --git a/src/java/net/sf/jabref/groups/VersionHandling.java b/src/java/net/sf/jabref/groups/VersionHandling.java
index 1714edd..b3ec19f 100644
--- a/src/java/net/sf/jabref/groups/VersionHandling.java
+++ b/src/java/net/sf/jabref/groups/VersionHandling.java
@@ -62,9 +62,7 @@ public class VersionHandling {
         case 3:
             return Version2_3.fromString(orderedData, db, version);
         default:
-            throw new IllegalArgumentException(Globals.lang(
-                    "Failed to read groups data (unsupported version: %0)",
-                    "" + version));
+            throw new IllegalArgumentException(Globals.lang("Failed to read groups data (unsupported version: %0)", Integer.toString(version)));
         }
     }
 
diff --git a/src/java/net/sf/jabref/gui/AttachFileDialog.java b/src/java/net/sf/jabref/gui/AttachFileDialog.java
index 95a8a19..7c7a6d4 100644
--- a/src/java/net/sf/jabref/gui/AttachFileDialog.java
+++ b/src/java/net/sf/jabref/gui/AttachFileDialog.java
@@ -26,7 +26,7 @@ import javax.swing.*;
 import net.sf.jabref.*;
 import net.sf.jabref.external.ExternalFilePanel;
 
-import com.jgoodies.forms.builder.ButtonBarBuilder2;
+import com.jgoodies.forms.builder.ButtonBarBuilder;
 import com.jgoodies.forms.builder.DefaultFormBuilder;
 import com.jgoodies.forms.layout.FormLayout;
 
@@ -132,7 +132,7 @@ public class AttachFileDialog extends JDialog {
         builder.append(editor.getTextComponent());
         builder.append(browse);
 
-        ButtonBarBuilder2 bb = new ButtonBarBuilder2();
+        ButtonBarBuilder bb = new ButtonBarBuilder();
         bb.addButton(download);
         bb.addButton(auto);
         builder.nextLine();
@@ -144,7 +144,7 @@ public class AttachFileDialog extends JDialog {
 
         main.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
 
-        bb = new ButtonBarBuilder2();
+        bb = new ButtonBarBuilder();
         bb.addGlue();
         bb.addButton(ok);
         bb.addButton(cancel);
diff --git a/src/java/net/sf/jabref/gui/BibtexKeyPatternDialog.java b/src/java/net/sf/jabref/gui/BibtexKeyPatternDialog.java
index 38b53ba..0310bd1 100644
--- a/src/java/net/sf/jabref/gui/BibtexKeyPatternDialog.java
+++ b/src/java/net/sf/jabref/gui/BibtexKeyPatternDialog.java
@@ -40,7 +40,7 @@ import net.sf.jabref.Util;
 import net.sf.jabref.labelPattern.LabelPattern;
 import net.sf.jabref.labelPattern.LabelPatternPanel;
 
-import com.jgoodies.forms.builder.ButtonBarBuilder2;
+import com.jgoodies.forms.builder.ButtonBarBuilder;
 
 public class BibtexKeyPatternDialog extends JDialog {
 	private MetaData metaData;
@@ -75,7 +75,7 @@ public class BibtexKeyPatternDialog extends JDialog {
 		
 		JPanel lower = new JPanel();
 		lower.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));
-		ButtonBarBuilder2 bb = new ButtonBarBuilder2(lower);
+		ButtonBarBuilder bb = new ButtonBarBuilder(lower);
 		bb.addGlue();
         bb.addButton(ok);
         bb.addButton(cancel);
diff --git a/src/java/net/sf/jabref/gui/CleanUpAction.java b/src/java/net/sf/jabref/gui/CleanUpAction.java
index ab7f6f0..9830e7e 100644
--- a/src/java/net/sf/jabref/gui/CleanUpAction.java
+++ b/src/java/net/sf/jabref/gui/CleanUpAction.java
@@ -19,8 +19,6 @@ import java.io.File;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
 import java.util.logging.Logger;
 
 import javax.swing.JCheckBox;
@@ -29,13 +27,6 @@ import javax.swing.JOptionPane;
 import javax.swing.JPanel;
 import javax.swing.event.ChangeEvent;
 import javax.swing.event.ChangeListener;
-import javax.swing.undo.CannotRedoException;
-import javax.swing.undo.CannotUndoException;
-import javax.swing.undo.UndoableEdit;
-
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-import com.jgoodies.forms.layout.CellConstraints;
-import com.jgoodies.forms.layout.FormLayout;
 
 import net.sf.jabref.AbstractWorker;
 import net.sf.jabref.BasePanel;
@@ -45,12 +36,17 @@ import net.sf.jabref.GUIGlobals;
 import net.sf.jabref.Globals;
 import net.sf.jabref.ImportSettingsTab;
 import net.sf.jabref.JabRefFrame;
-import net.sf.jabref.JabRefPreferences;
 import net.sf.jabref.Util;
 import net.sf.jabref.external.ExternalFileType;
+import net.sf.jabref.imports.HTMLConverter;
+import net.sf.jabref.imports.CaseKeeper;
 import net.sf.jabref.undo.NamedCompound;
 import net.sf.jabref.undo.UndoableFieldChange;
 
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+import com.jgoodies.forms.layout.CellConstraints;
+import com.jgoodies.forms.layout.FormLayout;
+
 public class CleanUpAction extends AbstractWorker {
 	private Logger logger = Logger.getLogger(CleanUpAction.class.getName());
 
@@ -62,7 +58,10 @@ public class CleanUpAction extends AbstractWorker {
 		CLEANUP_MAKEPATHSRELATIVE = "CleanUpMakePathsRelative",
 		CLEANUP_RENAMEPDF = "CleanUpRenamePDF",
 		CLEANUP_RENAMEPDF_ONLYRELATIVE_PATHS = "CleanUpRenamePDFonlyRelativePaths",
-		CLEANUP_SUPERSCRIPTS = "CleanUpSuperscripts";
+		CLEANUP_UPGRADE_EXTERNAL_LINKS = "CleanUpUpgradeExternalLinks",
+		CLEANUP_SUPERSCRIPTS = "CleanUpSuperscripts",
+	        CLEANUP_HTML = "CleanUpHTML",
+		CLEANUP_CASE = "CleanUpCase";
 	
 	public static void putDefaults(HashMap<String, Object> defaults) {
 		defaults.put(AKS_AUTO_NAMING_PDFS_AGAIN, Boolean.TRUE);
@@ -73,6 +72,10 @@ public class CleanUpAction extends AbstractWorker {
 		defaults.put(CLEANUP_MAKEPATHSRELATIVE, Boolean.TRUE);
 		defaults.put(CLEANUP_RENAMEPDF, Boolean.TRUE);
 		defaults.put(CLEANUP_RENAMEPDF_ONLYRELATIVE_PATHS, Boolean.FALSE);
+		defaults.put(CLEANUP_UPGRADE_EXTERNAL_LINKS, Boolean.FALSE);
+		defaults.put(CLEANUP_MAKEPATHSRELATIVE, Boolean.TRUE);
+                defaults.put(CLEANUP_HTML, Boolean.TRUE);
+                defaults.put(CLEANUP_CASE, Boolean.TRUE);
 	}
 	
 	private JCheckBox cleanUpSuperscrips;
@@ -82,6 +85,9 @@ public class CleanUpAction extends AbstractWorker {
 	private JCheckBox cleanUpMakePathsRelative;
 	private JCheckBox cleanUpRenamePDF;
 	private JCheckBox cleanUpRenamePDFonlyRelativePaths;
+	private JCheckBox cleanUpUpgradeExternalLinks;
+	private JCheckBox cleanUpHTML;
+	private JCheckBox cleanUpCase;
 	private JPanel optionsPanel = new JPanel();
 	private BasePanel panel;
 	private JabRefFrame frame;
@@ -109,22 +115,28 @@ public class CleanUpAction extends AbstractWorker {
 			}
 		});
 		cleanUpRenamePDFonlyRelativePaths = new JCheckBox(Globals.lang("Rename only PDFs having a relative path"));
+		cleanUpUpgradeExternalLinks = new JCheckBox(Globals.lang("Upgrade external PDF/PS links to use the '%0' field.", GUIGlobals.FILE_FIELD));
+		cleanUpHTML = new JCheckBox(Globals.lang("Run HTML converter on title"));
+		cleanUpCase = new JCheckBox(Globals.lang("Run filter on title keeping the case of selected words"));
 		optionsPanel = new JPanel();
 		retrieveSettings();
 
-		FormLayout layout = new FormLayout("left:15dlu,pref", "pref, pref, pref, pref, pref, pref, pref, pref");
+		FormLayout layout = new FormLayout("left:15dlu,pref:grow", "pref, pref, pref, pref, pref, pref, pref, pref, pref, pref, pref");
         DefaultFormBuilder builder = new DefaultFormBuilder(layout,	optionsPanel);
         builder.setDefaultDialogBorder();
         CellConstraints cc = new CellConstraints();
-        builder.add(cleanUpSuperscrips, cc.xyw(1,1,2));
-        builder.add(cleanUpDOI, cc.xyw(1,2,2));
-        builder.add(cleanUpMonth, cc.xyw(1,3,2));
-        builder.add(cleanUpPageNumbers, cc.xyw(1,4,2));
-        builder.add(cleanUpMakePathsRelative, cc.xyw(1,5,2));
-        builder.add(cleanUpRenamePDF, cc.xyw(1,6,2));
+        builder.add(cleanUpHTML, cc.xyw(1,1,2));
+        builder.add(cleanUpCase, cc.xyw(1,2,2));
+        builder.add(cleanUpSuperscrips, cc.xyw(1,3,2));
+        builder.add(cleanUpDOI, cc.xyw(1,4,2));
+        builder.add(cleanUpMonth, cc.xyw(1,5,2));
+        builder.add(cleanUpPageNumbers, cc.xyw(1,6,2));
+        builder.add(cleanUpUpgradeExternalLinks, cc.xyw(1, 7, 2));
+        builder.add(cleanUpMakePathsRelative, cc.xyw(1,8,2));
+        builder.add(cleanUpRenamePDF, cc.xyw(1,9,2));
         String currentPattern = Globals.lang("File name format pattern").concat(": ").concat(Globals.prefs.get(ImportSettingsTab.PREF_IMPORT_FILENAMEPATTERN));
-        builder.add(new JLabel(currentPattern), cc.xyw(2,7,1));
-        builder.add(cleanUpRenamePDFonlyRelativePaths, cc.xyw(2,8,1));
+        builder.add(new JLabel(currentPattern), cc.xyw(2,10,1));
+        builder.add(cleanUpRenamePDFonlyRelativePaths, cc.xyw(2,11,1));
 	}
 	
 	private void retrieveSettings() {
@@ -136,6 +148,9 @@ public class CleanUpAction extends AbstractWorker {
 		cleanUpRenamePDF.setSelected(Globals.prefs.getBoolean(CLEANUP_RENAMEPDF));
 		cleanUpRenamePDFonlyRelativePaths.setSelected(Globals.prefs.getBoolean(CLEANUP_RENAMEPDF_ONLYRELATIVE_PATHS));
 		cleanUpRenamePDFonlyRelativePaths.setEnabled(cleanUpRenamePDF.isSelected());
+		cleanUpUpgradeExternalLinks.setSelected(Globals.prefs.getBoolean(CLEANUP_UPGRADE_EXTERNAL_LINKS));
+                cleanUpHTML.setSelected(Globals.prefs.getBoolean(CLEANUP_HTML));
+                cleanUpCase.setSelected(Globals.prefs.getBoolean(CLEANUP_CASE));
 	}
 	
 	private void storeSettings() {
@@ -146,6 +161,9 @@ public class CleanUpAction extends AbstractWorker {
 		Globals.prefs.putBoolean(CLEANUP_MAKEPATHSRELATIVE, cleanUpMakePathsRelative.isSelected());
 		Globals.prefs.putBoolean(CLEANUP_RENAMEPDF, cleanUpRenamePDF.isSelected());
 		Globals.prefs.putBoolean(CLEANUP_RENAMEPDF_ONLYRELATIVE_PATHS, cleanUpRenamePDFonlyRelativePaths.isSelected());
+		Globals.prefs.putBoolean(CLEANUP_UPGRADE_EXTERNAL_LINKS, cleanUpUpgradeExternalLinks.isSelected());
+                Globals.prefs.putBoolean(CLEANUP_HTML, cleanUpHTML.isSelected());
+                Globals.prefs.putBoolean(CLEANUP_CASE, cleanUpCase.isSelected());
 	}
 
 	private int showCleanUpDialog() {
@@ -188,8 +206,11 @@ public class CleanUpAction extends AbstractWorker {
     		choiceCleanUpDOI = cleanUpDOI.isSelected(),
     		choiceCleanUpMonth = cleanUpMonth.isSelected(),
     		choiceCleanUpPageNumbers = cleanUpPageNumbers.isSelected(),
+    		choiceCleanUpUpgradeExternalLinks = cleanUpUpgradeExternalLinks.isSelected(),
     		choiceMakePathsRelative = cleanUpMakePathsRelative.isSelected(),
-    		choiceRenamePDF = cleanUpRenamePDF.isSelected();
+		choiceRenamePDF = cleanUpRenamePDF.isSelected(),
+	        choiceConvertHTML = cleanUpHTML.isSelected(),
+                choiceConvertCase = cleanUpCase.isSelected();
     	
     	if (choiceRenamePDF && Globals.prefs.getBoolean(AKS_AUTO_NAMING_PDFS_AGAIN)) { 
 	        CheckBoxMessage cbm = new CheckBoxMessage(Globals.lang("Auto-generating PDF-Names does not support undo. Continue?"),
@@ -204,6 +225,18 @@ public class CleanUpAction extends AbstractWorker {
 	        }
 	    }
     	
+    	// first upgrade the external links
+    	// we have to use it separately as the Utils function generates a separate Named Compound
+    	if (choiceCleanUpUpgradeExternalLinks) {
+    		NamedCompound ce = Util.upgradePdfPsToFile(Arrays.asList(panel.getSelectedEntries()), new String[] {"pdf", "ps"});
+    		if (ce.hasEdits()) {
+	    		panel.undoManager.addEdit(ce);
+	    		panel.markBaseChanged();
+	    		panel.updateEntryEditorIfShowing();
+	    		panel.output(Globals.lang("Upgraded links."));
+    		}
+    	}
+
     	for (BibtexEntry entry : panel.getSelectedEntries()) {
     		// undo granularity is on entry level
         	NamedCompound ce = new NamedCompound(Globals.lang("Cleanup entry"));
@@ -212,8 +245,11 @@ public class CleanUpAction extends AbstractWorker {
         	if (choiceCleanUpDOI) doCleanUpDOI(entry, ce);
         	if (choiceCleanUpMonth) doCleanUpMonth(entry, ce);
         	if (choiceCleanUpPageNumbers) doCleanUpPageNumbers(entry, ce);
+        	fixWrongFileEntries(entry, ce);
         	if (choiceMakePathsRelative) doMakePathsRelative(entry, ce);
         	if (choiceRenamePDF) doRenamePDFs(entry, ce);
+		if (choiceConvertHTML) doConvertHTML(entry, ce);
+		if (choiceConvertCase) doConvertCase(entry, ce);
         	
             ce.end();
             if (ce.hasEdits()) {
@@ -222,8 +258,6 @@ public class CleanUpAction extends AbstractWorker {
             }
     	}
     }
-    	
-
 
 	public void update() {
         if (cancelled) {
@@ -249,7 +283,7 @@ public class CleanUpAction extends AbstractWorker {
     		message = Globals.lang("One entry needed a clean up");
     		break;
     	default:
-    		message = Globals.lang("%0 entries needed a clean up");
+    		message = Globals.lang("%0 entries needed a clean up", Integer.toString(modifiedEntriesCount));
     		break;
     	}
         panel.output(message);
@@ -347,13 +381,33 @@ public class CleanUpAction extends AbstractWorker {
 		}
 	}
 	
-	private void doExportToKeywords(BibtexEntry entry, NamedCompound ce) {
-		
-	}
-	
-	private void doImportFromKeywords(BibtexEntry entry, NamedCompound ce) {
-		
-	}
+	private void fixWrongFileEntries(BibtexEntry entry, NamedCompound ce) {
+		String oldValue = entry.getField(GUIGlobals.FILE_FIELD);
+		if (oldValue == null) return;
+		FileListTableModel flModel = new FileListTableModel();
+		flModel.setContent(oldValue);
+		if (flModel.getRowCount() == 0) {
+			return;
+		}
+		boolean changed = false;
+		for (int i = 0; i<flModel.getRowCount(); i++) {
+			FileListEntry flEntry = flModel.getEntry(i);
+			String link = flEntry.getLink();
+			String description = flEntry.getDescription();
+	    	if (link.equals("") && (!description.equals(""))) {
+	    		// link and description seem to be switched, quickly fix that
+	    		flEntry.setLink(flEntry.getDescription());
+	    		flEntry.setDescription("");
+	    		changed = true;
+	    	}
+		}
+		if (changed) {
+	        String newValue = flModel.getStringRepresentation();
+			assert(!oldValue.equals(newValue));
+			entry.setField(GUIGlobals.FILE_FIELD, newValue);
+			ce.addEdit(new UndoableFieldChange(entry, GUIGlobals.FILE_FIELD, oldValue, newValue));
+		}
+    }
 
 	private void doMakePathsRelative(BibtexEntry entry, NamedCompound ce) {
 		String oldValue = entry.getField(GUIGlobals.FILE_FIELD);
@@ -396,7 +450,7 @@ public class CleanUpAction extends AbstractWorker {
 			String realOldFilename = flModel.getEntry(i).getLink();
 			
 			if (cleanUpRenamePDFonlyRelativePaths.isSelected() && (new File(realOldFilename).isAbsolute()))
-				return;
+				continue;
 	
 			String newFilename = Util.getLinkedFileName(panel.database(), entry);
 			//String oldFilename = bes.getField(GUIGlobals.FILE_FIELD); // would have to be stored for undoing purposes
@@ -407,12 +461,16 @@ public class CleanUpAction extends AbstractWorker {
 			//get new Filename with path
 		    //Create new Path based on old Path and new filename
 		    File expandedOldFile = Util.expandFilename(realOldFilename, panel.metaData().getFileDirectory(GUIGlobals.FILE_FIELD));
+		    if (expandedOldFile.getParent() == null) {
+		    	// something went wrong. Just skipt his entry
+		    	continue;
+		    }
 		    String newPath = expandedOldFile.getParent().concat(System.getProperty("file.separator")).concat(newFilename);
 		    
 		    if (new File(newPath).exists())
 		    	// we do not overwrite files
 		    	// TODO: we could check here if the newPath file is linked with the current entry. And if not, we could add a link
-		    	return;
+		    	continue;
 		    
 			//do rename
 			boolean renameSuccesfull = Util.renameFile(expandedOldFile.toString(), newPath);
@@ -450,4 +508,35 @@ public class CleanUpAction extends AbstractWorker {
 			ce.addEdit(new UndoableFieldChange(entry, GUIGlobals.FILE_FIELD, oldValue, newValue));
 		}
 	}
+
+	/**
+	 * Converts HTML code to LaTeX code
+	 */
+    private void doConvertHTML(BibtexEntry entry, NamedCompound ce) {
+        final String field = "title";
+        String oldValue = entry.getField(field);
+        if (oldValue == null) return;
+        final HTMLConverter htmlConverter = new HTMLConverter();
+        String newValue = htmlConverter.format(oldValue);
+        if (!oldValue.equals(newValue)) {
+            entry.setField(field, newValue);
+            ce.addEdit(new UndoableFieldChange(entry, field, oldValue, newValue));
+        }
+    }
+
+	/**
+	 * Adds curly brackets {} around keywords
+	 */
+    private void doConvertCase(BibtexEntry entry, NamedCompound ce) {
+        final String field = "title";
+        String oldValue = entry.getField(field);
+        if (oldValue == null) return;
+        final CaseKeeper caseKeeper = new CaseKeeper();
+        String newValue = caseKeeper.format(oldValue);
+        if (!oldValue.equals(newValue)) {
+            entry.setField(field, newValue);
+            ce.addEdit(new UndoableFieldChange(entry, field, oldValue, newValue));
+        }
+    }
+
 }
diff --git a/src/java/net/sf/jabref/gui/DatabasePropertiesDialog.java b/src/java/net/sf/jabref/gui/DatabasePropertiesDialog.java
index 4ce074c..16de626 100644
--- a/src/java/net/sf/jabref/gui/DatabasePropertiesDialog.java
+++ b/src/java/net/sf/jabref/gui/DatabasePropertiesDialog.java
@@ -24,7 +24,7 @@ import javax.swing.*;
 
 import net.sf.jabref.*;
 
-import com.jgoodies.forms.builder.ButtonBarBuilder2;
+import com.jgoodies.forms.builder.ButtonBarBuilder;
 import com.jgoodies.forms.builder.DefaultFormBuilder;
 import com.jgoodies.forms.layout.FormLayout;
 
@@ -100,7 +100,7 @@ public class DatabasePropertiesDialog extends JDialog {
         builder.appendSeparator(Globals.lang("Database protection"));
         builder.nextLine();
         builder.append(protect,3);
-        ButtonBarBuilder2 bb = new ButtonBarBuilder2();
+        ButtonBarBuilder bb = new ButtonBarBuilder();
         bb.addGlue();
         bb.addButton(ok);
         bb.addButton(cancel);
diff --git a/src/java/net/sf/jabref/gui/DragDropPopupPane.java b/src/java/net/sf/jabref/gui/DragDropPopupPane.java
index c699eb3..b966382 100644
--- a/src/java/net/sf/jabref/gui/DragDropPopupPane.java
+++ b/src/java/net/sf/jabref/gui/DragDropPopupPane.java
@@ -56,7 +56,7 @@ public class DragDropPopupPane extends DragDropPane {
 		databasePropertiesBtn.addActionListener(databasePropertiesAction);
 		popupMenu.add(databasePropertiesBtn);
 		
-		JMenuItem bibtexKeyPatternBtn = new JMenuItem(Globals.lang("Bibtexkey patterns"));
+		JMenuItem bibtexKeyPatternBtn = new JMenuItem(Globals.lang("Bibtex key patterns"));
 		bibtexKeyPatternBtn.addActionListener(bibtexKeyPatternAction);
 		popupMenu.add(bibtexKeyPatternBtn);
 
diff --git a/src/java/net/sf/jabref/gui/EntryCustomizationDialog2.java b/src/java/net/sf/jabref/gui/EntryCustomizationDialog2.java
index 7a2c8e1..5c2897a 100644
--- a/src/java/net/sf/jabref/gui/EntryCustomizationDialog2.java
+++ b/src/java/net/sf/jabref/gui/EntryCustomizationDialog2.java
@@ -28,7 +28,7 @@ import javax.swing.event.ListSelectionListener;
 
 import net.sf.jabref.*;
 
-import com.jgoodies.forms.builder.ButtonBarBuilder2;
+import com.jgoodies.forms.builder.ButtonBarBuilder;
 
 public class EntryCustomizationDialog2 extends JDialog implements ListSelectionListener, ActionListener {
 
@@ -107,7 +107,7 @@ public class EntryCustomizationDialog2 extends JDialog implements ListSelectionL
         ok.addActionListener(this);
         apply.addActionListener(this);
         cancel.addActionListener(this);
-        ButtonBarBuilder2 bb = new ButtonBarBuilder2(buttons);
+        ButtonBarBuilder bb = new ButtonBarBuilder(buttons);
         buttons.setBorder(BorderFactory.createEmptyBorder(2,2,2,2));
         bb.addGlue();
         bb.addButton(ok);
diff --git a/src/java/net/sf/jabref/gui/FetcherPreviewDialog.java b/src/java/net/sf/jabref/gui/FetcherPreviewDialog.java
new file mode 100644
index 0000000..8a3bdb6
--- /dev/null
+++ b/src/java/net/sf/jabref/gui/FetcherPreviewDialog.java
@@ -0,0 +1,271 @@
+package net.sf.jabref.gui;
+
+import ca.odell.glazedlists.BasicEventList;
+import ca.odell.glazedlists.EventList;
+import ca.odell.glazedlists.gui.TableFormat;
+import ca.odell.glazedlists.swing.EventSelectionModel;
+import ca.odell.glazedlists.swing.EventTableModel;
+import com.jgoodies.forms.builder.ButtonBarBuilder;
+import com.jgoodies.forms.builder.ButtonStackBuilder;
+import net.sf.jabref.*;
+
+import javax.swing.*;
+import javax.swing.table.TableCellRenderer;
+import javax.swing.table.TableModel;
+import java.awt.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+/**
+ *
+ */
+public class FetcherPreviewDialog extends JDialog implements OutputPrinter {
+
+    protected EventList<TableEntry> entries = new BasicEventList<TableEntry>();
+    //protected SortedList<TableEntry> sortedList;
+    protected JTable glTable;
+    protected JButton ok = new JButton(Globals.lang("Ok")),
+        cancel = new JButton(Globals.lang("Cancel"));
+    protected JButton selectAll = new JButton(Globals.lang("Select all"));
+    protected JButton deselectAll = new JButton(Globals.lang("Deselect all"));
+    protected boolean okPressed = false;
+    private JabRefFrame frame;
+    private int warningLimit;
+
+
+    public FetcherPreviewDialog(JabRefFrame frame, int warningLimit, int tableRowHeight) {
+        super(frame, Globals.lang("Title"), true);
+        this.frame = frame;
+        this.warningLimit = warningLimit;
+
+        ok.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                if (verifySelection()) {
+                    okPressed = true;
+                    dispose();
+                }
+            }
+        });
+        cancel.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                okPressed = false;
+                dispose();
+            }
+        });
+        selectAll.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                setSelectionAll(true);
+            }
+        });
+        deselectAll.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                setSelectionAll(false);
+            }
+        });
+
+        EventTableModel<TableEntry> tableModelGl = new EventTableModel<TableEntry>(entries,
+                    new EntryTableFormat());
+        glTable = new EntryTable(tableModelGl);
+        glTable.setRowHeight(tableRowHeight);
+        glTable.getColumnModel().getColumn(0).setMaxWidth(45);
+        glTable.setPreferredScrollableViewportSize(new Dimension(1100, 600));
+        EventSelectionModel<TableEntry> selectionModel = new EventSelectionModel<TableEntry>(entries);
+        glTable.setSelectionModel(selectionModel);
+        ButtonStackBuilder builder = new ButtonStackBuilder();
+        builder.addButton(selectAll);
+        builder.addButton(deselectAll);
+        builder.getPanel().setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+
+        ButtonBarBuilder bb = new ButtonBarBuilder();
+        bb.addGlue();
+        bb.addButton(ok);
+        bb.addButton(cancel);
+        bb.addGlue();
+        bb.getPanel().setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+
+        JPanel centerPan = new JPanel();
+        centerPan.setLayout(new BorderLayout());
+        centerPan.add(new JScrollPane(glTable), BorderLayout.CENTER);
+        centerPan.add(builder.getPanel(), BorderLayout.WEST);
+
+        getContentPane().add(centerPan, BorderLayout.CENTER);
+        getContentPane().add(bb.getPanel(), BorderLayout.SOUTH);
+
+        // Key bindings:
+        AbstractAction closeAction = new AbstractAction() {
+          public void actionPerformed(ActionEvent e) {
+            dispose();
+          }
+        };
+        ActionMap am = centerPan.getActionMap();
+        InputMap im = centerPan.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
+        im.put(Globals.prefs.getKey("Close dialog"), "close");
+        am.put("close", closeAction);
+
+        pack();
+
+    }
+
+    /**
+     * Check whether a large number of entries are selected, and if so, ask the user whether
+     * to go on.
+     * @return true if we should go on
+     */
+    public boolean verifySelection() {
+        int selected = 0;
+        for (TableEntry entry : entries) {
+            if (entry.isWanted())
+                selected++;
+        }
+        if (selected > warningLimit) {
+            int result = JOptionPane.showConfirmDialog(this,
+                    Globals.lang("You have selected more than %0 entries for download. Some web sites "
+                    +"might block you if you make too many rapid downloads. Do you want to continue?",
+                            String.valueOf(warningLimit)),
+                    Globals.lang("Confirm selection"), JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE);
+            return result == JOptionPane.YES_OPTION;
+        }
+        else return true;
+    }
+
+    public Map<String,Boolean> getSelection() {
+        LinkedHashMap<String, Boolean> selection = new LinkedHashMap<String,Boolean>();
+        for (TableEntry e : entries)
+            selection.put(e.id, e.isWanted());
+        return selection;
+    }
+
+        /* (non-Javadoc)
+	 * @see net.sf.jabref.gui.ImportInspection#addEntry(net.sf.jabref.BibtexEntry)
+	 */
+    public void addEntry(String entryId, JLabel preview) {
+        TableEntry entry = new TableEntry(entryId, preview);
+        this.entries.getReadWriteLock().writeLock().lock();
+        this.entries.add(entry);
+        this.entries.getReadWriteLock().writeLock().unlock();
+        glTable.repaint();
+    }
+
+    public void setSelectionAll(boolean select) {
+        for (int i = 0; i < glTable.getRowCount(); i++) {
+            glTable.setValueAt(select, i, 0);
+        }
+        glTable.repaint();
+    }
+
+
+    class TableEntry {
+        private String id;
+        private JLabel preview;
+        private boolean wanted = false;
+        public TableEntry(String id, JLabel preview) {
+            this.id = id;
+            this.preview = preview;
+        }
+
+        public boolean isWanted() {
+            return wanted;
+        }
+
+        public void setWanted(boolean wanted) {
+            this.wanted = wanted;
+        }
+
+        public JLabel getPreview() {
+            return preview;
+        }
+
+    }
+
+    class PreviewRenderer implements TableCellRenderer {
+        JLabel label = new JLabel();
+        public Component getTableCellRendererComponent(JTable table, Object value,
+                                                       boolean isSelected, boolean hasFocus,
+                                                       int row, int column) {
+            JLabel label = (JLabel)value;
+            this.label.setText(label.getText());
+            return this.label;
+        }
+    }
+
+    class EntryTable extends JTable {
+
+        PreviewRenderer renderer = new PreviewRenderer();
+
+        public EntryTable(TableModel model) {
+            super(model);
+            getTableHeader().setReorderingAllowed(false);
+        }
+
+        public TableCellRenderer getCellRenderer(int row, int column) {
+            return column == 0 ? getDefaultRenderer(Boolean.class) : renderer;
+        }
+
+        /*
+         * public TableCellEditor getCellEditor() { return
+         * getDefaultEditor(Boolean.class); }
+         */
+
+        public Class<?> getColumnClass(int col) {
+            if (col == 0)
+                return Boolean.class;
+            else
+                return JLabel.class;
+        }
+
+        public boolean isCellEditable(int row, int column) {
+            return column == 0;
+        }
+
+        public void setValueAt(Object value, int row, int column) {
+            // Only column 0, which is controlled by BibtexEntry.searchHit, is
+            // editable:
+            entries.getReadWriteLock().writeLock().lock();
+            TableEntry entry = entries.get(row);
+            entry.setWanted(((Boolean) value).booleanValue());
+            entries.getReadWriteLock().writeLock().unlock();
+        }
+    }
+
+    class EntryTableFormat implements TableFormat<TableEntry> {
+
+        public int getColumnCount() {
+            return 2;
+        }
+
+        public String getColumnName(int i) {
+            if (i == 0)
+                return Globals.lang("Keep");
+            else
+                return Globals.lang("Preview");
+        }
+
+        public Object getColumnValue(TableEntry entry, int i) {
+            if (i == 0)
+                return entry.isWanted() ? Boolean.TRUE : Boolean.FALSE;
+            else return entry.getPreview();
+        }
+
+    }
+
+    public boolean isOkPressed() {
+        return okPressed;
+    }
+
+
+    public void setStatus(String s) {
+        frame.setStatus(s);
+    }
+
+
+    public void showMessage(Object message, String title, int msgType) {
+        JOptionPane.showMessageDialog(this, message, title, msgType);
+    }
+
+    public void showMessage(String message) {
+        JOptionPane.showMessageDialog(this, message);
+    }
+}
diff --git a/src/java/net/sf/jabref/gui/FieldWeightDialog.java b/src/java/net/sf/jabref/gui/FieldWeightDialog.java
index 5076c92..a8e8985 100644
--- a/src/java/net/sf/jabref/gui/FieldWeightDialog.java
+++ b/src/java/net/sf/jabref/gui/FieldWeightDialog.java
@@ -29,7 +29,7 @@ import net.sf.jabref.GUIGlobals;
 import net.sf.jabref.Globals;
 import net.sf.jabref.JabRefFrame;
 
-import com.jgoodies.forms.builder.ButtonBarBuilder2;
+import com.jgoodies.forms.builder.ButtonBarBuilder;
 import com.jgoodies.forms.builder.DefaultFormBuilder;
 import com.jgoodies.forms.layout.FormLayout;
 
@@ -110,7 +110,7 @@ public class FieldWeightDialog extends JDialog {
             }
         });
 
-        ButtonBarBuilder2 builder = new ButtonBarBuilder2();
+        ButtonBarBuilder builder = new ButtonBarBuilder();
         builder.addGlue();
         builder.addButton(ok);
         builder.addButton(cancel);
diff --git a/src/java/net/sf/jabref/gui/FileListEntryEditor.java b/src/java/net/sf/jabref/gui/FileListEntryEditor.java
index b282707..f71e234 100644
--- a/src/java/net/sf/jabref/gui/FileListEntryEditor.java
+++ b/src/java/net/sf/jabref/gui/FileListEntryEditor.java
@@ -35,7 +35,7 @@ import net.sf.jabref.external.ConfirmCloseFileListEntryEditor;
 import net.sf.jabref.external.ExternalFileType;
 import net.sf.jabref.external.UnknownExternalFileType;
 
-import com.jgoodies.forms.builder.ButtonBarBuilder2;
+import com.jgoodies.forms.builder.ButtonBarBuilder;
 import com.jgoodies.forms.builder.DefaultFormBuilder;
 import com.jgoodies.forms.layout.FormLayout;
 
@@ -125,7 +125,7 @@ public class FileListEntryEditor {
             builder.append(prog, 3);
         }
         
-        ButtonBarBuilder2 bb = new ButtonBarBuilder2();
+        ButtonBarBuilder bb = new ButtonBarBuilder();
         bb.addGlue();
         //bb.addButton(open);
         //bb.addRelatedGap();
diff --git a/src/java/net/sf/jabref/gui/GenFieldsCustomizer.java b/src/java/net/sf/jabref/gui/GenFieldsCustomizer.java
index a0225cb..0d786e6 100644
--- a/src/java/net/sf/jabref/gui/GenFieldsCustomizer.java
+++ b/src/java/net/sf/jabref/gui/GenFieldsCustomizer.java
@@ -24,7 +24,7 @@ import javax.swing.border.TitledBorder;
 
 import net.sf.jabref.*;
 
-import com.jgoodies.forms.builder.ButtonBarBuilder2;
+import com.jgoodies.forms.builder.ButtonBarBuilder;
 import com.jgoodies.forms.layout.Sizes;
 
 /**
@@ -92,7 +92,7 @@ public class GenFieldsCustomizer extends JDialog {
     revert.setText(Globals.lang("Default"));
     revert.addActionListener(new GenFieldsCustomizer_revert_actionAdapter(this));
     this.getContentPane().add(buttons, BorderLayout.SOUTH);
-    ButtonBarBuilder2 bb = new ButtonBarBuilder2(buttons);
+    ButtonBarBuilder bb = new ButtonBarBuilder(buttons);
     buttons.setBorder(BorderFactory.createEmptyBorder(2,2,2,2));
     bb.addGlue();
     bb.addButton(ok);
diff --git a/src/java/net/sf/jabref/gui/ImportInspectionDialog.java b/src/java/net/sf/jabref/gui/ImportInspectionDialog.java
index 3a920fc..00f6149 100644
--- a/src/java/net/sf/jabref/gui/ImportInspectionDialog.java
+++ b/src/java/net/sf/jabref/gui/ImportInspectionDialog.java
@@ -67,7 +67,7 @@ import ca.odell.glazedlists.swing.EventSelectionModel;
 import ca.odell.glazedlists.swing.EventTableModel;
 import ca.odell.glazedlists.swing.TableComparatorChooser;
 
-import com.jgoodies.forms.builder.ButtonBarBuilder2;
+import com.jgoodies.forms.builder.ButtonBarBuilder;
 import com.jgoodies.forms.builder.ButtonStackBuilder;
 import com.jgoodies.uif_lite.component.UIFSplitPane;
 
@@ -274,7 +274,7 @@ public class ImportInspectionDialog extends JDialog implements ImportInspector,
         popup.add(new AttachUrl());
         getContentPane().add(centerPan, BorderLayout.CENTER);
 
-        ButtonBarBuilder2 bb = new ButtonBarBuilder2();
+        ButtonBarBuilder bb = new ButtonBarBuilder();
         bb.addGlue();
         bb.addButton(ok);
         bb.addButton(stop);
@@ -1494,12 +1494,10 @@ public class ImportInspectionDialog extends JDialog implements ImportInspector,
     }
 
     public void showMessage(Object message, String title, int msgType) {
-        System.out.println("ping");
         JOptionPane.showMessageDialog(this, message, title, msgType);
     }
 
     public void showMessage(String message) {
-        System.out.println("pingi");
         JOptionPane.showMessageDialog(this, message);
     }
 }
diff --git a/src/java/net/sf/jabref/gui/WaitForSaveOperation.java b/src/java/net/sf/jabref/gui/WaitForSaveOperation.java
index c90ccd1..8501ad6 100644
--- a/src/java/net/sf/jabref/gui/WaitForSaveOperation.java
+++ b/src/java/net/sf/jabref/gui/WaitForSaveOperation.java
@@ -15,7 +15,7 @@
 */
 package net.sf.jabref.gui;
 
-import com.jgoodies.forms.builder.ButtonBarBuilder2;
+import com.jgoodies.forms.builder.ButtonBarBuilder;
 import net.sf.jabref.Globals;
 import net.sf.jabref.JabRefFrame;
 
@@ -45,7 +45,7 @@ public class WaitForSaveOperation implements ActionListener {
         prog.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
         diag = new JDialog(frame, Globals.lang("Please wait"), true);
 
-        ButtonBarBuilder2 bb = new ButtonBarBuilder2();
+        ButtonBarBuilder bb = new ButtonBarBuilder();
         bb.addGlue();
         bb.addButton(cancel);
         bb.addGlue();
diff --git a/src/java/net/sf/jabref/imports/ACMPortalFetcher.java b/src/java/net/sf/jabref/imports/ACMPortalFetcher.java
index 4eed11d..d1d3efb 100644
--- a/src/java/net/sf/jabref/imports/ACMPortalFetcher.java
+++ b/src/java/net/sf/jabref/imports/ACMPortalFetcher.java
@@ -15,34 +15,24 @@
 */
 package net.sf.jabref.imports;
 
-import java.awt.GridLayout;
-import java.io.BufferedInputStream;
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
+import java.awt.*;
+import java.io.*;
 import java.net.ConnectException;
 import java.net.MalformedURLException;
 import java.net.URL;
-import java.util.Collection;
-import java.util.NoSuchElementException;
+import java.util.*;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-import javax.swing.ButtonGroup;
-import javax.swing.JCheckBox;
-import javax.swing.JOptionPane;
-import javax.swing.JPanel;
-import javax.swing.JRadioButton;
+import javax.swing.*;
 
 import net.sf.jabref.BibtexEntry;
 import net.sf.jabref.GUIGlobals;
 import net.sf.jabref.Globals;
 import net.sf.jabref.OutputPrinter;
+import net.sf.jabref.gui.FetcherPreviewDialog;
 
-public class ACMPortalFetcher implements EntryFetcher {
+public class ACMPortalFetcher implements PreviewEntryFetcher {
 
 	private ImportInspector dialog = null;
 	private OutputPrinter status;
@@ -64,7 +54,7 @@ public class ACMPortalFetcher implements EntryFetcher {
     
     private static final int perPage = 20;
     private static final int MAX_FETCH = perPage; // only one page. Otherwise, the user will get blocked by ACM. 100 has been the old setting. See Bug 3532752 - https://sourceforge.net/tracker/index.php?func=detail&aid=3532752&group_id=92314&atid=600306
-    private static final int WAIT_TIME = 1000;
+    private static final int WAIT_TIME = 200;
     private int hits = 0, unparseable = 0, parsed = 0;
     private boolean shouldContinue = false;
     
@@ -74,14 +64,20 @@ public class ACMPortalFetcher implements EntryFetcher {
 
     private static final Pattern hitsPattern = Pattern.compile(".*Found <b>(\\d+,*\\d*)</b>.*");
     private static final Pattern maxHitsPattern = Pattern.compile(".*Results \\d+ - \\d+ of (\\d+,*\\d*).*");
-    private static final Pattern bibPattern = Pattern.compile(".*'(exportformats.cfm\\?id=\\d+&expformat=bibtex)'.*");
+    //private static final Pattern bibPattern = Pattern.compile(".*'(exportformats.cfm\\?id=\\d+&expformat=bibtex)'.*");
     
     private static final Pattern fullCitationPattern =
         Pattern.compile("<A HREF=\"(citation.cfm.*)\" class.*");
 
     private static final Pattern idPattern =
-        Pattern.compile("citation.cfm\\?id=\\d*\\.?(\\d+)&.*");    
-    				
+        Pattern.compile("citation.cfm\\?id=\\d*\\.?(\\d+)&.*");
+
+    // Patterns used to extract information for the preview:
+    private static final Pattern titlePattern = Pattern.compile("<A HREF=.*?\">([^<]*)</A>");
+    private static final Pattern monthYearPattern = Pattern.compile("([A-Za-z]+ [0-9]{4})");
+    private static final Pattern absPattern = Pattern.compile("<div .*?>(.*?)</div>");
+    private FetcherPreviewDialog preview;
+
     public JPanel getOptionsPanel() {
         JPanel pan = new JPanel();
         pan.setLayout(new GridLayout(0,1));
@@ -99,8 +95,8 @@ public class ACMPortalFetcher implements EntryFetcher {
         return pan;
     }
 
-    public boolean processQuery(String query, ImportInspector dialog, OutputPrinter status) {
-        this.dialog = dialog;
+    public boolean processQueryGetPreview(String query, FetcherPreviewDialog preview, OutputPrinter status) {
+        this.preview = preview;
         this.status = status;
         this.terms = query;
         piv = 0;
@@ -111,13 +107,15 @@ public class ACMPortalFetcher implements EntryFetcher {
         fetchAbstract = absCheckBox.isSelected();
         int firstEntry = 1;
         String address = makeUrl(firstEntry);
+        LinkedHashMap<String, JLabel> previews = new LinkedHashMap<String, JLabel>();
+
         try {
             URL url = new URL(address);
 
-            //dialog.setVisible(true);
             String page = getResults(url);
-            //System.out.println(address);
+
             hits = getNumberOfHits(page, "Found", hitsPattern);
+
 			int index = page.indexOf("Found");
 			if (index >= 0) {
             	page = page.substring(index + 5);
@@ -125,9 +123,7 @@ public class ACMPortalFetcher implements EntryFetcher {
 				if (index >= 0)
             		page = page.substring(index);
 			}
-			//System.out.println(page);
-            //System.out.printf("Hit %d\n", hits);
-			
+
             if (hits == 0) {
                 status.showMessage(Globals.lang("No entries found for the search string '%0'",
                         terms),
@@ -135,36 +131,20 @@ public class ACMPortalFetcher implements EntryFetcher {
                 return false;
             }
 
-            int maxHits = getNumberOfHits(page, "Results", maxHitsPattern);
-            //System.out.printf("maxHit %d\n", maxHits);
-            //String page = getResultsFromFile(new File("/home/alver/div/temp50.txt"));
-
-            //System.out.println("Number of hits: "+hits);
-            //System.out.println("Maximum returned: "+maxHits);
-            if (hits > maxHits)
-                hits = maxHits;
-            
-            if (hits > MAX_FETCH) {
-                status.showMessage(Globals.lang("%0 entries found. To reduce server load, "
-                        +"only %1 will be downloaded. It will be very slow, in order to make ACM happy.",
-                                new String[] {String.valueOf(hits), String.valueOf(MAX_FETCH)}),
-                        Globals.lang("Search ACM Portal"), JOptionPane.INFORMATION_MESSAGE);
-                hits = MAX_FETCH;
+            hits = getNumberOfHits(page, "Results", maxHitsPattern);
+
+            for (int i=0; i<hits; i++) {
+                parse(page, 0, firstEntry, previews);
+                //address = makeUrl(firstEntry);
+                firstEntry += perPage;
             }
-            
-            parse(dialog, page, 0, firstEntry);
-        	firstEntry += perPage;
-        	
-            while (shouldContinue && (firstEntry <= hits)) {
-                address = makeUrl(firstEntry);
-                //System.out.println("Fetch stating at " + firstEntry + " from: " + address);
-                page = getResults(new URL(address));
-                parse(dialog, page, 0, firstEntry);
-            	firstEntry += perPage;
+            for (String s : previews.keySet()) {
+                preview.addEntry(s, previews.get(s));
             }
-            
+
+
             return true;
-            
+
         } catch (MalformedURLException e) {
             e.printStackTrace();
         } catch (ConnectException e) {
@@ -176,6 +156,35 @@ public class ACMPortalFetcher implements EntryFetcher {
             e.printStackTrace();
         }
         return false;
+
+    }
+
+    public void getEntries(Map<String, Boolean> selection, ImportInspector inspector) {
+        for (String id : selection.keySet()) {
+            if (!shouldContinue)
+                break;
+            boolean sel = selection.get(id);
+            if (sel) {
+                try {
+                    BibtexEntry entry = downloadEntryBibTeX(id, fetchAbstract);
+                    inspector.addEntry(entry);
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+    }
+
+    public int getWarningLimit() {
+        return 10;
+    }
+
+    public int getPreferredPreviewHeight() {
+        return 75;
+    }
+
+    public boolean processQuery(String query, ImportInspector dialog, OutputPrinter status) {
+        return false;
     }
 
     private String makeUrl(int startIndex) {
@@ -194,87 +203,43 @@ public class ACMPortalFetcher implements EntryFetcher {
 
     private int piv = 0;
 
-    private void parse(ImportInspector dialog, String text, int startIndex, int firstEntryNumber) {
+    private void parse(String text, int startIndex, int firstEntryNumber, Map<String,JLabel> entries) {
         piv = startIndex;
         int entryNumber = firstEntryNumber;
-        BibtexEntry entry;
-        while (((entry = parseNextEntry(text, piv, entryNumber)) != null) && shouldContinue) {
-            if (entry.getField("title") != null) {
-                dialog.addEntry(entry);
-                dialog.setProgress(parsed + unparseable, hits);
-                parsed++;
-            }
+        String entry;
+        while (getNextEntryURL(text, piv, entryNumber, entries)) {
             entryNumber++;
         }
+
     }
 
-    private BibtexEntry parseEntryBibTeX(String fullCitation, boolean abs) throws IOException {
-    	String bibAddr = "";
-    	String ID = "";
-    	try {
-    		// Get ID
-    		Matcher idMatcher = idPattern.matcher(fullCitation);
-    		if (idMatcher.find()) {
-    			ID = idMatcher.group(1);
-    			//System.out.println("To fetch: " + bibAddr);
-    		}
-    		else {
-    			System.out.println("Did not find ID in: " + fullCitation);
-    			return null;
-    		}
-    		
-    		// fetch bibtex record
-    		bibAddr = bibtexUrl + ID + bibtexUrlEnd;
-			URL bibtexUrl = new URL(startUrl + bibAddr);
-			BufferedReader in = new BufferedReader(new InputStreamReader(bibtexUrl.openStream()));
-			ParserResult result = BibtexParser.parse(in);
-			in.close();
-			Collection<BibtexEntry> item = result.getDatabase().getEntries();
-            if (item.size() == 0)
-                return null;
-			BibtexEntry entry = item.iterator().next();
-			Thread.sleep(WAIT_TIME);//wait between requests or you will be blocked by ACM
-			
-        	// get abstract
-        	if (abs) {
-        		URL url = new URL(startUrl + abstractUrl + ID);
-	        	String page = getResults(url);
-	        	entry.setField("abstract", convertHTMLChars(page).trim()); 	
-				Thread.sleep(WAIT_TIME);//wait between requests or you will be blocked by ACM
-        	}
-
-			return entry;
-			
-        } catch (NoSuchElementException e) {
-        	System.out.println("Bad Bibtex record read at: " + startUrl + bibAddr);
-        	System.out.println("link read was: " + fullCitation);
-            e.printStackTrace();
-            return null;
-        } catch (MalformedURLException e) {
-            e.printStackTrace();
-            return null;
-        } catch (ConnectException e) {
-            e.printStackTrace();
+    private String getEntryBibTeXURL(String fullCitation, boolean abs) {
+        String bibAddr = "";
+       	String ID = "";
+
+        // Get ID
+        Matcher idMatcher = idPattern.matcher(fullCitation);
+        if (idMatcher.find()) {
+            ID = idMatcher.group(1);
+            //System.out.println("To fetch: " + bibAddr);
+        }
+        else {
+            System.out.println("Did not find ID in: " + fullCitation);
             return null;
-		} catch (IOException e) {
-			e.printStackTrace();
-			return null;
-		} catch (InterruptedException e) {
-			e.printStackTrace();
-			return null;
-		}
+        }
+
+        // fetch bibtex record
+        //bibAddr = bibtexUrl + ID + bibtexUrlEnd;
+        return ID;
+
     }
 
-    private BibtexEntry parseNextEntry(String allText, int startIndex, int entryNumber) {
+    private boolean getNextEntryURL(String allText, int startIndex, int entryNumber,
+                                   Map<String,JLabel> entries) {
         String toFind = new StringBuffer().append("<strong>")
                 .append(entryNumber).append("</strong><br>").toString();
         int index = allText.indexOf(toFind, startIndex);
-        int endIndex = allText.indexOf("</table>", index+1);
-        
-        //if (endIndex < 0)
-            endIndex = allText.length();
-
-        BibtexEntry entry = null;
+        int endIndex = allText.length();
 
         if (index >= 0) {
             piv = index+1;
@@ -283,25 +248,108 @@ public class ACMPortalFetcher implements EntryFetcher {
 			Matcher fullCitation =
 				fullCitationPattern.matcher(text);
 			if (fullCitation.find()) {
-				try {
-					entry = parseEntryBibTeX(fullCitation.group(1), fetchAbstract);
-				} catch (Exception e) {
-					e.printStackTrace();
-				}  
+                String link = getEntryBibTeXURL(fullCitation.group(1), fetchAbstract);
+                String part;
+                int endOfRecord = text.indexOf("<div class=\"abstract2\">");
+                if (endOfRecord > 0) {
+                    StringBuilder sb = new StringBuilder();
+                    part = text.substring(0, endOfRecord);
+
+                    try {
+                        save("part"+entryNumber+".html", part);
+                    } catch (IOException e) {
+                        e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
+                    }
+
+                    // Find authors:
+                    String authMarker = "<div class=\"authors\">";
+                    int authStart = text.indexOf(authMarker);
+                    if (authStart >= 0) {
+                        int authEnd = text.indexOf("</div>", authStart+authMarker.length());
+                        if (authEnd >= 0) {
+                            sb.append("<p>"+text.substring(authStart, authEnd)+"</p>");
+                        }
+
+                    }
+                    // Find title:
+                    Matcher titM = titlePattern.matcher(part);
+                    if (titM.find())
+                        sb.append("<p>"+titM.group(1)+"</p>");
+                    // Find month and year:
+                    Matcher mY = monthYearPattern.matcher(part);
+                    if (mY.find())
+                        sb.append("<p>"+mY.group(1)+"</p>");
+
+
+                    part = sb.toString();
+                    /*.replaceAll("</tr>", "<br>");
+                    part = part.replaceAll("</td>", "");
+                    part = part.replaceAll("<tr valign=\"[A-Za-z]*\">", "");
+                    part = part.replaceAll("<table style=\"padding: 5px; 5px; 5px; 5px;\" border=\"0\">", "");*/
+                }
+                else part = link;
+
+
+                JLabel preview = new JLabel("<html>"+part+"</html>");
+                preview.setPreferredSize(new Dimension(750, 100));
+                entries.put(link, preview);
+                return true;
 			} else {
 				System.out.printf("Citation Unmatched %d\n", entryNumber);
 				System.out.printf(text);
+                return false;
 			}
-            if (entry != null) { // fetch successful
-                return entry;
-            }
+
         }
-        //System.out.println(allText);
-        //System.out.println(toFind);
-        //System.out.println("Parse Failed");
-        return null;
+
+        return false;
     }
 
+    private BibtexEntry downloadEntryBibTeX(String ID, boolean abs) throws IOException {
+        	try {
+        	    URL url = new URL(startUrl+bibtexUrl+ID+bibtexUrlEnd);
+    			BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
+    			ParserResult result = BibtexParser.parse(in);
+    			in.close();
+    			Collection<BibtexEntry> item = result.getDatabase().getEntries();
+                if (item.size() == 0)
+                    return null;
+    			BibtexEntry entry = item.iterator().next();
+    			Thread.sleep(WAIT_TIME);//wait between requests or you will be blocked by ACM
+
+            	// get abstract
+            	if (abs) {
+            		url = new URL(startUrl + abstractUrl + ID);
+    	        	String page = getResults(url);
+                    Matcher absM = absPattern.matcher(page);
+                    if (absM.find()) {
+                        entry.setField("abstract", absM.group(1).trim());
+                    }
+    				Thread.sleep(WAIT_TIME);//wait between requests or you will be blocked by ACM
+            	}
+
+    			return entry;
+
+            } catch (NoSuchElementException e) {
+            	System.out.println("Bad Bibtex record read at: " + bibtexUrl + ID + bibtexUrlEnd);
+            	e.printStackTrace();
+                return null;
+            } catch (MalformedURLException e) {
+                e.printStackTrace();
+                return null;
+            } catch (ConnectException e) {
+                e.printStackTrace();
+                return null;
+    		} catch (IOException e) {
+    			e.printStackTrace();
+    			return null;
+    		} catch (InterruptedException e) {
+    			e.printStackTrace();
+    			return null;
+    		}
+        }
+
+
     /**
      * This method must convert HTML style char sequences to normal characters.
      * @param text The text to handle.
@@ -320,8 +368,7 @@ public class ACMPortalFetcher implements EntryFetcher {
     private int getNumberOfHits(String page, String marker, Pattern pattern) throws IOException {
         int ind = page.indexOf(marker);
         if (ind < 0) {
-        	System.out.println(page);
-            throw new IOException(Globals.lang("Could not parse number of hits"));
+        	throw new IOException(Globals.lang("Could not parse number of hits"));
         }
         String substring = page.substring(ind, Math.min(ind + 42, page.length()));
         Matcher m = pattern.matcher(substring);
@@ -411,8 +458,7 @@ public class ACMPortalFetcher implements EntryFetcher {
 	//wanted entries, and clicked Ok. The callback object can update status
 	//line etc.
 	public void done(int entriesImported) {
-	    //System.out.println("Number of entries parsed: "+parsed);
-	    //System.out.println("Parsing failed for "+unparseable+" entries");
+
 	}
 	
 	// This method is called by the dialog when the user has cancelled or
@@ -422,5 +468,10 @@ public class ACMPortalFetcher implements EntryFetcher {
 	    shouldContinue = false;
 	}
 
-    
+
+    private void save(String filename, String content) throws IOException {
+        BufferedWriter out = new BufferedWriter(new FileWriter(filename));
+        out.write(content);
+        out.close();
+    }
 }
diff --git a/src/java/net/sf/jabref/imports/ADSFetcher.java b/src/java/net/sf/jabref/imports/ADSFetcher.java
new file mode 100644
index 0000000..30f67a7
--- /dev/null
+++ b/src/java/net/sf/jabref/imports/ADSFetcher.java
@@ -0,0 +1,176 @@
+/* Copyright (c) 2009, Ryo IGARASHI <rigarash at gmail.com>
+ * All rights reserved.
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above copyright
+ *        notice, this list of conditions and the following disclaimer in the
+ *       documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+package net.sf.jabref.imports;
+
+import java.util.Set;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.BufferedInputStream;
+import java.io.BufferedReader;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.XMLStreamReader;
+import javax.xml.stream.XMLStreamException;
+
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+
+import net.sf.jabref.GUIGlobals;
+import net.sf.jabref.Globals;
+import net.sf.jabref.OutputPrinter;
+
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.BibtexDatabase;
+import net.sf.jabref.imports.BibtexParser;
+
+/**
+ *
+ * This class handles accessing and obtaining BibTeX entry
+ * from ADS(The NASA Astrophysics Data System).
+ * Fetching using DOI(Document Object Identifier) is only supported.
+ *
+ * @author Ryo IGARASHI
+ * @version $Id$
+ */
+public class ADSFetcher implements EntryFetcher {
+    public JPanel getOptionsPanel() {
+        // No option panel
+        return null;
+    }
+
+    public String getHelpPage() {
+        // TODO: No help page
+        return null;
+    }
+
+    public URL getIcon() {
+        return GUIGlobals.getIconUrl("www");
+    }
+
+    public String getKeyName() {
+        return "ADS from ADS-DOI";
+    }
+
+    public String getTitle() {
+        return Globals.menuTitle(getKeyName());
+    }
+
+    public boolean processQuery(String query, ImportInspector dialog, OutputPrinter status) {
+        try {
+            /* Remove "doi:" scheme identifier */
+            query = query.replaceAll("^(doi:|DOI:)", "");
+            /* Allow fetching only 1 key */
+            String key = query;
+            /* Query ADS and load the results into the BibtexDatabase */
+            status.setStatus(Globals.lang("Processing ") + key);
+            BibtexDatabase bd = importADSEntries(key, status);
+            /* Add the entry to the inspection dialog */
+            status.setStatus("Adding fetched entries");
+            if (bd.getEntryCount() > 0) {
+                for (BibtexEntry entry : bd.getEntries()) {
+                    importADSAbstract(key, entry, status);
+                    dialog.addEntry(entry);
+                }
+            }
+        } catch (Exception e) {
+            status.setStatus(Globals.lang("Error while fetching from ADS") + ": " + e.getMessage());
+            e.printStackTrace();
+        }
+        return true;
+    }
+
+    public void stopFetching() {
+    }
+
+    public BibtexDatabase importADSEntries(String key, OutputPrinter status) {
+        String url = constructUrl(key);
+        try {
+            URL ADSUrl = new URL(url + "&data_type=BIBTEX");
+            HttpURLConnection ADSConnection = (HttpURLConnection) ADSUrl.openConnection();
+            ADSConnection.setRequestProperty("User-Agent", "Jabref");
+            InputStream is = ADSConnection.getInputStream();
+            BufferedReader reader = new BufferedReader(new InputStreamReader(is));
+            ParserResult pr = BibtexParser.parse(reader);
+            return pr.getDatabase();
+        } catch (IOException e) {
+            status.showMessage(Globals.lang(
+                "An Exception ocurred while accessing '%0'", url)
+                + "\n\n" + e.toString(), Globals.lang(getKeyName()), JOptionPane.ERROR_MESSAGE);
+        } catch (RuntimeException e) {
+            status.showMessage(Globals.lang(
+                "An Error occurred while fetching from ADS (%0):", new String[]{url})
+                + "\n\n" + e.getMessage(), Globals.lang(getKeyName()), JOptionPane.ERROR_MESSAGE);
+        }
+        return null;
+    }
+
+    public String constructUrl(String key) {
+        return "http://adsabs.harvard.edu/doi/" + key;
+    }
+
+    public void importADSAbstract(String key, BibtexEntry entry, OutputPrinter status) {
+        /* TODO: construct ADSUrl from BibtexEntry */
+        String url = constructUrl(key);
+        try {
+            URL ADSUrl = new URL(url + "&data_type=XML");
+            HttpURLConnection ADSConnection = (HttpURLConnection) ADSUrl.openConnection();
+            ADSConnection.setRequestProperty("User-Agent", "Jabref");
+            BufferedInputStream bis = new BufferedInputStream(ADSConnection.getInputStream());
+
+            XMLInputFactory factory = XMLInputFactory.newInstance();
+            XMLStreamReader reader = factory.createXMLStreamReader(bis);
+            boolean isAbstract = false;
+            String abstractText = "";
+            while (reader.hasNext()) {
+                reader.next();
+                if (reader.isStartElement() &&
+                    reader.getLocalName() == "abstract") {
+                    isAbstract = true;
+                }
+                if (isAbstract && reader.isCharacters()) {
+                    abstractText = abstractText + reader.getText();
+                }
+                if (isAbstract && reader.isEndElement()) {
+                    isAbstract = false;
+                }
+            }
+            abstractText = abstractText.replace("\n", " ");
+            entry.setField("abstract", abstractText);
+        } catch (XMLStreamException e) {
+            status.showMessage(Globals.lang(
+                "An Error occurred while parsing abstract"),
+                Globals.lang(getKeyName()), JOptionPane.ERROR_MESSAGE);
+        } catch (IOException e) {
+            status.showMessage(Globals.lang(
+                "An Exception ocurred while accessing '%0'", url)
+                + "\n\n" + e.toString(), Globals.lang(getKeyName()), JOptionPane.ERROR_MESSAGE);
+        } catch (RuntimeException e) {
+            status.showMessage(Globals.lang(
+                "An Error occurred while fetching from ADS (%0):", new String[]{url})
+                + "\n\n" + e.getMessage(), Globals.lang(getKeyName()), JOptionPane.ERROR_MESSAGE);
+        }
+    }
+}
diff --git a/src/java/net/sf/jabref/imports/BibtexParser.java b/src/java/net/sf/jabref/imports/BibtexParser.java
index a6f2f27..ae13878 100644
--- a/src/java/net/sf/jabref/imports/BibtexParser.java
+++ b/src/java/net/sf/jabref/imports/BibtexParser.java
@@ -131,10 +131,10 @@ public class BibtexParser {
 	 */
 	public static BibtexEntry singleFromString(String bibtexString) {
 		Collection<BibtexEntry> c = fromString(bibtexString);
-		if (c == null){
+		if ((c == null) || (c.size() == 0)) {
 			return null;
 		}
-		return c.iterator().next();
+        return c.iterator().next();
 	}	
 	
 	/**
@@ -814,7 +814,7 @@ public class BibtexParser {
 			//
 			// G\uFFFDr: $_*+.-\/?"^
 			if (!Character.isWhitespace((char) c)
-				&& (Character.isLetterOrDigit((char) c) || ((c != '#') && (c != '{') && (c != '}')
+				&& (Character.isLetterOrDigit((char) c) || (c == ':') || ((c != '#') && (c != '{') && (c != '}')
 					&& (c != '\uFFFD') && (c != '~') && (c != '\uFFFD') && (c != ',') && (c != '=')))) {
 				token.append((char) c);
 			} else {
diff --git a/src/java/net/sf/jabref/imports/CaseKeeper.java b/src/java/net/sf/jabref/imports/CaseKeeper.java
new file mode 100644
index 0000000..6d64f7c
--- /dev/null
+++ b/src/java/net/sf/jabref/imports/CaseKeeper.java
@@ -0,0 +1,61 @@
+/*  Copyright (C) 2012 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.imports;
+
+import java.util.HashMap;
+import java.util.Arrays;
+import java.util.Comparator;
+
+import net.sf.jabref.export.layout.LayoutFormatter;
+
+public class CaseKeeper implements LayoutFormatter {
+    
+    public CaseKeeper() {
+	super();
+    }
+    
+    public String format(String text, String [] listOfWords) {
+	if (text == null)
+	    return null;
+        Arrays.sort(listOfWords, new LengthComparator());  // Seems like the sorting is not working
+        // For each word in the list
+	for (int i = 0; i < listOfWords.length; i++) {
+            // Add {} if the character before is a space, -, /, (, [, or } or if it is at the start of the string but not if it is followed by a }
+	    text = text.replaceAll("(^|[- /\\[(}])" + listOfWords[i] + "($|[^}])","$1\\{" + listOfWords[i] + "\\}$2");
+	}
+	return text;
+    }
+    
+
+    public String format(String text) {
+	if (text == null)
+	    return null;
+        final CaseKeeperList list = new CaseKeeperList();
+	return this.format(text,list.getAll());
+    }
+    
+
+}
+
+class LengthComparator implements Comparator<String>{
+    @Override
+    public int compare(String o1, String o2) {  
+        if (o1.length() > o2.length()) {
+            return 1;
+        }
+        return 0;
+    }
+}
\ No newline at end of file
diff --git a/src/java/net/sf/jabref/imports/CaseKeeperList.java b/src/java/net/sf/jabref/imports/CaseKeeperList.java
new file mode 100644
index 0000000..63a0e61
--- /dev/null
+++ b/src/java/net/sf/jabref/imports/CaseKeeperList.java
@@ -0,0 +1,395 @@
+/*  Copyright (C) 2012 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+
+package net.sf.jabref.imports;
+
+/**
+ * Container class for lists with keywords where the case should be kept independent of bibstyle
+ * 
+ */
+public class CaseKeeperList {
+   
+    // Common words in IEEE Xplore that should always be in the given case
+   public String[] wordListIEEEXplore = new String[]{
+        "1-D",
+        "1D",
+        "2-D",
+        "2D",
+        "3-D",
+        "3D",
+        "3G",
+        "4G",
+        "A/D",
+	"ACM",
+        "AC",
+        "ADC",
+        "ADI",
+	"ADSL",
+        "AES",
+        "ALU",
+        "AMPS",
+        "AM",
+        "ANOVA",
+        "ANSI",
+        "API",
+        "ARQ",
+        "ASIC",
+	"ATM",
+        "AVC",
+        "AlGaAs",
+        "Altera",
+        "BCD",
+        "BCH",
+        "BER",
+        "BIST",
+        "BJT",
+        "BPSK",
+        "Bayes",
+        "Bessel",
+        "BiCMOS",
+        "Bluetooth",
+        "Bragg",
+        "Butterworth",
+        "CAD",
+        "CATV",
+        "CBR",
+        "CDMA",
+        "CDR",
+        "CIC",
+        "CMOS",
+        "CMRR",
+        "CNN",
+	"CORDIC",
+        "CPLD",
+        "CPU",
+        "CRC",
+        "CSD",
+        "CSIT",
+        "CSI",
+        "CSMA",
+        "Carlo",
+        "Cauer",
+        "Chebyshev",
+        "D/A",
+        "DAB",
+	"DAC",
+	"DCT",
+        "DC",
+        "DDFS",
+        "DDR",
+        "DDSM",
+        "DDS",
+        "DEM",
+        "DFE",
+        "DFT",
+        "DLL",
+	"DMT",
+        "DNL",
+        "DOCSIS",
+        "DRAM",
+        "DRM",
+        "DSP",
+	"DST",
+        "DVB-C",
+        "DVB-H",
+        "DVB-S",
+        "DVB-T",
+        "DVB",
+        "DVFS",
+        "DVI",
+        "DWT",
+        "ECG",
+        "ECL",
+        "EDGE",
+        "EEG",
+        "EMC",
+        "EMG",
+        "EMI",
+        "ENOB",
+        "EPROM",
+        "EVM",
+        "FDTD",
+        "FEM",
+        "FER",
+        "FET",
+        "FFT",
+        "FIFO",
+	"FIR",
+        "FMCW",
+	"FM",
+        "FPGA",
+        "FPU",
+        "FRM",
+	"Farrow",
+        "Fourier",
+        "GALS",
+        "GHz",
+        "GIS",
+        "GNSS",
+        "GNU",
+        "GPGPU",
+        "GPRS",
+        "GPS",
+        "GPU",
+        "GSM",
+        "GSPS",
+        "GS",
+        "GaAs",
+        "Galileo",
+        "Gauss",
+        "Gb",
+        "H.264",
+        "HARQ",
+        "HBT",
+        "HDMI",
+        "HDTV",
+        "HD",
+        "HEMT",
+        "HEVC",
+        "HMM",
+        "Haar",
+        "Hadamard",
+        "Hamming",
+        "Hilbert",
+        "I/O",
+        "I/Q",
+        "IBM",
+        "ICA",
+        "IC",
+        "IDCT",
+        "IDFT",
+        "IEEE",
+        "IFFT",
+        "IFIR",
+        "IF",
+        "IGBT",
+        "IIR",
+        "ILP",
+        "INL",
+        "IO",
+        "IPTV",
+        "IP",
+        "IQ",
+        "ISDN",
+        "ISI",
+        "ISM",
+        "InP",
+        "JFET",
+        "JPEG",
+        "JTAG",
+        "Kalman",
+        "Karatsuba",
+        "LAN",
+        "LCD",
+        "LDA",
+        "LDD",
+        "LDI",
+        "QC-LDPC",  // until sorting on length works
+        "LDPC",
+        "LED",
+        "LFSR",
+        "LNA",
+        "LNS",
+        "LSB",
+        "LTE-A",
+        "LTE",
+        "LTI",
+        "LVDC",
+        "LVDS",
+        "Laplace",
+        "MAC",
+        "MANET",
+        "MAP",
+        "MASH",
+        "MCM",
+        "MCU",
+        "MEMS",
+        "MESFET",
+        "MHz",
+        "MILP",
+        "MIMO",
+        "MISO",
+        "MMIC",
+        "MMSE",
+        "MOSFET",
+        "MOS",
+        "MPEG",
+        "MPSoC",
+        "MRI",
+        "MSB",
+        "MSD",
+        "MSPS",
+        "MS",
+        "MTCMOS",
+        "Markov",
+        "Maxwell",
+        "Mb",
+        "Miller",
+        "Monte",
+        "Msps",
+        "NMOS",
+        "NTSC",
+        "Newton",
+        "NoC",
+        "Nyquist",
+        "OFDMA",
+        "OFDM",
+        "OSR",
+        "OTA-C",
+        "OTA",
+        "P2P",
+        "PAL",
+        "PAM",
+        "PAPR",
+        "PCA",
+        "PCI",
+        "PCM",
+        "PC",
+        "PHY",
+        "PID",
+        "PLC",
+        "PLL",
+        "PMOS",
+        "POTS",
+        "PSRR",
+        "PWM",
+        "PowerPC",
+        "QAM",
+        "QPSK",
+        "QRD",
+        "QoS",
+        "RAD",
+        "RAM",
+        "RCS",
+        "RFDAC",
+        "RFE",
+        "RFID",
+        "RF",
+        "RISC",
+        "RLS",
+        "RMS",
+        "RNS",
+        "ROM",
+        "RSA",
+        "RTOS",
+        "Reed",
+        "Remez",
+        "SAR",
+        "SAW",
+        "SC",
+        "SDF",
+        "SDH",
+        "SDRAM",
+        "SDR",
+        "SFDR",
+        "SIMO",
+        "SINAD",
+        "SINR",
+        "SISO",
+        "SNDR",
+        "SNR",
+        "SOI",
+        "SONET",
+        "SPT",
+        "SRAM",
+        "SQNR",
+        "SVD",
+        "SVM",
+        "SerDes",
+        "Shannon",
+        "SiGe",
+        "SoC",
+        "Solomon",
+        "SystemC",
+        "TCP",
+        "TDMA",
+        "TETRA",
+        "TFT",
+        "THD",
+        "TSPC",
+        "TV",
+        "UAV",
+        "UHF",
+        "UMTS",
+        "USRP",
+        "UWB",
+        "VBR",
+        "VCO",
+        "VDD",
+        "VDSL",
+        "VGA",
+        "VHDL",
+        "VHF",
+        "VLIW",
+        "VLSI",
+        "VOD",
+        "VQ",
+        "VSB",
+        "Vdd",
+        "Verilog-AMS",
+        "Verilog-A",
+        "Verilog",
+        "Viterbi",
+        "VoD",
+        "VoIP",
+        "Volterra",
+        "WCDMA",
+        "WDF",
+        "WLAN",
+        "WPAN",
+        "WWW",
+        "Watt",
+        "WiMAX",
+        "Winograd",
+        "XML",
+        "Xilinx",
+        "ZigBee",
+        "dB",
+        "kHz",
+        "kS",
+        "mW",
+        "xDSL"
+   };
+    
+   
+   // List of all keyword lists
+   private String[][] allLists = new String[][] {
+       wordListIEEEXplore
+   };
+   
+   public CaseKeeperList () {
+   
+   };
+   /* Return all lists concatenated
+    * Can be done faster once deciding on Java 6.0
+    * see: http://stackoverflow.com/questions/80476/how-to-concatenate-two-arrays-in-java
+    */
+    public String[] getAll() {
+        int lengh = 0;
+        for (String[] array : allLists) {
+            lengh += array.length;
+        }
+        String[] result = new String[lengh];
+        int pos = 0;
+        for (String[] array : allLists) {
+            for (String element : array) {
+                result[pos] = element;
+                pos++;
+            }
+        }
+        return result;
+    }
+}
diff --git a/src/java/net/sf/jabref/imports/DOItoBibTeXFetcher.java b/src/java/net/sf/jabref/imports/DOItoBibTeXFetcher.java
new file mode 100644
index 0000000..a6a0ca6
--- /dev/null
+++ b/src/java/net/sf/jabref/imports/DOItoBibTeXFetcher.java
@@ -0,0 +1,140 @@
+/*  Copyright (C) 2012 JabRef contributors.
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+package net.sf.jabref.imports;
+
+import java.io.IOException;
+import java.io.FileNotFoundException;
+import java.io.UnsupportedEncodingException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLConnection;
+import java.net.URLEncoder;
+import javax.swing.JOptionPane;
+
+import javax.swing.JPanel;
+
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.GUIGlobals;
+import net.sf.jabref.Globals;
+import net.sf.jabref.OutputPrinter;
+import net.sf.jabref.Util;
+
+
+public class DOItoBibTeXFetcher implements EntryFetcher {
+	
+    private static final String URL_PATTERN = "http://dx.doi.org/%s"; 
+    final CaseKeeper caseKeeper = new CaseKeeper();
+    
+	@Override
+    public void stopFetching() {
+		// nothing needed as the fetching is a single HTTP GET
+    }
+
+	@Override
+    public boolean processQuery(String query, ImportInspector inspector, OutputPrinter status) {
+		String q;
+		try {
+	        q = URLEncoder.encode(query, "UTF-8");
+        } catch (UnsupportedEncodingException e) {
+        	// this should never happen
+        	status.setStatus(Globals.lang("Error"));
+	        e.printStackTrace();
+	        return false;
+        }
+		
+        String urlString = String.format(URL_PATTERN, q);
+
+        // Send the request
+        URL url;
+        try {
+            url = new URL(urlString);
+        } catch (MalformedURLException e) {
+            e.printStackTrace();
+            return false;
+        }
+
+        URLConnection conn;
+        try {
+	        conn = url.openConnection();
+        } catch (IOException e) {
+	        e.printStackTrace();
+	        return false;
+        }
+        
+        conn.setRequestProperty("Accept", "text/bibliography; style=bibtex");
+        
+        
+       String bibtexString;
+        try {
+	        bibtexString = Util.getResults(conn);
+        } catch (FileNotFoundException e) {
+               status.showMessage(Globals.lang("Unknown DOI: '%0'.",
+                        query),
+                        Globals.lang("Get BibTeX entry from DOI"), JOptionPane.INFORMATION_MESSAGE);
+	        return false;
+        }
+        catch (IOException e) {
+	        e.printStackTrace();
+	        return false;
+        }
+        
+       
+        
+        BibtexEntry entry = BibtexParser.singleFromString(bibtexString);
+        
+        // Optionally add curly brackets around key words to keep the case
+        String title = (String)entry.getField("title");
+        if (title != null) {
+            if (Globals.prefs.getBoolean("useCaseKeeperOnSearch")) {
+                title = caseKeeper.format(title);
+            }
+            entry.setField("title", title);
+        }
+        // Do not use the provided key
+        // entry.setField(BibtexFields.KEY_FIELD,null);
+        inspector.addEntry(entry);
+	    return true;
+    }
+
+	@Override
+    public String getTitle() {
+	    return "DOI to BibTeX";
+    }
+
+	@Override
+    public String getKeyName() {
+	    return "DOItoBibTeX";
+    }
+
+	@Override
+    public URL getIcon() {
+		// no special icon for this fetcher available.
+		// Therefore, we return some kind of default icon
+	    return GUIGlobals.getIconUrl("www");
+    }
+
+	@Override
+    public String getHelpPage() {
+	    return "DOItoBibTeXHelp.html";
+    }
+
+	@Override
+    public JPanel getOptionsPanel() {
+		// no additional options available
+	    return null;
+    }
+
+
+}
diff --git a/src/java/net/sf/jabref/imports/DiVAtoBibTeXFetcher.java b/src/java/net/sf/jabref/imports/DiVAtoBibTeXFetcher.java
new file mode 100644
index 0000000..ee23e3a
--- /dev/null
+++ b/src/java/net/sf/jabref/imports/DiVAtoBibTeXFetcher.java
@@ -0,0 +1,143 @@
+/*  Copyright (C) 2012 JabRef contributors.
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+package net.sf.jabref.imports;
+
+import java.io.IOException;
+import java.io.FileNotFoundException;
+import java.io.UnsupportedEncodingException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLConnection;
+import java.net.URLEncoder;
+import javax.swing.JOptionPane;
+
+import javax.swing.JPanel;
+
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.GUIGlobals;
+import net.sf.jabref.Globals;
+import net.sf.jabref.OutputPrinter;
+import net.sf.jabref.Util;
+
+
+public class DiVAtoBibTeXFetcher implements EntryFetcher {
+	
+    private static final String URL_PATTERN = "http://www.diva-portal.org/smash/getreferences?referenceFormat=BibTex&pids=%s"; 
+    private static final String ABSTRACT_URL_PATTERN = "http://www.diva-portal.org/smash/record.jsf?pid=%s"; 
+    final CaseKeeper caseKeeper = new CaseKeeper();
+    
+	@Override
+    public void stopFetching() {
+		// nothing needed as the fetching is a single HTTP GET
+    }
+
+	@Override
+    public boolean processQuery(String query, ImportInspector inspector, OutputPrinter status) {
+		String q;
+		try {
+	        q = URLEncoder.encode(query, "UTF-8");
+        } catch (UnsupportedEncodingException e) {
+        	// this should never happen
+        	status.setStatus(Globals.lang("Error"));
+	        e.printStackTrace();
+	        return false;
+        }
+		
+        String urlString = String.format(URL_PATTERN, q);
+
+        // Send the request
+        URL url;
+        try {
+            url = new URL(urlString);
+        } catch (MalformedURLException e) {
+            e.printStackTrace();
+            return false;
+        }
+
+        URLConnection conn;
+        try {
+	        conn = url.openConnection();
+        } catch (IOException e) {
+	        e.printStackTrace();
+	        return false;
+        }
+        
+        // conn.setRequestProperty("Accept", "text/bibliography; style=bibtex");
+        
+        
+       String bibtexString;
+        try {
+	        bibtexString = Util.getResults(conn);
+        } catch (FileNotFoundException e) {
+               status.showMessage(Globals.lang("Unknown DiVA entry: '%0'.",
+                        query),
+                        Globals.lang("Get BibTeX entry from DiVA"), JOptionPane.INFORMATION_MESSAGE);
+	        return false;
+        }
+        catch (IOException e) {
+	        e.printStackTrace();
+	        return false;
+        }
+
+        BibtexEntry entry = BibtexParser.singleFromString(bibtexString);
+        if (entry != null) {
+            // Optionally add curly brackets around key words to keep the case
+            String title = (String)entry.getField("title");
+            if (title != null) {
+                if (Globals.prefs.getBoolean("useCaseKeeperOnSearch")) {
+                    title = caseKeeper.format(title);
+                }
+                entry.setField("title", title);
+            }
+            // Do not use the provided key
+            // entry.setField(BibtexFields.KEY_FIELD,null);
+            inspector.addEntry(entry);
+
+            return true;
+        }
+        else return false;
+
+    }
+
+	@Override
+    public String getTitle() {
+	    return "DiVA";
+    }
+
+	@Override
+    public String getKeyName() {
+	    return "DiVAtoBibTeX";
+    }
+
+	@Override
+    public URL getIcon() {
+		// no special icon for this fetcher available.
+		// Therefore, we return some kind of default icon
+	    return GUIGlobals.getIconUrl("www");
+    }
+
+	@Override
+    public String getHelpPage() {
+	    return "DiVAtoBibTeXHelp.html";
+    }
+
+	@Override
+    public JPanel getOptionsPanel() {
+		// no additional options available
+	    return null;
+    }
+
+
+}
diff --git a/src/java/net/sf/jabref/imports/EntryFromFileCreatorManager.java b/src/java/net/sf/jabref/imports/EntryFromFileCreatorManager.java
index f594fb0..ffc4d29 100644
--- a/src/java/net/sf/jabref/imports/EntryFromFileCreatorManager.java
+++ b/src/java/net/sf/jabref/imports/EntryFromFileCreatorManager.java
@@ -8,13 +8,12 @@ import java.util.List;
 
 import javax.swing.event.ChangeEvent;
 import javax.swing.event.ChangeListener;
+import javax.swing.undo.CompoundEdit;
+import javax.swing.undo.UndoManager;
 
-import net.sf.jabref.BibtexDatabase;
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.BibtexEntryType;
-import net.sf.jabref.JabRefPreferences;
-import net.sf.jabref.Util;
+import net.sf.jabref.*;
 import net.sf.jabref.external.ExternalFileType;
+import net.sf.jabref.undo.UndoableInsertEntry;
 
 /**
  * The class EntryFromFileCreatorManager manages entry creators. 
@@ -89,33 +88,37 @@ public final class EntryFromFileCreatorManager {
 	 * @param files
 	 * @param database
 	 * @param entryType
-	 * @param changeListener
 	 * @return List of unexcpected import event messages including failures.
 	 */
 	public List<String> addEntrysFromFiles(List<File> files,
 			BibtexDatabase database, BibtexEntryType entryType,
 			boolean generateKeywordsFromPathToFile) {
-		return addEntrysFromFiles(files, database, entryType,
-				generateKeywordsFromPathToFile, null);
+        List<String> importGUIMessages = new LinkedList<String>();
+		addEntrysFromFiles(files, database, null, entryType,
+				generateKeywordsFromPathToFile, null, importGUIMessages);
+        return importGUIMessages;
 	}
 
 	/**
 	 * Tries to add a entry for each file in the List.
 	 * 
 	 * @param files
-	 * @param database
+     * @param database
+     * @param panel
 	 * @param entryType
 	 * @param generateKeywordsFromPathToFile
 	 * @param changeListener
-	 * @return Returns list of unexpected import event - Messages including
-	 *         failures
+     * @param importGUIMessages list of unexpected import event - Messages including
+     	 *         failures
+	 * @return Returns The number of entries added
 	 */
-	public List<String> addEntrysFromFiles(List<File> files,
-			BibtexDatabase database, BibtexEntryType entryType,
+	public int addEntrysFromFiles(List<File> files,
+			BibtexDatabase database, BasePanel panel, BibtexEntryType entryType,
 			boolean generateKeywordsFromPathToFile,
-			ChangeListener changeListener) {
-		List<String> importGUIMessages = new LinkedList<String>();
-		
+			ChangeListener changeListener, List<String> importGUIMessages) {
+
+        int count = 0;
+        CompoundEdit ce = new CompoundEdit();
 		for (File f : files) {
 			EntryFromFileCreator creator = getEntryCreator(f);
 			if (creator != null) {
@@ -141,6 +144,11 @@ public final class EntryFromFileCreatorManager {
 					importGUIMessages.add("Problem importing " + f.getPath()
 							+ ": Insert into BibtexDatabase failed.");
 				}
+                else {
+                    count++;
+                    if (panel != null)
+                        ce.addEdit(new UndoableInsertEntry(database, entry, panel));
+                }
 			} else {
 				importGUIMessages.add("Problem importing " + f.getPath()
 						+ ": Unknown filetype.");
@@ -149,7 +157,14 @@ public final class EntryFromFileCreatorManager {
 			if (changeListener != null)
 				changeListener.stateChanged(new ChangeEvent(this));
 		}
-		return importGUIMessages;
+
+        System.out.println("count = "+count);
+        if ((count > 0) && (panel != null)) {
+            System.out.println("adding edit");
+            ce.end();
+            panel.undoManager.addEdit(ce);
+        }
+		return count;
 
 	}
 
diff --git a/src/java/net/sf/jabref/imports/GeneralFetcher.java b/src/java/net/sf/jabref/imports/GeneralFetcher.java
index 31733ff..9fa9f72 100644
--- a/src/java/net/sf/jabref/imports/GeneralFetcher.java
+++ b/src/java/net/sf/jabref/imports/GeneralFetcher.java
@@ -18,6 +18,8 @@ package net.sf.jabref.imports;
 import java.awt.*;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
+import java.util.Arrays;
+import java.util.Comparator;
 import java.util.List;
 
 import javax.swing.*;
@@ -31,6 +33,7 @@ import net.sf.jabref.JabRefFrame;
 import net.sf.jabref.SidePaneComponent;
 import net.sf.jabref.SidePaneManager;
 import net.sf.jabref.Util;
+import net.sf.jabref.gui.FetcherPreviewDialog;
 import net.sf.jabref.gui.ImportInspectionDialog;
 
 /**
@@ -69,10 +72,11 @@ public class GeneralFetcher extends SidePaneComponent implements ActionListener
         this.sidePaneManager = p0;
         this.frame = frame;
         fetcherArray = fetchers.toArray(new EntryFetcher[fetchers.size()]);
+        Arrays.sort(fetcherArray, new EntryFetcherComparator());
         //JLabel[] choices = new JLabel[fetchers.size()];
-        String[] choices = new String[fetchers.size()];
-        for (int i=0; i<fetchers.size(); i++) {
-            choices[i] = fetchers.get(i).getTitle();
+        String[] choices = new String[fetcherArray.length];
+        for (int i=0; i<fetcherArray.length; i++) {
+            choices[i] = fetcherArray[i].getTitle();
             //choices[i] = new JLabel(fetchers.get(i).getTitle(), new ImageIcon(fetchers.get(i).getIcon()),
             //        JLabel.HORIZONTAL);
             /*if (fetchers.get(i).getOptionsPanel() != null)
@@ -200,26 +204,80 @@ public class GeneralFetcher extends SidePaneComponent implements ActionListener
     }
 
     public void actionPerformed(ActionEvent e) {
-        if (tf.getText().trim().length() == 0)
-            return;
-        final ImportInspectionDialog dialog = new ImportInspectionDialog(frame, frame.basePanel(),
-                BibtexFields.DEFAULT_INSPECTION_FIELDS, activeFetcher.getTitle(), false);
-        dialog.addCallBack(activeFetcher);
-        Util.placeDialog(dialog, frame);
-        dialog.setVisible(true);
-        
-        new Thread(new Runnable(){
-            public void run(){
-                
-                if (activeFetcher.processQuery(tf.getText().trim(), dialog, dialog)){
-                    dialog.entryListComplete();
-                } else {
-                    dialog.dispose();
-                }
-            }
-        }).start();
+        if (tf.getText().trim().length() == 0) {    
+	    frame.output(Globals.lang("Please enter a search string")); 
+	    return;
+	}
+
+	if(frame.basePanel() == null) {
+	    frame.output(Globals.lang("Please open or start a new database before searching")); 
+	    return;
+	} 
+
+        // We have two categories of fetchers. One category can show previews first and ask the
+        // user which ones to download:
+	if (activeFetcher instanceof PreviewEntryFetcher) {
+	    frame.output(Globals.lang("Searching..."));
+	    frame.setProgressBarIndeterminate(true);
+	    frame.setProgressBarVisible(true);
+	    final PreviewEntryFetcher pFetcher = (PreviewEntryFetcher)activeFetcher;
+	    final FetcherPreviewDialog dialog = new FetcherPreviewDialog(frame,
+									 pFetcher.getWarningLimit(), pFetcher.getPreferredPreviewHeight());
+	    new Thread(new Runnable(){
+		    public void run(){
+			final boolean result = pFetcher.processQueryGetPreview(tf.getText().trim(), dialog, dialog);
+			SwingUtilities.invokeLater(new Runnable() {
+				public void run() {
+				    frame.setProgressBarVisible(false);
+				    frame.output("");
+				    if (!result)
+					return;
+				    dialog.setLocationRelativeTo(frame);
+				    dialog.setVisible(true);
+				    if (dialog.isOkPressed()) {
+					final ImportInspectionDialog d2 = new ImportInspectionDialog(frame, frame.basePanel(),
+												     BibtexFields.DEFAULT_INSPECTION_FIELDS, activeFetcher.getTitle(), false);
+					d2.addCallBack(activeFetcher);
+					Util.placeDialog(d2, frame);
+					d2.setVisible(true);
+					new Thread(new Runnable() {
+						public void run() {
+						    pFetcher.getEntries(dialog.getSelection(), d2);
+						    d2.entryListComplete();
+						}
+					    }).start();
+					
+				    }
+				}
+			    });
+			
+			
+		    }
+		}).start();
+	}
+	
+	// The other category downloads the entries first, then asks the user which ones to keep:
+	else {
+	    final ImportInspectionDialog dialog = new ImportInspectionDialog(frame, frame.basePanel(),
+									     BibtexFields.DEFAULT_INSPECTION_FIELDS, activeFetcher.getTitle(), false);
+	    dialog.addCallBack(activeFetcher);
+	    Util.placeDialog(dialog, frame);
+	    dialog.setVisible(true);
+	    
+	    new Thread(new Runnable(){
+		    public void run(){
+			
+			if (activeFetcher.processQuery(tf.getText().trim(), dialog, dialog)){
+			    dialog.entryListComplete();
+			} else {
+			    dialog.dispose();
+			}
+		    }
+		}).start();
+	}
     }
 
+
     class FetcherAction extends AbstractAction {
         public FetcherAction() {
             super(Globals.lang("Web search"), GUIGlobals.getImage("www"));
@@ -251,4 +309,10 @@ public class GeneralFetcher extends SidePaneComponent implements ActionListener
         super.componentOpening();
         Globals.prefs.putBoolean("webSearchVisible", Boolean.TRUE);
     }
+
+    class EntryFetcherComparator implements Comparator<EntryFetcher> {
+        public int compare(EntryFetcher entryFetcher, EntryFetcher entryFetcher1) {
+            return entryFetcher.getTitle().compareTo(entryFetcher1.getTitle());
+        }
+    }
 }
diff --git a/src/java/net/sf/jabref/imports/GoogleScholarFetcher.java b/src/java/net/sf/jabref/imports/GoogleScholarFetcher.java
index 78cde81..f6c5bb1 100644
--- a/src/java/net/sf/jabref/imports/GoogleScholarFetcher.java
+++ b/src/java/net/sf/jabref/imports/GoogleScholarFetcher.java
@@ -16,69 +16,104 @@
 package net.sf.jabref.imports;
 
 import net.sf.jabref.*;
+import net.sf.jabref.gui.FetcherPreviewDialog;
 import net.sf.jabref.net.URLDownload;
 import net.sf.jabref.util.NameListNormalizer;
 
 import javax.swing.*;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
+import java.io.*;
+import java.net.MalformedURLException;
 import java.net.URL;
 import java.net.URLEncoder;
-import java.util.ArrayList;
-import java.util.List;
+import java.util.*;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
 
-public class GoogleScholarFetcher implements EntryFetcher {
+public class GoogleScholarFetcher implements PreviewEntryFetcher {
 
-    protected static int MAX_PAGES_TO_LOAD = 8;
+    private boolean hasRunConfig = false;
+    private boolean clearKeys = true; // Should we clear the keys so new ones can be generated?
+    protected static int MAX_ENTRIES_TO_LOAD = 50;
     final static String QUERY_MARKER = "___QUERY___";
     final static String URL_START = "http://scholar.google.com";
+    final static String URL_SETTING = "http://scholar.google.com/scholar_settings";
+    final static String URL_SETPREFS = "http://scholar.google.com/scholar_setprefs";
     final static String SEARCH_URL = URL_START+"/scholar?q="+QUERY_MARKER
             +"&hl=en&btnG=Search";
 
-    final static Pattern CITE_LINK_PATTERN = Pattern.compile("<div class=gs_r><h3 class=\"gs_rt\"><a href=\"([^\"]*)\">");
-    final static Pattern NEXT_PAGE_PATTERN = Pattern.compile(
-            "<a href=\"([^\"]*)\"><span class=\"SPRITE_nav_next\"> </span><br><span style=\".*\">Next</span></a>");
+    final static Pattern BIBTEX_LINK_PATTERN = Pattern.compile("<a href=\"([^\"]*)\">[A-Za-z ]*BibTeX");
+    final static Pattern TITLE_START_PATTERN = Pattern.compile("<div class=\"gs_ri\">");
+    final static Pattern LINK_PATTERN = Pattern.compile("<h3 class=\"gs_rt\"><a href=\"([^\"]*)\">");
+    final static Pattern TITLE_END_PATTERN = Pattern.compile("<div class=\"gs_fl\">");
+
+    protected HashMap<String,String> entryLinks = new HashMap<String, String>();
+    //final static Pattern NEXT_PAGE_PATTERN = Pattern.compile(
+    //        "<a href=\"([^\"]*)\"><span class=\"SPRITE_nav_next\"> </span><br><span style=\".*\">Next</span></a>");
 
     protected boolean stopFetching = false;
 
+
+    public int getWarningLimit() {
+        return 10;
+    }
+
+    public int getPreferredPreviewHeight() {
+        return 100;
+    }
+
     public boolean processQuery(String query, ImportInspector inspector, OutputPrinter status) {
+        return false;
+    }
+
+    public boolean processQueryGetPreview(String query, FetcherPreviewDialog preview, OutputPrinter status) {
+        entryLinks.clear();
         stopFetching = false;
         try {
-            List<String> citations = getCitations(query);
-            int entriesAdded = 0;
-            inspector.setProgress(2, citations.size()+2);
-            int i=0;
-            for (String citation : citations) {
-                if (stopFetching)
-                    break;
-
-                BibtexEntry entry = BibsonomyScraper.getEntry(citation);
-
-                inspector.setProgress((++i)+2, citations.size()+2);
-                if (entry != null) {
-                    inspector.addEntry(entry);
-                    entriesAdded++;
-                }
+            if (!hasRunConfig) {
+                runConfig();
+                hasRunConfig = true;
             }
-
-            if (entriesAdded < citations.size()) {
-                JOptionPane.showMessageDialog(null,
-                        Globals.lang("%0 entries were found, but only %1 of these could be resolved.",
-                                String.valueOf(citations.size()), String.valueOf(entriesAdded)),
-                        Globals.lang("Incomplete search results"), JOptionPane.WARNING_MESSAGE);
+            Map<String, JLabel> citations = getCitations(query);
+            for (String link : citations.keySet()) {
+                preview.addEntry(link, citations.get(link));
             }
 
             return true;
         } catch (IOException e) {
             e.printStackTrace();
+            status.showMessage(Globals.lang("Error fetching from Google Scholar"));
             return false;
         }
     }
 
+    public void getEntries(Map<String, Boolean> selection, ImportInspector inspector) {
+        int toDownload = 0, downloaded = 0;
+        for (String link : selection.keySet()) {
+            boolean isSelected = selection.get(link);
+            if (isSelected) toDownload++;
+        }
+        if (toDownload == 0) return;
+
+        for (String link : selection.keySet()) {
+            if (stopFetching)
+                break;
+            inspector.setProgress(downloaded, toDownload);
+            boolean isSelected = selection.get(link);
+            if (isSelected) {
+                downloaded++;
+                try {
+                    BibtexEntry entry = downloadEntry(link);
+                    inspector.addEntry(entry);
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+
+    }
+
+
     public String getTitle() {
         return "Google Scholar";
     }
@@ -92,7 +127,7 @@ public class GoogleScholarFetcher implements EntryFetcher {
     }
 
     public String getHelpPage() {
-        return "CiteSeerHelp.html";
+        return "GoogleScholarHelp.html";
     }
 
     public JPanel getOptionsPanel() {
@@ -103,49 +138,186 @@ public class GoogleScholarFetcher implements EntryFetcher {
         stopFetching = true;
     }
 
-        /**
+
+    private void save(String filename, String content) throws IOException {
+        BufferedWriter out = new BufferedWriter(new FileWriter(filename));
+        out.write(content);
+        out.close();
+    }
+
+    protected void runConfig() throws IOException {
+        String urlQuery;
+        try {
+            URL url;
+            URLDownload ud;
+            url = new URL("http://scholar.google.com");
+            ud = new URLDownload(url);
+            ud.download();
+            url = new URL(URL_SETTING);
+            ud = new URLDownload(url);
+            ud.download();
+            //save("setting.html", ud.getStringContent());
+            String settingsPage = ud.getStringContent();
+            // Get the form items and their values from the page:
+            HashMap<String,String> formItems = getFormElements(settingsPage);
+            // Override the important ones:
+            formItems.put("scis", "yes");
+            formItems.put("scisf", "4");
+            formItems.put("num", String.valueOf(MAX_ENTRIES_TO_LOAD));
+            StringBuilder ub = new StringBuilder(URL_SETPREFS+"?");
+            for (Iterator<String> i = formItems.keySet().iterator(); i.hasNext();) {
+                String name = i.next();
+                ub.append(name).append("=").append(formItems.get(name));
+                if (i.hasNext())
+                    ub.append("&");
+            }
+            ub.append("&submit=");
+            // Download the URL to set preferences:
+            URL url_setprefs = new URL(ub.toString());
+            ud = new URLDownload(url_setprefs);
+            ud.download();
+
+        } catch (UnsupportedEncodingException ex) {
+            ex.printStackTrace();
+        }
+    }
+
+    /**
      *
      * @param query
-     *            The search term to query JStor for.
+     *            The search term to query Google Scholar for.
      * @return a list of IDs
      * @throws java.io.IOException
      */
-    protected List<String> getCitations(String query) throws IOException {
+    protected Map<String, JLabel> getCitations(String query) throws IOException {
         String urlQuery;
-        ArrayList<String> ids = new ArrayList<String>();
+        LinkedHashMap<String, JLabel> res = new LinkedHashMap<String, JLabel>();
         try {
             urlQuery = SEARCH_URL.replace(QUERY_MARKER, URLEncoder.encode(query, "UTF-8"));
             int count = 1;
             String nextPage = null;
-            while (((nextPage = getCitationsFromUrl(urlQuery, ids)) != null)
-                    && (count < MAX_PAGES_TO_LOAD)) {
+            while (((nextPage = getCitationsFromUrl(urlQuery, res)) != null)
+                    && (count < 2)) {
                 urlQuery = nextPage;
                 count++;
                 if (stopFetching)
                     break;
             }
-            return ids;
+            return res;
         } catch (UnsupportedEncodingException e) {
             throw new RuntimeException(e);
         }
     }
 
-    protected String getCitationsFromUrl(String urlQuery, List<String> ids) throws IOException {
+    protected String getCitationsFromUrl(String urlQuery, Map<String, JLabel> ids) throws IOException {
         URL url = new URL(urlQuery);
         URLDownload ud = new URLDownload(url);
         ud.download();
         String cont = ud.getStringContent();
-        Matcher m = CITE_LINK_PATTERN.matcher(cont);
+        //save("query.html", cont);
+        Matcher m = BIBTEX_LINK_PATTERN.matcher(cont);
+        int lastRegionStart = 0;
         while (m.find()) {
-            ids.add(m.group(1));
+            String link = m.group(1).replaceAll("&", "&");
+            String pText = null;
+            //System.out.println("regionStart: "+m.start());
+            String part = cont.substring(lastRegionStart, m.start());
+            Matcher titleS = TITLE_START_PATTERN.matcher(part);
+            Matcher titleE = TITLE_END_PATTERN.matcher(part);
+            boolean fS = titleS.find();
+            boolean fE = titleE.find();
+            //System.out.println("fs = "+fS+", fE = "+fE);
+            //System.out.println(titleS.end()+" : "+titleE.start());
+            if (fS && fE) {
+                if (titleS.end() < titleE.start()) {
+                    pText = part.substring(titleS.end(), titleE.start());
+                }
+                else pText = part;
+            }
+            else
+                pText = link;
+
+            pText = pText.replaceAll("\\[PDF\\]", "");
+            JLabel preview = new JLabel("<html>"+pText+"</html>");
+            ids.put(link, preview);
+
+            // See if we can extract the link Google Scholar puts on the entry's title.
+            // That will be set as "url" for the entry if downloaded:
+            Matcher linkMatcher = LINK_PATTERN.matcher(pText);
+            if (linkMatcher.find())
+                entryLinks.put(link, linkMatcher.group(1));
+
+            lastRegionStart = m.end();
         }
 
-        m = NEXT_PAGE_PATTERN.matcher(cont);
+        /*m = NEXT_PAGE_PATTERN.matcher(cont);
         if (m.find()) {
             System.out.println("NEXT: "+URL_START+m.group(1).replaceAll("&", "&"));
             return URL_START+m.group(1).replaceAll("&", "&");
         }
-        else return null;
+        else*/
+        return null;
     }
 
+    protected BibtexEntry downloadEntry(String link) throws IOException {
+        try {
+            URL url = new URL(URL_START+link);
+            URLDownload ud = new URLDownload(url);
+            ud.download();
+            String s = ud.getStringContent();
+            BibtexParser bp = new BibtexParser(new StringReader(s));
+            ParserResult pr = bp.parse();
+            if ((pr != null) && (pr.getDatabase() != null)) {
+                Collection<BibtexEntry> entries = pr.getDatabase().getEntries();
+                if (entries.size() == 1) {
+                    BibtexEntry entry = entries.iterator().next();
+                    if (clearKeys)
+                        entry.setField(BibtexFields.KEY_FIELD, null);
+                    // If the entry's url field is not set, and we have stored an url for this
+                    // entry, set it:
+                    if (entry.getField("url") == null) {
+                        String storedUrl = entryLinks.get(link);
+                        if (storedUrl != null)
+                            entry.setField("url", storedUrl);
+                    }
+                    return entry;
+                }
+                else if (entries.size() == 0) {
+                    System.out.println("No entry found! ("+link+")");
+                    return null;
+                }
+                else {
+                    System.out.println(entries.size()+" entries found! ("+link+")");
+                    return null;
+                }
+            }
+            else {
+                System.out.println("Parser failed! ("+link+")");
+                return null;
+
+            }
+        } catch (MalformedURLException ex) {
+            ex.printStackTrace();
+            return null;
+        }
+    }
+
+
+    static Pattern inputPattern = Pattern.compile("<input type=([^ ]+) name=([^ ]+) value=([^> ]+)");
+    public static HashMap<String,String> getFormElements(String page) {
+        Matcher m = inputPattern.matcher(page);
+        HashMap<String,String> items = new HashMap<String, String>();
+        while (m.find()) {
+            String name = m.group(2);
+            if ((name.length() > 2) && (name.charAt(0) == '"')
+                    && (name.charAt(name.length()-1) == '"'))
+                name = name.substring(1, name.length()-1);
+            String value = m.group(3);
+            if ((value.length() > 2) && (value.charAt(0) == '"')
+                    && (value.charAt(value.length()-1) == '"'))
+                value = value.substring(1, value.length()-1);
+            items.put(name, value);
+        }
+        return items;
+    }
 }
diff --git a/src/java/net/sf/jabref/imports/HTMLConverter.java b/src/java/net/sf/jabref/imports/HTMLConverter.java
index 1d99d7d..e11decf 100644
--- a/src/java/net/sf/jabref/imports/HTMLConverter.java
+++ b/src/java/net/sf/jabref/imports/HTMLConverter.java
@@ -1,4 +1,4 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
+/*  Copyright (C) 2003-2012 JabRef contributors.
     This program is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
     the Free Software Foundation; either version 2 of the License, or
@@ -21,33 +21,562 @@ import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
 import net.sf.jabref.export.layout.LayoutFormatter;
+import net.sf.jabref.Globals;
 
-/**
- * Created by IntelliJ IDEA.
- * User: alver
- * Date: Mar 26, 2006
- * Time: 8:05:08 PM
- * To change this template use File | Settings | File Templates.
- */
 public class HTMLConverter implements LayoutFormatter {
-	private HashMap<String, String> escapedSymbols = new HashMap<String, String>();
+
+    /*   Portions © International Organization for Standardization 1986:
+     Permission to copy in any form is granted for use with
+     conforming SGML systems and applications as defined in
+     ISO 8879, provided this notice is included in all copies.
+    */
+
+
+	// most of the LaTeX commands can be read at http://en.wikibooks.org/wiki/LaTeX/Accents
+	// The symbols can be looked at http://www.fileformat.info/info/unicode/char/a4/index.htm. Replace "a4" with the U+ number
+	// http://detexify.kirelabs.org/classify.html and http://www.ctan.org/tex-archive/info/symbols/comprehensive/ might help to find the right LaTeX command
+        // http://llg.cubic.org/docs/ent2latex.html and http://www.w3.org/TR/xml-entity-names/byalpha.html are also useful
+    
+    
+    // An array of arrays of strings in the format:
+    // {"decimal number of HTML entity", "text HTML entity", "corresponding LaTeX command"}
+    // Leaving a field empty is OK as it then will not be included
+    private String[][] conversionList = new String[][]{
+        {"160", "nbsp", "\\{~\\}"}, // no-break space = non-breaking space, 
+        //                                 U+00A0 ISOnum 
+        {"161", "iexcl", "\\\\textexclamdown"}, // inverted exclamation mark, U+00A1 ISOnum
+        {"162", "cent", "\\\\textcent"}, // cent sign, U+00A2 ISOnum  
+        {"163", "pound", "\\\\pounds"}, // pound sign, U+00A3 ISOnum
+        {"164", "curren", "\\\\textcurrency"}, // currency sign, U+00A4 ISOnum  
+        {"165", "yen", "\\\\textyen"}, // yen sign = yuan sign, U+00A5 ISOnum  
+        {"166", "brvbar", "\\\\textbrokenbar"}, // broken bar = broken vertical bar, 
+        //                                 U+00A6 ISOnum 
+        {"167", "sect", "\\{\\\\S\\}"}, // section sign, U+00A7 ISOnum  
+        {"168", "uml", "\\\\\"\\{\\}"}, // diaeresis = spacing diaeresis, 
+        //                                 U+00A8 ISOdia 
+        {"169", "copy", "\\\\copyright"}, // copyright sign, U+00A9 ISOnum
+        {"170", "ordf", "\\\\textordfeminine"}, // feminine ordinal indicator, U+00AA ISOnum
+        {"171", "laquo", "\\\\guillemotleft"}, // left-pointing double angle quotation mark
+        //                                 = left pointing guillemet, U+00AB ISOnum 
+        {"172", "not", "\\$\\\\neg\\$"}, // not sign, U+00AC ISOnum  
+        {"173", "shy", "\\\\-"}, // soft hyphen = discretionary hyphen, 
+        //                                 U+00AD ISOnum 
+        {"174", "reg", "\\\\textregistered"}, // registered sign = registered trade mark sign,
+        //                                 U+00AE ISOnum 
+        {"175", "macr", "\\\\=\\{\\}"}, // macron = spacing macron = overline 
+        //                                 = APL overbar, U+00AF ISOdia 
+        {"176", "deg", "\\$\\\\deg\\$"}, // degree sign, U+00B0 ISOnum  
+        {"177", "plusmn", "\\$\\\\pm\\$"}, // plus-minus sign = plus-or-minus sign, 
+        //                                 U+00B1 ISOnum 
+        {"178", "sup2", "\\$\\^2\\$"}, // superscript two = superscript digit two 
+        //                                 = squared, U+00B2 ISOnum 
+        {"179", "sup3", "\\$\\^3\\$"}, // superscript three = superscript digit three 
+        //                                 = cubed, U+00B3 ISOnum 
+        {"180", "acute", "\\\\'\\{\\}"}, // acute accent = spacing acute, 
+        //                                 U+00B4 ISOdia 
+        {"181", "micro", "\\$\\\\mu\\$"}, // micro sign, U+00B5 ISOnum  
+        {"182", "para", "\\{\\\\P\\}"}, // pilcrow sign = paragraph sign, 
+        //                                 U+00B6 ISOnum 
+        {"183", "middot", "\\$\\\\cdot\\$"}, // middle dot = Georgian comma 
+        //                                 = Greek middle dot, U+00B7 ISOnum 
+        {"184", "cedil", "\\\\c\\{\\}"}, // cedilla = spacing cedilla, U+00B8 ISOdia  
+        {"185", "sup1", "\\\\textsuperscript\\{1\\}"}, // superscript one = superscript digit one,
+        //                                 U+00B9 ISOnum 
+        {"186", "ordm", "\\\\textordmasculine"}, // masculine ordinal indicator,
+        //                                 U+00BA ISOnum 
+        {"187", "raquo", "\\\\guillemotright"}, // right-pointing double angle quotation mark
+        //                                 = right pointing guillemet, U+00BB ISOnum 
+        {"188", "frac14", "\\$\\sfrac\\{1\\}\\{4\\}\\$"}, // vulgar fraction one quarter 
+        //                                 = fraction one quarter, U+00BC ISOnum 
+        {"189", "frac12", "\\$\\sfrac\\{1\\}\\{2\\}\\$"}, // vulgar fraction one half 
+        //                                 = fraction one half, U+00BD ISOnum 
+        {"190", "frac34", "\\$\\sfrac\\{3\\}\\{4\\}\\$"}, // vulgar fraction three quarters 
+        //                                 = fraction three quarters, U+00BE ISOnum 
+        {"191", "iquest", "\\\\textquestiondown"}, // inverted question mark 
+        //                                 = turned question mark, U+00BF ISOnum 
+        {"192", "Agrave", "\\\\`\\{A\\}"}, // latin capital letter A with grave
+        //                                 = latin capital letter A grave,
+        //                                 U+00C0 ISOlat1 
+        {"193", "Aacute", "\\\\'\\{A\\}"}, // latin capital letter A with acute, 
+        //                                 U+00C1 ISOlat1 
+        {"194", "Acirc", "\\\\\\^\\{A\\}"}, // latin capital letter A with circumflex, 
+        //                                 U+00C2 ISOlat1 
+        {"195", "Atilde", "\\\\~\\{A\\}"}, // latin capital letter A with tilde, 
+        //                                 U+00C3 ISOlat1 
+        {"196", "Auml", "\\\"\\{A\\}"}, // latin capital letter A with diaeresis, 
+        //                                 U+00C4 ISOlat1 
+        {"197", "Aring", "\\{\\\\AA\\}"}, // latin capital letter A with ring above 
+        //                                 = latin capital letter A ring,
+        //                                 U+00C5 ISOlat1 
+        {"198", "AElig", "\\{\\\\AE\\}"}, // latin capital letter AE 
+        //                                 = latin capital ligature AE,
+        //                                 U+00C6 ISOlat1 
+        {"199", "Ccedil", "\\\\c\\{C\\}"}, // latin capital letter C with cedilla,
+        //                                 U+00C7 ISOlat1 
+        {"200", "Egrave", "\\\\`\\{E\\}"}, // latin capital letter E with grave,
+        //                                 U+00C8 ISOlat1 
+        {"201", "Eacute", "\\\\'\\{E\\}"}, // latin capital letter E with acute, 
+        //                                 U+00C9 ISOlat1 
+        {"202", "Ecirc", "\\\\\\^\\{E\\}"}, // latin capital letter E with circumflex, 
+        //                                 U+00CA ISOlat1 
+        {"203", "Euml", "\\\\\"\\{E\\}"}, // latin capital letter E with diaeresis, 
+        //                                 U+00CB ISOlat1 
+        {"204", "Igrave", "\\\\`\\{I\\}"}, // latin capital letter I with grave,
+        //                                 U+00CC ISOlat1 
+        {"205", "Iacute", "\\\\'\\{I\\}"}, // latin capital letter I with acute, 
+        //                                 U+00CD ISOlat1 
+        {"206", "Icirc", "\\\\\\^\\{I\\}"}, // latin capital letter I with circumflex, 
+        //                                 U+00CE ISOlat1 
+        {"207", "Iuml", "\\\\\"\\{I\\}"}, // latin capital letter I with diaeresis, 
+        //                                 U+00CF ISOlat1 
+        {"208", "ETH", "\\{\\\\DH\\}"}, // latin capital letter ETH, U+00D0 ISOlat1  
+        {"209", "Ntilde", "\\\\~\\{N\\}"}, // latin capital letter N with tilde, 
+        //                                 U+00D1 ISOlat1 
+        {"210", "Ograve", "\\\\`\\{O\\}"}, // latin capital letter O with grave,
+        //                                 U+00D2 ISOlat1 
+        {"211", "Oacute", "\\\\'\\{O\\}"}, // latin capital letter O with acute, 
+        //                                 U+00D3 ISOlat1 
+        {"212", "Ocirc", "\\\\\\^\\{O\\}"}, // latin capital letter O with circumflex, 
+        //                                 U+00D4 ISOlat1 
+        {"213", "Otilde", "\\\\~\\{O\\}"}, // latin capital letter O with tilde, 
+        //                                 U+00D5 ISOlat1 
+        {"214", "Ouml", "\\\\\"\\{O\\}"}, // latin capital letter O with diaeresis, 
+        //                                 U+00D6 ISOlat1 
+        {"215", "times", "\\$\\\\times\\$"}, // multiplication sign, U+00D7 ISOnum  
+        {"216", "Oslash", "\\{\\\\O\\{\\}\\}"}, // latin capital letter O with stroke 
+        //                                 = latin capital letter O slash,
+        //                                 U+00D8 ISOlat1 
+        {"217", "Ugrave", "\\\\`\\{U\\}"}, // latin capital letter U with grave,
+        //                                 U+00D9 ISOlat1 
+        {"218", "Uacute", "\\\\'\\{U\\}"}, // latin capital letter U with acute, 
+        //                                 U+00DA ISOlat1 
+        {"219", "Ucirc", "\\\\\\^\\{U\\}"}, // latin capital letter U with circumflex, 
+        //                                 U+00DB ISOlat1 
+        {"220", "Uuml", "\\\\\"\\{U\\}"}, // latin capital letter U with diaeresis, 
+        //                                 U+00DC ISOlat1 
+        {"221", "Yacute", "\\\\'\\{Y\\}"}, // latin capital letter Y with acute, 
+        //                                 U+00DD ISOlat1 
+        {"222", "THORN", "\\{\\\\TH\\}"}, // latin capital letter THORN, 
+        //                                 U+00DE ISOlat1 
+        {"223", "szlig", "\\\\ss\\{\\}"}, // latin small letter sharp s = ess-zed,
+        //                                 U+00DF ISOlat1 
+        {"224", "agrave", "\\\\`\\{a\\}"}, // latin small letter a with grave
+        //                                 = latin small letter a grave,
+        //                                 U+00E0 ISOlat1 
+        {"225", "aacute", "\\\\'\\{a\\}"}, // latin small letter a with acute, 
+        //                                 U+00E1 ISOlat1 
+        {"226", "acirc", "\\\\\\^\\{a\\}"}, // latin small letter a with circumflex, 
+        //                                 U+00E2 ISOlat1 
+        {"227", "atilde", "\\\\~\\{a\\}"}, // latin small letter a with tilde, 
+        //                                 U+00E3 ISOlat1 
+        {"228", "auml", "\\\\\"\\{a\\}"}, // latin small letter a with diaeresis, 
+        //                                 U+00E4 ISOlat1 
+        {"229", "aring", "\\{\\\\aa\\}"}, // latin small letter a with ring above 
+        //                                 = latin small letter a ring,
+        //                                 U+00E5 ISOlat1 
+        {"230", "aelig", "\\{\\\\ae\\}"}, // latin small letter ae 
+        //                                 = latin small ligature ae, U+00E6 ISOlat1 
+        {"231", "ccedil", "\\\\c\\{c\\}"}, // latin small letter c with cedilla,
+        //                                 U+00E7 ISOlat1 
+        {"232", "egrave", "\\\\`\\{e\\}"}, // latin small letter e with grave,
+        //                                 U+00E8 ISOlat1 
+        {"233", "eacute", "\\\\'\\{e\\}"}, // latin small letter e with acute, 
+        //                                 U+00E9 ISOlat1 
+        {"234", "ecirc", "\\\\\\^\\{e\\}"}, // latin small letter e with circumflex, 
+        //                                 U+00EA ISOlat1 
+        {"235", "euml", "\\\\\"\\{e\\}"}, // latin small letter e with diaeresis, 
+        //                                 U+00EB ISOlat1 
+        {"236", "igrave", "\\\\`\\{i\\}"}, // latin small letter i with grave,
+        //                                 U+00EC ISOlat1 
+        {"237", "iacute", "\\\\'\\{i\\}"}, // latin small letter i with acute, 
+        //                                 U+00ED ISOlat1 
+        {"238", "icirc", "\\\\\\^\\{i\\}"}, // latin small letter i with circumflex, 
+        //                                 U+00EE ISOlat1 
+        {"239", "iuml", "\\\\\"\\{\\\\i\\}"}, // latin small letter i with diaeresis, 
+        //                                 U+00EF ISOlat1 
+        {"240", "eth", "\\\\dh"}, // latin small letter eth, U+00F0 ISOlat1  
+        {"241", "ntilde", "\\\\~\\{n\\}"}, // latin small letter n with tilde, 
+        //                                 U+00F1 ISOlat1 
+        {"242", "ograve", "\\\\`\\{o\\}"}, // latin small letter o with grave,
+        //                                 U+00F2 ISOlat1 
+        {"243", "oacute", "\\\\'\\{o\\}"}, // latin small letter o with acute, 
+        //                                 U+00F3 ISOlat1 
+        {"244", "ocirc", "\\\\\\^\\{o\\}"}, // latin small letter o with circumflex, 
+        //                                 U+00F4 ISOlat1 
+        {"245", "otilde", "\\\\~\\{o\\}"}, // latin small letter o with tilde, 
+        //                                 U+00F5 ISOlat1 
+        {"246", "ouml", "\\\\\"\\{o\\}"}, // latin small letter o with diaeresis, 
+        //                                 U+00F6 ISOlat1 
+        {"247", "divide", "\\$\\\\div\\$"}, // division sign, U+00F7 ISOnum  
+        {"248", "oslash", "\\\\o\\{\\}"}, // latin small letter o with stroke, 
+        //                                 = latin small letter o slash,
+        //                                 U+00F8 ISOlat1 
+        {"249", "ugrave", "\\\\`\\{u\\}"}, // latin small letter u with grave,
+        //                                 U+00F9 ISOlat1 
+        {"250", "uacute", "\\\\'\\{u\\}"}, // latin small letter u with acute, 
+        //                                 U+00FA ISOlat1 
+        {"251", "ucirc", "\\\\\\^\\{u\\}"}, // latin small letter u with circumflex, 
+        //                                 U+00FB ISOlat1 
+        {"252", "uuml", "\\\\\"\\{u\\}"}, // latin small letter u with diaeresis, 
+        //                                 U+00FC ISOlat1 
+        {"253", "yacute", "\\\\'\\{y\\}"}, // latin small letter y with acute, 
+        //                                 U+00FD ISOlat1 
+        {"254", "thorn", "\\{\\\\th\\}"}, // latin small letter thorn, 
+        //                                 U+00FE ISOlat1 
+        {"255", "yuml", "\\\\\"\\{y\\}"}, // latin small letter y with diaeresis, 
+        //                                 U+00FF ISOlat1 
+        {"402", "fnof", "\\$f\\$"}, // latin small f with hook = function 
+        //                                   = florin, U+0192 ISOtech 
+
+        /* Greek */
+        {"913", "Alpha", "\\{\\$\\\\Alpha\\$\\}"}, // greek capital letter alpha, U+0391  
+        {"914", "Beta", "\\{\\$\\\\Beta\\$\\}"}, // greek capital letter beta, U+0392  
+        {"915", "Gamma", "\\{\\$\\\\Gamma\\$\\}"}, // greek capital letter gamma, 
+        //                                   U+0393 ISOgrk3 
+        {"916", "Delta", "\\{\\$\\\\Delta\\$\\}"}, // greek capital letter delta, 
+        //                                   U+0394 ISOgrk3 
+        {"917", "Epsilon", "\\{\\$\\\\Epsilon\\$\\}"}, // greek capital letter epsilon, U+0395  
+        {"918", "Zeta", "\\{\\$\\\\Zeta\\$\\}"}, // greek capital letter zeta, U+0396  
+        {"919", "Eta", "\\{\\$\\\\Eta\\$\\}"}, // greek capital letter eta, U+0397  
+        {"920", "Theta", "\\{\\$\\\\Theta\\$\\}"}, // greek capital letter theta, 
+        //                                   U+0398 ISOgrk3 
+        {"921", "Iota", "\\{\\$\\\\Iota\\$\\}"}, // greek capital letter iota, U+0399  
+        {"922", "Kappa", "\\{\\$\\\\Kappa\\$\\}"}, // greek capital letter kappa, U+039A  
+        {"923", "Lambda", "\\{\\$\\\\Lambda\\$\\}"}, // greek capital letter lambda, 
+        //                                   U+039B ISOgrk3 
+        {"924", "Mu", "\\{\\$\\\\Mu\\$\\}"}, // greek capital letter mu, U+039C  
+        {"925", "Nu", "\\{\\$\\\\Nu\\$\\}"}, // greek capital letter nu, U+039D  
+        {"926", "Xi", "\\{\\$\\\\Xi\\$\\}"}, // greek capital letter xi, U+039E ISOgrk3  
+        {"927", "Omicron", "\\{\\$\\\\Omicron\\$\\}"}, // greek capital letter omicron, U+039F  
+        {"928", "Pi", "\\{\\$\\\\Pi\\$\\}"}, // greek capital letter pi, U+03A0 ISOgrk3  
+        {"929", "Rho", "\\{\\$\\\\Rho\\$\\}"}, // greek capital letter rho, U+03A1  
+        /* there is no Sigmaf, and no U+03A2 character either */
+        {"931", "Sigma", "\\{\\$\\\\Sigma\\$\\}"}, // greek capital letter sigma, 
+        //                                   U+03A3 ISOgrk3 
+        {"932", "Tau", "\\{\\$\\\\Tau\\$\\}"}, // greek capital letter tau, U+03A4  
+        {"933", "Upsilon", "\\{\\$\\\\Upsilon\\$\\}"}, // greek capital letter upsilon, 
+        //                                   U+03A5 ISOgrk3 
+        {"934", "Phi", "\\{\\$\\\\Phi\\$\\}"}, // greek capital letter phi, 
+        //                                   U+03A6 ISOgrk3 
+        {"935", "Chi", "\\{\\$\\\\Chi\\$\\}"}, // greek capital letter chi, U+03A7  
+        {"936", "Psi", "\\{\\$\\\\Psi\\$\\}"}, // greek capital letter psi, 
+        //                                   U+03A8 ISOgrk3 
+        {"937", "Omega", "\\{\\$\\\\Omega\\$\\}"}, // greek capital letter omega, 
+        //                                   U+03A9 ISOgrk3 
+
+        {"945", "alpha", "\\$\\\\alpha\\$"}, // greek small letter alpha, 
+        //                                   U+03B1 ISOgrk3 
+        {"946", "beta", "\\$\\\\beta\\$"}, // greek small letter beta, U+03B2 ISOgrk3  
+        {"947", "gamma", "\\$\\\\gamma\\$"}, // greek small letter gamma, 
+        //                                   U+03B3 ISOgrk3 
+        {"948", "delta", "\\$\\\\delta\\$"}, // greek small letter delta, 
+        //                                   U+03B4 ISOgrk3 
+        {"949", "epsilon", "\\$\\\\epsilon\\$"}, // greek small letter epsilon, 
+        //                                   U+03B5 ISOgrk3 
+        {"950", "zeta", "\\$\\\\zeta\\$"}, // greek small letter zeta, U+03B6 ISOgrk3  
+        {"951", "eta", "\\$\\\\eta\\$"}, // greek small letter eta, U+03B7 ISOgrk3  
+        {"952", "theta", "\\$\\\\theta\\$"}, // greek small letter theta, 
+        //                                   U+03B8 ISOgrk3 
+        {"953", "iota", "\\$\\\\iota\\$"}, // greek small letter iota, U+03B9 ISOgrk3  
+        {"954", "kappa", "\\$\\\\kappa\\$"}, // greek small letter kappa, 
+        //                                   U+03BA ISOgrk3 
+        {"955", "lambda", "\\$\\\\lambda\\$"}, // greek small letter lambda, 
+        //                                   U+03BB ISOgrk3 
+        {"956", "mu", "\\$\\\\mu\\$"}, // greek small letter mu, U+03BC ISOgrk3  
+        {"957", "nu", "\\$\\\\nu\\$"}, // greek small letter nu, U+03BD ISOgrk3  
+        {"958", "xi", "\\$\\\\xi\\$"}, // greek small letter xi, U+03BE ISOgrk3  
+        {"959", "omicron", "\\$\\\\omicron\\$"}, // greek small letter omicron, U+03BF NEW  
+        {"960", "pi", "\\$\\\\phi\\$"}, // greek small letter pi, U+03C0 ISOgrk3  
+        {"961", "rho", "\\$\\\\rho\\$"}, // greek small letter rho, U+03C1 ISOgrk3  
+        {"962", "sigmaf", "\\$\\\\varsigma\\$"}, // greek small letter final sigma, 
+        //                                   U+03C2 ISOgrk3 
+        {"963", "sigma", "\\$\\\\sigma\\$"}, // greek small letter sigma, 
+        //                                   U+03C3 ISOgrk3 
+        {"964", "tau", "\\$\\\\tau\\$"}, // greek small letter tau, U+03C4 ISOgrk3  
+        {"965", "upsilon", "\\$\\\\upsilon\\$"}, // greek small letter upsilon, 
+        //                                   U+03C5 ISOgrk3 
+        {"966", "phi", "\\$\\\\phi\\$"}, // greek small letter phi, U+03C6 ISOgrk3  
+        {"967", "chi", "\\$\\\\chi\\$"}, // greek small letter chi, U+03C7 ISOgrk3  
+        {"968", "psi", "\\$\\\\psi\\$"}, // greek small letter psi, U+03C8 ISOgrk3  
+        {"969", "omega", "\\$\\\\omega\\$"}, // greek small letter omega, 
+        //                                   U+03C9 ISOgrk3 
+        {"977", "thetasym", "\\$\\\\vartheta\\$"}, // greek small letter theta symbol, 
+        //                                   U+03D1 NEW 
+        {"978", "upsih", "\\{\\$\\\\Upsilon\\$\\}"}, // greek upsilon with hook symbol, 
+        //                                   U+03D2 NEW 
+        {"982", "piv", "\\$\\\\varphi\\$"}, // greek pi symbol, U+03D6 ISOgrk3  
+
+        /* General Punctuation */
+        {"8226", "bull", "\\$\\\\bullet\\$"}, // bullet = black small circle, 
+        //                                    U+2022 ISOpub  
+        /* bullet is NOT the same as bullet operator, U+2219 */
+        {"8230", "hellip", "\\{\\\\ldots\\}"}, // horizontal ellipsis = three dot leader, 
+        //                                    U+2026 ISOpub  
+        {"8242", "prime", "\\$\\\\prime\\$"}, // prime = minutes = feet, U+2032 ISOtech  
+        {"8243", "Prime", "\\$\\{''\\}\\$"}, // double prime = seconds = inches, 
+        //                                    U+2033 ISOtech 
+        {"8254", "oline", "\\\\=\\{\\}"}, // overline = spacing overscore, 
+        //                                    U+203E NEW 
+        {"8260", "frasl", "/"}, // fraction slash, U+2044 NEW  
+
+        /* Letterlike Symbols */
+        {"8472", "weierp", "\\$\\\\wp\\$"}, // script capital P = power set 
+        //                                    = Weierstrass p, U+2118 ISOamso 
+        {"8465", "image", "\\{\\$\\\\Im\\$\\}"}, // blackletter capital I = imaginary part, 
+        //                                    U+2111 ISOamso 
+        {"8476", "real", "\\{\\$\\\\Re\\$\\}"}, // blackletter capital R = real part symbol, 
+        //                                    U+211C ISOamso 
+        {"8482", "trade", "\\\\texttrademark"}, // trade mark sign, U+2122 ISOnum
+        {"8501", "alefsym", "\\$\\\\aleph\\$"}, // alef symbol = first transfinite cardinal, 
+        //                                    U+2135 NEW 
+        /*    alef symbol is NOT the same as hebrew letter alef,
+         U+05D0 although the same glyph could be used to depict both characters */
+        /* Arrows */
+        {"8592", "larr", "\\$\\\\leftarrow\\$"}, // leftwards arrow, U+2190 ISOnum
+        {"8593", "uarr", "\\$\\\\uparrow\\$"}, // upwards arrow, U+2191 ISOnum
+        {"8594", "rarr", "\\$\\\\rightarrow\\$"}, // rightwards arrow, U+2192 ISOnum
+        {"8595", "darr", "\\$\\\\downarrow\\$"}, // downwards arrow, U+2193 ISOnum
+        {"8596", "harr", "\\$\\\\leftrightarrow\\$"}, // left right arrow, U+2194 ISOamsa  
+        {"8629", "crarr", ""}, // downwards arrow with corner leftwards 
+        //                                    = carriage return, U+21B5 NEW 
+        {"8656", "lArr", "\\{\\$\\\\Leftarrow\\$\\}"}, // leftwards double arrow, U+21D0 ISOtech
+        /*  ISO 10646 does not say that lArr is the same as the 'is implied by' arrow
+         but also does not have any other character for that function. So ? lArr can
+         be used for 'is implied by' as ISOtech suggests */
+        {"8657", "uArr", "\\{\\$\\\\Uparrow\\$\\}"}, // upwards double arrow, U+21D1 ISOamsa
+        {"8658", "rArr", "\\{\\$\\\\Rightarrow\\$\\}"}, // rightwards double arrow,
+        //                                     U+21D2 ISOtech 
+        /*   ISO 10646 does not say this is the 'implies' character but does not have 
+         another character with this function so ?
+         rArr can be used for 'implies' as ISOtech suggests */
+        {"8659", "dArr", "\\{\\$\\\\Downarrow\\$\\}"}, // downwards double arrow, U+21D3 ISOamsa  
+        {"8660", "hArr", "\\{\\$\\\\Leftrightarrow\\$\\}"}, // left right double arrow, 
+        //                                     U+21D4 ISOamsa 
+
+        /* Mathematical Operators */
+        {"8704", "forall", "\\$\\\\forall\\$"}, // for all, U+2200 ISOtech  
+        {"8706", "part", "\\$\\\\partial\\$"}, // partial differential, U+2202 ISOtech
+        {"8707", "exist", "\\$\\\\exists\\$"}, // there exists, U+2203 ISOtech
+        {"8709", "empty", "\\$\\\\emptyset\\$"}, // empty set = null set = diameter,
+        //                                    U+2205 ISOamso 
+        {"8711", "nabla", "\\$\\\\nabla\\$"}, // nabla = backward difference, 
+        //                                    U+2207 ISOtech 
+        {"8712", "isin", "\\$\\\\in\\$"}, // element of, U+2208 ISOtech
+        {"8713", "notin", "\\$\\\\notin\\$"}, // not an element of, U+2209 ISOtech
+        {"8715", "ni", "\\$\\\\ni\\$"}, // contains as member, U+220B ISOtech
+        /* should there be a more memorable name than 'ni'? */
+        {"8719", "prod", "\\$\\\\prod\\$"}, // n-ary product = product sign,
+        //                                    U+220F ISOamsb 
+        /*    prod is NOT the same character as U+03A0 'greek capital letter pi' though
+         the same glyph might be used for both  */
+        {"8721", "sum", "\\$\\\\sum\\$"}, // n-ary sumation, U+2211 ISOamsb  
+        /*    sum is NOT the same character as U+03A3 'greek capital letter sigma'
+         though the same glyph might be used for both */
+        {"8722", "minus", "\\$-\\$"}, // minus sign, U+2212 ISOtech  
+        {"8727", "lowast", "\\$\\\\ast\\$"}, // asterisk operator, U+2217 ISOtech  
+        {"8730", "radic", "\\$\\\\sqrt{}\\$"}, // square root = radical sign, 
+        //                                    U+221A ISOtech 
+        {"8733", "prop", "\\$\\\\propto\\$"}, // proportional to, U+221D ISOtech  
+        {"8734", "infin", "\\$\\\\infty\\$"}, // infinity, U+221E ISOtech  
+        {"8736", "ang", "\\$\\\\angle\\$"}, // angle, U+2220 ISOamso
+        {"8743", "and", "\\$\\\\land\\$"}, // logical and = wedge, U+2227 ISOtech
+        {"8744", "or", "\\$\\\\lor\\$"}, // logical or = vee, U+2228 ISOtech
+        {"8745", "cap", "\\$\\\\cap\\$"}, // intersection = cap, U+2229 ISOtech
+        {"8746", "cup", "\\$\\\\cup\\$"}, // union = cup, U+222A ISOtech
+        {"8747", "int", "\\$\\\\int\\$"}, // integral, U+222B ISOtech
+        {"8756", "there4", "\\$\\\\uptherefore\\$"}, // therefore, U+2234 ISOtech; only in LaTeX package MnSymbol
+        {"8764", "sim", "\\$\\\\sim\\$"}, // tilde operator = varies with = similar to,
+        //                                    U+223C ISOtech 
+        /*  tilde operator is NOT the same character as the tilde, U+007E,
+         although the same glyph might be used to represent both   */
+        {"8773", "cong", "\\$\\\\cong\\$"}, // approximately equal to, U+2245 ISOtech  
+        {"8776", "asymp", "\\$\\\\approx\\$"}, // almost equal to = asymptotic to, 
+        //                                    U+2248 ISOamsr 
+        {"8800", "ne", "\\$\\\\neq\\$"}, // not equal to, U+2260 ISOtech  
+        {"8801", "equiv", "\\$\\\\equiv\\$"}, // identical to, U+2261 ISOtech  
+        {"8804", "le", "\\$\\\\leq\\$"}, // less-than or equal to, U+2264 ISOtech  
+        {"8805", "ge", "\\$\\\\geq\\$"}, // greater-than or equal to, 
+        //                                    U+2265 ISOtech 
+        {"8834", "sub", "\\$\\\\subset\\$"}, // subset of, U+2282 ISOtech  
+        {"8835", "sup", "\\$\\\\supset\\$"}, // superset of, U+2283 ISOtech  
+        /*    note that nsup, 'not a superset of, U+2283' is not covered by the Symbol 
+         font encoding and is not included. Should it be, for symmetry?
+         It is in ISOamsn   */
+        {"8836", "nsub", "\\$\\\\nsubset\\$"}, // not a subset of, U+2284 ISOamsn  
+        {"8838", "sube", "\\$\\\\subseteq\\$"}, // subset of or equal to, U+2286 ISOtech  
+        {"8839", "supe", "\\$\\\\supseteq\\$"}, // superset of or equal to, 
+        //                                    U+2287 ISOtech 
+        {"8853", "oplus", "\\$\\\\oplus\\$"}, // circled plus = direct sum, 
+        //                                    U+2295 ISOamsb 
+        {"8855", "otimes", "\\$\\\\otimes\\$"}, // circled times = vector product,
+        //                                    U+2297 ISOamsb 
+        {"8869", "perp", "\\$\\\\perp\\$"}, // up tack = orthogonal to = perpendicular, 
+        //                                    U+22A5 ISOtech 
+        {"8901", "sdot", "\\$\\\\cdot\\$"}, // dot operator, U+22C5 ISOamsb  
+        /* dot operator is NOT the same character as U+00B7 middle dot */
+        /* Miscellaneous Technical */
+        {"8968", "lceil", "\\$\\\\lceil\\$"}, // left ceiling = apl upstile, 
+        //                                    U+2308 ISOamsc  
+        {"8969", "rceil", "\\$\\\\rceil\\$"}, // right ceiling, U+2309 ISOamsc   
+        {"8970", "lfloor", "\\$\\\\lfloor\\$"}, // left floor = apl downstile, 
+        //                                    U+230A ISOamsc  
+        {"8971", "rfloor", "\\$\\\\rfloor\\$"}, // right floor, U+230B ISOamsc   
+        {"9001", "lang", "\\$\\\\langle\\$"}, // left-pointing angle bracket = bra, 
+        //                                    U+2329 ISOtech 
+        /*    lang is NOT the same character as U+003C 'less than' 
+         or U+2039 'single left-pointing angle quotation mark' */
+        {"9002", "rang", "\\$\\\\rangle\\$"}, // right-pointing angle bracket = ket, 
+        //                                    U+232A ISOtech 
+        /*    rang is NOT the same character as U+003E 'greater than' 
+         or U+203A 'single right-pointing angle quotation mark' */
+        /* Geometric Shapes */
+        {"9674", "loz", "\\$\\\\lozenge\\$"}, // lozenge, U+25CA ISOpub  
+
+        /* Miscellaneous Symbols */
+        {"9824", "spades", "\\$\\\\spadesuit\\$"}, // black spade suit, U+2660 ISOpub  
+        /* black here seems to mean filled as opposed to hollow */
+        {"9827", "clubs", "\\$\\\\clubsuit\\$"}, // black club suit = shamrock, 
+        //                                    U+2663 ISOpub 
+        {"9829", "hearts", "\\$\\\\heartsuit\\$"}, // black heart suit = valentine, 
+        //                                    U+2665 ISOpub 
+        {"9830", "diams", "\\$\\\\diamondsuit\\$"}, // black diamond suit, U+2666 ISOpub  
+        {"34", "quot", "\""}, // quotation mark = APL quote,
+        //                                   U+0022 ISOnum 
+        {"38", "amp", "\\\\&"}, // ampersand, U+0026 ISOnum 
+        {"60", "lt", "\\$<\\$"}, // less-than sign, U+003C ISOnum 
+        {"62", "gt", "\\$>\\$"}, // greater-than sign, U+003E ISOnum 
+
+        /* Latin Extended-A */
+        {"338", "OElig", "\\{\\\\OE\\}"}, // latin capital ligature OE,
+        //                                   U+0152 ISOlat2 
+        {"339", "oelig", "\\{\\\\oe\\}"}, // latin small ligature oe, U+0153 ISOlat2 
+        /* ligature is a misnomer, this is a separate character in some languages */
+        {"352", "Scaron", "\\\\v\\{S\\}"}, // latin capital letter S with caron,
+        //                                   U+0160 ISOlat2 
+        {"353", "scaron", "\\\\v\\{s\\}"}, // latin small letter s with caron,
+        //                                   U+0161 ISOlat2 
+        {"376", "Yuml", "\\\\\"\\{Y\\}"}, // latin capital letter Y with diaeresis,
+        //                                   U+0178 ISOlat2 
+
+        /* Spacing Modifier Letters */
+        {"710", "circ", "\\\\textasciicircum"}, // modifier letter circumflex accent,
+        //                                   U+02C6 ISOpub 
+        {"732", "tilde", "\\\\textasciitilde"}, // small tilde, U+02DC ISOdia 
+
+        /* General Punctuation */
+        {"8194", "ensp", "\\\\hspace\\{0.5em\\}"}, // en space, U+2002 ISOpub  
+        {"8195", "emsp", "\\\\hspace\\{1em\\}"}, // em space, U+2003 ISOpub  
+        {"8201", "thinsp", "\\\\hspace\\{0.167em\\}"}, // thin space, U+2009 ISOpub  
+        {"8204", "zwnj", ""}, // zero width non-joiner, 
+        //                                   U+200C NEW RFC 2070 
+        {"8205", "zwj", ""}, // zero width joiner, U+200D NEW RFC 2070  
+        {"8206", "lrm", ""}, // left-to-right mark, U+200E NEW RFC 2070  
+        {"8207", "rlm", ""}, // right-to-left mark, U+200F NEW RFC 2070  
+        {"8211", "ndash", "--"}, // en dash, U+2013 ISOpub  
+        {"8212", "mdash", "---"}, // em dash, U+2014 ISOpub  
+        {"8216", "lsquo", "\\\\textquoteleft"}, // left single quotation mark, 
+        //                                   U+2018 ISOnum 
+        {"8217", "rsquo", "\\\\textquoteright"}, // right single quotation mark, 
+        //                                   U+2019 ISOnum 
+        {"8218", "sbquo", "\\\\quotesinglbase"}, // single low-9 quotation mark, U+201A NEW  
+        {"8220", "ldquo", "\\\\textquotedblleft"}, // left double quotation mark, 
+        //                                   U+201C ISOnum 
+        {"8221", "rdquo", "\\\\textquotedblright"}, // right double quotation mark, 
+        //                                   U+201D ISOnum 
+        {"8222", "bdquo", "\\\\quotedblbase"}, // double low-9 quotation mark, U+201E NEW  
+        {"8224", "dagger", "\\\\dag"}, // dagger, U+2020 ISOpub  
+        {"8225", "Dagger", "\\\\ddag"}, // double dagger, U+2021 ISOpub  
+        {"8240", "permil", "\\\\textperthousand"}, // per mille sign, U+2030 ISOtech  
+        {"8249", "lsaquo", "\\\\guilsinglleft"}, // single left-pointing angle quotation mark, 
+        //                                   U+2039 ISO proposed 
+        /* lsaquo is proposed but not yet ISO standardized */
+        {"8250", "rsaquo", "\\\\guilsinglright"}, // single right-pointing angle quotation mark, 
+        //                                   U+203A ISO proposed 
+        /* rsaquo is proposed but not yet ISO standardized */
+        {"8364", "euro", "\\\\texteuro"}, // euro sign, U+20AC NEW 
+            
+        /* Manually added */
+        {"37", "percnt", "\\\\%"}, // Percent
+        {"39", "", "'"}, // Apostrophe
+        {"40", "", "("}, // Left bracket
+        {"41", "", ")"}, // Right bracket
+        {"43", "plus", "\\+"}, // Plus
+        {"95", "lowbar", "\\\\_"}, // Underscore
+        {"123", "lbrace", "\\\\\\{"}, // Left curly bracket
+        {"125", "rbrace", "\\\\\\}"}, // Right curly bracket
+     // {"141", "", ""}, // Reverse line feed
+        {"146", "", "'"}, // Private use two ???
+        {"264", "Ccirc", "\\\\\\^\\{C\\}"}, // capital C with circumflex
+        {"305", "inodot", "\\{\\\\i\\}"},    // Small i without the dot
+        {"321", "Lstrok", "\\{\\\\L\\}"},    // upper case l with stroke
+        {"322", "lstrok", "\\{\\\\l\\}"},    // lower case l with stroke
+        {"536", "", "\\\\cb\\{S\\}"},    // capital letter S with comma below, require combelow
+        {"537", "", "\\\\cb\\{s\\}"},    // small letter S with comma below, require combelow
+        {"769", "", "'"},    // Can be solved better as it is a combining accent
+        {"774", "", "\\\\u\\{\\}"},    // FIX: Breve - Can be solved better as it is a combining accent
+        {"775", "", "\\\\\\.\\{\\}"},    // FIX: Dot above - Can be solved better as it is a combining accent
+        {"776", "", "\\\\\"\\{\\}"},    // FIX: Diaeresis - Can be solved better as it is a combining accent
+        {"780", "", "\\\\v\\{\\}"},    // FIX: Caron - Can be solved better as it is a combining accent
+        {"807", "", "\\\\c\\{\\}"},    // FIX: Cedilla - Can be solved better as it is a combining accent
+        {"949", "epsi", "\\$\\\\epsilon\\$"},    // Epsilon - double check
+        {"1013", "epsiv", "\\$\\\\varepsilonup\\$"},    // lunate epsilon, requires txfonts
+     // {"2013", "", ""},    // NKO letter FA
+        {"8208", "hyphen", "-"},    // Hyphen
+        {"8459", "Hscr", "\\$\\\\mathcal\\{H\\}\\$"}, // script capital H -- possibly use \mathscr
+        {"8460", "", "\\$\\\\mathbb\\{H\\}\\$"}, // black letter capital H -- requires e.g. amsfonts
+        {"8466", "Lscr", "\\$\\\\mathcal\\{L\\}\\$"}, // script capital L -- possibly use \mathscr
+        {"8467", "lscr", "\\{\\\\ell\\}"}, // script small l 
+        {"8491", "angst", "\\{\\\\AA\\}"}, // Angstrom 
+        {"8729", "bullet", "\\$\\\\bullet\\$"},    // Bullet operator
+        {"8776", "ap", "\\$\\\\approx\\$"}, // almost equal to = asymptotic to, 
+        {"8810", "ll", "\\$\\\\ll\\$"}, // Much less than 
+        {"8811", "gg", "\\$\\\\gg\\$"}, // Much greater than 
+        {"9426", "", "\\\\copyright"}, // circled small letter C
+        {"9653", "utri", "\\$\\\\triangle\\$"}, // White up-pointing small triangle -- \vartriangle probably
+                                                // better but requires amssymb
+        {"10877", "les", "\\$\\\\leqslant\\$"},    // Less than slanted equal -- requires amssymb 
+        {"10878", "ges", "\\$\\\\geqslant\\$"},    // Less than slanted equal -- requires amssymb 
+        {"119978", "Oscr", "\\$\\\\mathcal\\{O\\}\\$"} // script capital O -- possibly use \mathscr
+        
+    };
+
+        private HashMap<String, String> escapedSymbols = new HashMap<String, String>();
+        private HashMap<Integer, String> numSymbols = new HashMap<Integer, String>();
+        
+        
 	
 	public HTMLConverter() {
 		super();
-		escapedSymbols.put("“", "``");
-		escapedSymbols.put("”", "''");
-		escapedSymbols.put("‘", "``");
-		escapedSymbols.put("’", "''");
-		escapedSymbols.put(" ", " ");
-		escapedSymbols.put(""", "\"");
-		escapedSymbols.put("&", "&");
-		escapedSymbols.put("<", "<");
-		escapedSymbols.put(">", ">");
+                for (int i=0;i<conversionList.length;i++) {
+                    if (conversionList[i][2].length() >= 1) {
+                        if (conversionList[i][1].length() >= 1) {
+                            escapedSymbols.put("&" + conversionList[i][1] + ";" , conversionList[i][2]);
+                        }
+                        if (conversionList[i][0].length() >= 1) {
+                            numSymbols.put(Integer.decode(conversionList[i][0]) , conversionList[i][2]);
+                        }
+                    }
+                }
 	}
+        
     public String format(String text) {
         if (text == null)
             return null;
         StringBuffer sb = new StringBuffer();
+	// Deal with the form <sup>k</sup>and <sub>k</sub>
+        // If the result is in text or equation form can be controlled
+        // From the "Advanced settings" tab
+        if(Globals.prefs.getBoolean("useConvertToEquation")) {
+            text = text.replaceAll("<sup>([^<]+)</sup>", "\\$\\^\\{$1\\}\\$");
+            text = text.replaceAll("<sub>([^<]+)</sub>", "\\$_\\{$1\\}\\$");
+        } else {
+            text = text.replaceAll("<sup>([^<]+)</sup>", "\\\\textsuperscript\\{$1\\}");
+            text = text.replaceAll("<sub>([^<]+)</sub>", "\\\\textsubscript\\{$1\\}");
+        }
+        
+        // TODO: maybe rewrite this based on regular expressions instead
+        // Note that (at least) the IEEE Xplore fetcher must be fixed as it relies on the current way to 
+        // remove tags for its image alt-tag to equation converter
         for (int i=0; i<text.length(); i++) {
 
             int c = text.charAt(i);
@@ -59,44 +588,33 @@ public class HTMLConverter implements LayoutFormatter {
 
         }
         text = sb.toString();
+        
+        // Handle text based HTML entities
         Set<String> patterns = escapedSymbols.keySet();
         for (String pattern: patterns) {
         	text = text.replaceAll(pattern, escapedSymbols.get(pattern));
         }
         
-        Pattern escapedPattern = Pattern.compile("&#([x]*\\d+);");
+        // Handle numerical HTML entities
+        Pattern escapedPattern = Pattern.compile("&#([x]*)([0]*)(\\p{XDigit}+);");
         Matcher m = escapedPattern.matcher(text);
         while (m.find()) {
-        	int num = Integer.decode(m.group(1).replace("x", "#"));
-        	switch (num) {
-        	case 37:
-        		text = text.replaceAll("&#" + m.group(1) + ";", "%");
-        		break;
-        	case 38:
-        		text = text.replaceAll("&#" + m.group(1) + ";", "&");
-        		break;
-        	case 916:
-        		text = text.replaceAll("&#" + m.group(1) + ";", "$\\delta$");
-        		break;
-        	case 956:
-        		text = text.replaceAll("&#" + m.group(1) + ";", "$\\mu$");
-        		break;
-        	case 8208:
-        		text = text.replaceAll("&#" + m.group(1) + ";", "-");
-        		break;
-        	case 8211:
-        		text = text.replaceAll("&#" + m.group(1) + ";", "--");
-        		break;
-        	case 8212:
-        		text = text.replaceAll("&#" + m.group(1) + ";", "---");
-        		break;
-        	case 8217:
-        		text = text.replaceAll("&#" + m.group(1) + ";", "'");
-        		break;
-        	default:
-        		System.err.println("HTML escaped char not converted " + m.group(1) + ": " + Integer.toString(num));
-        	}
+	    //	    System.err.println("Found pattern: " + m.group(1));
+	    //      System.err.println("Found pattern: " + m.group(2));
+            int num = Integer.decode(m.group(1).replace("x", "#") + m.group(3));
+            if(numSymbols.containsKey(num)) {
+                text = text.replaceAll("&#" + m.group(1) + m.group(2) + m.group(3) + ";", numSymbols.get(num));
+            } else {
+                System.err.println("HTML escaped char not converted: " + m.group(1) + m.group(2) + m.group(3) + " = " + Integer.toString(num));
+            }
         }
+        
+	// Find non-covered special characters with alphabetic codes
+        escapedPattern = Pattern.compile("&(\\w+);");
+        m = escapedPattern.matcher(text);
+        while (m.find()) {
+	    System.err.println("HTML escaped char not converted: " + m.group(1));
+	}
 
         return text.trim();
     }
diff --git a/src/java/net/sf/jabref/imports/IEEEXploreFetcher.java b/src/java/net/sf/jabref/imports/IEEEXploreFetcher.java
index b26bd59..d132579 100644
--- a/src/java/net/sf/jabref/imports/IEEEXploreFetcher.java
+++ b/src/java/net/sf/jabref/imports/IEEEXploreFetcher.java
@@ -57,6 +57,9 @@ import net.sf.jabref.Util;
 
 public class IEEEXploreFetcher implements EntryFetcher {
 
+    final CaseKeeperList caseKeeperList = new CaseKeeperList();
+    final CaseKeeper caseKeeper = new CaseKeeper();
+    
     ImportInspector dialog = null;
 	OutputPrinter status;
     final HTMLConverter htmlConverter = new HTMLConverter();
@@ -96,17 +99,21 @@ public class IEEEXploreFetcher implements EntryFetcher {
 
     Pattern ieeeArticleNumberPattern = Pattern.compile("<a href=\".*arnumber=(\\d+).*\">");
     
+    // Common words in IEEE Xplore that should always be 
+    
     public IEEEXploreFetcher() {
     	super();
     	
     	fieldPatterns.put("title", "<a\\s*href=[^<]+>\\s*(.+)\\s*</a>");
-        fieldPatterns.put("author", "</h3>\\s+(.+)<br />");
-        fieldPatterns.put("volume", "Volume:\\s*(\\d+)");
+        fieldPatterns.put("author", "</h3>\\s*(.+)");
+        fieldPatterns.put("volume", "Volume:\\s*([A-Za-z-]*\\d+)");
         fieldPatterns.put("number", "Issue:\\s*(\\d+)");
         //fieldPatterns.put("part", "Part (\\d+), (.+)");
-        fieldPatterns.put("year", "Publication Year:\\s*(\\d{4})");
+        fieldPatterns.put("year", "(?:Copyright|Publication) Year:\\s*(\\d{4})");
         fieldPatterns.put("pages", "Page\\(s\\):\\s*(\\d+)\\s*-\\s*(\\d*)");
-        fieldPatterns.put("doi", "Digital Object Identifier:\\s*<a href=.*>(.+)</a>");
+        //fieldPatterns.put("doi", "Digital Object Identifier:\\s*<a href=.*>(.+)</a>");
+        fieldPatterns.put("doi", "<a href=\"http://dx.doi.org/(.+)\" target");
+        fieldPatterns.put("url", "<a href=\"(/stamp/stamp[^\"]+)");       
     }
     public JPanel getOptionsPanel() {
         JPanel pan = new JPanel();
@@ -161,6 +168,12 @@ public class IEEEXploreFetcher implements EntryFetcher {
                         Globals.lang("Search IEEEXplore"), JOptionPane.INFORMATION_MESSAGE);
                 return false;
             }
+                        
+            if (page.indexOf("Error Page") >= 0) {
+                status.showMessage(Globals.lang("Intermittent errors on the IEEE Xplore server. Please try again in a while."),
+                        Globals.lang("Search IEEEXplore"), JOptionPane.INFORMATION_MESSAGE);
+                return false;
+            }
             
             hits = getNumberOfHits(page, "display-status", hitsPattern);
 
@@ -330,16 +343,54 @@ public class IEEEXploreFetcher implements EntryFetcher {
     	if (entry == null)
     		return null;
     	
+        // clean up title
+        String title = (String)entry.getField("title");
+        if (title != null) {
+            // USe the alt-text and replace image links
+            title = title.replaceAll("[ ]?img src=[^ ]+ alt=\"([^\"]+)\">[ ]?", "\\$$1\\$");
+            // Try to sort out most of the /spl / conversions
+            // Deal with this specific nested type first
+            title = title.replaceAll("/sub /spl infin//", "\\$_\\\\infty\\$");
+            title = title.replaceAll("/sup /spl infin//", "\\$\\^\\\\infty\\$");
+            // Replace general expressions
+            title = title.replaceAll("/[sS]pl ([^/]+)/", "\\$\\\\$1\\$");
+            // Deal with subscripts and superscripts       
+            if (Globals.prefs.getBoolean("useConvertToEquation")) {
+                title = title.replaceAll("/sup ([^/]+)/", "\\$\\^\\{$1\\}\\$");
+                title = title.replaceAll("/sub ([^/]+)/", "\\$_\\{$1\\}\\$");
+                title = title.replaceAll("\\(sup\\)([^(]+)\\(/sup\\)", "\\$\\^\\{$1\\}\\$");
+                title = title.replaceAll("\\(sub\\)([^(]+)\\(/sub\\)", "\\_\\{$1\\}\\$");
+            } else {
+                title = title.replaceAll("/sup ([^/]+)/", "\\\\textsuperscript\\{$1\\}");
+                title = title.replaceAll("/sub ([^/]+)/", "\\\\textsubscript\\{$1\\}");
+                title = title.replaceAll("\\(sup\\)([^(]+)\\(/sup\\)", "\\\\textsuperscript\\{$1\\}");
+                title = title.replaceAll("\\(sub\\)([^(]+)\\(/sub\\)", "\\\\textsubscript\\{$1\\}");
+            }
+
+            // Replace \infin with \infty
+            title = title.replaceAll("\\\\infin", "\\\\infty");
+            // Automatic case keeping
+            if (Globals.prefs.getBoolean("useCaseKeeperOnSearch")) {
+                title = caseKeeper.format(title, caseKeeperList.wordListIEEEXplore);
+            }
+            // Write back
+            entry.setField("title", title);
+        }
+        
     	// clean up author
     	String author = (String)entry.getField("author");
     	if (author != null) {
+	    if (author.indexOf("a href=") >= 0) {  // Author parsing failed because it was empty
+		entry.setField("author","");  // Maybe not needed anymore due to another change
+	    } else {
 	    	author = author.replaceAll("\\.", ". ");
 	    	author = author.replaceAll("  ", " ");
 	    	author = author.replaceAll("\\. -", ".-");
 	    	author = author.replaceAll("; ", " and ");
 	    	author = author.replaceAll("[,;]$", "");
 	    	entry.setField("author", author);
-    	}
+	    }
+	}
     	// clean up month
     	String month = (String)entry.getField("month");
     	if ((month != null) && (month.length() > 0)) {
@@ -497,7 +548,40 @@ public class IEEEXploreFetcher implements EntryFetcher {
 	        }
 			entry.setField(sourceField, fullName);
         }
-		return entry;
+	
+        // clean up abstract
+        String abstr = (String) entry.getField("abstract");
+        if (abstr != null) {
+            // Try to sort out most of the /spl / conversions
+            // Deal with this specific nested type first
+            abstr = abstr.replaceAll("/sub /spl infin//", "\\$_\\\\infty\\$");
+            abstr = abstr.replaceAll("/sup /spl infin//", "\\$\\^\\\\infty\\$");
+            // Replace general expressions
+            abstr = abstr.replaceAll("/[sS]pl ([^/]+)/", "\\$\\\\$1\\$");
+            // Deal with subscripts and superscripts       
+            if (Globals.prefs.getBoolean("useConvertToEquation")) {
+                abstr = abstr.replaceAll("/sup ([^/]+)/", "\\$\\^\\{$1\\}\\$");
+                abstr = abstr.replaceAll("/sub ([^/]+)/", "\\$_\\{$1\\}\\$");
+                abstr = abstr.replaceAll("\\(sup\\)([^(]+)\\(/sup\\)", "\\$\\^\\{$1\\}\\$");
+                abstr = abstr.replaceAll("\\(sub\\)([^(]+)\\(/sub\\)", "\\_\\{$1\\}\\$");
+            } else {
+                abstr = abstr.replaceAll("/sup ([^/]+)/", "\\\\textsuperscript\\{$1\\}");
+                abstr = abstr.replaceAll("/sub ([^/]+)/", "\\\\textsubscript\\{$1\\}");
+                abstr = abstr.replaceAll("\\(sup\\)([^(]+)\\(/sup\\)", "\\\\textsuperscript\\{$1\\}");
+                abstr = abstr.replaceAll("\\(sub\\)([^(]+)\\(/sub\\)", "\\\\textsubscript\\{$1\\}");
+            }
+            // Replace \infin with \infty
+            abstr = abstr.replaceAll("\\\\infin", "\\\\infty");
+            // Write back
+            entry.setField("abstract", abstr);
+        }
+        
+        // Clean up url
+        String url = (String) entry.getField("url");
+        if (url != null) {
+            entry.setField("url","http://ieeexplore.ieee.org"+url);
+        }
+	return entry;
     }
 
     private String parseNextEntryId(String allText, int startIndex) {
@@ -538,23 +622,24 @@ public class IEEEXploreFetcher implements EntryFetcher {
 	            typeName = typeMatcher.group(1);
 	            if (typeName.equalsIgnoreCase("IEEE Journals & Magazines") || typeName.equalsIgnoreCase("IEEE Early Access Articles") ||
 	            		typeName.equalsIgnoreCase("IET Journals & Magazines") || typeName.equalsIgnoreCase("AIP Journals & Magazines") ||
-					   	typeName.equalsIgnoreCase("AVS Journals & Magazines") || typeName.equalsIgnoreCase("IBM Journals & Magazines")) {
+                                typeName.equalsIgnoreCase("AVS Journals & Magazines") || typeName.equalsIgnoreCase("IBM Journals & Magazines") || 
+                                typeName.equalsIgnoreCase("TUP Journals & Magazines") || typeName.equalsIgnoreCase("BIAI Journals & Magazines")) {
 	                type = BibtexEntryType.getType("article");
 	                sourceField = "journal";
-	            } else if (typeName.equalsIgnoreCase("IEEE Conference Publications") || typeName.equalsIgnoreCase("IET Conference Publications")) {
+	            } else if (typeName.equalsIgnoreCase("IEEE Conference Publications") || typeName.equalsIgnoreCase("IET Conference Publications") || typeName.equalsIgnoreCase("VDE Conference Publications")) {
 	                type = BibtexEntryType.getType("inproceedings");
 	                sourceField = "booktitle";
-		        } else if (typeName.equalsIgnoreCase("IEEE Standards")) {
+		        } else if (typeName.equalsIgnoreCase("IEEE Standards") || typeName.equalsIgnoreCase("Standards")) {
 	                type = BibtexEntryType.getType("standard");
 	                sourceField = "number";
 		        } else if (typeName.equalsIgnoreCase("IEEE eLearning Library Courses")) {
 		        	type = BibtexEntryType.getType("Electronic");
 		        	sourceField = "note";
-		        } else if (typeName.equalsIgnoreCase("Wiley-IEEE Press eBook Chapters")) {
+		        } else if (typeName.equalsIgnoreCase("Wiley-IEEE Press eBook Chapters") || typeName.equalsIgnoreCase("MIT Press eBook Chapters")) {
 		        	type = BibtexEntryType.getType("inCollection");
 		        	sourceField = "booktitle";
 		        }
-            }
+            } 
             
             if (type == null) {
             	type = BibtexEntryType.getType("misc");
@@ -563,7 +648,7 @@ public class IEEEXploreFetcher implements EntryFetcher {
                 unparseable++;
                 System.err.println(text);
             }
-        
+            
             entry = new BibtexEntry(Util.createNeutralId(), type);
             
             if (typeName.equalsIgnoreCase("IEEE Standards")) {
@@ -572,6 +657,8 @@ public class IEEEXploreFetcher implements EntryFetcher {
             
             if (typeName.equalsIgnoreCase("Wiley-IEEE Press eBook Chapters")) {
             	entry.setField("publisher", "Wiley-IEEE Press");
+            } else if(typeName.equalsIgnoreCase("MIT Press eBook Chapters")) {
+                entry.setField("publisher", "MIT Press");
             }
             
             if (typeName.equalsIgnoreCase("IEEE Early Access Articles")) {
@@ -594,22 +681,28 @@ public class IEEEXploreFetcher implements EntryFetcher {
             		if (field.equals("pages") && fieldMatcher.groupCount() == 2) {
             			entry.setField(field, fieldMatcher.group(1) + "-" + fieldMatcher.group(2));
             		}
-            	}
+            	} 
+            }
+            if (entry.getField("author") == null || entry.getField("author").startsWith("a href")) {  // Fix for some documents without authors
+                entry.setField("author","");
             }
             if (entry.getType() == BibtexEntryType.getStandardType("inproceedings") && entry.getField("author").equals("")) {
             	entry.setType(BibtexEntryType.getStandardType("proceedings"));
             }
         
             if (includeAbstract) {
-            	index = allText.indexOf("<div class=\"abstract", piv);
-	            if (index >= 0) {
-	            	endIndex = allText.indexOf("</div>", index) + 6;
-		            piv = endIndex;
+		    index = text.indexOf("id=\"abstract");
+		    if (index >= 0) {
+		        endIndex = text.indexOf("</div>", index) + 6;
 		            
-	            	text = allText.substring(index, endIndex);
+	            	text = text.substring(index, endIndex);
 	            	Matcher absMatcher = absPattern.matcher(text);
 	            	if (absMatcher.find()) {
-	            		entry.setField("abstract", absMatcher.group(1));
+			    	// Clean-up abstract
+			    String abstr=absMatcher.group(1);
+			    abstr = abstr.replaceAll("<span class='snippet'>([\\w]+)</span>","$1");
+				
+			    entry.setField("abstract", htmlConverter.format(abstr));
 	            	}
 	            }
             }
diff --git a/src/java/net/sf/jabref/imports/ImportCustomizationDialog.java b/src/java/net/sf/jabref/imports/ImportCustomizationDialog.java
index dde4d04..2023600 100644
--- a/src/java/net/sf/jabref/imports/ImportCustomizationDialog.java
+++ b/src/java/net/sf/jabref/imports/ImportCustomizationDialog.java
@@ -42,7 +42,7 @@ import javax.swing.table.TableColumnModel;
 import net.sf.jabref.*;
 import net.sf.jabref.gui.FileDialogs;
 
-import com.jgoodies.forms.builder.ButtonBarBuilder2;
+import com.jgoodies.forms.builder.ButtonBarBuilder;
 
 /**
  * Dialog to manage custom importers.
@@ -244,7 +244,7 @@ public class ImportCustomizationDialog extends JDialog {
     am.put("close", closeAction);
     mainPanel.setLayout(new BorderLayout());
     mainPanel.add(sp, BorderLayout.CENTER);
-    ButtonBarBuilder2 bb = new ButtonBarBuilder2(buttons);
+    ButtonBarBuilder bb = new ButtonBarBuilder(buttons);
     buttons.setBorder(BorderFactory.createEmptyBorder(2,2,2,2));
     bb.addGlue();
     bb.addButton(addFromFolderButton);
diff --git a/src/java/net/sf/jabref/imports/OAI2Fetcher.java b/src/java/net/sf/jabref/imports/OAI2Fetcher.java
index dc32390..9fef00e 100644
--- a/src/java/net/sf/jabref/imports/OAI2Fetcher.java
+++ b/src/java/net/sf/jabref/imports/OAI2Fetcher.java
@@ -1,4 +1,4 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
+/*  Copyright (C) 2003-2012 JabRef contributors.
     This program is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
     the Free Software Foundation; either version 2 of the License, or
@@ -83,7 +83,7 @@ public class OAI2Fetcher implements EntryFetcher {
     private OutputPrinter status;
 
     /**
-     * some archives - like arxive.org - might expect of you to wait some time 
+     * some archives - like ArXiv.org - might expect of you to wait some time 
      */
     private boolean shouldWait() {
         return waitTime > 0;
@@ -175,8 +175,9 @@ public class OAI2Fetcher implements EntryFetcher {
         int dot = key.indexOf('.');
         int slash = key.indexOf('/');
         
-        if (dot > -1 && dot < slash)
+        if (dot > -1 && dot < slash) {
             key = key.substring(0, dot) + key.substring(slash, key.length());
+        }
     
         return key;
     }
@@ -193,7 +194,7 @@ public class OAI2Fetcher implements EntryFetcher {
      * 
      * @param key
      *            The OAI2 key to fetch from ArXiv.
-     * @return The imnported BibtexEntry or null if none.
+     * @return The imported BibtexEntry or null if none.
      */
     public BibtexEntry importOai2Entry(String key) {
         /**
@@ -300,18 +301,21 @@ public class OAI2Fetcher implements EntryFetcher {
                 status.setStatus(Globals.lang("Processing ") + key);
 
                 /* the cancel button has been hit */
-                if (!shouldContinue)
+                if (!shouldContinue) {
                     break;
+                }
                 
                 /* query the archive and load the results into the BibtexEntry */
                 BibtexEntry be = importOai2Entry(key);
 
-                if (shouldWait())
+                if (shouldWait()) {
                     lastCall = new Date();
+                }
                 
                 /* add the entry to the inspection dialog */
-                if (be != null)
+                if (be != null) {
                     dialog.addEntry(be);
+                }
 
                 /* update the dialogs progress bar */
                 dialog.setProgress(i + 1, keys.length);
@@ -319,7 +323,7 @@ public class OAI2Fetcher implements EntryFetcher {
             
             return true;
         } catch (Exception e) {
-            status.setStatus(Globals.lang("Error while fetching from OIA2")+ ": " + e.getMessage());
+            status.setStatus(Globals.lang("Error while fetching from OAI2")+ ": " + e.getMessage());
             e.printStackTrace();
         }
         return false;
diff --git a/src/java/net/sf/jabref/imports/OpenDatabaseAction.java b/src/java/net/sf/jabref/imports/OpenDatabaseAction.java
index 0a2a96c..3fe069d 100644
--- a/src/java/net/sf/jabref/imports/OpenDatabaseAction.java
+++ b/src/java/net/sf/jabref/imports/OpenDatabaseAction.java
@@ -24,6 +24,7 @@ import java.util.Collections;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
+import java.util.logging.Logger;
 
 import javax.swing.JOptionPane;
 import javax.swing.SwingUtilities;
@@ -41,6 +42,7 @@ import net.sf.jabref.undo.NamedCompound;
 // The action concerned with opening an existing database.
 
 public class OpenDatabaseAction extends MnemonicAwareAction {
+    private static Logger logger = Logger.getLogger(OpenDatabaseAction.class.toString());
 
     boolean showDialog;
     private JabRefFrame frame;
@@ -371,7 +373,7 @@ public class OpenDatabaseAction extends MnemonicAwareAction {
         	for (BibtexEntry entry: pr.getDatabase().getEntries()) {
         		SpecialFieldsUtils.syncSpecialFieldsFromKeywords(entry, null);
         	}
-        	Globals.logger(Globals.lang("Synchronized special fields based on keywords"));
+        	logger.fine(Globals.lang("Synchronized special fields based on keywords"));
         }
 
         if (!pr.getMetaData().isGroupTreeValid())
diff --git a/src/java/net/sf/jabref/imports/PdfContentImporter.java b/src/java/net/sf/jabref/imports/PdfContentImporter.java
index 10084f2..4505047 100644
--- a/src/java/net/sf/jabref/imports/PdfContentImporter.java
+++ b/src/java/net/sf/jabref/imports/PdfContentImporter.java
@@ -37,6 +37,7 @@ import net.sf.jabref.BibtexEntry;
 import net.sf.jabref.BibtexEntryType;
 import net.sf.jabref.Globals;
 import net.sf.jabref.OutputPrinter;
+import net.sf.jabref.Util;
 
 /**
  * PdfContentImporter parses data of the first page of the PDF and creates a BibTeX entry.
@@ -51,6 +52,9 @@ import net.sf.jabref.OutputPrinter;
 public class PdfContentImporter extends ImportFormat {
 	
 	private static Logger logger = Logger.getLogger(PdfContentImporter.class.getName());
+	
+	// we can store the DOItoBibTeXFetcher as single reference as the fetcher doesn't hold internal state
+	private static DOItoBibTeXFetcher doiToBibTeXFetcher = new DOItoBibTeXFetcher();
 
 	/* global variables holding the state of the current parse run
 	 * needed to be able to generate methods such as "fillCurStringWithNonEmptyLines"
@@ -208,7 +212,7 @@ public class PdfContentImporter extends ImportFormat {
 	
 	@Override
 	public List<BibtexEntry> importEntries(InputStream in, OutputPrinter status) throws IOException {
-		ArrayList<BibtexEntry> res = new ArrayList<BibtexEntry>(1);
+		final ArrayList<BibtexEntry> res = new ArrayList<BibtexEntry>(1);
 		
 		PDDocument document = null;
 		try {
@@ -233,6 +237,33 @@ public class PdfContentImporter extends ImportFormat {
 			StringWriter writer = new StringWriter();
 			stripper.writeText(document, writer);
 			String textResult = writer.toString();
+			
+			String doi = Util.getDOI(textResult);
+			if (doi.length() < textResult.length()) {
+				// A DOI was found in the text
+				// We do NO parsing of the text, but use the DOI fetcher
+				
+				ImportInspector i = new ImportInspector() {
+					@Override
+					public void toFront() {
+					}
+					@Override
+					public void setProgress(int current, int max) {
+					}
+					@Override
+					public void addEntry(BibtexEntry entry) {
+						// add the entry to the result object
+						res.add(entry);
+					}
+				};
+				doiToBibTeXFetcher.processQuery(doi, i, status);
+				if (res.size() != 0) {
+					// if something has been found, return the result
+					return res;
+				} else {
+					// otherwise, we just parse the PDF
+				}
+			}
 
 			String author = null;
 			String editor = null;
@@ -264,6 +295,11 @@ public class PdfContentImporter extends ImportFormat {
 			//   the different lines are joined into one and thereby separated by " "
 			
 			proceedToNextNonEmptyLine();
+			if (i>=split.length) {
+				// PDF could not be parsed or is empty
+				// return empty list
+				return res;
+			}
 			curString = split[i];
 			i = i+1;
 			
diff --git a/src/java/net/sf/jabref/imports/PreviewEntryFetcher.java b/src/java/net/sf/jabref/imports/PreviewEntryFetcher.java
new file mode 100644
index 0000000..b7034ed
--- /dev/null
+++ b/src/java/net/sf/jabref/imports/PreviewEntryFetcher.java
@@ -0,0 +1,31 @@
+package net.sf.jabref.imports;
+
+import net.sf.jabref.OutputPrinter;
+import net.sf.jabref.gui.FetcherPreviewDialog;
+
+import javax.swing.*;
+import java.util.Map;
+
+/**
+ *
+ */
+public interface PreviewEntryFetcher extends EntryFetcher {
+
+    public boolean processQueryGetPreview(String query, FetcherPreviewDialog preview,
+                                                      OutputPrinter status);
+
+    public void getEntries(Map<String, Boolean> selection, ImportInspector inspector);
+
+    /**
+     * The number of entries a user can select for download without getting a warning message.
+     * @return the warning limit
+     */
+    public int getWarningLimit();
+
+    /**
+     * The preferred table row height for the previews.
+     * @return the preferred height
+     */
+    public int getPreferredPreviewHeight();
+
+}
diff --git a/src/java/net/sf/jabref/imports/ZipFileChooser.java b/src/java/net/sf/jabref/imports/ZipFileChooser.java
index e54d038..2bbe529 100644
--- a/src/java/net/sf/jabref/imports/ZipFileChooser.java
+++ b/src/java/net/sf/jabref/imports/ZipFileChooser.java
@@ -222,7 +222,7 @@ class ZipFileChooser extends JDialog {
          ZipEntry tempZipEntry = model.getZipEntry(row);
          CustomImportList.Importer importer = prefs.customImports.new Importer();
          importer.setBasePath(model.getZipFile().getName());
-         String className = tempZipEntry.getName().substring(0, tempZipEntry.getName().lastIndexOf('.'));
+         String className = tempZipEntry.getName().substring(0, tempZipEntry.getName().lastIndexOf('.')).replaceAll("/", ".");
          importer.setClassName(className);
          try {
            ImportFormat importFormat = importer.getInstance();
diff --git a/src/java/net/sf/jabref/journals/ManageJournalsPanel.java b/src/java/net/sf/jabref/journals/ManageJournalsPanel.java
index 5bcbe85..dd6d39f 100644
--- a/src/java/net/sf/jabref/journals/ManageJournalsPanel.java
+++ b/src/java/net/sf/jabref/journals/ManageJournalsPanel.java
@@ -36,7 +36,7 @@ import net.sf.jabref.JabRefFrame;
 import net.sf.jabref.gui.FileDialogs;
 import net.sf.jabref.net.URLDownload;
 
-import com.jgoodies.forms.builder.ButtonBarBuilder2;
+import com.jgoodies.forms.builder.ButtonBarBuilder;
 import com.jgoodies.forms.builder.ButtonStackBuilder;
 import com.jgoodies.forms.builder.DefaultFormBuilder;
 import com.jgoodies.forms.layout.CellConstraints;
@@ -97,7 +97,7 @@ public class ManageJournalsPanel extends JPanel{
 
         CellConstraints cc = new CellConstraints();
 
-        /*JLabel description = new JLabel("<HTML>"+Globals.lang("JabRef can switch journal names between "
+        /*JLabel description = new JLabel("<HTML>"+Glbals.lang("JabRef can switch journal names between "
             +"abbreviated and full form. Since it knows only a limited number of journal names, "
             +"you may need to add your own definitions.")+"</HTML>");*/
         builder.addSeparator(Globals.lang("Built-in journal list"), cc.xyw(2,1,6));
@@ -138,7 +138,7 @@ public class ManageJournalsPanel extends JPanel{
         builder.getPanel().setBorder(BorderFactory.createEmptyBorder(5,5,5,5));//createMatteBorder(1,1,1,1,Color.green));
         add(builder.getPanel(), BorderLayout.NORTH);
         add(externalFilesPanel, BorderLayout.CENTER);
-        ButtonBarBuilder2 bb = new ButtonBarBuilder2();
+        ButtonBarBuilder bb = new ButtonBarBuilder();
         bb.addGlue();
         bb.addButton(ok);
         bb.addButton(cancel);
diff --git a/src/java/net/sf/jabref/labelPattern/ResolveDuplicateLabelDialog.java b/src/java/net/sf/jabref/labelPattern/ResolveDuplicateLabelDialog.java
index 8a6c183..718275a 100644
--- a/src/java/net/sf/jabref/labelPattern/ResolveDuplicateLabelDialog.java
+++ b/src/java/net/sf/jabref/labelPattern/ResolveDuplicateLabelDialog.java
@@ -15,7 +15,7 @@
 */
 package net.sf.jabref.labelPattern;
 
-import com.jgoodies.forms.builder.ButtonBarBuilder2;
+import com.jgoodies.forms.builder.ButtonBarBuilder;
 import com.jgoodies.forms.builder.DefaultFormBuilder;
 import com.jgoodies.forms.layout.FormLayout;
 import net.sf.jabref.*;
@@ -81,7 +81,7 @@ public class ResolveDuplicateLabelDialog {
         }
 
 
-        ButtonBarBuilder2 bb = new ButtonBarBuilder2();
+        ButtonBarBuilder bb = new ButtonBarBuilder();
         bb.addGlue();
         bb.addButton(ok);
         bb.addButton(cancel);
diff --git a/src/java/net/sf/jabref/net/CookieHandlerImpl.java b/src/java/net/sf/jabref/net/CookieHandlerImpl.java
index a838cce..c19d120 100644
--- a/src/java/net/sf/jabref/net/CookieHandlerImpl.java
+++ b/src/java/net/sf/jabref/net/CookieHandlerImpl.java
@@ -53,14 +53,18 @@ public class CookieHandlerImpl extends CookieHandler {
                 // New one will replace
                 for (Iterator<Cookie> i = cache.iterator(); i.hasNext();) {
                     Cookie existingCookie = i.next();
-                    if ((cookie.getURI().equals(
-                            existingCookie.getURI())) &&
+                    if (/*(cookie.getURI().equals(
+                            existingCookie.getURI()))*/
+                        (cookie.domain.equals(existingCookie.domain))
+                        &&
                             (cookie.getName().equals(
                                     existingCookie.getName()))) {
                         i.remove();
                         break;
                     }
                 }
+                //System.out.println(cookie.getName()+" : "+cookie.domain+" : "+cookie.toString());
+
                 cache.add(cookie);
             }
         }
@@ -109,6 +113,7 @@ public class CookieHandlerImpl extends CookieHandler {
             List<String> list =
                     Collections.singletonList(cookies.toString());
             cookieMap.put("Cookie", list);
+
         }
         return Collections.unmodifiableMap(cookieMap);
     }
diff --git a/src/java/net/sf/jabref/net/URLDownload.java b/src/java/net/sf/jabref/net/URLDownload.java
index 82f0a58..847ad62 100644
--- a/src/java/net/sf/jabref/net/URLDownload.java
+++ b/src/java/net/sf/jabref/net/URLDownload.java
@@ -195,7 +195,6 @@ public class URLDownload {
                 ImportFormatReader.getReaderDefaultEncoding(_in);
         BufferedReader read = new BufferedReader(r);
 
-        byte[] buffer = new byte[512];
         String line;
         while ((line = read.readLine()) != null) {
             out.write(line);
diff --git a/src/java/net/sf/jabref/oo/AdvancedCiteDialog.java b/src/java/net/sf/jabref/oo/AdvancedCiteDialog.java
index 2950782..152f028 100644
--- a/src/java/net/sf/jabref/oo/AdvancedCiteDialog.java
+++ b/src/java/net/sf/jabref/oo/AdvancedCiteDialog.java
@@ -15,7 +15,7 @@
 */
 package net.sf.jabref.oo;
 
-import com.jgoodies.forms.builder.ButtonBarBuilder2;
+import com.jgoodies.forms.builder.ButtonBarBuilder;
 import com.jgoodies.forms.builder.DefaultFormBuilder;
 import com.jgoodies.forms.layout.FormLayout;
 import net.sf.jabref.Globals;
@@ -72,7 +72,7 @@ public class AdvancedCiteDialog {
         b.getPanel().setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
         diag.getContentPane().add(b.getPanel(), BorderLayout.CENTER);
 
-        ButtonBarBuilder2 bb = new ButtonBarBuilder2();
+        ButtonBarBuilder bb = new ButtonBarBuilder();
         bb.addGlue();
         bb.addButton(ok);
         bb.addButton(cancel);
diff --git a/src/java/net/sf/jabref/oo/CitationManager.java b/src/java/net/sf/jabref/oo/CitationManager.java
index 57e55dc..fa7c072 100644
--- a/src/java/net/sf/jabref/oo/CitationManager.java
+++ b/src/java/net/sf/jabref/oo/CitationManager.java
@@ -20,7 +20,7 @@ import ca.odell.glazedlists.EventList;
 import ca.odell.glazedlists.SortedList;
 import ca.odell.glazedlists.gui.TableFormat;
 import ca.odell.glazedlists.swing.EventTableModel;
-import com.jgoodies.forms.builder.ButtonBarBuilder2;
+import com.jgoodies.forms.builder.ButtonBarBuilder;
 import com.jgoodies.forms.builder.DefaultFormBuilder;
 import com.jgoodies.forms.layout.FormLayout;
 import com.sun.star.container.XNameAccess;
@@ -66,7 +66,7 @@ public class CitationManager {
         table = new JTable(tableModel);
         diag.add(new JScrollPane(table), BorderLayout.CENTER);
 
-        ButtonBarBuilder2 bb = new ButtonBarBuilder2();
+        ButtonBarBuilder bb = new ButtonBarBuilder();
         bb.addGlue();
         bb.addButton(ok);
         bb.addButton(cancel);
@@ -216,7 +216,7 @@ public class CitationManager {
             b.getPanel().setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
             diag.getContentPane().add(b.getPanel(), BorderLayout.CENTER);
 
-            ButtonBarBuilder2 bb = new ButtonBarBuilder2();
+            ButtonBarBuilder bb = new ButtonBarBuilder();
             bb.addGlue();
             bb.addButton(ok);
             bb.addButton(cancel);
diff --git a/src/java/net/sf/jabref/oo/OpenOfficePanel.java b/src/java/net/sf/jabref/oo/OpenOfficePanel.java
index 935e764..0c69969 100755
--- a/src/java/net/sf/jabref/oo/OpenOfficePanel.java
+++ b/src/java/net/sf/jabref/oo/OpenOfficePanel.java
@@ -15,7 +15,7 @@
 */
 package net.sf.jabref.oo;
 
-import com.jgoodies.forms.builder.ButtonBarBuilder2;
+import com.jgoodies.forms.builder.ButtonBarBuilder;
 import com.jgoodies.forms.builder.DefaultFormBuilder;
 import com.jgoodies.forms.layout.FormLayout;
 import net.sf.jabref.*;
@@ -384,7 +384,7 @@ public class OpenOfficePanel extends AbstractWorker implements SidePanePlugin, P
                 //"p,0dlu,p,0dlu,p,0dlu,p,0dlu,p,0dlu,p,0dlu,p,0dlu,p,0dlu,p,0dlu,p,0dlu"));
                 "p,p,p,p,p,p,p,p,p,p"));
 
-        //ButtonBarBuilder2 bb = new ButtonBarBuilder2();
+        //ButtonBarBuilder bb = new ButtonBarBuilder();
         DefaultFormBuilder bb = new DefaultFormBuilder(new FormLayout
                 ("fill:pref:grow, 1dlu, fill:pref:grow, 1dlu, fill:pref:grow, "
                         +"1dlu, fill:pref:grow, 1dlu, fill:pref:grow", ""));
@@ -668,7 +668,7 @@ public class OpenOfficePanel extends AbstractWorker implements SidePanePlugin, P
             builder.nextLine();
         }
 
-        ButtonBarBuilder2 bb = new ButtonBarBuilder2();
+        ButtonBarBuilder bb = new ButtonBarBuilder();
         JButton ok = new JButton(Globals.lang("Ok"));
         JButton cancel = new JButton(Globals.lang("Cancel"));
         //JButton auto = new JButton(Globals.lang("Autodetect"));
diff --git a/src/java/net/sf/jabref/oo/StyleSelectDialog.java b/src/java/net/sf/jabref/oo/StyleSelectDialog.java
index 8898000..ac0aaf0 100755
--- a/src/java/net/sf/jabref/oo/StyleSelectDialog.java
+++ b/src/java/net/sf/jabref/oo/StyleSelectDialog.java
@@ -23,7 +23,7 @@ import ca.odell.glazedlists.event.ListEventListener;
 import ca.odell.glazedlists.gui.TableFormat;
 import ca.odell.glazedlists.swing.EventSelectionModel;
 import ca.odell.glazedlists.swing.EventTableModel;
-import com.jgoodies.forms.builder.ButtonBarBuilder2;
+import com.jgoodies.forms.builder.ButtonBarBuilder;
 import com.jgoodies.forms.builder.DefaultFormBuilder;
 import com.jgoodies.forms.layout.FormLayout;
 import com.jgoodies.uif_lite.component.UIFSplitPane;
@@ -277,7 +277,7 @@ public class StyleSelectDialog {
         };
         cancel.addActionListener(cancelListener);
 
-        ButtonBarBuilder2 bb = new ButtonBarBuilder2();
+        ButtonBarBuilder bb = new ButtonBarBuilder();
         bb.addGlue();
         bb.addButton(ok);
         bb.addButton(cancel);
@@ -515,7 +515,7 @@ public class StyleSelectDialog {
             sp.setPreferredSize(new Dimension(700,500));
             dd.getContentPane().add(sp, BorderLayout.CENTER);
             JButton ok = new JButton(Globals.lang("Ok"));
-            ButtonBarBuilder2 bb = new ButtonBarBuilder2();
+            ButtonBarBuilder bb = new ButtonBarBuilder();
             bb.addGlue();
             bb.addButton(ok);
             bb.addGlue();
diff --git a/src/java/net/sf/jabref/plugin/ManagePluginsDialog.java b/src/java/net/sf/jabref/plugin/ManagePluginsDialog.java
index 84bb547..7224e86 100644
--- a/src/java/net/sf/jabref/plugin/ManagePluginsDialog.java
+++ b/src/java/net/sf/jabref/plugin/ManagePluginsDialog.java
@@ -20,7 +20,7 @@ import ca.odell.glazedlists.EventList;
 import ca.odell.glazedlists.BasicEventList;
 import ca.odell.glazedlists.gui.TableFormat;
 import ca.odell.glazedlists.swing.EventTableModel;
-import com.jgoodies.forms.builder.ButtonBarBuilder2;
+import com.jgoodies.forms.builder.ButtonBarBuilder;
 
 import java.awt.*;
 import java.awt.event.ActionEvent;
@@ -92,7 +92,7 @@ public class ManagePluginsDialog {
 
         diag.getContentPane().add(pan, BorderLayout.CENTER);
         
-        ButtonBarBuilder2 b = new ButtonBarBuilder2();
+        ButtonBarBuilder b = new ButtonBarBuilder();
         b.addGlue();
         b.addButton(install);
         b.addButton(download);
diff --git a/src/java/net/sf/jabref/remote/RemoteListener.java b/src/java/net/sf/jabref/remote/RemoteListener.java
index 886ff36..5b7bfce 100644
--- a/src/java/net/sf/jabref/remote/RemoteListener.java
+++ b/src/java/net/sf/jabref/remote/RemoteListener.java
@@ -168,9 +168,8 @@ public class RemoteListener extends Thread {
             }
 
             if (!IDENTIFIER.equals(sb.toString())) {
-                String error = Globals.lang("Cannot use port %0 for remote operation; another "
-                    +"application may be using it. Try specifying another port.",
-                        new String[] {String.valueOf(Globals.prefs.getInt("remoteServerPort"))});
+            	String port = String.valueOf(Globals.prefs.getInt("remoteServerPort"));
+                String error = Globals.lang("Cannot use port %0 for remote operation; another application may be using it. Try specifying another port.", port);
                 System.out.println(error);
                 return false;
             }
diff --git a/src/java/net/sf/jabref/specialfields/Quality.java b/src/java/net/sf/jabref/specialfields/Quality.java
index 935b3bc..6d12969 100644
--- a/src/java/net/sf/jabref/specialfields/Quality.java
+++ b/src/java/net/sf/jabref/specialfields/Quality.java
@@ -29,7 +29,7 @@ public class Quality extends SpecialField {
 
 	public Quality() {
 		ArrayList<SpecialFieldValue> values = new ArrayList<SpecialFieldValue>();
-    	values.add(new SpecialFieldValue(this, "qualityAssured", "toggleQualityAssured", Globals.lang("Toogle quality assured"), GUIGlobals.getImage("qualityAssured"), Globals.lang("Toogle quality assured marking")));
+    	values.add(new SpecialFieldValue(this, "qualityAssured", "toggleQualityAssured", Globals.lang("Toogle quality assured"), GUIGlobals.getImage("qualityAssured"), Globals.lang("Toogle quality assured")));
 		this.setValues(values);
 		TEXT_DONE_PATTERN = "Toggled quality for %0 entries";
 	}
diff --git a/src/java/net/sf/jabref/specialfields/SpecialFieldDatabaseChangeListener.java b/src/java/net/sf/jabref/specialfields/SpecialFieldDatabaseChangeListener.java
index 6859b95..2b138ed 100644
--- a/src/java/net/sf/jabref/specialfields/SpecialFieldDatabaseChangeListener.java
+++ b/src/java/net/sf/jabref/specialfields/SpecialFieldDatabaseChangeListener.java
@@ -14,7 +14,6 @@ public class SpecialFieldDatabaseChangeListener implements
 	
 	private static SpecialFieldDatabaseChangeListener INSTANCE = null;
 
-	@Override
 	public void databaseChanged(DatabaseChangeEvent e) {
 		if ((e.getType() == DatabaseChangeEvent.ChangeType.ADDED_ENTRY) &&
 		    SpecialFieldsUtils.keywordSyncEnabled()) {
@@ -22,6 +21,7 @@ public class SpecialFieldDatabaseChangeListener implements
 			// NamedCompount code similar to SpecialFieldUpdateListener
 			NamedCompound nc = new NamedCompound(Globals.lang("Synchronized special fields based on keywords"));
 			SpecialFieldsUtils.syncSpecialFieldsFromKeywords(entry, nc);
+            nc.end();
 			JabRef.jrf.basePanel().undoManager.addEdit(nc);
 		}
 	}
diff --git a/src/java/net/sf/jabref/sql/DBConnectDialog.java b/src/java/net/sf/jabref/sql/DBConnectDialog.java
index 8c97a2a..55dea4f 100644
--- a/src/java/net/sf/jabref/sql/DBConnectDialog.java
+++ b/src/java/net/sf/jabref/sql/DBConnectDialog.java
@@ -25,7 +25,7 @@ import javax.swing.*;
 
 import net.sf.jabref.Globals;
 
-import com.jgoodies.forms.builder.ButtonBarBuilder2;
+import com.jgoodies.forms.builder.ButtonBarBuilder;
 import com.jgoodies.forms.builder.DefaultFormBuilder;
 import com.jgoodies.forms.layout.FormLayout;
 
@@ -142,7 +142,7 @@ public class DBConnectDialog extends JDialog {
         getContentPane().add(builder.getPanel(), BorderLayout.CENTER);
 
         // add buttons are added in a similar way:
-        ButtonBarBuilder2 bb = new ButtonBarBuilder2();
+        ButtonBarBuilder bb = new ButtonBarBuilder();
         bb.addGlue();
         bb.addButton(btnConnect);
         bb.addButton(btnCancel);
diff --git a/src/java/net/sf/jabref/sql/DBImportExportDialog.java b/src/java/net/sf/jabref/sql/DBImportExportDialog.java
index 6f2d723..eea3f48 100644
--- a/src/java/net/sf/jabref/sql/DBImportExportDialog.java
+++ b/src/java/net/sf/jabref/sql/DBImportExportDialog.java
@@ -47,7 +47,7 @@ import org.w3c.dom.views.AbstractView;
 import net.sf.jabref.Globals;
 import net.sf.jabref.JabRefFrame;
 
-import com.jgoodies.forms.builder.ButtonBarBuilder2;
+import com.jgoodies.forms.builder.ButtonBarBuilder;
 
 /**
  * 
@@ -159,7 +159,7 @@ public class DBImportExportDialog implements MouseListener, KeyListener {
 
 		diag.getContentPane().add(pan, BorderLayout.CENTER);
 
-		ButtonBarBuilder2 b = new ButtonBarBuilder2();
+		ButtonBarBuilder b = new ButtonBarBuilder();
 		b.addGlue();
 		if (dialogType.equals(DialogType.IMPORTER))
 			b.addButton(importButton);
diff --git a/src/java/net/sf/jabref/sql/SQLUtil.java b/src/java/net/sf/jabref/sql/SQLUtil.java
index 5e9fcc4..7bb146f 100644
--- a/src/java/net/sf/jabref/sql/SQLUtil.java
+++ b/src/java/net/sf/jabref/sql/SQLUtil.java
@@ -257,7 +257,7 @@ public class SQLUtil {
 	/**
 	 * This routine returns the JDBC url corresponding to the DBStrings input.
 	 * 
-	 * @param dbstrings
+	 * @param dbStrings
 	 *            The DBStrings to use to make the connection
 	 * @return The JDBC url corresponding to the input DBStrings
 	 */
diff --git a/src/java/net/sf/jabref/sql/exporter/PostgreSQLExporter.java b/src/java/net/sf/jabref/sql/exporter/PostgreSQLExporter.java
index 32e49d2..c8b1452 100644
--- a/src/java/net/sf/jabref/sql/exporter/PostgreSQLExporter.java
+++ b/src/java/net/sf/jabref/sql/exporter/PostgreSQLExporter.java
@@ -69,7 +69,7 @@ public class PostgreSQLExporter extends DBExporter {
 		}
 		rs.getStatement().close();
 		conn.close();
-		url += "/" + dbStrings.getDatabase();
+
 		conn = DriverManager.getConnection(url, dbstrings.getUsername(),
 				dbstrings.getPassword());
 		createPLPGSQLFunction(conn);
diff --git a/src/java/net/sf/jabref/undo/CountingUndoManager.java b/src/java/net/sf/jabref/undo/CountingUndoManager.java
index 1631198..0187e61 100644
--- a/src/java/net/sf/jabref/undo/CountingUndoManager.java
+++ b/src/java/net/sf/jabref/undo/CountingUndoManager.java
@@ -43,25 +43,12 @@ public class CountingUndoManager extends UndoManager {
 	    super.undo();
 	    current--;
         panel.updateEntryEditorIfShowing();
-        //panel.updateViewToSelected();
-        /*SwingUtilities.invokeLater(new Runnable() {
-            public void run() {
-                panel.updateViewToSelected();
-            }
-        });*/
-
     }
 
     public synchronized void redo() throws CannotUndoException {
 	    super.redo();
 	    current++;
         panel.updateEntryEditorIfShowing();
-        //panel.updateViewToSelected();
-        /*SwingUtilities.invokeLater(new Runnable() {
-            public void run() {
-                panel.updateViewToSelected();
-            }
-        });*/
     }
 
     public synchronized void markUnchanged() {
diff --git a/src/java/net/sf/jabref/undo/UndoableInsertEntry.java b/src/java/net/sf/jabref/undo/UndoableInsertEntry.java
index 5a3931f..49df02e 100644
--- a/src/java/net/sf/jabref/undo/UndoableInsertEntry.java
+++ b/src/java/net/sf/jabref/undo/UndoableInsertEntry.java
@@ -36,43 +36,43 @@ public class UndoableInsertEntry extends AbstractUndoableEdit {
 
     public UndoableInsertEntry(BibtexDatabase base, BibtexEntry entry,
 			       BasePanel panel) {
-	this.base = base;
-	this.entry = entry;
-	this.panel = panel;
+        this.base = base;
+        this.entry = entry;
+        this.panel = panel;
     }
 
     public String getUndoPresentationName() {
-	return "Undo: insert entry";
+	    return "Undo: insert entry";
     }
 
     public String getRedoPresentationName() {
-	return "Redo: insert entry";
+	    return "Redo: insert entry";
     }
 
     public void undo() {
-	super.undo();
-
-	// Revert the change.
-	try {
-	    base.removeEntry(entry.getId());
-	    // If the entry has an editor currently open, we must close it.
-	    panel.ensureNotShowing(entry);
-	} catch (Throwable ex) {
-          ex.printStackTrace();
-	}
+        super.undo();
+
+        // Revert the change.
+        try {
+            base.removeEntry(entry.getId());
+            // If the entry has an editor currently open, we must close it.
+            panel.ensureNotShowing(entry);
+        } catch (Throwable ex) {
+              ex.printStackTrace();
+        }
     }
 
     public void redo() {
-	super.redo();
-
-	// Redo the change.
-	try {
-          String id = Util.createNeutralId();
-	    entry.setId(id);
-	    base.insertEntry(entry);
-	} catch (Throwable ex) {
-          ex.printStackTrace();
-	}
+        super.redo();
+
+        // Redo the change.
+        try {
+              String id = Util.createNeutralId();
+            entry.setId(id);
+            base.insertEntry(entry);
+        } catch (Throwable ex) {
+              ex.printStackTrace();
+        }
     }
 
 
diff --git a/src/java/net/sf/jabref/util/ErrorConsole.java b/src/java/net/sf/jabref/util/ErrorConsole.java
index 2aa1258..2e60b66 100644
--- a/src/java/net/sf/jabref/util/ErrorConsole.java
+++ b/src/java/net/sf/jabref/util/ErrorConsole.java
@@ -19,6 +19,10 @@ import java.awt.Dimension;
 import java.awt.event.ActionEvent;
 import java.io.ByteArrayOutputStream;
 import java.io.PrintStream;
+import java.util.ArrayList;
+import java.util.logging.Handler;
+import java.util.logging.LogRecord;
+import java.util.logging.SimpleFormatter;
 
 import javax.swing.*;
 
@@ -31,14 +35,23 @@ import net.sf.jabref.Globals;
  * useful in getting complete bug reports, especially from Windows users,
  * without asking users to run JabRef in a command window to catch the error info.
  *
+ * It also offers a separate tab for the log output.
+ *
  * User: alver
  * Date: Mar 1, 2006
  * Time: 11:13:03 PM
  */
-public class ErrorConsole {
+public class ErrorConsole  extends Handler {
 
     ByteArrayOutputStream errByteStream = new ByteArrayOutputStream();
     ByteArrayOutputStream outByteStream = new ByteArrayOutputStream();
+    
+    ArrayList<String> logOutput = new ArrayList<String>();
+    String logOutputCache = "";
+    boolean logOutputCacheRefreshNeeded = true;
+    SimpleFormatter fmt = new SimpleFormatter();
+    private static final int MAXLOGLINES = 500;
+    
     private static ErrorConsole instance = null;
 
 
@@ -58,30 +71,48 @@ public class ErrorConsole {
         System.setOut(tee);
     }
 
-    public String getErrorMessages() {
+    private String getErrorMessages() {
         return errByteStream.toString();
     }
 
-    public String getOutput() {
+    private String getOutput() {
         return outByteStream.toString();
     }
-
-    public void displayErrorConsole(JFrame parent) {
-        JTabbedPane tabbed = new JTabbedPane();
-        JTextArea ta = new JTextArea(getOutput());
-        ta.setEditable(false);
-        JScrollPane sp = new JScrollPane(ta);
-        tabbed.addTab(Globals.lang("Output"), sp);
-
-        ta = new JTextArea(getErrorMessages());
+    
+    private String getLog() {
+    	if (logOutputCacheRefreshNeeded) {
+    		StringBuilder sb = new StringBuilder();
+    		for(String line: logOutput) {
+    			sb.append(line);
+    		}
+    		logOutputCache = sb.toString();
+    	}
+    	return logOutputCache;
+    }
+    
+    /**
+     * 
+     * @param tabbed the tabbed pane to add the tab to
+     * @param output the text to display in the tab
+     * @param ifEmpty Text to output if textbox is emtpy. may be null
+     */
+    private void addTextArea(JTabbedPane tabbed, String title, String output, String ifEmpty) {
+        JTextArea ta = new JTextArea(output);
         ta.setEditable(false);
-        if (ta.getText().length() == 0) {
-            ta.setText(Globals.lang("No exceptions have ocurred."));
+        if ((ifEmpty!=null) && (ta.getText().length() == 0)) {
+            ta.setText(ifEmpty);
         }
-        sp = new JScrollPane(ta);
-
-        tabbed.addTab(Globals.lang("Exceptions"), sp);
-
+        JScrollPane sp = new JScrollPane(ta);
+        tabbed.addTab(title, sp);
+    }
+    
+    public void displayErrorConsole(JFrame parent) {
+        JTabbedPane tabbed = new JTabbedPane();
+        
+        addTextArea(tabbed, Globals.lang("Output"), getOutput(), null);
+        addTextArea(tabbed, Globals.lang("Exceptions"), getErrorMessages(),
+        		Globals.lang("No exceptions have ocurred."));
+        addTextArea(tabbed, Globals.lang("Log"), getLog(), null);
 
         tabbed.setPreferredSize(new Dimension(500,500));
 
@@ -125,4 +156,33 @@ public class ErrorConsole {
             out.flush();
         }
     }
+    
+    /* * * methods for Logging (required by Handler) * * */
+
+	@Override
+    public void close() throws SecurityException {
+    }
+
+	@Override
+    public void flush() {
+    }
+
+	@Override
+    public void publish(LogRecord record) {
+		String msg = fmt.format(record);
+		logOutput.add(msg);
+		if (logOutput.size() < MAXLOGLINES) {
+			// if we did not yet reach MAXLOGLINES, we just append the string to the cache
+			logOutputCache = logOutputCache + msg;
+		} else {
+			// if we reached MAXLOGLINES, we switch to the "real" caching method and remove old lines 
+			logOutputCacheRefreshNeeded = true;
+			while (logOutput.size() > MAXLOGLINES) {
+				// if log is too large, remove first line
+				// we need a while loop as the formatter may output more than one line
+				logOutput.remove(0);
+			}
+		}
+		logOutputCacheRefreshNeeded = true;
+    }
 }
diff --git a/src/java/net/sf/jabref/util/FileNameCleaner.java b/src/java/net/sf/jabref/util/FileNameCleaner.java
new file mode 100644
index 0000000..7661a9c
--- /dev/null
+++ b/src/java/net/sf/jabref/util/FileNameCleaner.java
@@ -0,0 +1,45 @@
+/*  Copyright (C) 2012 Sarel Botha
+    This class is based on http://stackoverflow.com/a/5626340/873282
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package net.sf.jabref.util;
+
+import java.util.Arrays;
+
+public class FileNameCleaner {
+final static int[] illegalChars = {34, 60, 62, 124, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 58, 42, 63, 92, 47};
+static {
+    Arrays.sort(illegalChars);
+}
+
+/**
+ * Replaces illegal characters in given fileName by '_'
+ * 
+ * @param badFileName the fileName to clean
+ * @return a clean filename
+ */
+public static String cleanFileName(String badFileName) {
+    StringBuilder cleanName = new StringBuilder();
+    for (int i = 0; i < badFileName.length(); i++) {
+        int c = (int)badFileName.charAt(i);
+        if (Arrays.binarySearch(illegalChars, c) < 0) {
+            cleanName.append((char)c);
+        } else {
+        	cleanName.append('_');
+        }
+    }
+    return cleanName.toString();
+}
+}
\ No newline at end of file
diff --git a/src/java/net/sf/jabref/util/ManageKeywordsAction.java b/src/java/net/sf/jabref/util/ManageKeywordsAction.java
index c9793a4..f5c6bb8 100644
--- a/src/java/net/sf/jabref/util/ManageKeywordsAction.java
+++ b/src/java/net/sf/jabref/util/ManageKeywordsAction.java
@@ -59,7 +59,7 @@ import net.sf.jabref.specialfields.Relevance;
 import net.sf.jabref.specialfields.SpecialFieldsUtils;
 import net.sf.jabref.undo.NamedCompound;
 
-import com.jgoodies.forms.builder.ButtonBarBuilder2;
+import com.jgoodies.forms.builder.ButtonBarBuilder;
 import com.jgoodies.forms.builder.DefaultFormBuilder;
 import com.jgoodies.forms.layout.FormLayout;
 import com.sun.star.bridge.oleautomation.Date;
@@ -141,7 +141,7 @@ public class ManageKeywordsAction extends MnemonicAwareAction {
         builder.append(add);
         builder.nextLine();
         
-        ButtonBarBuilder2 bb = new ButtonBarBuilder2();
+        ButtonBarBuilder bb = new ButtonBarBuilder();
         bb.addGlue();
         bb.addButton(ok);
         bb.addButton(cancel);
diff --git a/src/java/net/sf/jabref/util/MassSetFieldAction.java b/src/java/net/sf/jabref/util/MassSetFieldAction.java
index 899f877..777d781 100644
--- a/src/java/net/sf/jabref/util/MassSetFieldAction.java
+++ b/src/java/net/sf/jabref/util/MassSetFieldAction.java
@@ -28,7 +28,7 @@ import javax.swing.event.ChangeListener;
 import net.sf.jabref.*;
 import net.sf.jabref.undo.NamedCompound;
 
-import com.jgoodies.forms.builder.ButtonBarBuilder2;
+import com.jgoodies.forms.builder.ButtonBarBuilder;
 import com.jgoodies.forms.builder.DefaultFormBuilder;
 import com.jgoodies.forms.layout.FormLayout;
 
@@ -121,7 +121,7 @@ public class MassSetFieldAction extends MnemonicAwareAction {
         builder.append(overwrite, 3);
 
 
-        ButtonBarBuilder2 bb = new ButtonBarBuilder2();
+        ButtonBarBuilder bb = new ButtonBarBuilder();
         bb.addGlue();
         bb.addButton(ok);
         bb.addButton(cancel);
diff --git a/src/java/net/sf/jabref/wizard/auximport/gui/FromAuxDialog.java b/src/java/net/sf/jabref/wizard/auximport/gui/FromAuxDialog.java
index cd5e83b..a1e1547 100644
--- a/src/java/net/sf/jabref/wizard/auximport/gui/FromAuxDialog.java
+++ b/src/java/net/sf/jabref/wizard/auximport/gui/FromAuxDialog.java
@@ -78,7 +78,7 @@ import net.sf.jabref.JabRefFrame;
 import net.sf.jabref.gui.FileDialogs;
 import net.sf.jabref.wizard.auximport.AuxSubGenerator;
 
-import com.jgoodies.forms.builder.ButtonBarBuilder2;
+import com.jgoodies.forms.builder.ButtonBarBuilder;
 
 public class FromAuxDialog
         extends JDialog {
@@ -134,7 +134,7 @@ public class FromAuxDialog
         initPanels(parent);
 
         // insert the buttons
-        ButtonBarBuilder2 bb = new ButtonBarBuilder2();
+        ButtonBarBuilder bb = new ButtonBarBuilder();
         JPanel buttonPanel = bb.getPanel();
         buttonPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
 
diff --git a/src/java/net/sf/jabref/wizard/text/gui/TextInputDialog.java b/src/java/net/sf/jabref/wizard/text/gui/TextInputDialog.java
index 640e20c..17f8084 100644
--- a/src/java/net/sf/jabref/wizard/text/gui/TextInputDialog.java
+++ b/src/java/net/sf/jabref/wizard/text/gui/TextInputDialog.java
@@ -73,7 +73,7 @@ import net.sf.jabref.imports.FreeCiteImporter;
 import net.sf.jabref.wizard.integrity.gui.IntegrityMessagePanel;
 import net.sf.jabref.wizard.text.TagToMarkedTextStore;
 
-import com.jgoodies.forms.builder.ButtonBarBuilder2;
+import com.jgoodies.forms.builder.ButtonBarBuilder;
 
 public class TextInputDialog
     extends JDialog implements ActionListener
@@ -363,7 +363,7 @@ public class TextInputDialog
     cancelButton.setText( Globals.lang( "Cancel" ) ) ;
     cancelButton.addActionListener( this ) ;
 
-    ButtonBarBuilder2 bb = new ButtonBarBuilder2(buttons);
+    ButtonBarBuilder bb = new ButtonBarBuilder(buttons);
     buttons.setBorder(BorderFactory.createEmptyBorder(2,2,2,2));
     bb.addGlue();
     bb.addButton(okButton);
diff --git a/src/java/spl/gui/ImportDialog.java b/src/java/spl/gui/ImportDialog.java
index 5995138..e39a010 100644
--- a/src/java/spl/gui/ImportDialog.java
+++ b/src/java/spl/gui/ImportDialog.java
@@ -1,6 +1,6 @@
 package spl.gui;
 
-import com.jgoodies.forms.builder.ButtonBarBuilder2;
+import com.jgoodies.forms.builder.ButtonBarBuilder;
 import com.jgoodies.forms.builder.DefaultFormBuilder;
 import com.jgoodies.forms.layout.FormLayout;
 import net.sf.jabref.Globals;
@@ -99,7 +99,7 @@ public class ImportDialog extends JDialog {
         b.append(checkBoxDoNotShowAgain);
         b.append(useDefaultPDFImportStyle);
         b.getPanel().setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
-        ButtonBarBuilder2 bb = new ButtonBarBuilder2();
+        ButtonBarBuilder bb = new ButtonBarBuilder();
         bb.addGlue();
         bb.addButton(buttonOK);
         bb.addButton(buttonCancel);
diff --git a/src/java/spl/gui/MetaDataListDialog.java b/src/java/spl/gui/MetaDataListDialog.java
index 790979f..38559f5 100644
--- a/src/java/spl/gui/MetaDataListDialog.java
+++ b/src/java/spl/gui/MetaDataListDialog.java
@@ -43,7 +43,7 @@ import spl.SplWebClient;
 import spl.listener.LabelLinkListener;
 import spl.localization.LocalizationSupport;
 
-import com.jgoodies.forms.builder.ButtonBarBuilder2;
+import com.jgoodies.forms.builder.ButtonBarBuilder;
 
 public class MetaDataListDialog extends JDialog {
     private JPanel contentPane;
@@ -192,7 +192,7 @@ public class MetaDataListDialog extends JDialog {
                     iconLabel.setVisible(false);
                     labelFetch.setText(LocalizationSupport.message("The_Mr._dLib_web_service_version_you_trying_to_access_is_outdated."));
                     blankButton.setVisible(showBlankButton);
-                    JOptionPane.showMessageDialog(thisDialog, LocalizationSupport.message("This_JabRef_version_is_trying_to_access_an_old_version_of_Mr._dLib's_webservice_that_is_not_working_any_more.\\nPlease_visit_http://jabref.sourceforge.net_or_http://www.mr-dlib.org_for_more_information_and_updates.\\n\\n\\n"), LocalizationSupport.message("Web_Service_Version_Outdated"), JOptionPane.INFORMATION_MESSAGE);
+                    JOptionPane.showMessageDialog(thisDialog, LocalizationSupport.message("This_JabRef_version_is_trying_to_access_an_old_version_of_Mr._dLib's_webservice_that_is_not_working_any_more.\nPlease_visit_http://jabref.sourceforge.net_or_http://www.mr-dlib.org_for_more_information_and_updates."), LocalizationSupport.message("Web_Service_Version_Outdated"), JOptionPane.INFORMATION_MESSAGE);
                 }
                 if (webserviceStatus == SplWebClient.WebServiceStatus.WEBSERVICE_DOWN) {
                     iconLabel.setVisible(false);
@@ -282,7 +282,7 @@ public class MetaDataListDialog extends JDialog {
         buttonOK = new JButton(Globals.lang("Ok"));
         buttonCancel = new JButton(Globals.lang("Cancel"));
         moreInformationButton = new JButton(Globals.lang("More information"));
-        ButtonBarBuilder2 bb = new ButtonBarBuilder2();
+        ButtonBarBuilder bb = new ButtonBarBuilder();
         bb.addGlue();
         bb.addButton(moreInformationButton);
         bb.addButton(buttonOK);
diff --git a/src/plugins/net.sf.jabref.core/plugin.xml b/src/plugins/net.sf.jabref.core/plugin.xml
index 98db31a..1d7d66d 100644
--- a/src/plugins/net.sf.jabref.core/plugin.xml
+++ b/src/plugins/net.sf.jabref.core/plugin.xml
@@ -52,8 +52,7 @@
 	</extension>
 
     <!-- ACM Portal Fetcher disabled as the current implementation gets users banned -->
-    <!--
-	<extension id="ACMPortalFetcher" plugin-id="net.sf.jabref.core"
+    <extension id="ACMPortalFetcher" plugin-id="net.sf.jabref.core"
 		point-id="EntryFetcher">
 		<parameter id="entryFetcher"
 			value="net.sf.jabref.imports.ACMPortalFetcher" />
@@ -61,8 +60,7 @@
 		<parameter id="description"
 			value="Fetch Entries from ACM Portal." />
 	</extension>
-	-->
-	
+
 	<extension id="CiteSeerFetcher" plugin-id="net.sf.jabref.core"
 		point-id="EntryFetcher">
 		<parameter id="entryFetcher"
@@ -72,6 +70,24 @@
 			value="Fetch Entries from Citeseer." />
 	</extension>
 
+        <extension id="DiVAtoBibTexFetcher" plugin-id="net.sf.jabref.core"
+		point-id="EntryFetcher">
+		<parameter id="entryFetcher"
+			value="net.sf.jabref.imports.DiVAtoBibTeXFetcher" />
+		<parameter id="name" value="DiVA" />
+		<parameter id="description"
+			value="Fetch entries from DiVA." />
+	</extension>
+
+        <extension id="DOItoBibTexFetcher" plugin-id="net.sf.jabref.core"
+		point-id="EntryFetcher">
+		<parameter id="entryFetcher"
+			value="net.sf.jabref.imports.DOItoBibTeXFetcher" />
+		<parameter id="name" value="DOI to BibTeX Fetcher" />
+		<parameter id="description"
+			value="Fetch entries based on DOI." />
+	</extension>
+
 	<extension id="OAI2Fetcher" plugin-id="net.sf.jabref.core"
 		point-id="EntryFetcher">
 		<parameter id="entryFetcher"
@@ -81,6 +97,15 @@
 			value="Fetch Entries from OAI2 Archives like ArXiv." />
 	</extension>
 
+	<extension id="ADSFetcher" plugin-id="net.sf.jabref.core"
+		point-id="EntryFetcher">
+		<parameter id="entryFetcher"
+			value="net.sf.jabref.imports.ADSFetcher" />
+		<parameter id="name" value="ADS Entry Fetcher" />
+		<parameter id="description"
+			value="Fetch Entries from ADS." />
+	</extension>
+
 	<extension id="SPIRESFetcher" plugin-id="net.sf.jabref.core"
 		point-id="EntryFetcher">
 		<parameter id="entryFetcher"
@@ -144,14 +169,14 @@
         value="Fetch entries based on ISBN." />
     </extension>
 
-    <!--<extension id="GoogleScholarFetcher" plugin-id="net.sf.jabref.core"
+    <extension id="GoogleScholarFetcher" plugin-id="net.sf.jabref.core"
 		point-id="EntryFetcher">
       <parameter id="entryFetcher"
 		 value="net.sf.jabref.imports.GoogleScholarFetcher" />
       <parameter id="name" value="Google Scholar Entry Fetcher" />
       <parameter id="description"
 		 value="Fetch Entries from Google Scholar." />
-    </extension>-->
+    </extension>
     <!--<extension id="ScienceDirectFetcher" plugin-id="net.sf.jabref.core"
         point-id="EntryFetcher">
         <parameter id="entryFetcher"
diff --git a/src/resource/JabRef_da.properties b/src/resource/JabRef_da.properties
index d1468c7..431c2ea 100644
--- a/src/resource/JabRef_da.properties
+++ b/src/resource/JabRef_da.properties
@@ -1136,7 +1136,7 @@ Legacy_file_fields=For\u00e6ldede_fil-felter
 
 This_makes_JabRef_look_up_each_%0_extension_and_check_if_the_file_exists._If_not,_you_will_be_given_options<BR>to_resolve_the_problem.=Dette_f\u00e5r_JabRef_til_at_sl\u00e5_hver_%0-endelse_op_og_tjekke,_om_filen_eksisterer._Hvis_ikke_vil_du_f\u00e5_mulighed_for_at<br>l\u00f8se_problemet.
 
-Run_Fetcher,_e.g._"--fetch=Medline\:cancer"=K\u00f8r_hentev\u00e6rkt\u00f8j,_f.eks._"--fetch\=Medline\:cancer"
+Run_Fetcher,_e.g._"--fetch\=Medline\:cancer"=K\u00f8r_hentev\u00e6rkt\u00f8j,_f.eks._"--fetch\=Medline\:cancer"
 
 The_ACM_Digital_Library=ACM_Digital_Library
 Reset=Nulstil
@@ -1173,7 +1173,7 @@ Set/clear/rename_fields=S\u00e6t/ryd/omd\u00f8b_felter
 Rename_field_to\:=Omd\u00f8b_felt_til_\:
 Move_contents_of_a_field_into_a_field_with_a_different_name=Flyt_indhold_af_et_felt_til_et_felt_med_et_andet_navn
 You_can_only_rename_one_field_at_a_time=Du_kan_kun_omd\u00f8be_et_felt_ad_gangen
-Remove_all_broken_links=Fjern_alle_\u00f8delagte links
+Remove_all_broken_links=Fjern_alle_\u00f8delagte_links
 
 Cannot_use_port_%0_for_remote_operation;_another_application_may_be_using_it._Try_specifying_another_port.=Kan_ikke_bruge_port_%0_til_fjernstyring;_et_andet_program_bruger_den_m\u00e5ske._Pr\u00f8v_en_anden_port.
 
@@ -1257,13 +1257,12 @@ File_directory_is_not_set_or_does_not_exist.=Filbibliotek_er_ikke_specificeret_e
 Move_file_to_file_directory.=Flyt_fil_til_filbibliotek.
 Rename_file_to=Omd\u00f8b_fil_til
 <b>All_Entries</b>_(this_group_cannot_be_edited_or_removed)=<b>Alle_poster</b>_(denne_gruppe_kan_ikke_redigeres_eller_flyttes)
-</b>_-_static_group=</b>_-_statisk_gruppe
-,_refines_supergroup=,_afgr\u00e6nser_overgruppen
-,_includes_subgroups=,_inkluderer_undergrupper
-</b>_-_dynamic_group_(<b>=</b>_-_dynamisk_gruppe_(<b>
-</b>_contains_<b>=</b>_indeholder_<b>
-</b>_-_dynamic_group_(=</b>_-_dynamisk_gruppe_(
-search_expression\:_<b>=s\u00f8ge-udtryk:_<b>
+static_group=statisk_gruppe
+dynamic_group=dynamisk_gruppe
+refines_supergroup=afgr\u00e6nser_overgruppen
+includes_subgroups=inkluderer_undergrupper
+contains=indeholder
+search_expression=s\u00f8ge-udtry
 
 Disable_file_renaming_in_non-native_file_dialog=Deaktiver_omd\u00f8bning_af_filer_i_fil-dialogboks
 File_dialog=Fil-dialogboks
@@ -1283,7 +1282,7 @@ This_database_contains_one_or_more_duplicated_BibTeX_keys.=Denne_database_indeho
 Do_you_want_to_resolve_duplicate_keys_now?=Vil_du_udrede_dublerede_BibTeX-n\u00f8gler_nu?
 
 Find_and_remove_duplicate_BibTeX_keys=Find_og_fjern_dublederede_BibTeX-n\u00f8gler
-Expected_syntax_for_--fetch='<name_of_fetcher>\:<query>'=Forventet_syntaks_for_--fetch\='<navn_p\u00e5_hentev\u00e6rkt\u00f8j>\:<foresp\u00f8rgsel>'
+Expected_syntax_for_--fetch\='<name_of_fetcher>\:<query>'=Forventet_syntaks_for_--fetch='<navn_p\u00e5_hentev\u00e6rkt\u00f8j>:<foresp\u00f8rgsel>'
 Duplicate_BibTeX_key=Dubleret_BibTeX-n\u00f8gle
 Duplicate_key=Dubleret_n\u00f8gle
 Generate_key=Generer_n\u00f8gle
@@ -1315,31 +1314,31 @@ You_must_enter_an_integer_value_in_the_interval_1025-65535_in_the_text_field_for
 Automatically_open_browse_dialog_when_creating_new_file_link=\u00c5bn_automatisk_fildialog_n\u00e5r_nyt_link_oprettes
 
 # Mr. dLib strings:
-Import_Metadata_from\:=Importer metadata fra:
-Choose_the_source_for_the_metadata_import=V\u00e6lg kilde for import af metadata
-Create_entry_based_on_XMP_data=Opret post baseret p\u00e5 XMP-data
-Create_entry_based_on_data_fetched_from=Opret post baseret p\u00e5 data fra
-Create_blank_entry_linking_the_PDF=Opret tom post med link til PDF-filen
-Only_attach_PDF=Tilf\u00f8j kun PDF
-Mr._dLib_Metadata_Entries_Associated_With\:=Mr. dLib metadata poster associeret med:
-Mr._dLib_Metadata_Entries_Associated_With_PDF_File=Mr. dLib metadata poster associeret med PDF-fil
+Import_Metadata_from\:=Importer_metadata_fra:
+Choose_the_source_for_the_metadata_import=V\u00e6lg_kilde_for_import_af_metadata
+Create_entry_based_on_XMP_data=Opret_post_baseret_p\u00e5_XMP-data
+Create_entry_based_on_data_fetched_from=Opret_post_baseret_p\u00e5_data_fra
+Create_blank_entry_linking_the_PDF=Opret_tom_post_med_link_til_PDF-filen
+Only_attach_PDF=Tilf\u00f8j_kun_PDF
+Mr._dLib_Metadata_Entries_Associated_With\:=Mr._dLib_metadata_poster_associeret_med:
+Mr._dLib_Metadata_Entries_Associated_With_PDF_File=Mr._dLib_metadata_poster_associeret_med_PDF-fil
 Title=Titel
 Author(s)=Forfatter(e)
 Published_Year=Udgivelses\u00e5r
-No_metadata_found.=Ingen metadata fundet.
-Mr._dLib_web_service_is_temporarily_unavailable.=Mr. dLib web-servicen er midlertidigt utilg\u00e6ngelig.
-Mr._dLib_web_service_is_temporarily_down._Please_try_again_later.=Mr. dLib web-servicen er midlertidigt nede. Pr\u00f8v venligst igen senere.
-You_are_not_connected_to_the_Internet._To_access_Mr._dLib_web_service_an_internet_connection_is_needed.=Du er ikke forbundet til Internettet. For at tilg\u00e5 Mr. dLib web-servicen kr\u00e6ves en Internetforbindelse.
-No_Internet_Connection.=Ingen Internetforbindelse.
-This_JabRef_version_is_trying_to_access_an_old_version_of_Mr._dLib's_webservice_that_is_not_working_any_more.\nPlease_visit_http\://jabref.sourceforge.net_or_http\://www.mr-dlib.org_for_more_information_and_updates.\n\n\n=Denne version af JabRef pr\u00f8ver at tilg\u00e5 en version af Mr. dLib web-servicen, som ikke l\u00e6ngere er tilg\u00e6ngelig.\nSe venligst http://jabref.sourceforge.net eller http://www.mr-dlib.org for mere information og opdateringer.\n\n\n
-Web_Service_Version_Outdated=Web-service-version for\u00e6ldet
-The_Mr._dLib_web_service_version_you_trying_to_access_is_outdated.=Mr. dLib web-service-versionen, du pr\u00f8ver at tilg\u00e5, er for\u00e6ldet.
-Update_empty_fields_with_data_fetched_from=Opdater tomme felter med data hentet fra
-Create_New_Entry=Opret ny post
-Update_Existing_Entry=Opdater eksisterende post
-Mr._dLib=Mr. dLib
-More_information=Mere information
-Fetching_Metadata...=Henter metadata...
+No_metadata_found.=Ingen_metadata_fundet.
+Mr._dLib_web_service_is_temporarily_unavailable.=Mr._dLib_web-servicen_er_midlertidigt_utilg\u00e6ngelig.
+Mr._dLib_web_service_is_temporarily_down._Please_try_again_later.=Mr._dLib_web-servicen_er_midlertidigt_nede._Pr\u00f8v_venligst_igen_senere.
+You_are_not_connected_to_the_Internet._To_access_Mr._dLib_web_service_an_internet_connection_is_needed.=Du_er_ikke_forbundet_til_Internettet._For_at_tilg\u00e5_Mr._dLib_web-servicen_kr\u00e6ves_en_Internetforbindelse.
+No_Internet_Connection.=Ingen_Internetforbindelse.
+This_JabRef_version_is_trying_to_access_an_old_version_of_Mr._dLib's_webservice_that_is_not_working_any_more.\nPlease_visit_http\://jabref.sourceforge.net_or_http\://www.mr-dlib.org_for_more_information_and_updates.=Denne_version_af_JabRef_pr\u00f8ver_at_tilg\u00e5_en_version_af_Mr._dLib_web-servicen,_som_ikke_l\u00e6ngere_er_tilg\u00e6ngelig.\nSe_venligst_http://jabref.sourceforge.net_eller_http://www.mr-dlib.org_for_mere_information_og_opdateringer.
+Web_Service_Version_Outdated=Web-service-version_for\u00e6ldet
+The_Mr._dLib_web_service_version_you_trying_to_access_is_outdated.=Mr._dLib_web-service-versionen,_du_pr\u00f8ver_at_tilg\u00e5,_er_for\u00e6ldet.
+Update_empty_fields_with_data_fetched_from=Opdater_tomme_felter_med_data_hentet_fra
+Create_New_Entry=Opret_ny_post
+Update_Existing_Entry=Opdater_eksisterende_post
+Mr._dLib=Mr._dLib
+More_information=Mere_information
+Fetching_Metadata...=Henter_metadata...
 Metadata=Metadata
 Autocomplete_names_in_'Firstname_Lastname'_format_only=Autofuldf\u00f8r_kun_navne_i_formatet_'Fornavn_Efternavn'
 Autocomplete_names_in_'Lastname,_Firstname'_format_only=Autofuldf\u00f8r_kun_navne_i_formatet_'Efternavn,_Fornavn'
@@ -1565,4 +1564,91 @@ Insert_selected_citations_into_TeXstudio=
 The_current_BibTeX_key_will_be_overwritten._Continue?=
 Overwrite_key=
 Not_overwriting_existing_key._To_change_this_setting,_open_Options_->_Prefererences_->_BibTeX_key_generator=
-How_would_you_like_to_link_to_'%0'?=
\ No newline at end of file
+How_would_you_like_to_link_to_'%0'?=
+Bibtex_key_patterns=
+Changed_special_field_settings=
+Clear_priority=
+Clear_rank=
+Compact_rank=
+Convert_1st,_2nd,_..._to_real_superscripts=
+Dropped_comment_from_database=
+Enable_PDF_preview=
+Enable_special_fields=
+Five_stars=
+Four_stars=
+Help_on_special_fields=
+Keywords_of_selected_entries=
+Manage_content_selectors=
+Manage_keywords=
+Marked_entries'_quality_as_good=
+Marked_entries_as_relevant=
+No_priority_information=
+No_rank_information=
+One_star=
+Priority=
+Priority_high=
+Priority_low=
+Priority_medium=
+Quality=
+Rank=
+Relevance=
+Set_priority=
+Set_priority_to_high=
+Set_priority_to_low=
+Set_priority_to_medium=
+Set_rank_to_five_stars=
+Set_rank_to_four_stars=
+Set_rank_to_one_star=
+Set_rank_to_three_stars=
+Set_rank_to_two_stars=
+Show_one_letter_heading_for_icon_columns=
+Show_priority=
+Show_quality=
+Show_rank=
+Show_relevance=
+Synchronize_with_keywords=
+Synchronized_special_fields_based_on_keywords=
+Three_stars=
+Toggle_relevance=
+Toogle_quality_assured=
+Two_stars=
+Update_keywords=
+Write_values_of_special_fields_as_separate_fields_to_BibTeX=
+You_have_changed_settings_for_special_fields.=
+no_preview_available=
+
+%0_entries_found._To_reduce_server_load,_only_%1_will_be_downloaded.=
+A_string_with_that_label_already_exists=
+Connection_to_OpenOffice_has_been_lost._Please_make_sure_OpenOffice_is_running,_and_try_to_reconnect.=
+Correct_the_entry,_and_reopen_editor_to_display/edit_source.=
+Could_not_connect_to_a_running_gnuserv_process._Make_sure_that_Emacs_or_XEmacs_is_running,<BR>and_that_the_server_has_been_started_(by_running_the_command_'server-start'/'gnuserv-start').=
+Could_not_connect_to_running_OpenOffice.\nMake_sure_you_have_installed_OpenOffice_with_Java_support.\nIf_connecting_manually,_please_verify_program_and_library_paths.\n\nError_message\:_=
+Created_group_"%0".=
+File_has_been_updated_externally._Are_you_sure_you_want_to_save?=
+If_a_pasted_or_imported_entry_already_has_the_field_set,_overwrite.=
+Import_Metadata_From_PDF=
+Not_connected_to_any_Writer_document._Please_make_sure_a_document_is_open,_and_use_the_'Select_Writer_document'_button_to_connect_to_it.=
+Please_note_that_this_is_an_early_beta_version._Do_not_use_it_without_backing_up_your_files!=
+Removed_all_subgroups_of_group_"%0".=
+To_disable_the_memory_stick_mode_rename_or_remove_the_jabref.xml_file_in_the_same_folder_as_JabRef.=
+Unable_to_connect._One_possible_reason_is_that_JabRef_and_OpenOffice/LibreOffice_are_not_both_running_in_either_32_bit_mode_or_64_bit_mode.=
+Unable_to_determine_plugin_name_and_version._This_may_not_be_a_valid_JabRef_plugin.=
+Use_the_following_delimiter_character(s)\:=
+When_downloading_files,_or_moving_linked_files_to_the_file_directory,_prefer_the_bib_file_location_rather_than_the_file_directory_set_above=
+Your_style_file_specifies_the_character_format_'%0',_which_is_undefined_in_your_current_OpenOffice_document.=
+Your_style_file_specifies_the_paragraph_format_'%0',_which_is_undefined_in_your_current_OpenOffice_document.=
+
+Error_fetching_from_Google_Scholar=
+Run_HTML_converter_on_title=
+Searching...=
+You_have_selected_more_than_%0_entries_for_download._Some_web_sites_might_block_you_if_you_make_too_many_rapid_downloads._Do_you_want_to_continue?=
+Confirm_selection=
+Unknown_DOI\:_'%0'.=
+Get_BibTeX_entry_from_DOI=
+Prefer_converting_subscripts_and_superscripts_to_equations_rather_than_text=
+Add_{}_to_specified_title_words_on_search_to_keep_the_correct_case=
+Import_conversions=
+Run_filter_on_title_keeping_the_case_of_selected_words=
+Intermittent_errors_on_the_IEEE_Xplore_server._Please_try_again_in_a_while.=
+Please_enter_a_search_string=
+Please_open_or_start_a_new_database_before_searching=
diff --git a/src/resource/JabRef_de.properties b/src/resource/JabRef_de.properties
index c4dc7d8..35ce132 100644
--- a/src/resource/JabRef_de.properties
+++ b/src/resource/JabRef_de.properties
@@ -1,5 +1,5 @@
 #!
-#! created/edited by Popeye version 0.54 (popeye.sourceforge.net)
+#! created/edited by Popeye version 0.55 (popeye.sourceforge.net)
 #! encoding:ISO-8859-1
 
 %0_contains_the_Regular_Expression_<b>%1</b>=%0_den_regul\u00e4ren_Ausdruck_<b>%1</b>_enth\u00e4lt
@@ -1920,7 +1920,7 @@ Legacy_file_fields=Obsolete_Datei-Felder
 
 This_makes_JabRef_look_up_each_%0_extension_and_check_if_the_file_exists._If_not,_you_will_be_given_options<BR>to_resolve_the_problem.=JabRef_sucht_nach_jeder_%0-Dateiendung_und_\u00fcberpr\u00fcft,_ob_die_Datei_existiert.<br>Falls_nicht,_erhalten_Sie_Optionen,_um_das_Problem_zu_l\u00f6sen.
 
-Run_Fetcher,_e.g._"--fetch=Medline\:cancer"=Recherche_starten,_z.B._"--fetch\=Medline\:cancer"
+Run_Fetcher,_e.g._"--fetch\=Medline\:cancer"=Recherche_starten,_z.B._"--fetch=Medline:cancer"
 
 The_ACM_Digital_Library=ACM_Digital_Library
 Reset=Zur\u00fccksetzen
@@ -2041,13 +2041,12 @@ File_directory_is_not_set_or_does_not_exist.=Dateiverzeichnis_wurde_nicht_angege
 Move_file_to_file_directory.=Datei_ins_Dateiverzeichnis_verschieben
 Rename_file_to=Datei_umbenennen_in
 <b>All_Entries</b>_(this_group_cannot_be_edited_or_removed)=<b>Alle_Eintr\u00e4ge</b>_(diese_Gruppe_kann_nicht_ver\u00e4ndert_oder_gel\u00f6scht_werden)
-</b>_-_static_group=</b>_-_statische_Gruppe
-,_refines_supergroup=,_bezieht_die_Obergruppe_mit_ein
-,_includes_subgroups=,_ber\u00fccksichtigt_Untergruppen
-</b>_-_dynamic_group_(<b>=</b>_-_dynamische_Gruppe_(<b>
-</b>_contains_<b>=</b>_enth\u00e4lt_<b>
-</b>_-_dynamic_group_(=</b>_-_dynamische_Gruppe_(
-search_expression\:_<b>=Suchausdruck\:_<b>
+static_group=statische_Gruppe
+dynamic_group=dynamische_Gruppe
+refines_supergroup=bezieht_die_Obergruppe_mit_ein
+includes_subgroups=ber\u00fccksichtigt_Untergruppen
+contains=enth\u00e4lt
+search_expression=Suchausdruck
 
 Disable_file_renaming_in_non-native_file_dialog=Umbenennen_von_Dateien_im_plattformunabh\u00e4ngigen_Dateidialog_deaktivieren
 File_dialog=Dateidialog
@@ -2068,7 +2067,7 @@ This_database_contains_one_or_more_duplicated_BibTeX_keys.=Diese_Datei_enth\u00e
 Do_you_want_to_resolve_duplicate_keys_now?=Wollen_Sie_die_doppelten_Eintr\u00e4ge_jetzt_beseitigen?
 
 Find_and_remove_duplicate_BibTeX_keys=Finde_und_entferne_doppelte_BibTeX-Keys
-Expected_syntax_for_--fetch='<name_of_fetcher>\:<query>'=Erwartete_Syntax_f\u00fcr_--fetch\='<Name_des_Fetchers>\:<Anfrage>'
+Expected_syntax_for_--fetch\='<name_of_fetcher>\:<query>'=Erwartete_Syntax_f\u00fcr_--fetch='<Name_des_Fetchers>:<Anfrage>'
 Duplicate_BibTeX_key=Doppelter_BibTeX-Key
 Duplicate_key=Doppelter_Key
 Generate_key=Key_erstellen
@@ -2115,13 +2114,13 @@ Mr._dLib_web_service_is_temporarily_unavailable.=Der_Mr._dLib_Web-Service_ist_de
 Mr._dLib_web_service_is_temporarily_down._Please_try_again_later.=Der_Mr._dLib_Web-Service_ist_derzeit_nicht_erreichbar._Bitte_versuchen_Sie_es_sp\u00e4ter_erneut.
 You_are_not_connected_to_the_Internet._To_access_Mr._dLib_web_service_an_internet_connection_is_needed.=Sie_sind_nicht_mit_dem_Internet_verbunden._Um_auf_den_Mr._dLib_Web-Service_zuzugreifen,_ist_eine_Internetverbindung_erforderlich.
 No_Internet_Connection.=Keine_Internetverbindung.
-This_JabRef_version_is_trying_to_access_an_old_version_of_Mr._dLib's_webservice_that_is_not_working_any_more.\nPlease_visit_http\://jabref.sourceforge.net_or_http\://www.mr-dlib.org_for_more_information_and_updates.\n\n\n=Diese_JabRef-Version_versucht,_auf_eine_alte_Version_des_Mr._dLib_Web-Service_zuzugreifen,_die_nicht_mehr_funktioniert.\nBitte_besuchen_Sie_http://jabref.sourceforge.net_oder_http://www.mr-dlib.org_f\u00fcr_weitere_Informationen_und_Updates.\n\n\n
+This_JabRef_version_is_trying_to_access_an_old_version_of_Mr._dLib's_webservice_that_is_not_working_any_more.\nPlease_visit_http\://jabref.sourceforge.net_or_http\://www.mr-dlib.org_for_more_information_and_updates.=Diese_JabRef-Version_versucht,_auf_eine_alte_Version_des_Mr._dLib_Web-Service_zuzugreifen,_die_nicht_mehr_funktioniert.\nBitte_besuchen_Sie_http://jabref.sourceforge.net_oder_http://www.mr-dlib.org_f\u00fcr_weitere_Informationen_und_Updates.
 Web_Service_Version_Outdated=Veraltete_Version_des_Web-Service
 The_Mr._dLib_web_service_version_you_trying_to_access_is_outdated.=Die_Version_des_Mr._dLib_Web-Service,_auf_die_Sie_zugreifen_wollen,_ist_veraltet.
 Update_empty_fields_with_data_fetched_from=Leere_Felder_aktualisieren_mit_Daten_von
 Create_New_Entry=Neuen_Eintrag_erstellen
 Update_Existing_Entry=Bestehenden_Eintrag_aktualisieren
-Mr._dLib=Mr. dLib
+Mr._dLib=Mr._dLib
 More_information=Weitere_Informationen
 Fetching_Metadata...=Lade_Metadaten...
 Metadata=Metadaten
@@ -2262,7 +2261,7 @@ You_need_to_select_one_of_your_open_databases_from_which_to_choose_entries,_as_w
 First_select_entries_to_clean_up.=W\u00e4hlen_Sie_zuerst_die_Eintr\u00e4ge_aus,_f\u00fcr_die_ein_Cleanup_durchgef\u00fchrt_werden_soll.
 Cleanup_entry=Eintrag_aufr\u00e4umen
 Autogenerate_PDF_Names=Automatische_PDF_Umbenennung
-Auto-generating_PDF-Names_does_not_support_undo._Continue?=Automatische_PDF_Umbenennung_kann_nicht_r\u00fcckg\u00e4ngig_gemacht_werden. Fortfahren?
+Auto-generating_PDF-Names_does_not_support_undo._Continue?=Automatische_PDF_Umbenennung_kann_nicht_r\u00fcckg\u00e4ngig_gemacht_werden._Fortfahren?
 File_rename_failed_for=Dateiumbenennung_schlug_fehl_f\u00fcr
 You_have_toggled_the_BibLaTeX_mode.=Sie_haben_den_BibLaTeX-Modus_de/aktiviert.
 Use_full_firstname_whenever_possible=Den_ganzen_Vornamen_nutzen,_wenn_m\u00f6glich
@@ -2332,24 +2331,112 @@ Starts_the_import_of_bibtex_entries.=Startet_den_Import_von_BibTeX-Eintr\u00e4ge
 Leave_this_dialog.=Verlasse_diesen_Dialog.
 Create_directory_based_keywords=Erstelle_Stichworte,_die_auf_Ordnern_basieren
 Creates_keywords_in_created_entrys_with_directory_pathnames=Erstellt_Stichworte_in_erstellten_Eintr\u00e4gen_mit_Ordner-Pfadnamen
-Select_a_directory_where_the_search_shall_start.=
-Select_file_type\:=
-These_files_are_not_linked_in_the_active_database.=
-Entry_type_to_be_created\:=
-Searching_file_system...=
-Importing_into_Database...=
-Select_directory=
-Select_files=
-Bibtex_entry_creation=
-<No_selection>=
-Push_selection_to_TeXstudio=
-Path_to_TeXstudio=
-Program_'%0'_not_found=
-Pushed_citations_to_TeXstudio=
-Unable_to_connect_to_freecite_online_service.=
-Parse_with_FreeCite=
-Insert_selected_citations_into_TeXstudio=
-The_current_BibTeX_key_will_be_overwritten._Continue?=
-Overwrite_key=
-Not_overwriting_existing_key._To_change_this_setting,_open_Options_->_Prefererences_->_BibTeX_key_generator=
-How_would_you_like_to_link_to_'%0'?=
\ No newline at end of file
+Select_a_directory_where_the_search_shall_start.=Verzeichnis_w\u00e4hlen,_in_dem_die_Suche_starten_soll.
+Select_file_type\:=Dateityp_w\u00e4hlen:
+These_files_are_not_linked_in_the_active_database.=Diese_Dateien_sind_in_der_aktiven_Datenbank_nicht_verlinkt.
+Entry_type_to_be_created\:=Eintragstyp,_der_erstellt_werden_soll:
+Searching_file_system...=Dateisystem_wird_durchsucht...
+Importing_into_Database...=Importieren_in_die_Datei...
+Select_directory=Verzeichnis_w\u00e4hlen
+Select_files=Dateien_w\u00e4hlen
+Bibtex_entry_creation=Erstellung_eines_BibTeX-Eintrags
+<No_selection>=<Keine_Auswahl>
+Push_selection_to_TeXstudio=Auswahl_in_TeXstudio_einf\u00fcgen
+Path_to_TeXstudio=Pfad_zu_TeXstudio
+Program_'%0'_not_found=Programm_'%0'_nicht_gefunden
+Pushed_citations_to_TeXstudio=Literaturverweise_in_TeXstudio_eingef\u00fcgt
+Unable_to_connect_to_freecite_online_service.=Verbindung_zu_FreeCite_konnte_nicht_hergestellt_werden.
+Parse_with_FreeCite=Mit_FreeCite_parsen
+Insert_selected_citations_into_TeXstudio=Ausgew\u00e4hlte_Eintr\u00e4ge_in_TeXstudio_einf\u00fcgen
+The_current_BibTeX_key_will_be_overwritten._Continue?=Der_aktuelle_BibTeX-Key_wird_\u00fcberschrieben._Fortfahren?
+Overwrite_key=Key_\u00fcberschreiben
+Not_overwriting_existing_key._To_change_this_setting,_open_Options_->_Prefererences_->_BibTeX_key_generator=Der_existierende_Key_wird_nicht_\u00fcberschrieben._Um_diese_Einstellung_zu_\u00e4ndern,_\u00f6ffnen_Sie_Optionen_->_Einstellungen_->_BibTeX-Key-Generator
+How_would_you_like_to_link_to_'%0'?=Wie_m\u00f6chten_Sie_zu_'%0'_verlinken?
+
+Bibtex_key_patterns=BibTeX-Key-Muster
+Changed_special_field_settings=Einstellungen_f\u00fcr_spezielle_Felder_ge\u00e4ndert
+Clear_priority=Priorit\u00e4t_aufheben
+Clear_rank=Rang_aufheben
+Compact_rank=Kompakter_Rang
+Convert_1st,_2nd,_..._to_real_superscripts=1st,_2nd,_..._in_hochgestellte_Buchstaben_konvertieren
+Dropped_comment_from_database=Kommentar_aus_Datei_gel\u00f6scht
+Enable_PDF_preview=PDF-Vorschau_aktivieren
+Enable_special_fields=Spezielle_Felder_aktivieren
+Five_stars=F\u00fcnf_Sterne
+Four_stars=Vier_Sterne
+Help_on_special_fields=Hilfe_zu_speziellen_Feldern
+Keywords_of_selected_entries=Stichworte_der_ausgew\u00e4hlten_Eintr\u00e4ge
+Manage_content_selectors=Inhaltsauswahl_verwalten
+Manage_keywords=Stichworte_verwalten
+Marked_entries'_quality_as_good=Qualit\u00e4t_der_Eintr\u00e4ge_als_gut_markieren
+Marked_entries_as_relevant=Eintr\u00e4ge_als_relevant_markieren
+No_priority_information=Keine_Informationen_zur_Priorit\u00e4t
+No_rank_information=Keine_Informationen_zum_Rang
+One_star=Ein_Stern
+Priority=Priorit\u00e4t
+Priority_high=Hohe_Priorit\u00e4t
+Priority_low=Niedrige_Priorit\u00e4t
+Priority_medium=Mittlere_Priorit\u00e4t
+Quality=Qualit\u00e4t
+Rank=Rang
+Relevance=Relevanz
+Set_priority=Priort\u00e4t_setzen
+Set_priority_to_high=Priorit\u00e4t_auf_hoch_setzen
+Set_priority_to_low=Priorit\u00e4t_auf_niedrig_setzen
+Set_priority_to_medium=Priorit\u00e4t_auf_mittel_setzen
+Set_rank_to_five_stars=Rang_auf_f\u00fcnf_Sterne_setzen
+Set_rank_to_four_stars=Rang_auf_vier_Sterne_setzen
+Set_rank_to_one_star=Rang_auf_einen_Stern_setzen
+Set_rank_to_three_stars=Rang_auf_drei_Sterne_setzen
+Set_rank_to_two_stars=Rang_auf_zwei_Sterne_setzen
+Show_one_letter_heading_for_icon_columns=\u00dcberschrift_mit_einem_Buchstaben_f\u00fcr_Spalten_mit_Icons_anzeigen
+Show_priority=Priorit\u00e4t_anzeigen
+Show_quality=Qualit\u00e4t_anzeigen
+Show_rank=Rang_anzeigen
+Show_relevance=Relevanz_anzeigen
+Synchronize_with_keywords=Mit_Stichworten_synchronisieren
+Synchronized_special_fields_based_on_keywords=Spezielle_Felder_wurden_mit_den_Stichworten_synchronisiert
+Three_stars=Drei_Sterne
+Toggle_relevance=Relevanz_ein-/ausschalten
+Toogle_quality_assured=Qualit\u00e4t_ein-/ausschalten
+Two_stars=Zwei_Sterne
+Update_keywords=Stichworte_aktualisieren
+Write_values_of_special_fields_as_separate_fields_to_BibTeX=Werte_von_speziellen_Feldern_als_separate_Felder_in_die_BibTeX-Datei_schreiben
+You_have_changed_settings_for_special_fields.=Sie_haben_die_Einstellungen_f\u00fcr_spezielle_Felder_ge\u00e4ndert.
+no_preview_available=keine_Vorschau_verf\u00fcgbar
+
+%0_entries_found._To_reduce_server_load,_only_%1_will_be_downloaded.=%0_Eintr\u00e4ge_gefunden._Um_die_Serverlast_zu_reduzieren,_werden_nur_%1_heruntergeladen.
+A_string_with_that_label_already_exists=Ein_String_mit_diesem_Label_ist_bereits_vorhanden
+Connection_to_OpenOffice_has_been_lost._Please_make_sure_OpenOffice_is_running,_and_try_to_reconnect.=Verbindung_zu_OpenOffice_verloren._Bitte_stellen_Sie_sicher,_dass_OpenOffice_l\u00e4uft,_und_versuchen_Sie,_erneut_zu_verbinden.
+Correct_the_entry,_and_reopen_editor_to_display/edit_source.=Eintrag_korrigieren_und_Editor_erneut_\u00f6ffnen,_um_den_Quelltext_anzuzeigen/zu_bearbeiten.
+Could_not_connect_to_a_running_gnuserv_process._Make_sure_that_Emacs_or_XEmacs_is_running,<BR>and_that_the_server_has_been_started_(by_running_the_command_'server-start'/'gnuserv-start').=Keine_Verbindung_zu_einem_laufenden_gnuserv-Prozess_m\u00f6glich._Vergewissern_Sie_sich,_dass_Emacs_oder_XEmacs_l\u00e4uft<BR>und_dass_der_Server_gestartet_wurde_(mit_dem_Befehl_'server-start'/'gnuserv-start').
+Could_not_connect_to_running_OpenOffice.\nMake_sure_you_have_installed_OpenOffice_with_Java_support.\nIf_connecting_manually,_please_verify_program_and_library_paths.\n\nError_message\:_=Verbindung_zu_OpenOffice_fehlgeschlagen.\nVergewissern_Sie_sich,_dass_Sie_OpenOffice_mit_Java-Unterst\u00fctzung_installiert_haben.\nBei_manueller_Verbindung_\u00fcberpr\u00fcfen_Sie_bitte_die_Programm-_und_Library-Pfade.\n\nFehlermeldung:_
+Created_group_"%0".=Gruppe_"%0"_wurde_erstellt.
+File_has_been_updated_externally._Are_you_sure_you_want_to_save?=Die_Datei_wurde_extern_ge\u00e4ndert._Sind_Sie_sicher,_dass_Sie_speichern_m\u00f6chten?
+If_a_pasted_or_imported_entry_already_has_the_field_set,_overwrite.=Falls_bei_einem_eingef\u00fcgten_oder_importierten_Eintrag_das_Feld_bereits_belegt_ist,_\u00fcberschreiben.
+Import_Metadata_From_PDF=Metadaten_aus_PDF_importieren
+Not_connected_to_any_Writer_document._Please_make_sure_a_document_is_open,_and_use_the_'Select_Writer_document'_button_to_connect_to_it.=Keine_Verbindung_zu_einem_Writer-Dokument._Bitte_vergewissern_Sie_sich,_dass_ein_Dokument_ge\u00f6ffnet_ist,_und_benutzen_Sie_die_Schaltfl\u00e4che_'Writer-Dokument_w\u00e4hlen',_um_eine_Verbindung_herzustellen.
+Please_note_that_this_is_an_early_beta_version._Do_not_use_it_without_backing_up_your_files!=Bitte_beachten_Sie,_dass_dies_eine_fr\u00fche_Beta-Version_ist._Benutzen_Sie_sie_nicht,_ohne_ihre_Dateien_vorher_zu_sichern.
+Removed_all_subgroups_of_group_"%0".=Alle_Untergruppen_der_Gruppe_"%0"_wurden_entfernt.
+To_disable_the_memory_stick_mode_rename_or_remove_the_jabref.xml_file_in_the_same_folder_as_JabRef.=Um_den_USB-Stick-Modus_zu_deaktivieren,_benennen_Sie_die_Datei_jabref.xml_in_demselben_Ordner_als_JabRef_oder_l\u00f6schen_Sie_sie.
+Unable_to_connect._One_possible_reason_is_that_JabRef_and_OpenOffice/LibreOffice_are_not_both_running_in_either_32_bit_mode_or_64_bit_mode.=Verbindung_fehlgeschlagen._Ein_m\u00f6glicher_Grund_ist,_dass_JabRef_und_OpenOffice/LibreOffice_nicht_beide_im_32-bit_oder_64-bit_Modus_laufen.
+Unable_to_determine_plugin_name_and_version._This_may_not_be_a_valid_JabRef_plugin.=Name_und_Version_des_Plugins_konnten_nicht_ermittelt_werden._Dies_ist_m\u00f6glicherweise_kein_g\u00fcltiges_JabRef-Plugin.
+Use_the_following_delimiter_character(s)\:=Benutzen_Sie_die_folgenden_Trennzeichen:
+When_downloading_files,_or_moving_linked_files_to_the_file_directory,_prefer_the_bib_file_location_rather_than_the_file_directory_set_above=Beim_Herunterladen_von_Dateien_oder_beim_Verschieben_von_verlinkten_Dateien_in_das_Dateiverzeichnis_soll_der_Pfad_der_bib-Datei_benutzt_werden,_nicht_das_oben_definierte_Dateiverzeichnis
+Your_style_file_specifies_the_character_format_'%0',_which_is_undefined_in_your_current_OpenOffice_document.=Ihre_Stildatei_legt_das_Zeichenformat_'%0'_fest,_das_in_Ihrem_aktuellen_OpenOffice-Dokument_nicht_definiert_ist.
+Your_style_file_specifies_the_paragraph_format_'%0',_which_is_undefined_in_your_current_OpenOffice_document.=Ihre_Stildatei_legt_das_Abschnittsformat_'%0'_fest,_das_in_Ihrem_aktuellen_OpenOffice-Dokument_nicht_definiert_ist.
+
+Error_fetching_from_Google_Scholar=Fehler_beim_Abrufen_von_Google_Scholar
+Run_HTML_converter_on_title=Titel_mit_HTML-Konvertierer_bearbeiten
+Searching...=Suche_l\u00e4uft...
+You_have_selected_more_than_%0_entries_for_download._Some_web_sites_might_block_you_if_you_make_too_many_rapid_downloads._Do_you_want_to_continue?=Sie_haben_mehr_als_%0_Eintr\u00e4ge_zum_Download_ausgew\u00e4hlt._Einige_Webseiten_k\u00f6nnten_zu_viele_Downloads_blockieren._M\u00f6chten_Sie_fortfahren?
+Confirm_selection=Auswahl_best\u00e4tigen
+Unknown_DOI\:_'%0'.=Unbekannter_DOI:_'0%'.
+Get_BibTeX_entry_from_DOI=BibTeX-Eintrag_aus_DOI_erstellen
+Prefer_converting_subscripts_and_superscripts_to_equations_rather_than_text=Hoch-_und_tiefgestellte_Zeichen_in_eine_Gleichung_konvertieren_und_nicht_als_Text_darstellen
+Add_{}_to_specified_title_words_on_search_to_keep_the_correct_case=Nach_der_Suche_{}_zu_festgesetzten_Titelworten_hinzuf\u00fcgen,_um_Gro\u00df-/Kleinschreibung_beizubehalten
+Import_conversions=Konvertierungen_importieren
+Run_filter_on_title_keeping_the_case_of_selected_words=Filter_\u00fcber_Titel_laufen_lassen,_Gro\u00df-/Kleinschreibung_der_ausgew\u00e4hlten_Worte_unver\u00e4ndert_lassen
+Intermittent_errors_on_the_IEEE_Xplore_server._Please_try_again_in_a_while.=Zeitweilige_Fehler_auf_dem_IEEE_Xplore-Server._Bitte_versuchen_Sie_es_sp\u00e4ter_erneut.
+Please_enter_a_search_string=Bitte_geben_Sie_eine_Suchphrase_ein
+Please_open_or_start_a_new_database_before_searching=Bitte_\u00f6ffnen_Sie_eine_Datei_oder_legen_Sie_eine_neue_an,_bevor_Sie_suchen
diff --git a/src/resource/JabRef_en.properties b/src/resource/JabRef_en.properties
index f86532d..9a1a0db 100644
--- a/src/resource/JabRef_en.properties
+++ b/src/resource/JabRef_en.properties
@@ -1901,7 +1901,7 @@ Note_that_these_settings_are_used_for_the_legacy_<b>pdf</b>_and_<b>ps</b>_fields
 Legacy_file_fields=Legacy_file_fields
 
 This_makes_JabRef_look_up_each_%0_extension_and_check_if_the_file_exists._If_not,_you_will_be_given_options<BR>to_resolve_the_problem.=This_makes_JabRef_look_up_each_%0_extension_and_check_if_the_file_exists._If_not,_you_will_be_given_options<BR>to_resolve_the_problem.
-Run_Fetcher,_e.g._"--fetch=Medline\:cancer"=Run_Fetcher,_e.g._"--fetch\=Medline\:cancer"
+Run_Fetcher,_e.g._"--fetch\=Medline\:cancer"=Run_Fetcher,_e.g._"--fetch=Medline:cancer"
 
 The_ACM_Digital_Library=The_ACM_Digital_Library
 Reset=Reset
@@ -2028,13 +2028,12 @@ File_directory_is_not_set_or_does_not_exist.=File_directory_is_not_set_or_does_n
 Move_file_to_file_directory.=Move_file_to_file_directory.
 Rename_file_to=Rename_file_to
 <b>All_Entries</b>_(this_group_cannot_be_edited_or_removed)=<b>All_Entries</b>_(this_group_cannot_be_edited_or_removed)
-</b>_-_static_group=</b>_-_static_group
-,_refines_supergroup=,_refines_supergroup
-,_includes_subgroups=,_includes_subgroups
-</b>_-_dynamic_group_(<b>=</b>_-_dynamic_group_(<b>
-</b>_contains_<b>=</b>_contains_<b>
-</b>_-_dynamic_group_(=</b>_-_dynamic_group_(
-search_expression\:_<b>=search_expression:_<b>
+static_group=static_group
+includes_subgroups=includes_subgroups
+refines_supergroup=refines_supergroup
+dynamic_group=dynamic_group
+contains=contains
+search_expression=search_expression
 
 Disable_file_renaming_in_non-native_file_dialog=Disable_file_renaming_in_non-native_file_dialog
 File_dialog=File_dialog
@@ -2054,7 +2053,7 @@ This_database_contains_one_or_more_duplicated_BibTeX_keys.=This_database_contain
 Do_you_want_to_resolve_duplicate_keys_now?=Do_you_want_to_resolve_duplicate_keys_now?
 
 Find_and_remove_duplicate_BibTeX_keys=Find_and_remove_duplicate_BibTeX_keys
-Expected_syntax_for_--fetch='<name_of_fetcher>\:<query>'=Expected_syntax_for_--fetch\='<name_of_fetcher>\:<query>'
+Expected_syntax_for_--fetch\='<name_of_fetcher>\:<query>'=Expected_syntax_for_--fetch='<name_of_fetcher>:<query>'
 Duplicate_BibTeX_key=Duplicate_BibTeX_key
 Duplicate_key=Duplicate_key
 Generate_key=Generate_key
@@ -2101,7 +2100,7 @@ Mr._dLib_web_service_is_temporarily_unavailable.=Mr._dLib_web_service_is_tempora
 Mr._dLib_web_service_is_temporarily_down._Please_try_again_later.=Mr._dLib_web_service_is_temporarily_down._Please_try_again_later.
 You_are_not_connected_to_the_Internet._To_access_Mr._dLib_web_service_an_internet_connection_is_needed.=You_are_not_connected_to_the_Internet._To_access_Mr._dLib_web_service_an_internet_connection_is_needed.
 No_Internet_Connection.=_No_Internet_Connection.
-This_JabRef_version_is_trying_to_access_an_old_version_of_Mr._dLib's_webservice_that_is_not_working_any_more.\nPlease_visit_http\://jabref.sourceforge.net_or_http\://www.mr-dlib.org_for_more_information_and_updates.\n\n\n=This_JabRef_version_is_trying_to_access_an_old_version_of_Mr._dLib's_webservice_that_is_not_working_any_more.\nPlease_visit_http://jabref.sourceforge.net_or_http://www.mr-dlib.org_for_more_information_and_updates.\n\n\n
+This_JabRef_version_is_trying_to_access_an_old_version_of_Mr._dLib's_webservice_that_is_not_working_any_more.\nPlease_visit_http\://jabref.sourceforge.net_or_http\://www.mr-dlib.org_for_more_information_and_updates.=This_JabRef_version_is_trying_to_access_an_old_version_of_Mr._dLib's_webservice_that_is_not_working_any_more.\nPlease_visit_http://jabref.sourceforge.net_or_http://www.mr-dlib.org_for_more_information_and_updates.
 Web_Service_Version_Outdated=Web_Service_Version_Outdated
 The_Mr._dLib_web_service_version_you_trying_to_access_is_outdated.=The_Mr._dLib_web_service_version_you_trying_to_access_is_outdated.
 Update_empty_fields_with_data_fetched_from=Update_empty_fields_with_data_fetched_from
@@ -2338,4 +2337,91 @@ Insert_selected_citations_into_TeXstudio=Insert_selected_citations_into_TeXstudi
 The_current_BibTeX_key_will_be_overwritten._Continue?=The_current_BibTeX_key_will_be_overwritten._Continue?
 Overwrite_key=Overwrite_key
 Not_overwriting_existing_key._To_change_this_setting,_open_Options_->_Prefererences_->_BibTeX_key_generator=Not_overwriting_existing_key._To_change_this_setting,_open_Options_->_Prefererences_->_BibTeX_key_generator
-How_would_you_like_to_link_to_'%0'?=How_would_you_like_to_link_to_'%0'?
\ No newline at end of file
+How_would_you_like_to_link_to_'%0'?=How_would_you_like_to_link_to_'%0'?
+Marked_entries_as_relevant=Marked_entries_as_relevant
+Marked_entries'_quality_as_good=Marked_entries'_quality_as_good
+Set_priority=Set_priority
+no_preview_available=no_preview_available
+Enable_PDF_preview=Enable_PDF_preview
+Show_one_letter_heading_for_icon_columns=Show_one_letter_heading_for_icon_columns
+Help_on_special_fields=Help_on_special_fields
+Enable_special_fields=Enable_special_fields
+Show_rank=Show_rank
+Compact_rank=Compact_rank
+Show_quality=Show_quality
+Show_priority=Show_priority
+Show_relevance=Show_relevance
+Synchronize_with_keywords=Synchronize_with_keywords
+Write_values_of_special_fields_as_separate_fields_to_BibTeX=Write_values_of_special_fields_as_separate_fields_to_BibTeX
+You_have_changed_settings_for_special_fields.=You_have_changed_settings_for_special_fields.
+Changed_special_field_settings=Changed_special_field_settings
+Bibtex_key_patterns=Bibtex_key_patterns
+Convert_1st,_2nd,_..._to_real_superscripts=Convert_1st,_2nd,_..._to_real_superscripts
+Manage_content_selectors=Manage_content_selectors
+Dropped_comment_from_database=Dropped_comment_from_database
+Synchronized_special_fields_based_on_keywords=Synchronized_special_fields_based_on_keywords
+Clear_priority=Clear_priority
+No_priority_information=No_priority_information
+Set_priority_to_high=Set_priority_to_high
+Priority_high=Priority_high
+Set_priority_to_medium=Set_priority_to_medium
+Priority_medium=Priority_medium
+Set_priority_to_low=Set_priority_to_low
+Priority_low=Priority_low
+Priority=Priority
+Toogle_quality_assured=Toogle_quality_assured
+Quality=Quality
+Rank=Rank
+Clear_rank=Clear_rank
+No_rank_information=No_rank_information
+Set_rank_to_one_star=Set_rank_to_one_star
+One_star=One_star
+Set_rank_to_two_stars=Set_rank_to_two_stars
+Two_stars=Two_stars
+Set_rank_to_three_stars=Set_rank_to_three_stars
+Three_stars=Three_stars
+Set_rank_to_four_stars=Set_rank_to_four_stars
+Four_stars=Four_stars
+Set_rank_to_five_stars=Set_rank_to_five_stars
+Five_stars=Five_stars
+Toggle_relevance=Toggle_relevance
+Relevance=Relevance
+Manage_keywords=Manage_keywords
+Keywords_of_selected_entries=Keywords_of_selected_entries
+Update_keywords=Update_keywords
+
+Correct_the_entry,_and_reopen_editor_to_display/edit_source.=Correct_the_entry,_and_reopen_editor_to_display/edit_source.
+When_downloading_files,_or_moving_linked_files_to_the_file_directory,_prefer_the_bib_file_location_rather_than_the_file_directory_set_above=When_downloading_files,_or_moving_linked_files_to_the_file_directory,_prefer_the_bib_file_location_rather_than_the_file_directory_set_above
+If_a_pasted_or_imported_entry_already_has_the_field_set,_overwrite.=If_a_pasted_or_imported_entry_already_has_the_field_set,_overwrite.
+To_disable_the_memory_stick_mode_rename_or_remove_the_jabref.xml_file_in_the_same_folder_as_JabRef.=To_disable_the_memory_stick_mode_rename_or_remove_the_jabref.xml_file_in_the_same_folder_as_JabRef.
+Please_note_that_this_is_an_early_beta_version._Do_not_use_it_without_backing_up_your_files!=Please_note_that_this_is_an_early_beta_version._Do_not_use_it_without_backing_up_your_files!
+A_string_with_that_label_already_exists=A_string_with_that_label_already_exists
+File_has_been_updated_externally._Are_you_sure_you_want_to_save?=File_has_been_updated_externally._Are_you_sure_you_want_to_save?
+Could_not_connect_to_a_running_gnuserv_process._Make_sure_that_Emacs_or_XEmacs_is_running,<BR>and_that_the_server_has_been_started_(by_running_the_command_'server-start'/'gnuserv-start').=Could_not_connect_to_a_running_gnuserv_process._Make_sure_that_Emacs_or_XEmacs_is_running,<BR>and_that_the_server_has_been_started_(by_running_the_command_'server-start'/'gnuserv-start').
+Use_the_following_delimiter_character(s)\:=Use_the_following_delimiter_character(s):
+Created_group_"%0".=Created_group_"%0".
+Removed_all_subgroups_of_group_"%0".=Removed_all_subgroups_of_group_"%0".
+%0_entries_found._To_reduce_server_load,_only_%1_will_be_downloaded.=%0_entries_found._To_reduce_server_load,_only_%1_will_be_downloaded.
+Unable_to_connect._One_possible_reason_is_that_JabRef_and_OpenOffice/LibreOffice_are_not_both_running_in_either_32_bit_mode_or_64_bit_mode.=Unable_to_connect._One_possible_reason_is_that_JabRef_and_OpenOffice/LibreOffice_are_not_both_running_in_either_32_bit_mode_or_64_bit_mode.
+Could_not_connect_to_running_OpenOffice.\nMake_sure_you_have_installed_OpenOffice_with_Java_support.\nIf_connecting_manually,_please_verify_program_and_library_paths.\n\nError_message\:_=Could_not_connect_to_running_OpenOffice.\nMake_sure_you_have_installed_OpenOffice_with_Java_support.\nIf_connecting_manually,_please_verify_program_and_library_paths.\n\nError_message:_
+Not_connected_to_any_Writer_document._Please_make_sure_a_document_is_open,_and_use_the_'Select_Writer_document'_button_to_connect_to_it.=Not_connected_to_any_Writer_document._Please_make_sure_a_document_is_open,_and_use_the_'Select_Writer_document'_button_to_connect_to_it.
+Connection_to_OpenOffice_has_been_lost._Please_make_sure_OpenOffice_is_running,_and_try_to_reconnect.=Connection_to_OpenOffice_has_been_lost._Please_make_sure_OpenOffice_is_running,_and_try_to_reconnect.
+Your_style_file_specifies_the_paragraph_format_'%0',_which_is_undefined_in_your_current_OpenOffice_document.=Your_style_file_specifies_the_paragraph_format_'%0',_which_is_undefined_in_your_current_OpenOffice_document.
+Your_style_file_specifies_the_character_format_'%0',_which_is_undefined_in_your_current_OpenOffice_document.=Your_style_file_specifies_the_character_format_'%0',_which_is_undefined_in_your_current_OpenOffice_document.
+Unable_to_determine_plugin_name_and_version._This_may_not_be_a_valid_JabRef_plugin.=Unable_to_determine_plugin_name_and_version._This_may_not_be_a_valid_JabRef_plugin.
+Import_Metadata_From_PDF=Import_Metadata_From_PDF
+
+Run_HTML_converter_on_title=Run_HTML_converter_on_title
+Searching...=Searching...
+Error_fetching_from_Google_Scholar=Error_fetching_from_Google_Scholar
+You_have_selected_more_than_%0_entries_for_download._Some_web_sites_might_block_you_if_you_make_too_many_rapid_downloads._Do_you_want_to_continue?=You_have_selected_more_than_%0_entries_for_download._Some_web_sites_might_block_you_if_you_make_too_many_rapid_downloads._Do_you_want_to_continue?
+Confirm_selection=Confirm_selection
+Unknown_DOI\:_'%0'.=Unknown_DOI:_'%0'.
+Get_BibTeX_entry_from_DOI=Get_BibTeX_entry_from_DOI
+Prefer_converting_subscripts_and_superscripts_to_equations_rather_than_text=Prefer_converting_subscripts_and_superscripts_to_equations_rather_than_text
+Add_{}_to_specified_title_words_on_search_to_keep_the_correct_case=Add_{}_to_specified_title_words_on_search_to_keep_the_correct_case
+Import_conversions=Import_conversions
+Run_filter_on_title_keeping_the_case_of_selected_words=Run_filter_on_title_keeping_the_case_of_selected_words
+Intermittent_errors_on_the_IEEE_Xplore_server._Please_try_again_in_a_while.=Intermittent_errors_on_the_IEEE_Xplore_server._Please_try_again_in_a_while.
+Please_enter_a_search_string=Please_enter_a_search_string
+Please_open_or_start_a_new_database_before_searching=Please_open_or_start_a_new_database_before_searching
diff --git a/src/resource/JabRef_fr.properties b/src/resource/JabRef_fr.properties
index 0fa51ae..e5abb54 100644
--- a/src/resource/JabRef_fr.properties
+++ b/src/resource/JabRef_fr.properties
@@ -800,7 +800,7 @@ Select=S\u00e9lectionner
 Select_a_Zip-archive=S\u00e9lectionner_une_archive_ZIP
 Select_action=S\u00e9lectionner_l'op\u00e9ration
 Select_all=Tout_s\u00e9lectionner
-Select_Classpath_of_New_Importer=S\u00e9lectionner_le_chemin_de_classe_du_nouveau_filtre_d'importation
+Select_Classpath_of_New_Importer=S\u00e9lectionner_le_chemin_de_classe_du_nouveau_fil7tre_d'importation
 Select_encoding=S\u00e9lectionner_l'encodage
 Select_entries_in_group_selection=S\u00e9lectionner_les_entr\u00e9es_dans_la_s\u00e9lection
 Select_entry_type=S\u00e9lectionner_un_type_d'entr\u00e9e
@@ -1070,7 +1070,7 @@ This_feature_lets_new_files_be_opened_or_imported_into_an_already_running_instan
 Note_that_these_settings_are_used_for_the_legacy_<b>pdf</b>_and_<b>ps</b>_fields_only.<br>For_most_users,_setting_the_<b>Main_file_directory</b>_above_should_be_sufficient.=Noter_que_ces_param\u00e8tres_sont_utilis\u00e9s_uniquement_pour_les_champs_obsol\u00e8tes_<b>pdf</b>_et_<b>ps</b>.<br>Pour_la_plupart_des_utilisateurs,_param\u00e9trer_le_<b>R\u00e9pertoire_de_fichiers_principal</b>_devrait_suffire.
 Legacy_file_fields=Champs_de_fichiers_obsol\u00e8tes
 This_makes_JabRef_look_up_each_%0_extension_and_check_if_the_file_exists._If_not,_you_will_be_given_options<BR>to_resolve_the_problem.=JabRef_cherche_chaque_%0_extension_et_v\u00e9rifie_si_le_fichier_existe._Si_non,_des_options_vous_seront_propos\u00e9es<BR>pour_r\u00e9soudre_le_probl\u00e8me.
-Run_Fetcher,_e.g._"--fetch=Medline\:cancer"=Lance_une_recherche,_par._ex._"--fetch=Medline\:cancer"
+Run_Fetcher,_e.g._"--fetch\=Medline\:cancer"=Lance_une_recherche,_par._ex._"--fetch=Medline\:cancer"
 The_ACM_Digital_Library=La_Biblioth\u00e8que_Num\u00e9rique_ACM
 Reset=R\u00e9initialiser
 Use_IEEE_LaTeX_abbreviations=Utiliser_les_abbr\u00e9viations_LaTeX_IEEE
@@ -1190,13 +1190,12 @@ File_directory_is_not_set_or_does_not_exist.=Le_r\u00e9pertoire_de_fichiers_n'es
 Move_file_to_file_directory.=D\u00e9placer_le_fichier_vers_le_r\u00e9pertoire_de_fichiers.
 Rename_file_to=Renommer_le_fichier_en
 <b>All_Entries</b>_(this_group_cannot_be_edited_or_removed)=<b>Toutes_les_entr\u00e9es</b>_(ce_groupe_ne_peut_pas_\u00eatre_\u00e9dit\u00e9_ou_supprim\u00e9)
-</b>_-_static_group=</b>_-_groupe_statique
-,_refines_supergroup=,_raffinant_le_super-groupe
-,_includes_subgroups=,_incluant_les_sous-groupes
-</b>_-_dynamic_group_(<b>=</b>_-_groupe_dynamique_(<b>
-</b>_contains_<b>=</b>_contient_<b>
-</b>_-_dynamic_group_(=</b>_-_groupe_dynamique_(
-search_expression\:_<b>=expression_de_recherche_:_<b>
+static_group=groupe_statique
+dynamic_group=groupe_dynamique
+refines_supergroup=raffinant_le_super-groupe
+includes_subgroups=incluant_les_sous-groupes
+contains=contient
+search_expression=expression_de_recherche
 
 Disable_file_renaming_in_non-native_file_dialog=D\u00e9sactiver_le_renommage_des_fichiers_pour_les_fen\u00eatres_de_fichier_non-native
 File_dialog=Fen\u00eatre_de_fichiers
@@ -1217,7 +1216,7 @@ This_database_contains_one_or_more_duplicated_BibTeX_keys.=Cette_base_contient_a
 Do_you_want_to_resolve_duplicate_keys_now?=Voulez-vous_traiter_les_clefs_dupliqu\u00e9es_maintenant_?
 
 Find_and_remove_duplicate_BibTeX_keys=Recherche_et_supprime_les_clefs_BibTeX_dupliqu\u00e9es
-Expected_syntax_for_--fetch='<name_of_fetcher>\:<query>'=Syntaxe_attendue_pour_--fetch\='<name_of_fetcher>\:<query>'
+Expected_syntax_for_--fetch\='<name_of_fetcher>\:<query>'=Syntaxe_attendue_pour_--fetch='<name_of_fetcher>:<query>'
 Duplicate_BibTeX_key=Clef_BibTeX_dupliqu\u00e9e
 Duplicate_key=Clef_dupliqu\u00e9e
 Generate_key=G\u00e9n\u00e9rer_une_clef
@@ -1266,7 +1265,7 @@ Mr._dLib_web_service_is_temporarily_unavailable.=Le_service_Web_Mr._dLib_est_tem
 Mr._dLib_web_service_is_temporarily_down._Please_try_again_later.=Le_service_Web_Mr._dLib_est_temporairement_arr\u00e9t\u00e9._Essayer_plus_tard_SVP.
 You_are_not_connected_to_the_Internet._To_access_Mr._dLib_web_service_an_internet_connection_is_needed.=Vous_n'\u00eates_pas_connect\u00e9_\u00e0_internet._Pour_acc\u00e9der_au_service_web_Mr._dLib,_une_connexion_internet_est_n\u00e9cessaire.
 No_Internet_Connection.=_Pas_de_connexion_internet.
-This_JabRef_version_is_trying_to_access_an_old_version_of_Mr._dLib's_webservice_that_is_not_working_any_more.\nPlease_visit_http\://jabref.sourceforge.net_or_http\://www.mr-dlib.org_for_more_information_and_updates.\n\n\n=Cette_version_de_JabRef_tente_d'acc\u00e9der_\u00e0_une_ancienne_version_du_service_web_Mr._dLib_qui_n'est_plus_en_service._This_JabRef_version_is_trying_to_access_an_old_version_of_Mr._dLib's_webservice_that_is_not_working_any_more.\nSVP,_allez_sur_http://jabref.source [...]
+This_JabRef_version_is_trying_to_access_an_old_version_of_Mr._dLib's_webservice_that_is_not_working_any_more.\nPlease_visit_http\://jabref.sourceforge.net_or_http\://www.mr-dlib.org_for_more_information_and_updates.=Cette_version_de_JabRef_tente_d'acc\u00e9der_\u00e0_une_ancienne_version_du_service_web_Mr._dLib_qui_n'est_plus_en_service._This_JabRef_version_is_trying_to_access_an_old_version_of_Mr._dLib's_webservice_that_is_not_working_any_more.\nSVP,_allez_sur_http://jabref.sourceforge. [...]
 Web_Service_Version_Outdated=Version_de_service_web_d\u00e9pass\u00e9e
 The_Mr._dLib_web_service_version_you_trying_to_access_is_outdated.=La_version_avec_laquelle_vous_essayez_d'acc\u00e9der_au_service_web_Mr._dLib_est_d\u00e9pass\u00e9e.
 Update_empty_fields_with_data_fetched_from=Mettre_\u00e0_jour_les_champs_vides_\u00e0_partir_des_donn\u00e9es_r\u00e9cup\u00e9r\u00e9es_depuis
@@ -1504,4 +1503,91 @@ Insert_selected_citations_into_TeXstudio=Envoyer_les_citations_s\u00e9lectionn\u
 The_current_BibTeX_key_will_be_overwritten._Continue?=La_clef_BibTeX_courante_sera_\u00e9craser._Continuer_?
 Overwrite_key=Ecraser_la_clef
 Not_overwriting_existing_key._To_change_this_setting,_open_Options_->_Prefererences_->_BibTeX_key_generator=Pas_d'\u00e9crasement_de_clefs_existantes._Pour_changer_ce_param\u00e9trage,_ouvrir_Options_->_Pr\u00e9f\u00e9rences_->_G\u00e9n\u00e9rateur_de_clefs_BibTeX
-How_would_you_like_to_link_to_'%0'?=Quel_type_de_lien_souhaitez-vous_vers_'%0'_?
\ No newline at end of file
+How_would_you_like_to_link_to_'%0'?=Quel_type_de_lien_souhaitez-vous_vers_'%0'_?
+Bibtex_key_patterns=Mod\u00e8les_de_clef_BibTeX
+Changed_special_field_settings=Param\u00e8tres_de_champs_sp\u00e9ciaux_modifi\u00e9s
+Clear_priority=R\u00e9initialiser_la_priorit\u00e9
+Clear_rank=R\u00e9initialiser_le_rang
+Compact_rank=Compacter_le_rang
+Convert_1st,_2nd,_..._to_real_superscripts=Convertir_1er,__2nd,_..._en_vrais_exposants
+Dropped_comment_from_database=Commentaires_supprim\u00e9s_de_la_base
+Enable_PDF_preview=Autoriser_la_pr\u00e9visualisation_des_PDF
+Enable_special_fields=Autoriser_les_champs_sp\u00e9ciaux
+Five_stars=Cinq_\u00e9toiles
+Four_stars=Quatre_\u00e9toiles
+Help_on_special_fields=Aide_sur_les_champs_sp\u00e9ciaux
+Keywords_of_selected_entries=Mots-clefs_des_entr\u00e9es_s\u00e9lectionn\u00e9s
+Manage_content_selectors=G\u00e9rer_les_s\u00e9lecteurs_de_contenu
+Manage_keywords=G\u00e9rer_les_mots-clefs
+Marked_entries'_quality_as_good=Marquer_la_qualit\u00e9_des_entr\u00e9es_comme_bonne
+Marked_entries_as_relevant=Marquer_les_entr\u00e9es_comme_pertinente
+No_priority_information=Pas_d'information_sur_la_priorit\u00e9
+No_rank_information=Pas_d'information_sur_le_rang
+One_star=Une_\u00e9toile
+Priority=Priorit\u00e9
+Priority_high=Priorit\u00e9_forte
+Priority_low=Priorit\u00e9_faible
+Priority_medium=Priorit\u00e9_interm\u00e9diaire
+Quality=Qualt\u00e9
+Rank=Rang
+Relevance=Pertinence
+Set_priority=D\u00e9finir_la_priorit\u00e9
+Set_priority_to_high=D\u00e9finir_la_priorit\u00e9_comme_forte
+Set_priority_to_low=D\u00e9finir_la_priorit\u00e9_comme_faible
+Set_priority_to_medium=D\u00e9finir_la_priorit\u00e9_comme_interm\u00e9diaire
+Set_rank_to_five_stars=D\u00e9finir_le_rang_comme_cinq_\u00e9toiles
+Set_rank_to_four_stars=D\u00e9finir_le_rang_comme_quatre_\u00e9toiles
+Set_rank_to_one_star=D\u00e9finir_le_rang_comme_une_\u00e9toile
+Set_rank_to_three_stars=D\u00e9finir_le_rang_comme_trois_\u00e9toiles
+Set_rank_to_two_stars=D\u00e9finir_le_rang_comme_deux_\u00e9toiles
+Show_one_letter_heading_for_icon_columns=Montrer_un_ent\u00eate_d'une_lettre_pour_les_colonnes_d'ic\u00f4nes
+Show_priority=Montrer_la_priorit\u00e9
+Show_quality=Montrer_la_qualit\u00e9
+Show_rank=Montrer_le_rang
+Show_relevance=Montrer_la_pertinence
+Synchronize_with_keywords=Synchroniser_avec_les_mots-clefs
+Synchronized_special_fields_based_on_keywords=Champs_sp\u00e9ciaux_synchronis\u00e9s_sur_la_base_des_mots-clefs
+Three_stars=Trois_\u00e9toiles
+Toggle_relevance=Afficher/Masquer_la_pertinence
+Toogle_quality_assured=Afficher/Masquer_la_qualit\u00e9_\u00e9valu\u00e9e
+Two_stars=Deux_\u00e9toiles
+Update_keywords=Mettre_\u00e0_jour_les_mots-clefs
+Write_values_of_special_fields_as_separate_fields_to_BibTeX=Ecrire_les_valeurs_des_champs_sp\u00e9ciaux_dans_des_champs_BibTeX_s\u00e9par\u00e9s
+You_have_changed_settings_for_special_fields.=Vous_avez_modifier_les_param\u00e8tres_pour_les_champs_sp\u00e9ciaux.
+no_preview_available=Pr\u00e9visualisation_non_disponible
+
+%0_entries_found._To_reduce_server_load,_only_%1_will_be_downloaded.=%0_entr\u00e9es_trouv\u00e9es._Pour_r\u00e9duire_la_charge_du_serveur,_seulement_%1_seront_t\u00e9l\u00e9charg\u00e9es.
+A_string_with_that_label_already_exists=Une_chaine_avec_cette_\u00e9tiquette_existe_d\u00e9ja
+Connection_to_OpenOffice_has_been_lost._Please_make_sure_OpenOffice_is_running,_and_try_to_reconnect.=La_connexion_\u00e0_OpenOffice_a_\u00e9t\u00e9_perdue._S'il_vous_plait,_assurez-vous_qu'OpenOffice_soit_lanc\u00e9,_et_essayez_de_vous_reconnecter.
+Correct_the_entry,_and_reopen_editor_to_display/edit_source.=Corrigez_l'entr\u00e9e_et_r\u00e9-ouvrez_l'\u00e9diteur_pour_afficher/\u00e9diter_la_source.
+Could_not_connect_to_a_running_gnuserv_process._Make_sure_that_Emacs_or_XEmacs_is_running,<BR>and_that_the_server_has_been_started_(by_running_the_command_'server-start'/'gnuserv-start').=La_connexion_\u00e0_un_processus_gnuserv_actif_a_\u00e9chou\u00e9._Assurez-vous_que_Emacs_ou_XEmacs_soit_lanc\u00e9,<BR>et_que_le_serveur_a_\u00e9t\u00e9_d\u00e9marr\u00e9_(en_lan\u00e7ant_la_commande_'server-start'/'gnuserv-start').
+Could_not_connect_to_running_OpenOffice.\nMake_sure_you_have_installed_OpenOffice_with_Java_support.\nIf_connecting_manually,_please_verify_program_and_library_paths.\n\nError_message\:_=La_connexion_\u00e0_OpenOffice_n'a_pas_pu_\u00eatre_lanc\u00e9e.\nAssurez-vous_qu'OpenOffice_est_install\u00e9_avec_le_support_Java.\\nEn_cas_de_connexion_manuelle,_v\u00e9rifiez_les_chemins_du_programme_et_de_la_biblioth\u00e8que.\n\nMessage_d'erreur_\:_
+Created_group_"%0".=Groupe_"%0"_cr\u00e9\u00e9.
+File_has_been_updated_externally._Are_you_sure_you_want_to_save?=Le_fichier_a_\u00e9t\u00e9_mis_\u00e0_jour_par_ailleurs._Etes-vous_s\u00fbr_que_vous_voulez_sauver_?
+If_a_pasted_or_imported_entry_already_has_the_field_set,_overwrite.=Si_une_entr\u00e9e_coll\u00e9e_ou_import\u00e9e_a_le_champ_d\u00e9j\u00e0_param\u00e9tr\u00e9,_\u00e9craser.
+Import_Metadata_From_PDF=Importer_les_m\u00e9ta-donn\u00e9es_\u00e0_partir_du_PDF
+Not_connected_to_any_Writer_document._Please_make_sure_a_document_is_open,_and_use_the_'Select_Writer_document'_button_to_connect_to_it.=Pas_de_connexion_\u00e0_un_document_Writer._S'il_vous_plait,_assurez-vous_qu'un_document_est_ouvert_et_utiliser_le_bouton_'S\u00e9lectionner_un_document_Writer'_pour_vous_y_connecter.
+Please_note_that_this_is_an_early_beta_version._Do_not_use_it_without_backing_up_your_files!=Notez_s'il_vous_plait_qu'il_s'agit_d'une_version_b\u00e9ta_pr\u00e9liminaire._Ne_l'utilisez_pas_sans_archiver_vos_fichiers_!
+Removed_all_subgroups_of_group_"%0".=Tous_les_sous-groupes_du_groupe_"%0"_ont_\u00e9t\u00e9_supprim\u00e9s.
+To_disable_the_memory_stick_mode_rename_or_remove_the_jabref.xml_file_in_the_same_folder_as_JabRef.=Pour_d\u00e9sactiver_le_mode_Memory-stick,_renommer_ou_supprimer_le_fichier_jabref.xml_dans_le_m\u00eame_r\u00e9pertoire_que_JabRef
+Unable_to_connect._One_possible_reason_is_that_JabRef_and_OpenOffice/LibreOffice_are_not_both_running_in_either_32_bit_mode_or_64_bit_mode.=Connexion_impossible._Une_raison_potentielle_est_que_JabRef_et_OpenOffice/LibreOffice_ne_fonctionnent_pas_tous_les_deux_soit_en_mode_32_bits,_soit_en_mode_64_bits.
+Unable_to_determine_plugin_name_and_version._This_may_not_be_a_valid_JabRef_plugin.=Impossible_de_d\u00e9terminer_le_nom_et_la_version_du_greffon._Ce_pourrait_ne_pas_\u00eatre_un_greffon_JabRef_valide.
+Use_the_following_delimiter_character(s)\:=Utiliser_le(s)_caract\u00e8re(s)_de_d\u00e9limitation_suivant\:
+When_downloading_files,_or_moving_linked_files_to_the_file_directory,_prefer_the_bib_file_location_rather_than_the_file_directory_set_above=Lors_du_t\u00e9l\u00e9chargement_de_fichiers_ou_du_d\u00e9placement_de_fichiers_li\u00e9es_vers_le_r\u00e9pertoire_de_fichiers,_pr\u00e9f\u00e9rez_l'emplacement_du_fichier_bib_au_r\u00e9pertoire_ci-dessus
+Your_style_file_specifies_the_character_format_'%0',_which_is_undefined_in_your_current_OpenOffice_document.=Votre_fichier_de_style_sp\u00e9cifie_le_format_de_caract\u00e8re_'%0',_qui_n'est_pas_d\u00e9fini_dans_votre_document_OpenOffice_actuel.
+Your_style_file_specifies_the_paragraph_format_'%0',_which_is_undefined_in_your_current_OpenOffice_document.=Votre_fichier_de_style_sp\u00e9cifie_le_format_de_paragraphe_'%0',_qui_n'est_pas_d\u00e9fini_dans_votre_document_OpenOffice_actuel.
+
+Error_fetching_from_Google_Scholar=Erreur_au_cours_de_la_recherche_Google_Scholar
+Run_HTML_converter_on_title=Lancer_le_convertisseur_HTML_sur_le_titre
+Searching...=Recherche...
+You_have_selected_more_than_%0_entries_for_download._Some_web_sites_might_block_you_if_you_make_too_many_rapid_downloads._Do_you_want_to_continue?=Vous_avez_s\u00e9lectionn\u00e9_plus_de_%0_entr\u00e9es_\u00e0_t\u00e9l\u00e9charger._Certains_sites_web_pourraient_vous_bloquer_si_vous_effectuez_de_trop_nombreux_et_rapides_t\u00e9l\u00e9chargements._Voulez-vous_continuer?
+Confirm_selection=Confirmez_la_s\u00e9lection
+Get_BibTeX_entry_from_DOI=Obtenir_l'entr\u00e9e_BibTeX_\u00e0_partir_du_DOI
+Unknown_DOI\:_'%0'.=DOI_inconnu_:_'%0'.
+Prefer_converting_subscripts_and_superscripts_to_equations_rather_than_text=Conversion_des_indices_et_exposants_en_\u00e9quations_plut\u00f4t_qu'en_texte
+Add_{}_to_specified_title_words_on_search_to_keep_the_correct_case=Ajouter_{}_aux_mots_du_titre_sp\u00e9cifi\u00e9s_lors_d'une_recherche_pour_pr\u00e9server_la_casse_correcte
+Import_conversions=Importer_les_conversions
+Run_filter_on_title_keeping_the_case_of_selected_words=Lancer_un_filtre_sur_le_titre_en_pr\u00e9servant_la_casse_des_mots_s\u00e9lectionn\u00e9s
+Intermittent_errors_on_the_IEEE_Xplore_server._Please_try_again_in_a_while.=Erreurs_intermittentes_sur_le_serveur_IEEE_Xplore_server._R\u00e9-essayez_dans_un_moment_s'il_vous_plait.
+Please_enter_a_search_string=Entrez_s'il_vous_plait_une_chaine_de_recherche
+Please_open_or_start_a_new_database_before_searching=S'il_vous_plait,_ouvrez_ou_cr\u00e9er_une_nouvelle_base_avant_la_recherche
diff --git a/src/resource/JabRef_in.properties b/src/resource/JabRef_in.properties
index dc47a3c..e3d8b27 100644
--- a/src/resource/JabRef_in.properties
+++ b/src/resource/JabRef_in.properties
@@ -1069,7 +1069,7 @@ This_feature_lets_new_files_be_opened_or_imported_into_an_already_running_instan
 Note_that_these_settings_are_used_for_the_legacy_<b>pdf</b>_and_<b>ps</b>_fields_only.<br>For_most_users,_setting_the_<b>Main_file_directory</b>_above_should_be_sufficient.=Pengaturan_ini_hanya_mengatur_bidang_legasi_<b>pdf</b>_dan_<b>ps</b>_saja._<br>Pengguna_biasanya_cukup_mengatur_<b>Lokasi_berkas_utama</b>_diatas.
 Legacy_file_fields=Bidang_berkas_legasi
 This_makes_JabRef_look_up_each_%0_extension_and_check_if_the_file_exists._If_not,_you_will_be_given_options<BR>to_resolve_the_problem.=Ini_membuat_JabRef_mencari_disemua_ekstensi_%0_dan_memeriksa_apakah_ada_berkas._Jika_tidak,_anda_diberi_pilihan_<BR>untuk_mengatasi_masalah.
-Run_Fetcher,_e.g._"--fetch=Jalankan_Pengambil,_misal._"--fetch
+Run_Fetcher,_e.g._"--fetch\=Medline\:cancer"=Jalankan_Pengambil,_misal._"--fetch=Medline\:cancer"
 The_ACM_Digital_Library=Pustaka_ACM_Dijital
 Reset=Atur_ulang
 Use_IEEE_LaTeX_abbreviations=Gunakan_singkatan_IEEE_LaTeX
@@ -1173,13 +1173,12 @@ File_directory_is_not_set_or_does_not_exist.=Lokasi_berkas_belum_ditentukan_atau
 Move_file_to_file_directory.=Pindah_berkas_ke_direktori_berkas.
 Rename_file_to=Ganti_nama_berkas_menjadi
 <b>All_Entries</b>_(this_group_cannot_be_edited_or_removed)=<b>Semua_Entri</b>_(grup_ini_tidak_bisa_diubah_atau_dihapus)
-</b>_-_static_group=</b>_-_grup_statik
-,_refines_supergroup=,_memperbaiki_supergrup
-,_includes_subgroups=,_termasuk_subgrup
-</b>_-_dynamic_group_(<b>=</b>_-_grup_dinamik_(<b>
-</b>_contains_<b>=</b>_kandungan_<b>
-</b>_-_dynamic_group_(=</b>_-_grup_dinamik_(
-search_expression\:_<b>=ekspresi_pencarian\:_<b>
+static_group=grup_statik
+dynamic_group=grup_dinamik
+refines_supergroup=memperbaiki_supergrup
+includes_subgroups=termasuk_subgrup
+contains=kandungan
+search_expression=ekspresi_pencarian
 Disable_file_renaming_in_non-native_file_dialog=Penamaan_ulang_berkas_tidak_aktif_pada_dialog_berkas_bukan_asli
 File_dialog=Dialog_berkas
 No_entries_found._It_looks_like_you_do_not_have_access_to_search_JStor.=Entri_tidak_ditemukan._Tampaknya_anda_tidak_mempunyai_akses_pencarian_JStor.
@@ -1195,7 +1194,7 @@ Finished_resolving_duplicate_BibTeX_keys._%0_entries_modified.=Selesai_mengatasi
 This_database_contains_one_or_more_duplicated_BibTeX_keys.=Basisdata_ini_mempunyai_satu_atau_lebih_kunci_BibTeX_yang_sama.
 Do_you_want_to_resolve_duplicate_keys_now?=Apakah_anda_ingin_menyelesaikan_masalah_kunci_sama_sekarang?
 Find_and_remove_duplicate_BibTeX_keys=Temukan_dan_hapus_kunci_BibTeX_yang_sama
-Expected_syntax_for_--fetch=Sintaks_yang_diharapkan_untuk_--mengambil
+Expected_syntax_for_--fetch\='<name_of_fetcher>\:<query>'=Sintaks_yang_diharapkan_untuk_--fetch='<name_of_fetcher>:<query>'
 Duplicate_BibTeX_key=kunci_BibTeX_sama
 Duplicate_key=Kunci_sama
 Generate_key=Membuat_kunci
@@ -1239,7 +1238,7 @@ Mr._dLib_web_service_is_temporarily_unavailable.=Layanan_web_Mr._dLib_sementara_
 Mr._dLib_web_service_is_temporarily_down._Please_try_again_later.=Layanan_web_Mr._dLib_sementara_tidak_ada._Coba_lagi_di_lain_waktu.
 You_are_not_connected_to_the_Internet._To_access_Mr._dLib_web_service_an_internet_connection_is_needed.=Anda_tidak_terbubung_ke_Internet._Akses_layanan_web_Mr._dLib_memerlukan_sambungan_internet.
 No_Internet_Connection.=Konesksi_Internet_Tidak_Ada.
-This_JabRef_version_is_trying_to_access_an_old_version_of_Mr._dLib's_webservice_that_is_not_working_any_more.\nPlease_visit_http\://jabref.sourceforge.net_or_http\://www.mr-dlib.org_for_more_information_and_updates.\n\n\n=Vesi_JabRef_ini_sedang_mencoba_mengakses_layanan_web_Mr._dLib_versi_lama_yang_sudah_tidak_jalan.\nSilahkan_kunjungi_http\://jabref.sourceforge.net_atau_http\://www.mr-dlib.org_untuk_informasi_lanjut_dan_pembaruan.\n\n\n
+This_JabRef_version_is_trying_to_access_an_old_version_of_Mr._dLib's_webservice_that_is_not_working_any_more.\nPlease_visit_http\://jabref.sourceforge.net_or_http\://www.mr-dlib.org_for_more_information_and_updates.=Vesi_JabRef_ini_sedang_mencoba_mengakses_layanan_web_Mr._dLib_versi_lama_yang_sudah_tidak_jalan.\nSilahkan_kunjungi_http\://jabref.sourceforge.net_atau_http\://www.mr-dlib.org_untuk_informasi_lanjut_dan_pembaruan.
 Web_Service_Version_Outdated=Versi_Layanan_Web_Kedaluarsa
 The_Mr._dLib_web_service_version_you_trying_to_access_is_outdated.=Versi_layanan_web_Mr.dLib_yang_anda_akses_sudah_kedaluarsa.
 Update_empty_fields_with_data_fetched_from=Perbarui_bidang_kosong_dengan_data_dari_yang_diurai
@@ -1475,4 +1474,91 @@ Insert_selected_citations_into_TeXstudio=
 The_current_BibTeX_key_will_be_overwritten._Continue?=
 Overwrite_key=
 Not_overwriting_existing_key._To_change_this_setting,_open_Options_->_Prefererences_->_BibTeX_key_generator=
-How_would_you_like_to_link_to_'%0'?=
\ No newline at end of file
+How_would_you_like_to_link_to_'%0'?=
+Bibtex_key_patterns=
+Changed_special_field_settings=
+Clear_priority=
+Clear_rank=
+Compact_rank=
+Convert_1st,_2nd,_..._to_real_superscripts=
+Dropped_comment_from_database=
+Enable_PDF_preview=
+Enable_special_fields=
+Five_stars=
+Four_stars=
+Help_on_special_fields=
+Keywords_of_selected_entries=
+Manage_content_selectors=
+Manage_keywords=
+Marked_entries'_quality_as_good=
+Marked_entries_as_relevant=
+No_priority_information=
+No_rank_information=
+One_star=
+Priority=
+Priority_high=
+Priority_low=
+Priority_medium=
+Quality=
+Rank=
+Relevance=
+Set_priority=
+Set_priority_to_high=
+Set_priority_to_low=
+Set_priority_to_medium=
+Set_rank_to_five_stars=
+Set_rank_to_four_stars=
+Set_rank_to_one_star=
+Set_rank_to_three_stars=
+Set_rank_to_two_stars=
+Show_one_letter_heading_for_icon_columns=
+Show_priority=
+Show_quality=
+Show_rank=
+Show_relevance=
+Synchronize_with_keywords=
+Synchronized_special_fields_based_on_keywords=
+Three_stars=
+Toggle_relevance=
+Toogle_quality_assured=
+Two_stars=
+Update_keywords=
+Write_values_of_special_fields_as_separate_fields_to_BibTeX=
+You_have_changed_settings_for_special_fields.=
+no_preview_available=
+
+%0_entries_found._To_reduce_server_load,_only_%1_will_be_downloaded.=
+A_string_with_that_label_already_exists=
+Connection_to_OpenOffice_has_been_lost._Please_make_sure_OpenOffice_is_running,_and_try_to_reconnect.=
+Correct_the_entry,_and_reopen_editor_to_display/edit_source.=
+Could_not_connect_to_a_running_gnuserv_process._Make_sure_that_Emacs_or_XEmacs_is_running,<BR>and_that_the_server_has_been_started_(by_running_the_command_'server-start'/'gnuserv-start').=
+Could_not_connect_to_running_OpenOffice.\nMake_sure_you_have_installed_OpenOffice_with_Java_support.\nIf_connecting_manually,_please_verify_program_and_library_paths.\n\nError_message\:_=
+Created_group_"%0".=
+File_has_been_updated_externally._Are_you_sure_you_want_to_save?=
+If_a_pasted_or_imported_entry_already_has_the_field_set,_overwrite.=
+Import_Metadata_From_PDF=
+Not_connected_to_any_Writer_document._Please_make_sure_a_document_is_open,_and_use_the_'Select_Writer_document'_button_to_connect_to_it.=
+Please_note_that_this_is_an_early_beta_version._Do_not_use_it_without_backing_up_your_files!=
+Removed_all_subgroups_of_group_"%0".=
+To_disable_the_memory_stick_mode_rename_or_remove_the_jabref.xml_file_in_the_same_folder_as_JabRef.=
+Unable_to_connect._One_possible_reason_is_that_JabRef_and_OpenOffice/LibreOffice_are_not_both_running_in_either_32_bit_mode_or_64_bit_mode.=
+Unable_to_determine_plugin_name_and_version._This_may_not_be_a_valid_JabRef_plugin.=
+Use_the_following_delimiter_character(s)\:=
+When_downloading_files,_or_moving_linked_files_to_the_file_directory,_prefer_the_bib_file_location_rather_than_the_file_directory_set_above=
+Your_style_file_specifies_the_character_format_'%0',_which_is_undefined_in_your_current_OpenOffice_document.=
+Your_style_file_specifies_the_paragraph_format_'%0',_which_is_undefined_in_your_current_OpenOffice_document.=
+
+Error_fetching_from_Google_Scholar=
+Run_HTML_converter_on_title=
+Searching...=
+You_have_selected_more_than_%0_entries_for_download._Some_web_sites_might_block_you_if_you_make_too_many_rapid_downloads._Do_you_want_to_continue?=
+Confirm_selection=
+Unknown_DOI\:_'%0'.=
+Get_BibTeX_entry_from_DOI=
+Prefer_converting_subscripts_and_superscripts_to_equations_rather_than_text=
+Add_{}_to_specified_title_words_on_search_to_keep_the_correct_case=
+Import_conversions=
+Run_filter_on_title_keeping_the_case_of_selected_words=
+Intermittent_errors_on_the_IEEE_Xplore_server._Please_try_again_in_a_while.=
+Please_enter_a_search_string=
+Please_open_or_start_a_new_database_before_searching=
diff --git a/src/resource/JabRef_it.properties b/src/resource/JabRef_it.properties
index dc73d98..2e949e1 100644
--- a/src/resource/JabRef_it.properties
+++ b/src/resource/JabRef_it.properties
@@ -1,5 +1,5 @@
 #!
-#! created/edited by Popeye version 0.54 (popeye.sourceforge.net)
+#! edited by Eclipse PropertiesEditor
 #! encoding:ISO-8859-1
 %0_contains_the_Regular_Expression_<b>%1</b>=%0_contiene_l'Espressione_Regolare_<b>%1</b>
 %0_contains_the_term_<b>%1</b>=%0_contiene_il_termine_<b>%1</b>
@@ -1153,8 +1153,8 @@ Note_that_these_settings_are_used_for_the_legacy_<b>pdf</b>_and_<b>ps</b>_fields
 Legacy_file_fields=Campi_file_obsoleti
 
 This_makes_JabRef_look_up_each_%0_extension_and_check_if_the_file_exists._If_not,_you_will_be_given_options<BR>to_resolve_the_problem.=Per_ciascuna_delle_%0_estensioni,_JabRef_verificher\u00e0_l'esistenza_del_file.<BR>In_caso_negativo_proporr\u00e0_delle_opzioni_per_la_risoluzione_del_problema.
-## Check if the = sign must be escaped. In both sides?
-Run_Fetcher,_e.g._"--fetch=Medline\:cancer"=Lanciare_una_ricerca,_es._"--fetch\=Medline\:cancer"
+
+Run_Fetcher,_e.g._"--fetch\=Medline\:cancer"=Lanciare_una_ricerca,_es._"--fetch=Medline:cancer"
 
 The_ACM_Digital_Library=ACM_Digital_Library
 Reset=Reinizializza
@@ -1276,13 +1276,12 @@ File_directory_is_not_set_or_does_not_exist.=La_cartella_dei_file_non_\u00e8_con
 Move_file_to_file_directory.=Sposta_il_file_nella_cartella_dei_file.
 Rename_file_to=Rinomina_il_file_in_
 <b>All_Entries</b>_(this_group_cannot_be_edited_or_removed)=<b>Tutte_le_voci</b>_(questo_gruppo_non_pu\u00f2_essere_modificato_o_rimosso)
-</b>_-_static_group=</b>_-_gruppo_statico
-,_refines_supergroup=,_ridefinisce_il_super-gruppo
-,_includes_subgroups=,_include_il_super-gruppo
-</b>_-_dynamic_group_(<b>=</b>_-_gruppo_dinamico_(<b>
-</b>_contains_<b>=</b>_contiene_<b>
-</b>_-_dynamic_group_(=</b>_-_gruppo_dinamico_(
-search_expression\:_<b>=espressione_di_ricerca:_<b>
+static_group=gruppo_statico
+dynamic_group=gruppo_dinamico
+refines_supergroup=ridefinisce_il_super-gruppo
+includes_subgroups=include_il_super-gruppo
+contains=contiene
+search_expression=espressione_di_ricerc
 
 Disable_file_renaming_in_non-native_file_dialog=Disattivare_la_possibilit\u00e0_di_rinominare_i_file_nelle_finestre_di_dialogo_file_non_native
 File_dialog=Finestra_di_dialogo_file
@@ -1303,7 +1302,7 @@ This_database_contains_one_or_more_duplicated_BibTeX_keys.=Questo_database_conti
 Do_you_want_to_resolve_duplicate_keys_now?=Vuoi_effettuare_la_risoluzione_delle_chiavi_duplicate_ora?
 
 Find_and_remove_duplicate_BibTeX_keys=Trova_e_rimuovi_le_chiavi_BibTeX_duplicate
-Expected_syntax_for_--fetch='<name_of_fetcher>\:<query>'=Sintassi_attesa_per_--fetch\='<name_of_fetcher>\:<query>'
+Expected_syntax_for_--fetch\='<name_of_fetcher>\:<query>'=Sintassi_attesa_per_--fetch='<name_of_fetcher>:<query>'
 Duplicate_BibTeX_key=Chiave_BibTeX_duplicata
 Duplicate_key=Chiave_duplicata
 Generate_key=Genera_una_chiave
@@ -1331,7 +1330,7 @@ Error_setting_look_and_feel=Errore_nell'impostazione_del_"Look-and-Feel"
 Search_failed\:_illegal_search_expression=Ricerca_fallita:_espressione_di_ricerca_illegale
 Show_ArXiv_column=Mostra_la_colonna_ArXiv
 <HTML>Unpack_the_zip_file_containing_import/export_filters_for_Endnote,<BR>for_optimal_interoperability_with_JabRef</HTML>=<HTML>Decomprimi_il_file_zip_contenente_i_filtri_di_importazione/esportazione_per_Endnote,<BR>per_una_interoperabilit\u00e0_ottimale_con_JabRef</HTML>
-Highlight_groups_that_contain_entries_contained_in_any_currently_selected_group=
+Highlight_groups_that_contain_entries_contained_in_any_currently_selected_group=Evidenzia_i_gruppi_contenenti_voci_incluse_in_uno_dei_gruppi_selezionati
 You_must_enter_an_integer_value_in_the_interval_1025-65535_in_the_text_field_for=\u00c8_necessario_inserire_un_intero_nell'intervallo_1025-65535_nel_campo_di_testo_per
 Automatically_open_browse_dialog_when_creating_new_file_link=Apri_automaticamente_la_finestra_di_dialogo_"Sfoglia"_quando_viene_creato_un_nuovo_collegamento_ad_un_file
 
@@ -1351,7 +1350,7 @@ Mr._dLib_web_service_is_temporarily_unavailable.=Il_servizio_web_Mr._dLib_\u00e8
 Mr._dLib_web_service_is_temporarily_down._Please_try_again_later.=Il_servizio_web_Mr._dLib_\u00e8_temporaneamente_non_disponibile._Si_prega_di_riprovare_pi\u00f9_tardi.
 You_are_not_connected_to_the_Internet._To_access_Mr._dLib_web_service_an_internet_connection_is_needed.=Non_sei_connesso_a_Internet._Per_accedere_al_servizio_web_Mr._dLib_\u00e8_necassaria_una_connessione_ad_Internet_attiva.
 No_Internet_Connection.=Nessuna_connessione_a_Internet.
-This_JabRef_version_is_trying_to_access_an_old_version_of_Mr._dLib's_webservice_that_is_not_working_any_more.\nPlease_visit_http\://jabref.sourceforge.net_or_http\://www.mr-dlib.org_for_more_information_and_updates.\n\n\n=Questa_versione_di_JabRef_sta_tentando_di_accedere_ad_una_vecchia_versione_del_servizio_web_Mr._dLib_non_pi\u00f9_funzionante.\nVisita_http://jabref.sourceforge.net_oppure_http://www.mr-dlib.org_per_maggiori_informazioni_e_aggiornamenti.\n\n\n
+This_JabRef_version_is_trying_to_access_an_old_version_of_Mr._dLib's_webservice_that_is_not_working_any_more.\nPlease_visit_http\://jabref.sourceforge.net_or_http\://www.mr-dlib.org_for_more_information_and_updates.=Questa_versione_di_JabRef_sta_tentando_di_accedere_ad_una_vecchia_versione_del_servizio_web_Mr._dLib_non_pi\u00f9_funzionante.\nVisita_http://jabref.sourceforge.net_oppure_http://www.mr-dlib.org_per_maggiori_informazioni_e_aggiornamenti.
 Web_Service_Version_Outdated=Versione_del_servizio_web_obsoleta
 The_Mr._dLib_web_service_version_you_trying_to_access_is_outdated.=La_versione_del_servizio_web_Mr._dLib_a_cui_stai_tentando_di_accedere_\u00e8_obsoleta.
 Update_empty_fields_with_data_fetched_from=Aggiorna_i_campi_vuoti_con_i_dati_recuperati_da
@@ -1490,34 +1489,34 @@ Show=Mostra
 This_is_a_simple_copy_and_paste_dialog._First_load_or_paste_some_text_into_the_text_input_area.<br>After_that,_you_can_mark_text_and_assign_it_to_a_BibTeX_field.=Questo_\u00e8_un_semplice_dialogo_di_copia_e_incolla._Prima_carica_o_incolla_il_testo_nell'area_di_inserimento_di_testo.<BR>Quindi_\u00e8_possibile_selezionare_parti_del_testo_e_assegnarle_ai_campi_BibTeX.
 Java_Bouncy_Castle_library_not_found._Please_download_and_install_it._For_more_information_see_http\://www.bouncycastle.org/.=La_libreria_Java_Bouncy_Castle_non_\u00e8_stata_trovata._\u00c8_necessario_scaricarla_ed_installarla._Per_ulteriori_informazioni_vedi_http://www.bouncycastle.org/.
 
-First_select_entries_to_clean_up.=
-Cleanup_entry=
-Autogenerate_PDF_Names=
-Auto-generating_PDF-Names_does_not_support_undo._Continue?=
-File_rename_failed_for=
-You_have_toggled_the_BibLaTeX_mode.=
-Use_full_firstname_whenever_possible=
-Use_abbreviated_firstname_whenever_possible=
-Use_abbreviated_and_full_firstname=
-Autocompletion_options=
-Autocomplete_after_following_number_of_characters=
-Name_format_used_for_autocompletion=
-Treatment_of_first_names=
-No_icon_found_for_%0=
-Cleanup_entries=
-Move_DOIs_from_note_and_URL_field_to_DOI_field_and_remove_http_prefix=
-Format_content_of_month_field_to_#mon#=
-Ensure_that_page_ranges_are_of_the_form_num1--num2=
-Make_paths_of_linked_files_relative_(if_possible)=
-Rename_PDFs_to_given_file_name_format_pattern=
-Rename_only_PDFs_having_a_relative_path=
-What_would_you_like_to_clean_up?=
-Doing_a_cleanup_for_%0_entries...=
-No_entry_needed_a_clean_up=
-One_entry_needed_a_clean_up=
-%0_entries_needed_a_clean_up=
-Imported_=
-Minimize_to_system_tray=
+First_select_entries_to_clean_up.=Selezionare_le_voci_da_ripulire.
+Cleanup_entry=Ripulisci_voce
+Autogenerate_PDF_Names=Genera_automaticamente_i_nomi_dei_file_PDF
+Auto-generating_PDF-Names_does_not_support_undo._Continue?=La_generazione_automatica_dei_nomi_dei_file_PDF_non_pu\u00f2_essere_annullata._Continuare?
+File_rename_failed_for=Rinominazione_dei_file_fallita_per
+You_have_toggled_the_BibLaTeX_mode.=Attivata_la_modalit\u00e0_BibLaTeX.
+Use_full_firstname_whenever_possible=Usa_nome_completo_quando_possibile
+Use_abbreviated_firstname_whenever_possible=Usa_nome_abbreviato_quando_possibile
+Use_abbreviated_and_full_firstname=Usa_nome_abbreviato_e_completo
+Autocompletion_options=Opzioni_di_autocompletamento
+Autocomplete_after_following_number_of_characters=Attiva_autocompletamento_dopo_il_seguente_numero_di_caratteri
+Name_format_used_for_autocompletion=Formato_dei_nomi_usato_per_l'autocompletamento
+Treatment_of_first_names=Gestione_dei_nomi
+No_icon_found_for_%0=Nessuna_icona_trovata_per_%0
+Cleanup_entries=Ripulisci_voci
+Move_DOIs_from_note_and_URL_field_to_DOI_field_and_remove_http_prefix=Sposta_i_DOI_dai_campi_note_e_URL_al_campo_DOI_e_rimuovi_il_prefisso_'http'
+Format_content_of_month_field_to_#mon#=Formatta_il_contenuto_del_campo_'month'_nella_forma_'#mon#'
+Ensure_that_page_ranges_are_of_the_form_num1--num2=Assicura_che_gli_intervalli_di_pagine_siano_nella_forma_'num1--num2'
+Make_paths_of_linked_files_relative_(if_possible)=Rendi_relativi_i_percorsi_dei_file_collegati_(se_possibile)
+Rename_PDFs_to_given_file_name_format_pattern=Rinomina_i_file_PDF_secondo_il_modello_di_nome_dei_file
+Rename_only_PDFs_having_a_relative_path=Rinomina_solo_i_file_PDF_con_un_percorso_relativo
+What_would_you_like_to_clean_up?=Cosa_si_vuole_ripulire?
+Doing_a_cleanup_for_%0_entries...=Ripulitura_per_%0_voci...
+No_entry_needed_a_clean_up=Nessuna_voce_necessita_ripulitura
+One_entry_needed_a_clean_up=Una_voce_necessita_ripulitura
+%0_entries_needed_a_clean_up=%0_voci_necessitano_ripulitura
+Imported_=Importato
+Minimize_to_system_tray=Minimizza_nell'area_di_notifica
 
 This_feature_generates_a_new_database_based_on_which_entries_are_needed_in_an_existing_LaTeX_document.=Questa_funzione_genera_un_nuovo_database_basato_sulle_voci_necessarie_in_un_documento_LaTeX_esistente.
 You_need_to_select_one_of_your_open_databases_from_which_to_choose_entries,_as_well_as_the_AUX_file_produced_by_LaTeX_when_compiling_your_document.=\u00c8_necessario_selezionare_uno_dei_database_aperti_da_cui_scegliere_le_voci,_cos\u00ec_come_il_file_AUX_prodotto_da_LaTeX_nel_compilare_il_documento.
@@ -1542,49 +1541,138 @@ Select_target_SQL_database\:=Seleziona_il_database_SQL_di_destinazione:
 SQL_Database_Importer=Importazione_database_SQL
 Please_select_which_JabRef_databases_do_you_want_to_import\:=Selezionare_il_database_JabRef_da_importare:
 
-Group_tree_could_not_be_parsed._If_you_save_the_BibTeX_database,_all_groups_will_be_lost.=
+Group_tree_could_not_be_parsed._If_you_save_the_BibTeX_database,_all_groups_will_be_lost.=Impossibile_analizzare_l'albero_dei_gruppi._Salvando_il_database_BibTeX_i_gruppi_saranno_persi.
 Attach_file=Allega_file
 
-Setting_all_preferences_to_default_values.=
-Resetting_preference_key_'%0'=
-Unknown_preference_key_'%0'=
-Unable_to_clear_preferences.=
-
-Reset_preferences_(key1,key2,..._or_'all')=
-Find_unlinked_files=
-Select_All=
-Unselect_All=
-Expand_All=
-Collapse_All=
-Select_Directory=
-Choose_Directory=
-Use_the_selected_directory_to_start_with_the_search.=
-Browse...=
-Opens_the_file_browser.=
-Scan_directory=
-Searches_the_selected_directory_for_unlinked_files.=
-Starts_the_import_of_bibtex_entries.=
-Leave_this_dialog.=
-Create_directory_based_keywords=
-Creates_keywords_in_created_entrys_with_directory_pathnames=
-Select_a_directory_where_the_search_shall_start.=
-Select_file_type\:=
-These_files_are_not_linked_in_the_active_database.=
-Entry_type_to_be_created\:=
-Searching_file_system...=
-Importing_into_Database...=
-Select_directory=
-Select_files=
-Bibtex_entry_creation=
-<No_selection>=
-Push_selection_to_TeXstudio=
-Path_to_TeXstudio=
-Program_'%0'_not_found=
-Pushed_citations_to_TeXstudio=
-Unable_to_connect_to_freecite_online_service.=
-Parse_with_FreeCite=
-Insert_selected_citations_into_TeXstudio=
-The_current_BibTeX_key_will_be_overwritten._Continue?=
-Overwrite_key=
-Not_overwriting_existing_key._To_change_this_setting,_open_Options_->_Prefererences_->_BibTeX_key_generator=
-How_would_you_like_to_link_to_'%0'?=
\ No newline at end of file
+Setting_all_preferences_to_default_values.=Imposta_tutte_le_preferenze_ai_valori_predefiniti.
+Resetting_preference_key_'%0'=Reimposta_la_chiave_delle_preferenze_'%0'
+Unknown_preference_key_'%0'=Chiave_delle_preferenze_sconosciuta_'%0'
+Unable_to_clear_preferences.=Impossibile_reimpostatare_le_preferenze.
+
+Reset_preferences_(key1,key2,..._or_'all')=Reimposta_le_preferenze_(chiave1,chiave2,..._oppure_'all')
+Find_unlinked_files=Trovati_file_non_collegati
+Select_All=Seleziona_tutto
+Unselect_All=Deseleziona_tutto
+Expand_All=Espandi_tutto
+Collapse_All=Comprimi_tutto
+Select_Directory=Seleziona_cartella
+Choose_Directory=Scegli_cartella
+Use_the_selected_directory_to_start_with_the_search.=Usa_la_cartella_selezionata_per_iniziare_la_ricerca.
+Browse...=Sfoglia...
+Opens_the_file_browser.=Apre_il_dialogo_di_selezione_dei_file.
+Scan_directory=Analizza_la_cartella
+Searches_the_selected_directory_for_unlinked_files.=Ricerca_nella_cartella_selezionata_file_non_collegati.
+Starts_the_import_of_bibtex_entries.=Inizia_l'importazione_delle_voci_bibtex
+Leave_this_dialog.=Abbandona_questo_dialogo.
+Create_directory_based_keywords=Crea_parole_chiave_in_base_al_nome_delle_cartelle
+Creates_keywords_in_created_entrys_with_directory_pathnames=Crea_parole_chiave_nelle_voci_generate_in_base_al_percorso_delle_cartelle
+Select_a_directory_where_the_search_shall_start.=Seleziona_una_cartella_dalla_quale_iniziare_la_ricerca.
+Select_file_type\:=Seleziona_il_tipo_di_file:
+These_files_are_not_linked_in_the_active_database.=Questi_file_non_sono_collegati_nel_database_attivo.
+Entry_type_to_be_created\:=Tipo_di_voci_da_creare:
+Searching_file_system...=Ricerca_nel_filesystem...
+Importing_into_Database...=Importazione_nel_database
+Select_directory=Seleziona_cartella
+Select_files=Seleziona_file
+Bibtex_entry_creation=Creazione_della_voce_BibTex
+<No_selection>=<Nessuna_selezione>
+Push_selection_to_TeXstudio=Invia_la_selezione_a_TeXstudio
+Path_to_TeXstudio=Invia_a_TeXstudio
+Program_'%0'_not_found=Programma_'%0'_non_trovato
+Pushed_citations_to_TeXstudio=Inviate_le_citazioni_a_TeXstudio
+Unable_to_connect_to_freecite_online_service.=Impossibile_connettersi_al_servizio_online_FreeCite.
+Parse_with_FreeCite=Analizza_con_FreeCite
+Insert_selected_citations_into_TeXstudio=Inserisci_le_citazioni_selezionate_in_TeXstudio
+The_current_BibTeX_key_will_be_overwritten._Continue?=La_chiave_BibTeX_corrente_sar\u00e0_sovrascritta._Continuare?
+Overwrite_key=Sovrascrivi_chiave
+Not_overwriting_existing_key._To_change_this_setting,_open_Options_->_Prefererences_->_BibTeX_key_generator=Le_chiavi_esistenti_non_vengono_sovrascritte._Per_cambiare_questa_impostazione,_aprire_Opzioni_->_Preferenze_->_Generatore_di_chiavi_BibTeX
+How_would_you_like_to_link_to_'%0'?=Come_vuoi_collegare_a_'%0'?
+Bibtex_key_patterns=Modelli_delle_chiavi_BibTeX
+Changed_special_field_settings=Cambiate_le_impostazioni_dei_campi_speciali
+Clear_priority=Azzera_le_priorit\u00e0
+# not sure how to translate 'rank': voto, punteggio, valutazione, grado, rango?
+Clear_rank=Azzera_la_valutazione
+Compact_rank=Compatta_la_valutazione
+Convert_1st,_2nd,_..._to_real_superscripts=Converti_1st,_2nd,_..._in_apici
+Dropped_comment_from_database=Cancellato_il_commento_dal_database
+Enable_PDF_preview=Abilita_anteprima_PDF
+Enable_special_fields=Abilita_campi_speciali
+Five_stars=Cinque_stelle
+Four_stars=Quattro_stelle
+Help_on_special_fields=Aiuto_sui_campi_speciali
+Keywords_of_selected_entries=Parole_chiave_delle_voci_selezionate
+Manage_content_selectors=Gestione_dei_selettori_dei_contenuti
+Manage_keywords=Gestione_delle_parole_chiave
+Marked_entries'_quality_as_good=Qualit\u00e0_delle_voci_contrassegnata_come_'buona'
+Marked_entries_as_relevant=Voci_contrassegnate_come_'attinenti'
+No_priority_information=Nessuna_informazione_di_priorit\u00e0
+No_rank_information=Nessuna_informazione_sulla_valutazione
+One_star=Una_stella
+Priority=Priorit\u00e0
+Priority_high=Priorit\u00e0_alta
+Priority_low=Priorit\u00e0_bassa
+Priority_medium=Priorit\u00e0_media
+Quality=Qualit\u00e0
+Rank=Valutazione
+Relevance=Attinenza
+Set_priority=Assegna_priorit\u00e0
+Set_priority_to_high=Assegna_priorit\u00e0_alta
+Set_priority_to_low=Assegna_priorit\u00e0_bassa
+Set_priority_to_medium=Assegna_priorit\u00e0_media
+Set_rank_to_five_stars=Assegna_valutazione_di_cinque_stelle
+Set_rank_to_four_stars=Assegna_valutazione_di_quattro_stelle
+Set_rank_to_one_star=Assegna_valutazione_di_una_stella
+Set_rank_to_three_stars=Assegna_valutazione_di_tre_stelle
+Set_rank_to_two_stars=Assegna_valutazione_di_due_stelle
+Show_one_letter_heading_for_icon_columns=Mostra_intestazione_ad_una_lettera_per_le_colonne_di_icone
+Show_priority=Mostra_priorit\u00e0
+Show_quality=Mostra_qualit\u00e0
+Show_rank=Mostra_valutazione
+Show_relevance=Mostra_attinenza
+Synchronize_with_keywords=Sincronizza_con_le_parole_chiave
+Synchronized_special_fields_based_on_keywords=Sincronizzati_i_campi_speciali_in_base_alle_parole_chiave.
+Three_stars=Tre_stelle
+# 'toggle' translated as in German translation
+Toggle_relevance=Mostra/Nascondi_attinenza
+Toogle_quality_assured=Mostra/Nascondi_qualit\u00e0
+Two_stars=Due_stelle
+Update_keywords=Aggiorna_parole_chiave
+Write_values_of_special_fields_as_separate_fields_to_BibTeX=Scrivi_i_valori_dei_campi_speciali_come_campi_separati_nelle_voci_BibTeX
+You_have_changed_settings_for_special_fields.=Sono_state_modificate_le_impostazioni_per_i_campi_speciali.
+no_preview_available=Nessuna_anteprima_disponibile
+
+%0_entries_found._To_reduce_server_load,_only_%1_will_be_downloaded.=Trovate_%0_voci._Per_ridurre_il_carico_sul_server_ne_saranno_scaricate_solo_%1.
+A_string_with_that_label_already_exists=Una_stringa_con_questa_etichetta_esiste_gi\u00e0.
+Connection_to_OpenOffice_has_been_lost._Please_make_sure_OpenOffice_is_running,_and_try_to_reconnect.=Perduta_la_connessione_con_OpenOffice._Assicurarsi_che_OpenOffice_sia_in_esecuzione_e_provare_a_riconnettersi.
+Correct_the_entry,_and_reopen_editor_to_display/edit_source.=Correggi_la_voce_e_riapri_l'editor_per_mostrare/modificare_il_codice_sorgente.
+Could_not_connect_to_a_running_gnuserv_process._Make_sure_that_Emacs_or_XEmacs_is_running,<BR>and_that_the_server_has_been_started_(by_running_the_command_'server-start'/'gnuserv-start').=Impossibile_la_connessione_a_un_processo_gnuserv_in_esecuzione._Accertarsi_che_Emacs_o_XEmacs_siano_in_esecuzione,<BR>e_che_il_server_sia_stato_avviato_(con_il_comando_'server-start'/'gnuserv-start').
+Could_not_connect_to_running_OpenOffice.\nMake_sure_you_have_installed_OpenOffice_with_Java_support.\nIf_connecting_manually,_please_verify_program_and_library_paths.\n\nError_message\:_=Impossibile_la_connessione_ad_OpenOffice.\nAssicurarsi_che_OpenOffice_sia_installato_con_supporto_per_Java.\nSe_si_effettua_la_connessione_manualmente_verificare_i_percorsi_al_programma_e_alla_libreria.\n\nMessaggio_di_errore:_
+Created_group_"%0".=Creato_il_gruppo_"%0".
+File_has_been_updated_externally._Are_you_sure_you_want_to_save?=Il_file_\u00e8_stato_aggiornato_esternamente._Sicuro_di_voler_salvare?
+If_a_pasted_or_imported_entry_already_has_the_field_set,_overwrite.=Se_la_voce_incollata_o_importata_ha_il_campo_gi\u00e0_impostato,_sovrascrivere.
+Import_Metadata_From_PDF=Importa_metadati_dal_file_PDF
+Not_connected_to_any_Writer_document._Please_make_sure_a_document_is_open,_and_use_the_'Select_Writer_document'_button_to_connect_to_it.=Non_connesso_ad_alcun_documento_Writer._Assicurarsi_che_un_documento_sia_aperto_e_connetterlo_con_il_bottone_"Selezionare_il_documento_Writer".
+Please_note_that_this_is_an_early_beta_version._Do_not_use_it_without_backing_up_your_files!=Questa_\u00e8_una_prima_versione_beta._Non_utilizzarla_senza_aver_fatto_un_backup_dei_file!
+Removed_all_subgroups_of_group_"%0".=Eliminati_tutti_i_sottogruppi_del_gruppo_"%0".
+To_disable_the_memory_stick_mode_rename_or_remove_the_jabref.xml_file_in_the_same_folder_as_JabRef.=Per_disabilitare_la_modalit\u00e0_chiavetta_di_memoria_rinominare_o_cancellare_il_file_"jabref.xml"_che_si_trova_nella_cartella_di_installazione_di_JabRef.
+Unable_to_connect._One_possible_reason_is_that_JabRef_and_OpenOffice/LibreOffice_are_not_both_running_in_either_32_bit_mode_or_64_bit_mode.=Impossibile_connettersi._Una_possibile_ragione_\u00e8_il_fatto_che_JabRef_e_OpenOffice/LibreOffice_non_vengono_eseguiti_nella_stessa_modalit\u00e0_a_32_o_64_bit.
+Unable_to_determine_plugin_name_and_version._This_may_not_be_a_valid_JabRef_plugin.=Impossibile_determinare_nome_e_versione_del_plugin._Potrebbe_non_essere_un_plugin_di_JabRef_valido.
+Use_the_following_delimiter_character(s)\:=Usa_i_seguenti_caratteri_di_delimitazione:
+When_downloading_files,_or_moving_linked_files_to_the_file_directory,_prefer_the_bib_file_location_rather_than_the_file_directory_set_above=Quando_si_scaricano_i_file_o_si_spostano_i_file_collegati,_preferire_la_posizione_del_file_BibTeX_alla_cartella_impostata_sopra.
+Your_style_file_specifies_the_character_format_'%0',_which_is_undefined_in_your_current_OpenOffice_document.=Il_file_di_stile_specifica_il_formato_di_carattere_"%0"_che_non_\u00e8_tuttavia_definito_nel_documento_OpenOffice_corrente.
+Your_style_file_specifies_the_paragraph_format_'%0',_which_is_undefined_in_your_current_OpenOffice_document.=Il_file_di_stile_specifica_il_formato_di_paragrafo_"%0"_che_non_\u00e8_tuttavia_definito_nel_documento_OpenOffice_corrente.
+
+Error_fetching_from_Google_Scholar=Errore_nel_recupero_dei_dati_da_Google_Scholar
+Run_HTML_converter_on_title=Eseguire_la_conversione_HTML_sul_titolo
+Searching...=Ricerca_in_corso...
+You_have_selected_more_than_%0_entries_for_download._Some_web_sites_might_block_you_if_you_make_too_many_rapid_downloads._Do_you_want_to_continue?=Sono_state_selezionate_pi\u00f9_di_%0_voci_da_scaricare._Alcuni_siti_potrebbero_bloccare_la_connessione_se_si_eseguono_scaricamenti_troppo_numerosi_e_rapidi._Continuare?
+Confirm_selection=Conferma_la_selezione
+Unknown_DOI\:_'%0'.=DOI sconosciuto:
+Get_BibTeX_entry_from_DOI=Recupera_la_voce_BibTeX_dal_DOI
+Prefer_converting_subscripts_and_superscripts_to_equations_rather_than_text=Conversione_di_apici_e_pedici_in_equazioni_piuttosto_che_in_testo.
+Add_{}_to_specified_title_words_on_search_to_keep_the_correct_case=Aggiungere_{}_alle_parole_del_titolo_specificate_per_mantenere_la_corretta_capitalizzazione_nella_ricerca.
+Import_conversions=Importare_le_conversioni
+Run_filter_on_title_keeping_the_case_of_selected_words=Eseguire_il_filtro_sul_titolo_preservando_la_capitalizzazione_delle_parole_selezionate
+Intermittent_errors_on_the_IEEE_Xplore_server._Please_try_again_in_a_while.=Errori_intermittenti_sul_server_IEEE_Xplore._Riprovare_pi\u00f9_tardi.
+Please_enter_a_search_string=Inserire_una_stringa_di_ricerca
+Please_open_or_start_a_new_database_before_searching=Aprire_o_creare_un_nuovo_database_prima_di_effettuare_la_ricerca
diff --git a/src/resource/JabRef_ja.properties b/src/resource/JabRef_ja.properties
index 2db7e73..73bb9a7 100644
--- a/src/resource/JabRef_ja.properties
+++ b/src/resource/JabRef_ja.properties
@@ -349,7 +349,7 @@ Could_not_find_layout_file=\u30ec\u30a4\u30a2\u30a6\u30c8\u30d5\u30a1\u30a4\u30e
 Could_not_import_preferences=\u8a2d\u5b9a\u3092\u53d6\u308a\u8fbc\u3081\u307e\u305b\u3093\u3067\u3057\u305f
 
 Could_not_instantiate_%0=%0\u306b\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u5316\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f
-Could_not_instantiate_%0_%1=%0 %1\u306b\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u5316\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f
+Could_not_instantiate_%0_%1=%0_%1\u306b\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u5316\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f
 
 Could_not_instantiate_%0._Have_you_chosen_the_correct_package_path?=%0\u306b\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u5316\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u6b63\u3057\u3044\u30d1\u30c3\u30b1\u30fc\u30b8\u30d1\u30b9\u3092\u9078\u629e\u3057\u307e\u3057\u305f\u304b\uff1f
 Could_not_open_link=\u30ea\u30f3\u30af\u3092\u958b\u3051\u307e\u305b\u3093\u3067\u3057\u305f
@@ -1900,7 +1900,7 @@ Note_that_these_settings_are_used_for_the_legacy_<b>pdf</b>_and_<b>ps</b>_fields
 Legacy_file_fields=\u5ec3\u6b62\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u30d5\u30a3\u30fc\u30eb\u30c9
 
 This_makes_JabRef_look_up_each_%0_extension_and_check_if_the_file_exists._If_not,_you_will_be_given_options<BR>to_resolve_the_problem.=\u3053\u308c\u3092\u6709\u52b9\u306b\u3059\u308b\u3068\u3001JabRef\u306f\u5404%0\u62e1\u5f35\u5b50\u3092\u8abf\u3079\u3001\u30d5\u30a1\u30a4\u30eb\u304c\u5b58\u5728\u3059\u308b\u304b\u3069\u3046\u304b\u78ba\u8a8d\u3057\u307e\u3059\u3002<BR>\u3082\u3057\u5b58\u5728\u3057\u306a\u3051\u308c\u3070\u3001\u554f\u984c\u3092\u89e3\u6c7a\u3059\u308b\u9078\u629e\u8 [...]
-Run_Fetcher,_e.g._"--fetch=Medline\:cancer"=\u53d6\u5f97\u5b50\u3092\u5b9f\u884c\u3057\u3066\u304f\u3060\u3055\u3044,_\u4f8b:_"--fetch\=Medline\:cancer"
+Run_Fetcher,_e.g._"--fetch\=Medline\:cancer"=\u53d6\u5f97\u5b50\u3092\u5b9f\u884c\u3057\u3066\u304f\u3060\u3055\u3044,_\u4f8b:_"--fetch\=Medline\:cancer"
 
 The_ACM_Digital_Library=ACM\u30c7\u30b8\u30bf\u30eb\u30e9\u30a4\u30d6\u30e9\u30ea
 Reset=\u30ea\u30bb\u30c3\u30c8
@@ -2027,13 +2027,12 @@ File_directory_is_not_set_or_does_not_exist.=\u30d5\u30a1\u30a4\u30eb\u30c7\u30a
 Move_file_to_file_directory.=\u30d5\u30a1\u30a4\u30eb\u3092\u30d5\u30a1\u30a4\u30eb\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u79fb\u52d5\u3057\u307e\u3059\u3002
 Rename_file_to=\u30d5\u30a1\u30a4\u30eb\u540d\u3092\u4ee5\u4e0b\u306b\u6539\u540d:
 <b>All_Entries</b>_(this_group_cannot_be_edited_or_removed)=<b>\u5168\u9805\u76ee</b>\uff08\u3053\u306e\u30b0\u30eb\u30fc\u30d7\u306f\u7de8\u96c6\u3057\u305f\u308a\u524a\u9664\u3057\u305f\u308a\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\uff09
-</b>_-_static_group=</b>_-_\u9759\u7684\u30b0\u30eb\u30fc\u30d7
-,_refines_supergroup=,_\u4e0a\u5c64\u30b0\u30eb\u30fc\u30d7\u3092\u7d5e\u308a\u8fbc\u3080
-,_includes_subgroups=,_\u4e0b\u5c64\u30b0\u30eb\u30fc\u30d7\u3092\u542b\u3080
-</b>_-_dynamic_group_(<b>=</b>_-_\u52d5\u7684\u30b0\u30eb\u30fc\u30d7_(<b>
-</b>_contains_<b>=</b>_contains_<b>
-</b>_-_dynamic_group_(=</b>_-_\u52d5\u7684\u30b0\u30eb\u30fc\u30d7_(
-search_expression\:_<b>=\u691c\u7d22\u8868\u73fe:_<b>
+static_group=\u9759\u7684\u30b0\u30eb\u30fc\u30d7
+dynamic_group=\u52d5\u7684\u30b0\u30eb\u30fc\u30d7
+refines_supergroup=\u4e0a\u5c64\u30b0\u30eb\u30fc\u30d7\u3092\u7d5e\u308a\u8fbc\u3080
+includes_subgroups=\u4e0b\u5c64\u30b0\u30eb\u30fc\u30d7\u3092\u542b\u3080
+contains=contains
+search_expression=\u691c\u7d22\u8868\u73fe:
 
 Disable_file_renaming_in_non-native_file_dialog=\u30cd\u30a4\u30c6\u30a3\u30d6\u3067\u306a\u3044\u30d5\u30a1\u30a4\u30eb\u30c0\u30a4\u30a2\u30ed\u30b0\u3067\u30d5\u30a1\u30a4\u30eb\u306e\u540d\u79f0\u5909\u66f4\u3092\u3067\u304d\u306a\u304f\u3059\u308b
 File_dialog=\u30d5\u30a1\u30a4\u30eb\u30c0\u30a4\u30a2\u30ed\u30b0
@@ -2054,7 +2053,7 @@ Finished_resolving_duplicate_BibTeX_keys._%0_entries_modified.=\u91cd\u8907\u305
 This_database_contains_one_or_more_duplicated_BibTeX_keys.=\u3053\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u306f\u30011\u3064\u306a\u3044\u3057\u8907\u6570\u306e\u91cd\u8907\u3057\u305fBibTeX\u30ad\u30fc\u304c\u3042\u308a\u307e\u3059\u3002
 Do_you_want_to_resolve_duplicate_keys_now?=\u91cd\u8907\u3057\u305f\u30ad\u30fc\u3092\u76f4\u3061\u306b\u89e3\u6d88\u3057\u307e\u3059\u304b\uff1f
 Find_and_remove_duplicate_BibTeX_keys=\u91cd\u8907BibTeX\u30ad\u30fc\u3092\u691c\u51fa\u3057\u3066\u524a\u9664
-Expected_syntax_for_--fetch='<name_of_fetcher>\:<query>'=\u53f3\u8a18\u306b\u671f\u5f85\u3055\u308c\u308b\u6587\u6cd5:_--fetch\='<name_of_fetcher>\:<query>'
+Expected_syntax_for_--fetch\='<name_of_fetcher>\:<query>'=\u53f3\u8a18\u306b\u671f\u5f85\u3055\u308c\u308b\u6587\u6cd5:_--fetch='<name_of_fetcher>:<query>'
 Duplicate_BibTeX_key=\u91cd\u8907\u3057\u305fBibTeX\u30ad\u30fc
 Duplicate_key=\u91cd\u8907\u30ad\u30fc
 Generate_key=\u30ad\u30fc\u3092\u751f\u6210
@@ -2102,13 +2101,13 @@ Mr._dLib_web_service_is_temporarily_unavailable.=Mr._dLib\u30a6\u30a7\u30d6\u30b
 Mr._dLib_web_service_is_temporarily_down._Please_try_again_later.=Mr._dLib\u30a6\u30a7\u30d6\u30b5\u30fc\u30d3\u30b9\u304c\u4e00\u6642\u7684\u306b\u5229\u7528\u3067\u304d\u306a\u304f\u306a\u3063\u3066\u3044\u307e\u3059\u3002\u5f8c\u3067\u5b9f\u884c\u3057\u3066\u307f\u3066\u304f\u3060\u3055\u3044\u3002
 You_are_not_connected_to_the_Internet._To_access_Mr._dLib_web_service_an_internet_connection_is_needed.=\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u306b\u63a5\u7d9a\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002Mr._dLib\u30a6\u30a7\u30d6\u30b5\u30fc\u30d3\u30b9\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u305f\u3081\u306b\u306f\u3001\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u3078\u306e\u63a5\u7d9a\u304c\u5fc5\u8981\u3067\u3059\u3002
 No_Internet_Connection.=\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u306b\u63a5\u7d9a\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002
-This_JabRef_version_is_trying_to_access_an_old_version_of_Mr._dLib's_webservice_that_is_not_working_any_more.\nPlease_visit_http\://jabref.sourceforge.net_or_http\://www.mr-dlib.org_for_more_information_and_updates.\n\n\n=JabRef\u73fe\u884c\u7248\u304c\u3001\u3082\u306f\u3084\u6a5f\u80fd\u3057\u3066\u3044\u306a\u3044Mr._dLib\u306e\u65e7\u7248\u30a6\u30a7\u30d6\u30b5\u30fc\u30d3\u30b9\u306b\u30a2\u30af\u30bb\u30b9\u3057\u3088\u3046\u3068\u3057\u3066\u3044\u307e\u3059\u3002\n\u8a73\u7d30\u [...]
+This_JabRef_version_is_trying_to_access_an_old_version_of_Mr._dLib's_webservice_that_is_not_working_any_more.\nPlease_visit_http\://jabref.sourceforge.net_or_http\://www.mr-dlib.org_for_more_information_and_updates.=JabRef\u73fe\u884c\u7248\u304c\u3001\u3082\u306f\u3084\u6a5f\u80fd\u3057\u3066\u3044\u306a\u3044Mr._dLib\u306e\u65e7\u7248\u30a6\u30a7\u30d6\u30b5\u30fc\u30d3\u30b9\u306b\u30a2\u30af\u30bb\u30b9\u3057\u3088\u3046\u3068\u3057\u3066\u3044\u307e\u3059\u3002\n\u8a73\u7d30\u306a\u [...]
 Web_Service_Version_Outdated=\u30a6\u30a7\u30d6\u30b5\u30fc\u30d3\u30b9\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u304c\u65e7\u304f\u306a\u3063\u3066\u3044\u307e\u3059
 The_Mr._dLib_web_service_version_you_trying_to_access_is_outdated.=\u30a2\u30af\u30bb\u30b9\u3057\u3088\u3046\u3068\u3057\u3066\u3044\u308bMr._dLib\u30a6\u30a7\u30d6\u30b5\u30fc\u30d3\u30b9\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u304c\u65e7\u304f\u306a\u3063\u3066\u3044\u307e\u3059\u3002
 Update_empty_fields_with_data_fetched_from=\u4ee5\u4e0b\u304b\u3089\u53d6\u5f97\u3057\u305f\u30c7\u30fc\u30bf\u3067\u7a7a\u306e\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u66f4\u65b0\u3059\u308b\uff1a
 Create_New_Entry=\u65b0\u898f\u9805\u76ee\u3092\u4f5c\u6210
 Update_Existing_Entry=\u65e2\u5b58\u9805\u76ee\u3092\u66f4\u65b0
-Mr._dLib=Mr. dLib
+Mr._dLib=Mr._dLib
 More_information=\u8a73\u3057\u3044\u60c5\u5831
 Fetching_Metadata...=\u30e1\u30bf\u30c7\u30fc\u30bf\u3092\u53d6\u5f97\u3057\u3066\u3044\u307e\u3059...
 Metadata=\u30e1\u30bf\u30c7\u30fc\u30bf
@@ -2338,4 +2337,91 @@ Insert_selected_citations_into_TeXstudio=
 The_current_BibTeX_key_will_be_overwritten._Continue?=
 Overwrite_key=
 Not_overwriting_existing_key._To_change_this_setting,_open_Options_->_Prefererences_->_BibTeX_key_generator=
-How_would_you_like_to_link_to_'%0'?=
\ No newline at end of file
+How_would_you_like_to_link_to_'%0'?=
+Bibtex_key_patterns=
+Changed_special_field_settings=
+Clear_priority=
+Clear_rank=
+Compact_rank=
+Convert_1st,_2nd,_..._to_real_superscripts=
+Dropped_comment_from_database=
+Enable_PDF_preview=
+Enable_special_fields=
+Five_stars=
+Four_stars=
+Help_on_special_fields=
+Keywords_of_selected_entries=
+Manage_content_selectors=
+Manage_keywords=
+Marked_entries'_quality_as_good=
+Marked_entries_as_relevant=
+No_priority_information=
+No_rank_information=
+One_star=
+Priority=
+Priority_high=
+Priority_low=
+Priority_medium=
+Quality=
+Rank=
+Relevance=
+Set_priority=
+Set_priority_to_high=
+Set_priority_to_low=
+Set_priority_to_medium=
+Set_rank_to_five_stars=
+Set_rank_to_four_stars=
+Set_rank_to_one_star=
+Set_rank_to_three_stars=
+Set_rank_to_two_stars=
+Show_one_letter_heading_for_icon_columns=
+Show_priority=
+Show_quality=
+Show_rank=
+Show_relevance=
+Synchronize_with_keywords=
+Synchronized_special_fields_based_on_keywords=
+Three_stars=
+Toggle_relevance=
+Toogle_quality_assured=
+Two_stars=
+Update_keywords=
+Write_values_of_special_fields_as_separate_fields_to_BibTeX=
+You_have_changed_settings_for_special_fields.=
+no_preview_available=
+
+%0_entries_found._To_reduce_server_load,_only_%1_will_be_downloaded.=
+A_string_with_that_label_already_exists=
+Connection_to_OpenOffice_has_been_lost._Please_make_sure_OpenOffice_is_running,_and_try_to_reconnect.=
+Correct_the_entry,_and_reopen_editor_to_display/edit_source.=
+Could_not_connect_to_a_running_gnuserv_process._Make_sure_that_Emacs_or_XEmacs_is_running,<BR>and_that_the_server_has_been_started_(by_running_the_command_'server-start'/'gnuserv-start').=
+Could_not_connect_to_running_OpenOffice.\nMake_sure_you_have_installed_OpenOffice_with_Java_support.\nIf_connecting_manually,_please_verify_program_and_library_paths.\n\nError_message\:_=
+Created_group_"%0".=
+File_has_been_updated_externally._Are_you_sure_you_want_to_save?=
+If_a_pasted_or_imported_entry_already_has_the_field_set,_overwrite.=
+Import_Metadata_From_PDF=
+Not_connected_to_any_Writer_document._Please_make_sure_a_document_is_open,_and_use_the_'Select_Writer_document'_button_to_connect_to_it.=
+Please_note_that_this_is_an_early_beta_version._Do_not_use_it_without_backing_up_your_files!=
+Removed_all_subgroups_of_group_"%0".=
+To_disable_the_memory_stick_mode_rename_or_remove_the_jabref.xml_file_in_the_same_folder_as_JabRef.=
+Unable_to_connect._One_possible_reason_is_that_JabRef_and_OpenOffice/LibreOffice_are_not_both_running_in_either_32_bit_mode_or_64_bit_mode.=
+Unable_to_determine_plugin_name_and_version._This_may_not_be_a_valid_JabRef_plugin.=
+Use_the_following_delimiter_character(s)\:=
+When_downloading_files,_or_moving_linked_files_to_the_file_directory,_prefer_the_bib_file_location_rather_than_the_file_directory_set_above=
+Your_style_file_specifies_the_character_format_'%0',_which_is_undefined_in_your_current_OpenOffice_document.=
+Your_style_file_specifies_the_paragraph_format_'%0',_which_is_undefined_in_your_current_OpenOffice_document.=
+
+Error_fetching_from_Google_Scholar=
+Run_HTML_converter_on_title=
+Searching...=
+You_have_selected_more_than_%0_entries_for_download._Some_web_sites_might_block_you_if_you_make_too_many_rapid_downloads._Do_you_want_to_continue?=
+Confirm_selection=
+Unknown_DOI\:_'%0'.=
+Get_BibTeX_entry_from_DOI=
+Prefer_converting_subscripts_and_superscripts_to_equations_rather_than_text=
+Add_{}_to_specified_title_words_on_search_to_keep_the_correct_case=
+Import_conversions=
+Run_filter_on_title_keeping_the_case_of_selected_words=
+Intermittent_errors_on_the_IEEE_Xplore_server._Please_try_again_in_a_while.=
+Please_enter_a_search_string=
+Please_open_or_start_a_new_database_before_searching=
diff --git a/src/resource/JabRef_nl.properties b/src/resource/JabRef_nl.properties
index e0542c3..bc40210 100644
--- a/src/resource/JabRef_nl.properties
+++ b/src/resource/JabRef_nl.properties
@@ -1912,7 +1912,7 @@ This_feature_lets_new_files_be_opened_or_imported_into_an_already_running_instan
 Note_that_these_settings_are_used_for_the_legacy_<b>pdf</b>_and_<b>ps</b>_fields_only.<br>For_most_users,_setting_the_<b>Main_file_directory</b>_above_should_be_sufficient.=
 Legacy_file_fields=
 This_makes_JabRef_look_up_each_%0_extension_and_check_if_the_file_exists._If_not,_you_will_be_given_options<BR>to_resolve_the_problem.=
-Run_Fetcher,_e.g._"--fetch=Medline\:cancer"
+Run_Fetcher,_e.g._"--fetch\=Medline\:cancer"
 The_ACM_Digital_Library=
 Reset=
 Use_IEEE_LaTeX_abbreviations=
@@ -2029,13 +2029,12 @@ File_directory_is_not_set_or_does_not_exist.=
 Move_file_to_file_directory.=
 Rename_file_to=
 <b>All_Entries</b>_(this_group_cannot_be_edited_or_removed)=
-</b>_-_static_group=
-,_refines_supergroup=
-,_includes_subgroups=
-</b>_-_dynamic_group_(<b>=
-</b>_contains_<b>=
-</b>_-_dynamic_group_(=
-search_expression\:_<b>=
+static_group=
+dynamic_group=
+refines_supergroup=
+includes_subgroups=
+contains=
+search_expression=
 
 Disable_file_renaming_in_non-native_file_dialog=
 File_dialog=
@@ -2056,7 +2055,7 @@ This_database_contains_one_or_more_duplicated_BibTeX_keys.=
 Do_you_want_to_resolve_duplicate_keys_now?=
 
 Find_and_remove_duplicate_BibTeX_keys=
-Expected_syntax_for_--fetch='<name_of_fetcher>\:<query>'=
+Expected_syntax_for_--fetch\='<name_of_fetcher>\:<query>'=
 Duplicate_BibTeX_key=
 Duplicate_key=
 Generate_key=
@@ -2104,7 +2103,7 @@ Mr._dLib_web_service_is_temporarily_unavailable.=
 Mr._dLib_web_service_is_temporarily_down._Please_try_again_later.=
 You_are_not_connected_to_the_Internet._To_access_Mr._dLib_web_service_an_internet_connection_is_needed.=
 No_Internet_Connection.=
-This_JabRef_version_is_trying_to_access_an_old_version_of_Mr._dLib's_webservice_that_is_not_working_any_more.\nPlease_visit_http\://jabref.sourceforge.net_or_http\://www.mr-dlib.org_for_more_information_and_updates.\n\n\n=
+This_JabRef_version_is_trying_to_access_an_old_version_of_Mr._dLib's_webservice_that_is_not_working_any_more.\nPlease_visit_http\://jabref.sourceforge.net_or_http\://www.mr-dlib.org_for_more_information_and_updates.=
 Web_Service_Version_Outdated=
 The_Mr._dLib_web_service_version_you_trying_to_access_is_outdated.=
 Update_empty_fields_with_data_fetched_from=
@@ -2338,4 +2337,92 @@ Insert_selected_citations_into_TeXstudio=
 The_current_BibTeX_key_will_be_overwritten._Continue?=
 Overwrite_key=
 Not_overwriting_existing_key._To_change_this_setting,_open_Options_->_Prefererences_->_BibTeX_key_generator=
-How_would_you_like_to_link_to_'%0'?=
\ No newline at end of file
+How_would_you_like_to_link_to_'%0'?=
+Bibtex_key_patterns=
+Changed_special_field_settings=
+Clear_priority=
+Clear_rank=
+Compact_rank=
+Convert_1st,_2nd,_..._to_real_superscripts=
+Dropped_comment_from_database=
+Enable_PDF_preview=
+Enable_special_fields=
+Five_stars=
+Four_stars=
+Help_on_special_fields=
+Keywords_of_selected_entries=
+Manage_content_selectors=
+Manage_keywords=
+Marked_entries'_quality_as_good=
+Marked_entries_as_relevant=
+No_priority_information=
+No_rank_information=
+One_star=
+Priority=
+Priority_high=
+Priority_low=
+Priority_medium=
+Quality=
+Rank=
+Relevance=
+Set_priority=
+Set_priority_to_high=
+Set_priority_to_low=
+Set_priority_to_medium=
+Set_rank_to_five_stars=
+Set_rank_to_four_stars=
+Set_rank_to_one_star=
+Set_rank_to_three_stars=
+Set_rank_to_two_stars=
+Show_one_letter_heading_for_icon_columns=
+Show_priority=
+Show_quality=
+Show_rank=
+Show_relevance=
+Synchronize_with_keywords=
+Synchronized_special_fields_based_on_keywords=
+Three_stars=
+Toggle_relevance=
+Toogle_quality_assured=
+Two_stars=
+Update_keywords=
+Write_values_of_special_fields_as_separate_fields_to_BibTeX=
+You_have_changed_settings_for_special_fields.=
+no_preview_available=
+
+%0_entries_found._To_reduce_server_load,_only_%1_will_be_downloaded.=
+A_string_with_that_label_already_exists=
+Connection_to_OpenOffice_has_been_lost._Please_make_sure_OpenOffice_is_running,_and_try_to_reconnect.=
+Correct_the_entry,_and_reopen_editor_to_display/edit_source.=
+Could_not_connect_to_a_running_gnuserv_process._Make_sure_that_Emacs_or_XEmacs_is_running,<BR>and_that_the_server_has_been_started_(by_running_the_command_'server-start'/'gnuserv-start').=
+Could_not_connect_to_running_OpenOffice.\nMake_sure_you_have_installed_OpenOffice_with_Java_support.\nIf_connecting_manually,_please_verify_program_and_library_paths.\n\nError_message\:_=
+Created_group_"%0".=
+File_has_been_updated_externally._Are_you_sure_you_want_to_save?=
+If_a_pasted_or_imported_entry_already_has_the_field_set,_overwrite.=
+Import_Metadata_From_PDF=
+Not_connected_to_any_Writer_document._Please_make_sure_a_document_is_open,_and_use_the_'Select_Writer_document'_button_to_connect_to_it.=
+Please_note_that_this_is_an_early_beta_version._Do_not_use_it_without_backing_up_your_files!=
+Removed_all_subgroups_of_group_"%0".=
+Run_Fetcher,_e.g._"--fetch\=Medline\:cancer"=
+To_disable_the_memory_stick_mode_rename_or_remove_the_jabref.xml_file_in_the_same_folder_as_JabRef.=
+Unable_to_connect._One_possible_reason_is_that_JabRef_and_OpenOffice/LibreOffice_are_not_both_running_in_either_32_bit_mode_or_64_bit_mode.=
+Unable_to_determine_plugin_name_and_version._This_may_not_be_a_valid_JabRef_plugin.=
+Use_the_following_delimiter_character(s)\:=
+When_downloading_files,_or_moving_linked_files_to_the_file_directory,_prefer_the_bib_file_location_rather_than_the_file_directory_set_above=
+Your_style_file_specifies_the_character_format_'%0',_which_is_undefined_in_your_current_OpenOffice_document.=
+Your_style_file_specifies_the_paragraph_format_'%0',_which_is_undefined_in_your_current_OpenOffice_document.=
+
+Error_fetching_from_Google_Scholar=
+Run_HTML_converter_on_title=
+Searching...=
+You_have_selected_more_than_%0_entries_for_download._Some_web_sites_might_block_you_if_you_make_too_many_rapid_downloads._Do_you_want_to_continue?=
+Confirm_selection=
+Unknown_DOI\:_'%0'.=
+Get_BibTeX_entry_from_DOI=
+Prefer_converting_subscripts_and_superscripts_to_equations_rather_than_text=
+Add_{}_to_specified_title_words_on_search_to_keep_the_correct_case=
+Import_conversions=
+Run_filter_on_title_keeping_the_case_of_selected_words=
+Intermittent_errors_on_the_IEEE_Xplore_server._Please_try_again_in_a_while.=
+Please_enter_a_search_string=
+Please_open_or_start_a_new_database_before_searching=
diff --git a/src/resource/JabRef_no.properties b/src/resource/JabRef_no.properties
index 1573e36..36d5fb3 100644
--- a/src/resource/JabRef_no.properties
+++ b/src/resource/JabRef_no.properties
@@ -2128,7 +2128,7 @@ Legacy_file_fields=Foreldede_linkfelter
 
 This_makes_JabRef_look_up_each_%0_extension_and_check_if_the_file_exists._If_not,_you_will_be_given_options<BR>to_resolve_the_problem.=Dette_f\u00e5r_JabRef_til_\u00e5_se_p\u00e5_hver_%0-link,_og_sjekke_om_filen_eksisterer._Hvis_ikke_vil_du_f\u00e5_noen<BR>alternativer_for_\u00e5_l\u00f8se_problemet.
 
-Run_Fetcher,_e.g._"--fetch=Medline:cancer"=
+Run_Fetcher,_e.g._"--fetch\=Medline\:cancer"=
 
 The_ACM_Digital_Library=ACM_Digital_Library
 
@@ -2292,7 +2292,7 @@ Old_plugin_versions_will_be_deleted_next_time_JabRef_starts_up.=Gamle_versjoner_
 
 Formatter_not_found\:_%0=Fant_ikke_formaterer:_%0
 
-The_following_formatters_could_not_be_found=Fant ikke f\u00b8lgende_formaterere
+The_following_formatters_could_not_be_found=Fant_ikke_f\u00b8lgende_formaterere
 
 Clear_inputarea=T\u00b8m_inputfelt
 
@@ -2336,19 +2336,12 @@ Rename_file_to=Endre_navn_p\u00e5_fil_til
 
 <b>All_Entries</b>_(this_group_cannot_be_edited_or_removed)=<b>Alle_enheter</b>_(denne_gruppen_kan_ikke_endres_eller_slettes)
 
-</b>_-_static_group=</b>_-_statisk_gruppe
-
-,_refines_supergroup=,_subset_av_gruppen_over
-
-,_includes_subgroups=,_inkluderer_gruppen_over
-
-</b>_-_dynamic_group_(<b>=</b>_-_dynamisk_gruppe_(<b>
-
-</b>_contains_<b>=</b>_inneholder_<b>
-
-</b>_-_dynamic_group_(=</b>_-_dynamisk_gruppe_(
-
-search_expression\:_<b>=s\u00b8keutrykk:_<b>
+static_group=statisk_gruppe
+dynamic_group=dynamisk_gruppe
+refines_supergroup=subset_av_gruppen_over
+includes_subgroups=inkluderer_gruppen_over
+contains=inneholder
+search_expression=s\u00b8keutryk
 
 Disable_file_renaming_in_non-native_file_dialog=Deaktiver_mulighet_for_\u00e5_endre_navn_i_system-fildialog
 
@@ -2380,7 +2373,7 @@ Do_you_want_to_resolve_duplicate_keys_now?=Vil_du_ordne_opp_i_dupliserte_n\u00f8
 
 Find_and_remove_duplicate_BibTeX_keys=Finn_og_fjern_dupliserte_BibTeX-n\u00f8kler
 
-Expected_syntax_for_--fetch='<name_of_fetcher>:<query>'=
+Expected_syntax_for_--fetch\='<name_of_fetcher>\:<query>'=
 
 Duplicate_BibTeX_key=Duplisert_BibTeX-n\u00f8kkel
 
@@ -2463,7 +2456,7 @@ Mr._dLib_web_service_is_temporarily_down._Please_try_again_later.=Mr._dLib_webtj
 You_are_not_connected_to_the_Internet._To_access_Mr._dLib_web_service_an_internet_connection_is_needed.=Du_er_ikke_koblet_til_internett._En_internettforbindelse_trengs_for_\u00e5_bentytte_Mr._dLib-webtjenesten.
 
 No_Internet_Connection.=Ingen_internettforbindelse
-This_JabRef_version_is_trying_to_access_an_old_version_of_Mr._dLib's_webservice_that_is_not_working_any_more.\nPlease_visit_http\://jabref.sourceforge.net_or_http\://www.mr-dlib.org_for_more_information_and_updates.\n\n\n=Denne_versjonen_av_JabRef_fors\u00f8ker_\u00e5_koble_til_en_gammel_versjon_av_Mr._dLib-webtjenesten_som_ikke_lenger_virker.nVennligst_g\u00e5_til_http://jabref.sourceforge.net_eller_http://www.mr-dlib.org_for_mer_informasjon_og_oppdateringer.\n\n\n
+This_JabRef_version_is_trying_to_access_an_old_version_of_Mr._dLib's_webservice_that_is_not_working_any_more.\nPlease_visit_http\://jabref.sourceforge.net_or_http\://www.mr-dlib.org_for_more_information_and_updates.=Denne_versjonen_av_JabRef_fors\u00f8ker_\u00e5_koble_til_en_gammel_versjon_av_Mr._dLib-webtjenesten_som_ikke_lenger_virker.nVennligst_g\u00e5_til_http://jabref.sourceforge.net_eller_http://www.mr-dlib.org_for_mer_informasjon_og_oppdateringer.
 
 Web_Service_Version_Outdated=Utdatert_versjon_av_webtjenesten
 
@@ -2836,4 +2829,91 @@ Insert_selected_citations_into_TeXstudio=
 The_current_BibTeX_key_will_be_overwritten._Continue?=
 Overwrite_key=
 Not_overwriting_existing_key._To_change_this_setting,_open_Options_->_Prefererences_->_BibTeX_key_generator=
-How_would_you_like_to_link_to_'%0'?=
\ No newline at end of file
+How_would_you_like_to_link_to_'%0'?=
+Bibtex_key_patterns=
+Changed_special_field_settings=
+Clear_priority=
+Clear_rank=
+Compact_rank=
+Convert_1st,_2nd,_..._to_real_superscripts=
+Dropped_comment_from_database=
+Enable_PDF_preview=
+Enable_special_fields=
+Five_stars=
+Four_stars=
+Help_on_special_fields=
+Keywords_of_selected_entries=
+Manage_content_selectors=
+Manage_keywords=
+Marked_entries'_quality_as_good=
+Marked_entries_as_relevant=
+No_priority_information=
+No_rank_information=
+One_star=
+Priority=
+Priority_high=
+Priority_low=
+Priority_medium=
+Quality=
+Rank=
+Relevance=
+Set_priority=
+Set_priority_to_high=
+Set_priority_to_low=
+Set_priority_to_medium=
+Set_rank_to_five_stars=
+Set_rank_to_four_stars=
+Set_rank_to_one_star=
+Set_rank_to_three_stars=
+Set_rank_to_two_stars=
+Show_one_letter_heading_for_icon_columns=
+Show_priority=
+Show_quality=
+Show_rank=
+Show_relevance=
+Synchronize_with_keywords=
+Synchronized_special_fields_based_on_keywords=
+Three_stars=
+Toggle_relevance=
+Toogle_quality_assured=
+Two_stars=
+Update_keywords=
+Write_values_of_special_fields_as_separate_fields_to_BibTeX=
+You_have_changed_settings_for_special_fields.=
+no_preview_available=
+
+%0_entries_found._To_reduce_server_load,_only_%1_will_be_downloaded.=
+A_string_with_that_label_already_exists=
+Connection_to_OpenOffice_has_been_lost._Please_make_sure_OpenOffice_is_running,_and_try_to_reconnect.=
+Correct_the_entry,_and_reopen_editor_to_display/edit_source.=
+Could_not_connect_to_a_running_gnuserv_process._Make_sure_that_Emacs_or_XEmacs_is_running,<BR>and_that_the_server_has_been_started_(by_running_the_command_'server-start'/'gnuserv-start').=
+Could_not_connect_to_running_OpenOffice.\nMake_sure_you_have_installed_OpenOffice_with_Java_support.\nIf_connecting_manually,_please_verify_program_and_library_paths.\n\nError_message\:_=
+Created_group_"%0".=
+File_has_been_updated_externally._Are_you_sure_you_want_to_save?=
+If_a_pasted_or_imported_entry_already_has_the_field_set,_overwrite.=
+Import_Metadata_From_PDF=
+Not_connected_to_any_Writer_document._Please_make_sure_a_document_is_open,_and_use_the_'Select_Writer_document'_button_to_connect_to_it.=
+Please_note_that_this_is_an_early_beta_version._Do_not_use_it_without_backing_up_your_files!=
+Removed_all_subgroups_of_group_"%0".=
+To_disable_the_memory_stick_mode_rename_or_remove_the_jabref.xml_file_in_the_same_folder_as_JabRef.=
+Unable_to_connect._One_possible_reason_is_that_JabRef_and_OpenOffice/LibreOffice_are_not_both_running_in_either_32_bit_mode_or_64_bit_mode.=
+Unable_to_determine_plugin_name_and_version._This_may_not_be_a_valid_JabRef_plugin.=
+Use_the_following_delimiter_character(s)\:=
+When_downloading_files,_or_moving_linked_files_to_the_file_directory,_prefer_the_bib_file_location_rather_than_the_file_directory_set_above=
+Your_style_file_specifies_the_character_format_'%0',_which_is_undefined_in_your_current_OpenOffice_document.=
+Your_style_file_specifies_the_paragraph_format_'%0',_which_is_undefined_in_your_current_OpenOffice_document.=
+
+Error_fetching_from_Google_Scholar=
+Run_HTML_converter_on_title=
+Searching...=
+You_have_selected_more_than_%0_entries_for_download._Some_web_sites_might_block_you_if_you_make_too_many_rapid_downloads._Do_you_want_to_continue?=
+Confirm_selection=
+Unknown_DOI\:_'%0'.=
+Get_BibTeX_entry_from_DOI=
+Prefer_converting_subscripts_and_superscripts_to_equations_rather_than_text=
+Add_{}_to_specified_title_words_on_search_to_keep_the_correct_case=
+Import_conversions=
+Run_filter_on_title_keeping_the_case_of_selected_words=
+Intermittent_errors_on_the_IEEE_Xplore_server._Please_try_again_in_a_while.=
+Please_enter_a_search_string=
+Please_open_or_start_a_new_database_before_searching=
diff --git a/src/resource/JabRef_pt_BR.properties b/src/resource/JabRef_pt_BR.properties
index 22cb024..983d9f9 100644
--- a/src/resource/JabRef_pt_BR.properties
+++ b/src/resource/JabRef_pt_BR.properties
@@ -1068,7 +1068,7 @@ This_feature_lets_new_files_be_opened_or_imported_into_an_already_running_instan
 Note_that_these_settings_are_used_for_the_legacy_<b>pdf</b>_and_<b>ps</b>_fields_only.<br>For_most_users,_setting_the_<b>Main_file_directory</b>_above_should_be_sufficient.=Note_que_estas_configura\u00e7\u00f5es_s\u00e3o_utilizadas_pelos_apenas_campos_obsoletos_de_<b>pdf</b>_e_<b>ps</b>.<br>_Para_a_maioria_dos_usu\u00e1rios,_configurar_o_<b>Diret\u00f3rio_de_arquivo_principal</b>_deve_ser_suficiente.
 Legacy_file_fields=Campos_de_arquivo_obsoletos
 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.=Isto_faz_o_JabRef_pesquisar_cada_extens\u00e3o_%0_e_verificar_se_o_arquivo_existe._Se_n\u00e3o_existe,_voc\u00ea_ter\u00e1_op\u00e7\u00f5es_<br>_para_resolver_o_problema.
-Run_Fetcher,_e.g._"--fetch=Executar_Pesquisar_,_e.g.,_"--fetch"
+Run_Fetcher,_e.g._"--fetch\=Medline\:cancer"=Executar_Pesquisar_,_e.g.,_"--fetch\=Medline\:cancer"
 The_ACM_Digital_Library=A_Biblioteca_Digital_ACM
 Reset=Redefinir
 Use_IEEE_LaTeX_abbreviations=Utilizar_abrevia\u00e7\u00f5es_LaTeX_IEEE
@@ -1171,13 +1171,12 @@ File_directory_is_not_set_or_does_not_exist.=O_diret\u00f3rio_de_arquvios_n\u00e
 Move_file_to_file_directory.=Mover_arquivo_para_diret\u00f3rio_de_arquivo.
 Rename_file_to=Renomear_arquivo_para
 <b>All_Entries</b>_(this_group_cannot_be_edited_or_removed)=<b>Todas_as_refer\u00eancias</b>_(este_grupo_n\u00e3o_pode_ser_editado_ou_removido)
-</b>_-_static_group=</b>_-_grupo_est\u00e1tico
-,_refines_supergroup=,_redefine_o_supergrupo
-,_includes_subgroups=,_incluir_subgrupos
-</b>_-_dynamic_group_(<b>=</b>_-_grupo_din\u00e2mico_(<b>
-</b>_contains_<b>=</b>_cont\u00e9m_<b>
-</b>_-_dynamic_group_(=</b>_-_grupo_din\u00e2mico_(
-search_expression\:_<b>=express\u00e3o_de_pesquisa\:_<b>
+static_group=grupo_est\u00e1tico
+dynamic_group=grupo_din\u00e2mico
+refines_supergroup=redefine_o_supergrupo
+includes_subgroups=incluir_subgrupos
+contains=cont\u00e9m
+search_expression=express\u00e3o_de_pesquisa
 Disable_file_renaming_in_non-native_file_dialog=Desabilitar_renomea\u00e7\u00e3o_de_arquivos_em_di\u00e1logos_de_arquivo_n\u00e3o_nativos
 File_dialog=Caixa_de_di\u00e1logo_de_arquivo
 No_entries_found._It_looks_like_you_do_not_have_access_to_search_JStor.=Nenhuma_refer\u00eancia_encontrada._Parece_que_voc\u00ea_n\u00e3o_tem_acesso_para_pesquisar_no_JStor.
@@ -1193,7 +1192,7 @@ Finished_resolving_duplicate_BibTeX_keys._%0_entries_modified.=Resolu\u00e7\u00e
 This_database_contains_one_or_more_duplicated_BibTeX_keys.=Esta_base_de_dados_cont\u00e9m_uma_ou_mais_chaves_BibTeX_duplicadas.
 Do_you_want_to_resolve_duplicate_keys_now?=Deseja_resolver_chaves_duplicadas_agora?
 Find_and_remove_duplicate_BibTeX_keys=Encontrar_e_remover_chaves_BibTeX_duplicadas
-Expected_syntax_for_--fetch=Sintaxe_esperada_para_--fetch
+Expected_syntax_for_--fetch\='<name_of_fetcher>\:<query>'=Sintaxe_esperada_para_--fetch='<name_of_fetcher>:<query>'
 Duplicate_BibTeX_key=Duplicar_chave_BibTeX
 Duplicate_key=Duplicar_chave
 Generate_key=Gerar_chave
@@ -1235,7 +1234,7 @@ Mr._dLib_web_service_is_temporarily_unavailable.=O_servi\u00e7o_web_Mr._dLib_est
 Mr._dLib_web_service_is_temporarily_down._Please_try_again_later.=O_servi\u00e7o_web_Mr._dLib_est\u00e1_temporariamente_fora_do_ar._Tente_novamente_mais_tarde.
 You_are_not_connected_to_the_Internet._To_access_Mr._dLib_web_service_an_internet_connection_is_needed.=Voc\u00ea_n\u00e3o_est\u00e1_conectado_\u00e0_internet._Para_acessar_o_servi\u00e7o_web_Mr._dLib_\u00e9_necess\u00e1ria_uma_conex\u00e3o_com_a_internet.
 No_Internet_Connection.=Sem_conex\u00e3o_com_a_internet.
-This_JabRef_version_is_trying_to_access_an_old_version_of_Mr._dLib's_webservice_that_is_not_working_any_more.\nPlease_visit_http\://jabref.sourceforge.net_or_http\://www.mr-dlib.org_for_more_information_and_updates.\n\n\n=Esta_vers\u00e3o_do_JabRef_est\u00e1_tentando_acessar_uma_vers\u00e3o_antiga_do_servi\u00e7o_web_Mr._dLib_que_n\u00e3o_funciona_mais.\nPor_favor_visite_http\://jabref.sourceforge.net_ou_http\://www.mr-dlib.org_para_mais_informa\u00e7\u00f5es_e_atualiza\u00e7\u00f5es._\n\n\n
+This_JabRef_version_is_trying_to_access_an_old_version_of_Mr._dLib's_webservice_that_is_not_working_any_more.\nPlease_visit_http\://jabref.sourceforge.net_or_http\://www.mr-dlib.org_for_more_information_and_updates.=Esta_vers\u00e3o_do_JabRef_est\u00e1_tentando_acessar_uma_vers\u00e3o_antiga_do_servi\u00e7o_web_Mr._dLib_que_n\u00e3o_funciona_mais.\nPor_favor_visite_http\://jabref.sourceforge.net_ou_http\://www.mr-dlib.org_para_mais_informa\u00e7\u00f5es_e_atualiza\u00e7\u00f5es._
 Web_Service_Version_Outdated=Vers\u00e3o_do_servi\u00e7o_web_desatualizada
 The_Mr._dLib_web_service_version_you_trying_to_access_is_outdated.=A_vers\u00e3o_do_servi\u00e7o_web_Mr._dLib_que_voc\u00ea_o_qual_voc\u00ea_est\u00e1_tentando_acessar_est\u00e1_desatualizada.
 Update_empty_fields_with_data_fetched_from=Atualizar_campos_vazios_com_dados_recuperados_a_partir_de
@@ -1470,4 +1469,92 @@ Insert_selected_citations_into_TeXstudio=
 The_current_BibTeX_key_will_be_overwritten._Continue?=
 Overwrite_key=
 Not_overwriting_existing_key._To_change_this_setting,_open_Options_->_Prefererences_->_BibTeX_key_generator=
-How_would_you_like_to_link_to_'%0'?=
\ No newline at end of file
+How_would_you_like_to_link_to_'%0'?=
+Bibtex_key_patterns=
+Changed_special_field_settings=
+Clear_priority=
+Clear_rank=
+Compact_rank=
+Convert_1st,_2nd,_..._to_real_superscripts=
+Dropped_comment_from_database=
+Enable_PDF_preview=
+Enable_special_fields=
+Expected_syntax_for_--fetch\=
+Five_stars=
+Four_stars=
+Help_on_special_fields=
+Keywords_of_selected_entries=
+Manage_content_selectors=
+Manage_keywords=
+Marked_entries'_quality_as_good=
+Marked_entries_as_relevant=
+No_priority_information=
+No_rank_information=
+One_star=
+Priority=
+Priority_high=
+Priority_low=
+Priority_medium=
+Quality=
+Rank=
+Relevance=
+Set_priority=
+Set_priority_to_high=
+Set_priority_to_low=
+Set_priority_to_medium=
+Set_rank_to_five_stars=
+Set_rank_to_four_stars=
+Set_rank_to_one_star=
+Set_rank_to_three_stars=
+Set_rank_to_two_stars=
+Show_one_letter_heading_for_icon_columns=
+Show_priority=
+Show_quality=
+Show_rank=
+Show_relevance=
+Synchronize_with_keywords=
+Synchronized_special_fields_based_on_keywords=
+Three_stars=
+Toggle_relevance=
+Toogle_quality_assured=
+Two_stars=
+Update_keywords=
+Write_values_of_special_fields_as_separate_fields_to_BibTeX=
+You_have_changed_settings_for_special_fields.=
+no_preview_available=
+
+%0_entries_found._To_reduce_server_load,_only_%1_will_be_downloaded.=
+A_string_with_that_label_already_exists=
+Connection_to_OpenOffice_has_been_lost._Please_make_sure_OpenOffice_is_running,_and_try_to_reconnect.=
+Correct_the_entry,_and_reopen_editor_to_display/edit_source.=
+Could_not_connect_to_a_running_gnuserv_process._Make_sure_that_Emacs_or_XEmacs_is_running,<BR>and_that_the_server_has_been_started_(by_running_the_command_'server-start'/'gnuserv-start').=
+Could_not_connect_to_running_OpenOffice.\nMake_sure_you_have_installed_OpenOffice_with_Java_support.\nIf_connecting_manually,_please_verify_program_and_library_paths.\n\nError_message\:_=
+Created_group_"%0".=
+File_has_been_updated_externally._Are_you_sure_you_want_to_save?=
+If_a_pasted_or_imported_entry_already_has_the_field_set,_overwrite.=
+Import_Metadata_From_PDF=
+Not_connected_to_any_Writer_document._Please_make_sure_a_document_is_open,_and_use_the_'Select_Writer_document'_button_to_connect_to_it.=
+Please_note_that_this_is_an_early_beta_version._Do_not_use_it_without_backing_up_your_files!=
+Removed_all_subgroups_of_group_"%0".=
+To_disable_the_memory_stick_mode_rename_or_remove_the_jabref.xml_file_in_the_same_folder_as_JabRef.=
+Unable_to_connect._One_possible_reason_is_that_JabRef_and_OpenOffice/LibreOffice_are_not_both_running_in_either_32_bit_mode_or_64_bit_mode.=
+Unable_to_determine_plugin_name_and_version._This_may_not_be_a_valid_JabRef_plugin.=
+Use_the_following_delimiter_character(s)\:=
+When_downloading_files,_or_moving_linked_files_to_the_file_directory,_prefer_the_bib_file_location_rather_than_the_file_directory_set_above=
+Your_style_file_specifies_the_character_format_'%0',_which_is_undefined_in_your_current_OpenOffice_document.=
+Your_style_file_specifies_the_paragraph_format_'%0',_which_is_undefined_in_your_current_OpenOffice_document.=
+
+Error_fetching_from_Google_Scholar=
+Run_HTML_converter_on_title=
+Searching...=
+You_have_selected_more_than_%0_entries_for_download._Some_web_sites_might_block_you_if_you_make_too_many_rapid_downloads._Do_you_want_to_continue?=
+Confirm_selection=
+Unknown_DOI\:_'%0'.=
+Get_BibTeX_entry_from_DOI=
+Prefer_converting_subscripts_and_superscripts_to_equations_rather_than_text=
+Add_{}_to_specified_title_words_on_search_to_keep_the_correct_case=
+Import_conversions=
+Run_filter_on_title_keeping_the_case_of_selected_words=
+Intermittent_errors_on_the_IEEE_Xplore_server._Please_try_again_in_a_while.=
+Please_enter_a_search_string=
+Please_open_or_start_a_new_database_before_searching=
diff --git a/src/resource/JabRef_tr.properties b/src/resource/JabRef_tr.properties
index be15b7d..b219bcb 100644
--- a/src/resource/JabRef_tr.properties
+++ b/src/resource/JabRef_tr.properties
@@ -1,5 +1,5 @@
 #!
-#! created/edited by Popeye version 0.54 (popeye.sourceforge.net)
+#! created/edited by Popeye version 0.55 (https://github.com/koppor/popeye)
 #! encoding:ISO-8859-1
 %0_contains_the_Regular_Expression_<b>%1</b>=%0_\u015fu_D\u00fczenli_\u0130fadeyi_i\u00e7eriyor_<b>%1</b>
 %0_contains_the_term_<b>%1</b>=%0_\u015fu_terimi_i\u00e7eriyor_<b>%1</b>
@@ -1070,8 +1070,7 @@ This_feature_lets_new_files_be_opened_or_imported_into_an_already_running_instan
 Note_that_these_settings_are_used_for_the_legacy_<b>pdf</b>_and_<b>ps</b>_fields_only.<br>For_most_users,_setting_the_<b>Main_file_directory</b>_above_should_be_sufficient.=Bu_ayarlar\u0131n_eski_s\u00fcr\u00fcm_<b>pdf</b>_ve_<b>ps</b>_alanlar\u0131_i\u00e7in_kullan\u0131ld\u0131\u011f\u0131n\u0131_not_ediniz.<br>\u00c7o\u011fu_kullan\u0131c\u0131_i\u00e7in_yukar\u0131daki_<b>Ana_dosya_dizini</b>ni_ayarlamak_yeterli_olacakt\u0131r.
 Legacy_file_fields=Eski_s\u00fcr\u00fcm_dosya_alanlar\u0131
 This_makes_JabRef_look_up_each_%0_extension_and_check_if_the_file_exists._If_not,_you_will_be_given_options<BR>to_resolve_the_problem.=Bu,_JabRef'in_her_bir_%0_uzant\u0131s\u0131n\u0131_bulup_dosyan\u0131n_var_olup_olmad\u0131\u011f\u0131n\u0131_kontrol_etmesini_sa\u011flar._E\u011fer_dosya_yoksa,_sorunu_\u00e7\u00f6zmek_i\u00e7in_se\u00e7enekler<BR>_sunulacakt\u0131r.
-#translation needs to be completed
-Run_Fetcher,_e.g._"--fetch=Medline\:cancer"=Getiriciyi_\u00c7al\u0131\u015ft\u0131r,_\u00d6rnek_"--fetch
+Run_Fetcher,_e.g._"--fetch\=Medline\:cancer"=Getiriciyi_\u00c7al\u0131\u015ft\u0131r,_\u00d6rnek_"--fetch=Medline:cancer"
 
 The_ACM_Digital_Library=ACM_Say\u0131sal_K\u00fct\u00fcphane
 Reset=S\u0131f\u0131rla
@@ -1189,13 +1188,12 @@ File_directory_is_not_set_or_does_not_exist.=Dosya_dizini_atanmad\u0131_ya_da_me
 Move_file_to_file_directory.=Dosyay\u0131_dosya_dizinine_ta\u015f\u0131.
 Rename_file_to=Dosyay\u0131_\u015funa_yeniden_adland\u0131r
 <b>All_Entries</b>_(this_group_cannot_be_edited_or_removed)=<b>T\u00fcm_Girdiler</b>_(bu_grup_silinemez_ve_d\u00fczenlenemez)
-</b>_-_static_group=</b>_-_dura\u011fan_grup
-,_refines_supergroup=,_s\u00fcpergrubu_rafine_eder
-,_includes_subgroups=,_altgruplar\u0131_i\u00e7erir
-</b>_-_dynamic_group_(<b>=</b>_-_devingen_grup_(<b>
-</b>_contains_<b>=</b>_i\u00e7erir_<b>
-</b>_-_dynamic_group_(=</b>_-_devingen_grup_(
-search_expression\:_<b>=arama_ifadesi\:_<b>
+static_group=dura\u011fan_grup
+dynamic_group=devingen_grup
+refines_supergroup=s\u00fcpergrubu_rafine_eder
+includes_subgroups=altgruplar\u0131_i\u00e7erir
+contains=i\u00e7erir
+search_expression=arama_ifadesi
 
 Disable_file_renaming_in_non-native_file_dialog=Do\u011fal_olmayan_dosya_ileti\u015fim_kutusunda_dosya_yeniden_adland\u0131rmay\u0131_etkisiz_k\u0131l
 File_dialog=Dosya_ileti\u015fim_kutusu
@@ -1216,7 +1214,7 @@ This_database_contains_one_or_more_duplicated_BibTeX_keys.=Bu_veritaban\u0131_bi
 Do_you_want_to_resolve_duplicate_keys_now?=\u00c7ifte_anahtarlar\u0131_\u015fimdi_\u00e7\u00f6z\u00fcmlemek_ister_misiniz?
 
 Find_and_remove_duplicate_BibTeX_keys=\u00c7ifte_BibTeX_anahtarlar\u0131n\u0131_bul_ve_kald\u0131r
-Expected_syntax_for_--fetch=--fetch_i\u00e7in_beklenen_s\u00f6zdizimi
+Expected_syntax_for_--fetch\='<name_of_fetcher>\:<query>'=--fetch_i\u00e7in_beklenen_s\u00f6zdizimi_:--fetch='<name_of_fetcher>:<query>'
 Duplicate_BibTeX_key=\u00c7ifte_BibTeX_anahtar\u0131
 Duplicate_key=\u00c7ifte_anahtar
 Generate_key=Anahtar_olu\u015ftur
@@ -1242,7 +1240,7 @@ User-specific_file_directory=Kullan\u0131c\u0131ya_\u00f6zel_dosya_dizini
 Error_setting_look_and_feel=G\u00f6r\u00fcn\u00fcm_ve_izlenimi_kurmada_hata
 Search_failed\:_illegal_search_expression=Arama_ba\u015far\u0131s\u0131z\:_uygunsuz_arama_dizgesi
 Show_ArXiv_column=ArXiv_s\u00fctununu_g\u00f6ster
-<HTML>Unpack_the_zip_file_containing_import/export_filters_for_Endnote,<BR>for_optimal_interoperability_with_JabRef</HTML>=<HTML>JabRef'le_optimal_kar\u015f\u0131l\u0131kl\u0131_kullan\u0131m i\u00e7in <BR>Endnote_i\u00e7in_i\u00e7e_alma/d\u0131\u015fa_aktarma_filtrelerini_i\u00e7eren_zip_dosyas\u0131n\u0131_\u00e7\u00f6z</HTML>
+<HTML>Unpack_the_zip_file_containing_import/export_filters_for_Endnote,<BR>for_optimal_interoperability_with_JabRef</HTML>=<HTML>JabRef'le_optimal_kar\u015f\u0131l\u0131kl\u0131_kullan\u0131m_i\u00e7in_<BR>Endnote_i\u00e7in_i\u00e7e_alma/d\u0131\u015fa_aktarma_filtrelerini_i\u00e7eren_zip_dosyas\u0131n\u0131_\u00e7\u00f6z</HTML>
 Highlight_groups_that_contain_entries_contained_in_any_currently_selected_group=Herhangi_bir_mevcut_se\u00e7ilmi\u015f_grup\u00e7a_i\u00e7erilen_girdileri_i\u00e7eren_gruplar\u0131_vurgula
 
 You_must_enter_an_integer_value_in_the_interval_1025-65535_in_the_text_field_for=Metin_alan\u0131na_1025-65535_aral\u0131\u011f\u0131nda_bir_tamsay\u0131_girmelisiniz
@@ -1264,7 +1262,7 @@ Mr._dLib_web_service_is_temporarily_unavailable.=Mr._dLib_a\u011f_servisi_ge\u00
 Mr._dLib_web_service_is_temporarily_down._Please_try_again_later.=Mr._dLib_a\u011f_servisi_ge\u00e7ici_olarak_servis_d\u0131\u015f\u0131._L\u00fctfen_daha_sonra_tekrar_deneyin.
 You_are_not_connected_to_the_Internet._To_access_Mr._dLib_web_service_an_internet_connection_is_needed.=Internete_ba\u011fl\u0131_de\u011filsiniz._Mr._dLib_a\u011f_servisine_eri\u015fim_i\u00e7in_internet_ba\u011flant\u0131s\u0131_gereklidir.
 No_Internet_Connection.=Internet_Ba\u011flant\u0131s\u0131_Yok.
-This_JabRef_version_is_trying_to_access_an_old_version_of_Mr._dLib's_webservice_that_is_not_working_any_more.\nPlease_visit_http\://jabref.sourceforge.net_or_http\://www.mr-dlib.org_for_more_information_and_updates.\n\n\n=Bu_JabRef_s\u00fcr\u00fcm\u00fc_art\u0131k_\u00e7al\u0131\u015fmayan_eski_bir_Mr._dLib_a\u011f_servisi_s\u00fcr\u00fcm\u00fcne_eri\u015fmeye_\u00e7al\u0131\u015f\u0131yor.\nL\u00fctfen_daha_fazla_bilgi_ve_g\u00fcncellemeler_i\u00e7in_http\://jabref.sourceforge.net_ya_da [...]
+This_JabRef_version_is_trying_to_access_an_old_version_of_Mr._dLib's_webservice_that_is_not_working_any_more.\nPlease_visit_http\://jabref.sourceforge.net_or_http\://www.mr-dlib.org_for_more_information_and_updates.=Bu_JabRef_s\u00fcr\u00fcm\u00fc_art\u0131k_\u00e7al\u0131\u015fmayan_eski_bir_Mr._dLib_a\u011f_servisi_s\u00fcr\u00fcm\u00fcne_eri\u015fmeye_\u00e7al\u0131\u015f\u0131yor.\nL\u00fctfen_daha_fazla_bilgi_ve_g\u00fcncellemeler_i\u00e7in_http\://jabref.sourceforge.net_ya_da_http\ [...]
 Web_Service_Version_Outdated=A\u011f_Servisi_S\u00fcr\u00fcm\u00fc_Eski
 The_Mr._dLib_web_service_version_you_trying_to_access_is_outdated.=Eri\u015fmeye_\u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131z_Mr._dLib_a\u011f_servis_s\u00fcr\u00fcm\u00fc_eskimi\u015f.
 Update_empty_fields_with_data_fetched_from=\u015euradan_al\u0131nan_veriyle_bo\u015f_alanlar\u0131_g\u00fcncelle
@@ -1498,3 +1496,91 @@ The_current_BibTeX_key_will_be_overwritten._Continue?=Mevcut_BibTeX_anahtar\u013
 Overwrite_key=Anahtar\u0131n_\u00fczerine_yaz
 Not_overwriting_existing_key._To_change_this_setting,_open_Options_->_Prefererences_->_BibTeX_key_generator=Mevcut_anahtar\u0131n_\u00fczerine_yaz\u0131lm\u0131yor._Bu_ayar\u0131_de\u011fi\u015ftirmek_i\u00e7in_Se\u00e7enekler_->_Tercihler_->_BibTeX_anahtar_olu\u015fturucusu'nu_a\u00e7\u0131n
 How_would_you_like_to_link_to_'%0'?='%0'a_nas\u0131l_ba\u011flant\u0131_istersiniz?
+
+Bibtex_key_patterns=Bibtex_anahtar_paternleri
+Changed_special_field_settings=De\u011fi\u015ftirilmi\u015f_\u00f6zel_alan_ayarlar\u0131
+Clear_priority=\u00d6nceli\u011fi_sil
+Clear_rank=R\u00fctbeyi_sil
+Compact_rank=R\u00fctbeyi_s\u0131k\u0131la\u015ft\u0131r
+Convert_1st,_2nd,_..._to_real_superscripts=1.,_2.,_..._vs.'yi_ger\u00e7ek_\u00fcst_karaktere_d\u00f6n\u00fc\u015ft\u00fcr
+Dropped_comment_from_database=Yorum_veri_taban\u0131ndan_\u00e7\u0131kart\u0131ld\u0131
+Enable_PDF_preview=PDF_\u00f6nizlemeyi_etkinle\u015ftir
+Enable_special_fields=\u00d6zle_alanlar\u0131_etkinle\u015ftir
+Five_stars=Be\u015f_y\u0131ld\u0131z
+Four_stars=D\u00f6rt_y\u0131ld\u0131z
+Help_on_special_fields=\u00d6zle_alanlar_konusunda_yard\u0131m
+Keywords_of_selected_entries=Se\u00e7ili_girdilerin_anahtar_s\u00f6zc\u00fckleri
+Manage_content_selectors=\u0130\u00e7erik_se\u00e7icileri_y\u00f6net
+Manage_keywords=Anahtar_s\u00f6zc\u00fckleri_y\u00f6net
+Marked_entries'_quality_as_good=Girdilerin_kalitesi_iyi_olarak_i\u015faretlendi
+Marked_entries_as_relevant=Girdiler_ilgili_olarak_i\u015faretlendi
+No_priority_information=\u00d6ncelik_bilgisi_yok
+No_rank_information=R\u00fctbe_bilgisi_yok
+One_star=Bir_y\u0131ld\u0131z
+Priority=\u00d6ncelik
+Priority_high=\u00d6ncelik_y\u00fcksek
+Priority_low=\u00d6ncelik_d\u00fc\u015f\u00fck
+Priority_medium=\u00d6ncelik_orta
+Quality=Kalite
+Rank=R\u00fctbe
+Relevance=\u0130lgi_d\u00fczeyi
+Set_priority=\u00d6ncelik_ata
+Set_priority_to_high=\u00d6nceli\u011fi_y\u00fckse\u011fe_ayarla
+Set_priority_to_low=\u00d6nceli\u011fi_d\u00fc\u015f\u00fc\u011fe_ayarla
+Set_priority_to_medium=\u00d6nceli\u011fi_ortaya_ayarla
+Set_rank_to_five_stars=R\u00fctbeyi_be\u015f_y\u0131ld\u0131za_ayarla
+Set_rank_to_four_stars=R\u00fctbeyi_d\u00f6rt_y\u0131ld\u0131za_ayarla
+Set_rank_to_one_star=R\u00fctbeyi_bir_y\u0131ld\u0131za_ayarla
+Set_rank_to_three_stars=R\u00fctbeyi_\u00fc\u00e7_y\u0131ld\u0131za_ayarla
+Set_rank_to_two_stars=R\u00fctbeyi_iki_y\u0131ld\u0131za_ayarla
+Show_one_letter_heading_for_icon_columns=Simge_s\u00fctunlar\u0131_i\u00e7in_bir_harfli_ba\u015fl\u0131k_g\u00f6ster
+Show_priority=\u00d6nceli\u011fi_g\u00f6ster
+Show_quality=Kaliteyi_g\u00f6ster
+Show_rank=R\u00fctbeyi_g\u00f6ster
+Show_relevance=\u0130lgi_d\u00fczeyini_g\u00f6ster
+Synchronize_with_keywords=Anahtar_s\u00f6zc\u00fcklerle_e\u015fzamanla
+Synchronized_special_fields_based_on_keywords=Anahtar_s\u00f6zc\u00fcklere_dayanarak_\u00f6zel_alanlar_e\u015fzamanland\u0131
+Three_stars=\u00dc\u00e7_y\u0131ld\u0131z
+Toggle_relevance=\u0130lgi_d\u00fczeyini_de\u011fi\u015ftir
+Toogle_quality_assured=Kalite_g\u00fcvencesini_de\u011fi\u015ftir
+Two_stars=\u0130ki_y\u0131ld\u0131z
+Update_keywords=Anahtar_s\u00f6zc\u00fckleri_g\u00fcncelle
+Write_values_of_special_fields_as_separate_fields_to_BibTeX=\u00d6zel_alan_de\u011ferlerini_BibTex'e_ayr\u0131_alanlar_olarak_yaz
+You_have_changed_settings_for_special_fields.=\u00d6zel_alan_ayarlar\u0131n\u0131_de\u011fi\u015ftirdiniz.
+no_preview_available=\u00f6nizleme_yok
+
+%0_entries_found._To_reduce_server_load,_only_%1_will_be_downloaded.=%0_girdi_bulundu._Sunucu_y\u00fck\u00fcn\u00fc_azaltmak_i\u00e7in_yaln\u0131zca_%1_indirilecek.
+A_string_with_that_label_already_exists=Bu_etikete_sahip_bir_dizge_zaten_mevcut
+Connection_to_OpenOffice_has_been_lost._Please_make_sure_OpenOffice_is_running,_and_try_to_reconnect.=OpenOffice_ba\u011flant\u0131s\u0131_koptu._L\u00fctfen_OpenOffice'in_a\u00e7\u0131k_oldu\u011funu_teyid_edin,_ve_tekrar_ba\u011flanmay\u0131_deneyin.
+Correct_the_entry,_and_reopen_editor_to_display/edit_source.=Girdiyi_d\u00fczeltin,_ve_kayna\u011f\u0131_g\u00f6rmek/d\u00fczenlemek_i\u00e7in_d\u00fczenleyiciyi_tekrar_a\u00e7\u0131n.
+Could_not_connect_to_a_running_gnuserv_process._Make_sure_that_Emacs_or_XEmacs_is_running,<BR>and_that_the_server_has_been_started_(by_running_the_command_'server-start'/'gnuserv-start').=\u00d6al\u0131\u015fan_bir_gnuserv_s\u00fcrecine_ba\u011flan\u0131lamad\u0131._Emacs_ya_da_XEmacs'\u0131n_\u00e7al\u0131\u015ft\u0131\u011f\u0131na_ve<BR>sunucunun_ba\u015flat\u0131ld\u0131\u011f\u0131na_('server-start'/'gnuserv-start'_komutu_\u00e7al\u0131\u015ft\u0131r\u0131larak)_emin_olun,
+Could_not_connect_to_running_OpenOffice.\nMake_sure_you_have_installed_OpenOffice_with_Java_support.\nIf_connecting_manually,_please_verify_program_and_library_paths.\n\nError_message\:_=\u00c7al\u0131\u015fan_OpenOffice'e_ba\u011flan\u0131lam\u0131yor.\nOpenOffice'i_Java_deste\u011fiyle_kurdu\u011funuza_emin_olun.\nManuel_ba\u011flan\u0131yorsan\u0131z_program_ve_k\u00fct\u00fcphane_yollar\u0131n\u0131_kontrol_edin.\n\nHata_mesaj\u0131\:_
+Created_group_"%0".=Grup_"%0"_olu\u015fturuldu.
+File_has_been_updated_externally._Are_you_sure_you_want_to_save?=Dosya_d\u0131\u015far\u0131dan_g\u00fcncellendi._Kaydetmek_istedi\u011finize_emin_misiniz?
+If_a_pasted_or_imported_entry_already_has_the_field_set,_overwrite.=E\u011fer_yap\u0131\u015ft\u0131r\u0131lm\u0131\u015f_ya_da_i\u00e7e_aktar\u0131lm\u0131\u015f_bir_girdi_alan\u0131_atad\u0131ysa_\u00fczerine_yaz.
+Import_Metadata_From_PDF=Metadata'y\u0131_PDF'ten_\u0130\u00e7e_Aktar
+Not_connected_to_any_Writer_document._Please_make_sure_a_document_is_open,_and_use_the_'Select_Writer_document'_button_to_connect_to_it.=Herhangi_bir_Writer_belgesine_ba\u011flan\u0131lmad\u0131._L\u00fctfen_bir_belgenin_a\u00e7\u0131k_oldu\u011funa_emin_olun_ve_ona_ba\u011flanmak_i\u00e7in_"Write_belgesini_se\u00e7"_d\u00fc\u011fmesini_kullan\u0131n.
+Please_note_that_this_is_an_early_beta_version._Do_not_use_it_without_backing_up_your_files!=L\u00fctfen_bunun_erken_bir_beta_s\u00fcr\u00fcm\u00fc_oldu\u011funu_kaydedin._Dosyalar\u0131n\u0131z\u0131_yedeklemeden_kullanmay\u0131n!
+Removed_all_subgroups_of_group_"%0".=Grup_"%0"'\u0131n_b\u00fct\u00fcn_alt_gruplar\u0131_silindi.
+To_disable_the_memory_stick_mode_rename_or_remove_the_jabref.xml_file_in_the_same_folder_as_JabRef.=Ta\u015f\u0131nabilir_haf\u0131za_kart\u0131_kipini_etkisizle\u015ftirmek_i\u00e7in_JabRef'le_ayn\u0131_klas\u00f6rdeki_jabref.xml_dosyas\u0131n\u0131_silin_ya_da_ad\u0131n\u0131_de\u011fi\u015ftirin.
+Unable_to_connect._One_possible_reason_is_that_JabRef_and_OpenOffice/LibreOffice_are_not_both_running_in_either_32_bit_mode_or_64_bit_mode.=Ba\u011flan\u0131lamad\u0131._Bir_olas\u0131_neden_JabRef_ve_OpenOffice/LibreOffice'in_birlikte_32_bit_ya_da_64_bit_kipinde_\u00e7al\u0131\u015fmamas\u0131d\u0131r.
+Unable_to_determine_plugin_name_and_version._This_may_not_be_a_valid_JabRef_plugin.=Eklenti_isim_ve_s\u00fcr\u00fcm\u00fc_belirlenemedi._Bu_ge\u00e7erli_bir_JabRef_eklentisi_olmayabilir.
+Use_the_following_delimiter_character(s)\:=A\u015fa\u011f\u0131daki_s\u0131n\u0131rlat\u0131c\u0131_karakter(ler)i_kullan\u0131n\:
+When_downloading_files,_or_moving_linked_files_to_the_file_directory,_prefer_the_bib_file_location_rather_than_the_file_directory_set_above=Dosya_indirirken_ya_da_ba\u011flant\u0131l\u0131_dosyalar\u0131_dosya_dizinine_ta\u015f\u0131rken,_yukar\u0131da_atanan_dosya_dizini_yerine_bib_dosyas\u0131_konumunu_tercih_edin
+Your_style_file_specifies_the_character_format_'%0',_which_is_undefined_in_your_current_OpenOffice_document.=Stil_dosyan\u0131z,_mevcut_OpenOffice_belgenizde_tan\u0131mlanmam\u0131\u015f_olan_'%0'_karakter_format\u0131n\u0131_belirtiyor.
+Your_style_file_specifies_the_paragraph_format_'%0',_which_is_undefined_in_your_current_OpenOffice_document.=Stil_dosyan\u0131z,_mevcut_OpenOffice_belgenizde_tan\u0131mlanmam\u0131\u015f_olan_'%0'_paragraf_format\u0131n\u0131_belirtiyor.
+
+Error_fetching_from_Google_Scholar=Google_Akademik'ten_getirmede_hata
+Run_HTML_converter_on_title=Ba\u015fl\u0131kta_HTML_d\u00f6n\u00fc\u015ft\u00fcr\u00fcc\u00fcy\u00fc_\u00e7al\u0131\u015ft\u0131r
+Searching...=Ar\u0131yor...
+You_have_selected_more_than_%0_entries_for_download._Some_web_sites_might_block_you_if_you_make_too_many_rapid_downloads._Do_you_want_to_continue?=
+Confirm_selection=
+Unknown_DOI\:_'%0'.=
+Get_BibTeX_entry_from_DOI=
+Prefer_converting_subscripts_and_superscripts_to_equations_rather_than_text=
+Add_{}_to_specified_title_words_on_search_to_keep_the_correct_case=
+Import_conversions=
+Run_filter_on_title_keeping_the_case_of_selected_words=
+Intermittent_errors_on_the_IEEE_Xplore_server._Please_try_again_in_a_while.=
+Please_enter_a_search_string=
+Please_open_or_start_a_new_database_before_searching=
diff --git a/src/resource/JabRef_vi.properties b/src/resource/JabRef_vi.properties
index ac56dff..83d0e05 100644
--- a/src/resource/JabRef_vi.properties
+++ b/src/resource/JabRef_vi.properties
@@ -1899,7 +1899,7 @@ Note_that_these_settings_are_used_for_the_legacy_<b>pdf</b>_and_<b>ps</b>_fields
 Legacy_file_fields=C\u00e1c_tr\u01b0\u1eddng_t\u1eadp_tin_c\u0169_c\u00f2n_\u0111\u1ec3_l\u1ea1i
 
 This_makes_JabRef_look_up_each_%0_extension_and_check_if_the_file_exists._If_not,_you_will_be_given_options<BR>to_resolve_the_problem.=\u0110i\u1ec1u_n\u00e0y_khi\u1ebfn_JabRef_t\u00ecm_m\u1ed7i_ph\u1ea7n_m\u1edf_r\u1ed9ng_trong_t\u1ed5ng_s\u1ed1_%0_v\u00e0_ki\u1ec3m_tra_xem_t\u1eadp_tin_c\u00f3_t\u1ed3n_t\u1ea1i_kh\u00f4ng._N\u1ebfu_kh\u00f4ng,_b\u1ea1n_s\u1ebd_\u0111\u01b0\u1ee3c_cung_c\u1ea5p_c\u00e1c_t\u00f9y_ch\u1ecdn<BR>\u0111\u1ec3_gi\u1ea3i_quy\u1ebft_v\u1ea5n_\u0111\u1ec1_n\u00e0y.
-Run_Fetcher,_e.g._"--fetch=Medline\:cancer"=Run_Fetcher,_e.g._"--fetch=Medline\:cancer"
+Run_Fetcher,_e.g._"--fetch\=Medline\:cancer"=Run_Fetcher,_e.g._"--fetch=Medline\:cancer"
 
 The_ACM_Digital_Library=Th\u01b0_vi\u1ec7n_s\u1ed1_ACM
 Reset=Thi\u1ebft_l\u1eadp_l\u1ea1i
@@ -2026,13 +2026,13 @@ File_directory_is_not_set_or_does_not_exist.=Th\u01b0_m\u1ee5c_t\u1eadp_tin_kh\u
 Move_file_to_file_directory.=Di_chuy\u1ec3n_t\u1eadp_tin_v\u00e0o_th\u01b0_m\u1ee5c_t\u1eadp_tin.
 Rename_file_to=\u0110\u1ed5i_t\u00ean_t\u1eadp_tin_th\u00e0nh
 <b>All_Entries</b>_(this_group_cannot_be_edited_or_removed)=<b>T\u1ea5t_c\u1ea3_c\u00e1c_m\u1ee5c</b>_(kh\u00f4ng_th\u1ec3_ch\u1ec9nh_s\u1eeda_ho\u1eb7c_lo\u1ea1i_b\u1ecf_nh\u00f3m_n\u00e0y)
-</b>_-_static_group=</b>_-_nh\u00f3m_t\u0129nh
-,_refines_supergroup=,_tinh_ch\u1ec9nh_l\u1ea1i_nh\u00f3m_l\u1edbn
-,_includes_subgroups=,_k\u1ec3_c\u1ea3_c\u00e1c_nh\u00f3m_con
-</b>_-_dynamic_group_(<b>=</b>_-_nh\u00f3m_\u0111\u1ed9ng_(<b>
-</b>_contains_<b>=</b>_ch\u1ee9a_<b>
-</b>_-_dynamic_group_(=</b>_-_nh\u00f3m_\u0111\u1ed9ng_(
-search_expression\:_<b>=bi\u1ec3u_th\u1ee9c_t\u00ecm:_<b>
+static_group=nh\u00f3m_t\u0129nh
+dynamic_group=nh\u00f3m_\u0111\u1ed9ng
+refines_supergroup=tinh_ch\u1ec9nh_l\u1ea1i_nh\u00f3m_l\u1edbn
+includes_subgroups=k\u1ec3_c\u1ea3_c\u00e1c_nh\u00f3m_con
+contains=ch\u1ee9a
+dynamic_group=nh\u00f3m_\u0111\u1ed9ng
+search_expression=bi\u1ec3u_th\u1ee9c_t\u00ecm
 
 Disable_file_renaming_in_non-native_file_dialog=B\u1ea5t_ho\u1ea1t_vi\u1ec7c_\u0111\u1ed5i_t\u00ean_trong_h\u1ed9p_tho\u1ea1i_t\u1eadp_tin_kh\u00f4ng_ph\u1ea3i_thu\u1ed9c_ch\u01b0\u01a1ng_tr\u00ecnh
 File_dialog=H\u1ed9p_tho\u1ea1i_T\u1eadp_tin
@@ -2051,7 +2051,7 @@ Finished_resolving_duplicate_BibTeX_keys._%0_entries_modified.=
 This_database_contains_one_or_more_duplicated_BibTeX_keys.=
 Do_you_want_to_resolve_duplicate_keys_now?=
 Find_and_remove_duplicate_BibTeX_keys=
-Expected_syntax_for_--fetch=
+Expected_syntax_for_--fetch\='<name_of_fetcher>\:<query>'=
 Duplicate_BibTeX_key=
 Duplicate_key=
 Generate_key=
@@ -2099,7 +2099,7 @@ Mr._dLib_web_service_is_temporarily_unavailable.=
 Mr._dLib_web_service_is_temporarily_down._Please_try_again_later.=
 You_are_not_connected_to_the_Internet._To_access_Mr._dLib_web_service_an_internet_connection_is_needed.=
 No_Internet_Connection.=
-This_JabRef_version_is_trying_to_access_an_old_version_of_Mr._dLib's_webservice_that_is_not_working_any_more.\nPlease_visit_http\://jabref.sourceforge.net_or_http\://www.mr-dlib.org_for_more_information_and_updates.\n\n\n=
+This_JabRef_version_is_trying_to_access_an_old_version_of_Mr._dLib's_webservice_that_is_not_working_any_more.\nPlease_visit_http\://jabref.sourceforge.net_or_http\://www.mr-dlib.org_for_more_information_and_updates.=
 Web_Service_Version_Outdated=
 The_Mr._dLib_web_service_version_you_trying_to_access_is_outdated.=
 Update_empty_fields_with_data_fetched_from=
@@ -2334,4 +2334,91 @@ Insert_selected_citations_into_TeXstudio=
 The_current_BibTeX_key_will_be_overwritten._Continue?=
 Overwrite_key=
 Not_overwriting_existing_key._To_change_this_setting,_open_Options_->_Prefererences_->_BibTeX_key_generator=
-How_would_you_like_to_link_to_'%0'?=
\ No newline at end of file
+How_would_you_like_to_link_to_'%0'?=
+Bibtex_key_patterns=
+Changed_special_field_settings=
+Clear_priority=
+Clear_rank=
+Compact_rank=
+Convert_1st,_2nd,_..._to_real_superscripts=
+Dropped_comment_from_database=
+Enable_PDF_preview=
+Enable_special_fields=
+Five_stars=
+Four_stars=
+Help_on_special_fields=
+Keywords_of_selected_entries=
+Manage_content_selectors=
+Manage_keywords=
+Marked_entries'_quality_as_good=
+Marked_entries_as_relevant=
+No_priority_information=
+No_rank_information=
+One_star=
+Priority=
+Priority_high=
+Priority_low=
+Priority_medium=
+Quality=
+Rank=
+Relevance=
+Set_priority=
+Set_priority_to_high=
+Set_priority_to_low=
+Set_priority_to_medium=
+Set_rank_to_five_stars=
+Set_rank_to_four_stars=
+Set_rank_to_one_star=
+Set_rank_to_three_stars=
+Set_rank_to_two_stars=
+Show_one_letter_heading_for_icon_columns=
+Show_priority=
+Show_quality=
+Show_rank=
+Show_relevance=
+Synchronize_with_keywords=
+Synchronized_special_fields_based_on_keywords=
+Three_stars=
+Toggle_relevance=
+Toogle_quality_assured=
+Two_stars=
+Update_keywords=
+Write_values_of_special_fields_as_separate_fields_to_BibTeX=
+You_have_changed_settings_for_special_fields.=
+no_preview_available=
+
+%0_entries_found._To_reduce_server_load,_only_%1_will_be_downloaded.=
+A_string_with_that_label_already_exists=
+Connection_to_OpenOffice_has_been_lost._Please_make_sure_OpenOffice_is_running,_and_try_to_reconnect.=
+Correct_the_entry,_and_reopen_editor_to_display/edit_source.=
+Could_not_connect_to_a_running_gnuserv_process._Make_sure_that_Emacs_or_XEmacs_is_running,<BR>and_that_the_server_has_been_started_(by_running_the_command_'server-start'/'gnuserv-start').=
+Could_not_connect_to_running_OpenOffice.\nMake_sure_you_have_installed_OpenOffice_with_Java_support.\nIf_connecting_manually,_please_verify_program_and_library_paths.\n\nError_message\:_=
+Created_group_"%0".=
+File_has_been_updated_externally._Are_you_sure_you_want_to_save?=
+If_a_pasted_or_imported_entry_already_has_the_field_set,_overwrite.=
+Import_Metadata_From_PDF=
+Not_connected_to_any_Writer_document._Please_make_sure_a_document_is_open,_and_use_the_'Select_Writer_document'_button_to_connect_to_it.=
+Please_note_that_this_is_an_early_beta_version._Do_not_use_it_without_backing_up_your_files!=
+Removed_all_subgroups_of_group_"%0".=
+To_disable_the_memory_stick_mode_rename_or_remove_the_jabref.xml_file_in_the_same_folder_as_JabRef.=
+Unable_to_connect._One_possible_reason_is_that_JabRef_and_OpenOffice/LibreOffice_are_not_both_running_in_either_32_bit_mode_or_64_bit_mode.=
+Unable_to_determine_plugin_name_and_version._This_may_not_be_a_valid_JabRef_plugin.=
+Use_the_following_delimiter_character(s)\:=
+When_downloading_files,_or_moving_linked_files_to_the_file_directory,_prefer_the_bib_file_location_rather_than_the_file_directory_set_above=
+Your_style_file_specifies_the_character_format_'%0',_which_is_undefined_in_your_current_OpenOffice_document.=
+Your_style_file_specifies_the_paragraph_format_'%0',_which_is_undefined_in_your_current_OpenOffice_document.=
+
+Error_fetching_from_Google_Scholar=
+Run_HTML_converter_on_title=
+Searching...=
+You_have_selected_more_than_%0_entries_for_download._Some_web_sites_might_block_you_if_you_make_too_many_rapid_downloads._Do_you_want_to_continue?=
+Confirm_selection=
+Unknown_DOI\:_'%0'.=
+Get_BibTeX_entry_from_DOI=
+Prefer_converting_subscripts_and_superscripts_to_equations_rather_than_text=
+Add_{}_to_specified_title_words_on_search_to_keep_the_correct_case=
+Import_conversions=
+Run_filter_on_title_keeping_the_case_of_selected_words=
+Intermittent_errors_on_the_IEEE_Xplore_server._Please_try_again_in_a_while.=
+Please_enter_a_search_string=
+Please_open_or_start_a_new_database_before_searching=
diff --git a/src/resource/JabRef_zh.properties b/src/resource/JabRef_zh.properties
index 13b2f84..4c72467 100644
--- a/src/resource/JabRef_zh.properties
+++ b/src/resource/JabRef_zh.properties
@@ -1895,7 +1895,7 @@ Note_that_these_settings_are_used_for_the_legacy_<b>pdf</b>_and_<b>ps</b>_fields
 Legacy_file_fields=\u65e7\u5f0f\u6587\u4ef6\u57df
 
 This_makes_JabRef_look_up_each_%0_extension_and_check_if_the_file_exists._If_not,_you_will_be_given_options<BR>to_resolve_the_problem.=\u8fd9\u5c06\u4f7f_JabRef_\u4f9d\u636e%0\u6269\u5c55\u540d\u67e5\u627e\u6587\u4ef6\u662f\u5426\u5b58\u5728\uff0c\u5982\u679c\u627e\u4e0d\u5230\uff0cJabRef_\u5c06\u63d0\u4f9b\u7ed9\u60a8\u9009\u9879\u6765\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\u3002
-Run_Fetcher,_e.g._"--fetch=Medline\:cancer"=\u8fd0\u884c\u6293\u53d6\u5668\uff0c\u4f8b\u5982_"--fetch\=Medline\:cancer"
+Run_Fetcher,_e.g._"--fetch\=Medline\:cancer"=\u8fd0\u884c\u6293\u53d6\u5668\uff0c\u4f8b\u5982_"--fetch\=Medline\:cancer"
 
 The_ACM_Digital_Library=ACM_\u6570\u5b57\u56fe\u4e66\u9986
 Reset=\u91cd\u7f6e
@@ -2018,13 +2018,12 @@ File_directory_is_not_set_or_does_not_exist.=\u6587\u4ef6\u76ee\u5f55\u6ca1\u670
 Move_file_to_file_directory.=\u79fb\u52a8\u6587\u4ef6\u5230\u6587\u4ef6\u76ee\u5f55\u3002
 Rename_file_to=\u5c06\u6587\u4ef6\u66f4\u540d\u4e3a
 <b>All_Entries</b>_(this_group_cannot_be_edited_or_removed)=<b>\u6240\u6709\u8bb0\u5f55</b>\uff08\u6b64\u5206\u7ec4\u65e0\u6cd5\u88ab\u7f16\u8f91\u6216\u8005\u5220\u9664\uff09
-</b>_-_static_group=</b>_-_\u9759\u6001\u5206\u7ec4
-,_refines_supergroup=,_refines_supergroup(\u7ffb\u8bd1\u65f6\u6ca1\u627e\u5230\u51fa\u5904)
-,_includes_subgroups=,_\u5305\u542b\u5b50\u5206\u7ec4
-</b>_-_dynamic_group_(<b>=</b>_-_\u52a8\u6001\u5206\u7ec4_(<b>
-</b>_contains_<b>=</b>_\u5305\u542b_<b>
-</b>_-_dynamic_group_(=</b>_-_\u52a8\u6001\u5206\u7ec4_(
-search_expression\:_<b>=\u67e5\u8be2\u8868\u8fbe\u5f0f:_<b>
+static_group=\u9759\u6001\u5206\u7ec4
+dynamic_group=\u52a8\u6001\u5206\u7ec4
+refines_supergroup=refines_supergroup_(\u7ffb\u8bd1\u65f6\u6ca1\u627e\u5230\u51fa\u5904)
+includes_subgroups=\u5305\u542b\u5b50\u5206\u7ec4
+contains=\u5305\u542b
+search_expression=\u67e5\u8be2\u8868\u8fbe\u5f0f:
 
 Disable_file_renaming_in_non-native_file_dialog=\u7981\u7528\u975e\u672c\u5730\u6587\u4ef6\u5bf9\u8bdd\u6846\u4e2d\u7684\u6587\u4ef6\u91cd\u547d\u540d
 File_dialog=\u6587\u4ef6\u5bf9\u8bdd\u6846
@@ -2045,7 +2044,7 @@ This_database_contains_one_or_more_duplicated_BibTeX_keys.=\u5f53\u524d\u6570\u6
 Do_you_want_to_resolve_duplicate_keys_now?=\u60a8\u5e0c\u671b\u9a6c\u4e0a\u5904\u7406\u91cd\u590d\u7684\u952e\u503c\u5417\uff1f
 
 Find_and_remove_duplicate_BibTeX_keys=\u67e5\u627e\u5e76\u79fb\u9664\u91cd\u590d\u7684_BibTeX_\u952e\u503c
-Expected_syntax_for_--fetch='<name_of_fetcher>\:<query>'=\u671f\u671b\u7684\u8bed\u6cd5_--fetch\='<name_of_fetcher>\:<query>'
+Expected_syntax_for_--fetch\='<name_of_fetcher>\:<query>'=\u671f\u671b\u7684\u8bed\u6cd5_--fetch='<name_of_fetcher>:<query>'
 Duplicate_BibTeX_key=\u91cd\u590d\u7684_BibTeX_\u952e\u503c
 Duplicate_key=\u91cd\u590d\u7684\u952e\u503c
 Generate_key=\u751f\u6210\u952e\u503c
@@ -2092,7 +2091,7 @@ Mr._dLib_web_service_is_temporarily_unavailable.=
 Mr._dLib_web_service_is_temporarily_down._Please_try_again_later.=
 You_are_not_connected_to_the_Internet._To_access_Mr._dLib_web_service_an_internet_connection_is_needed.=
 No_Internet_Connection.=
-This_JabRef_version_is_trying_to_access_an_old_version_of_Mr._dLib's_webservice_that_is_not_working_any_more.\nPlease_visit_http\://jabref.sourceforge.net_or_http\://www.mr-dlib.org_for_more_information_and_updates.\n\n\n=
+This_JabRef_version_is_trying_to_access_an_old_version_of_Mr._dLib's_webservice_that_is_not_working_any_more.\nPlease_visit_http\://jabref.sourceforge.net_or_http\://www.mr-dlib.org_for_more_information_and_updates.=
 Web_Service_Version_Outdated=
 The_Mr._dLib_web_service_version_you_trying_to_access_is_outdated.=
 Update_empty_fields_with_data_fetched_from=
@@ -2326,4 +2325,91 @@ Insert_selected_citations_into_TeXstudio=
 The_current_BibTeX_key_will_be_overwritten._Continue?=
 Overwrite_key=
 Not_overwriting_existing_key._To_change_this_setting,_open_Options_->_Prefererences_->_BibTeX_key_generator=
-How_would_you_like_to_link_to_'%0'?=
\ No newline at end of file
+How_would_you_like_to_link_to_'%0'?=
+Bibtex_key_patterns=
+Changed_special_field_settings=
+Clear_priority=
+Clear_rank=
+Compact_rank=
+Convert_1st,_2nd,_..._to_real_superscripts=
+Dropped_comment_from_database=
+Enable_PDF_preview=
+Enable_special_fields=
+Five_stars=
+Four_stars=
+Help_on_special_fields=
+Keywords_of_selected_entries=
+Manage_content_selectors=
+Manage_keywords=
+Marked_entries'_quality_as_good=
+Marked_entries_as_relevant=
+No_priority_information=
+No_rank_information=
+One_star=
+Priority=
+Priority_high=
+Priority_low=
+Priority_medium=
+Quality=
+Rank=
+Relevance=
+Set_priority=
+Set_priority_to_high=
+Set_priority_to_low=
+Set_priority_to_medium=
+Set_rank_to_five_stars=
+Set_rank_to_four_stars=
+Set_rank_to_one_star=
+Set_rank_to_three_stars=
+Set_rank_to_two_stars=
+Show_one_letter_heading_for_icon_columns=
+Show_priority=
+Show_quality=
+Show_rank=
+Show_relevance=
+Synchronize_with_keywords=
+Synchronized_special_fields_based_on_keywords=
+Three_stars=
+Toggle_relevance=
+Toogle_quality_assured=
+Two_stars=
+Update_keywords=
+Write_values_of_special_fields_as_separate_fields_to_BibTeX=
+You_have_changed_settings_for_special_fields.=
+no_preview_available=
+
+%0_entries_found._To_reduce_server_load,_only_%1_will_be_downloaded.=
+A_string_with_that_label_already_exists=
+Connection_to_OpenOffice_has_been_lost._Please_make_sure_OpenOffice_is_running,_and_try_to_reconnect.=
+Correct_the_entry,_and_reopen_editor_to_display/edit_source.=
+Could_not_connect_to_a_running_gnuserv_process._Make_sure_that_Emacs_or_XEmacs_is_running,<BR>and_that_the_server_has_been_started_(by_running_the_command_'server-start'/'gnuserv-start').=
+Could_not_connect_to_running_OpenOffice.\nMake_sure_you_have_installed_OpenOffice_with_Java_support.\nIf_connecting_manually,_please_verify_program_and_library_paths.\n\nError_message\:_=
+Created_group_"%0".=
+File_has_been_updated_externally._Are_you_sure_you_want_to_save?=
+If_a_pasted_or_imported_entry_already_has_the_field_set,_overwrite.=
+Import_Metadata_From_PDF=
+Not_connected_to_any_Writer_document._Please_make_sure_a_document_is_open,_and_use_the_'Select_Writer_document'_button_to_connect_to_it.=
+Please_note_that_this_is_an_early_beta_version._Do_not_use_it_without_backing_up_your_files!=
+Removed_all_subgroups_of_group_"%0".=
+To_disable_the_memory_stick_mode_rename_or_remove_the_jabref.xml_file_in_the_same_folder_as_JabRef.=
+Unable_to_connect._One_possible_reason_is_that_JabRef_and_OpenOffice/LibreOffice_are_not_both_running_in_either_32_bit_mode_or_64_bit_mode.=
+Unable_to_determine_plugin_name_and_version._This_may_not_be_a_valid_JabRef_plugin.=
+Use_the_following_delimiter_character(s)\:=
+When_downloading_files,_or_moving_linked_files_to_the_file_directory,_prefer_the_bib_file_location_rather_than_the_file_directory_set_above=
+Your_style_file_specifies_the_character_format_'%0',_which_is_undefined_in_your_current_OpenOffice_document.=
+Your_style_file_specifies_the_paragraph_format_'%0',_which_is_undefined_in_your_current_OpenOffice_document.=
+
+Error_fetching_from_Google_Scholar=
+Run_HTML_converter_on_title=
+Searching...=
+You_have_selected_more_than_%0_entries_for_download._Some_web_sites_might_block_you_if_you_make_too_many_rapid_downloads._Do_you_want_to_continue?=
+Confirm_selection=
+Unknown_DOI\:_'%0'.=
+Get_BibTeX_entry_from_DOI=
+Prefer_converting_subscripts_and_superscripts_to_equations_rather_than_text=
+Add_{}_to_specified_title_words_on_search_to_keep_the_correct_case=
+Import_conversions=
+Run_filter_on_title_keeping_the_case_of_selected_words=
+Intermittent_errors_on_the_IEEE_Xplore_server._Please_try_again_in_a_while.=
+Please_enter_a_search_string=
+Please_open_or_start_a_new_database_before_searching=
diff --git a/src/resource/Menu_it.properties b/src/resource/Menu_it.properties
index 76efcf7..2946ec5 100644
--- a/src/resource/Menu_it.properties
+++ b/src/resource/Menu_it.properties
@@ -143,4 +143,4 @@ Minimize_to_system_tray=Minimizza_nell'area_di_notifica
 Legacy_tools...=Strumenti_obsoleti_...
 Copy_BibTeX_key_and_title=Copia_la_chiave_BibTeX_ed_il_titolo
 
-Cleanup_entries=
\ No newline at end of file
+Cleanup_entries=Pulizia_voci
\ No newline at end of file
diff --git a/src/resource/build.properties b/src/resource/build.properties
index 4467879..8a1cfe6 100644
--- a/src/resource/build.properties
+++ b/src/resource/build.properties
@@ -1,3 +1,3 @@
-builddate=October 25 2012
-build=387
-version=2.9b
\ No newline at end of file
+builddate=November 18 2012
+build=629
+version=2.9b2
\ No newline at end of file
diff --git a/src/txt/CHANGELOG b/src/txt/CHANGELOG
index 1e0a502..fde8985 100644
--- a/src/txt/CHANGELOG
+++ b/src/txt/CHANGELOG
@@ -1,3 +1,34 @@
+2.9 beta 2
+    - Added DiVA fetcher
+    - Can control if the HTML converter should create subscripts and superscripts
+      as text or an equation via the preferences
+    - Added initial support for adding curly brackets {} for certain
+      key words to keep the character case independent of .bst, e.g., for
+      names and abbreviations (use via "Cleanup entries") and can be controlled 
+      via preferences if it should be used at searches
+    - Fixed author and DOI import from IEEE Xplore 
+    - Improved import of equations in IEEE Xplore titles handling images, (sub) and /spl / representations
+    - Rewrote the HTML import in a more general way. A few characters need to be added.
+    - IEEE Xplore abstract fetching should now be working again.
+    - Added DOI to BibTex entry fetcher.
+    - Added ADS (The SAO/NASA Astrophysics Data System) fetcher by Ryo Igarashi (patch #120).
+    - Reintroduced Google Scholar and ACM portal fetcher with entry preview to reduce server load.
+    - Added alternate entry fetcher type where a preview can be displayed so the user can choose
+      which entries to download. This can reduce server load significantly and prevent users from
+      getting locked out of search services.
+    - Fix for exception and minor bugs in HTML import parsing (patch 3575998 by Daniel Sv�rd)
+    - HTML import handles more characters. Cleanup can also do HTML cleanup. (Patch 3582375 by Oscar Gustafsson)
+    - During file renaming: More illegal characters are removed (idea by Sarel Botha)
+    - Rudimentary support for IEEEtranBSTCTL added (patch 3582376 by Oscar Gustafsson)
+    - ":" is not filtered from the BibTeX keys any more (patch 3582376 by Oscar Gustafsson)
+    - Changed internal look&feel setting (based on patch 3580605)
+    - Custom importers nested in jars should be supported now (bug 3582838)
+    - PDFContentImporter uses the DOI fetcher to fetch the BibTeX for the entry (if a DOI exists at the first page).
+    - Moved migration of legacy PDF/PS fields from legacy tools to clean up dialog.
+    - MHT files can now also be linked by drag'n'drop without the need to configure "external file types".
+    - Adds support for Ubunut's global menu and HUD integration by using java-swing-ayatana (feature #796).
+    - Updates PostgreSQL support to PostgreSQL 9.2
+    - New Mac OS X icon (patch #61)
 2.9 beta
     - Replaced notification dialog after moving/renaming linked file by status message.
     - Replaced dialog warnings about empty/duplicate key in entry editor by status line messages,
diff --git a/src/txt/README b/src/txt/README
index 09776db..671e771 100644
--- a/src/txt/README
+++ b/src/txt/README
@@ -1,6 +1,6 @@
 
-JabRef 2.9 beta
----------------
+JabRef 2.9 beta 2
+-----------------
 
 Introduction:
 
diff --git a/src/windows/nsis/setup.nsi b/src/windows/nsis/setup.nsi
index 28ea94b..19696d0 100644
--- a/src/windows/nsis/setup.nsi
+++ b/src/windows/nsis/setup.nsi
@@ -1,9 +1,9 @@
 # owner		JabRef Team
 # license	GPL version 2
 # author	Uwe Stöhr
-# file version	2.0	date	20-11-2007
+# file version	1.0	date	18-01-2007
 
-; To compile this script NSIS 2.30 or newer are required
+; To compile this script NSIS 2.23 and newer are required
 ; http://nsis.sourceforge.net/
 
 
@@ -14,44 +14,31 @@ CRCCheck force
 ; Make the installer as small as possible.
 SetCompressor lzma
 
-; set execution level for Windows Vista
-RequestExecutionLevel user
 
 # general definitions
 ; you only need to change this section for new releases
-; you only need to change this section for new releases
-VIProductVersion "2.4.0.0" ; file version for the installer in the scheme "x.x.x.x"
-!ifndef VERSION
-	!define VERSION "2.4"
-!endif
+VIProductVersion "2.2.0.0" ; file version for the installer in the scheme "x.x.x.x"
+!define VERSION "2.2"
 Name "JabRef ${VERSION}"
 !define REGKEY "SOFTWARE\JabRef"
 !define COMPANY "JabRef Team"
 !define URL "http://jabref.sourceforge.net"
-!define PRODUCT_NAME "JabRef"
-!define PRODUCT_EXE "$INSTDIR\JabRef.exe"
-!define PRODUCT_EXE2 "JabRef.exe"
-!define PRODUCT_REGNAME "BibTeX.Document"
-!define PRODUCT_EXT ".bib"
+!define PRODUCT_EXE "JabRef.exe"
 !define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)"
 !define PRODUCT_LICENSE_FILE "dist\gpl3.txt"
 
 
-; registry preparations
-!define SHCNE_ASSOCCHANGED 0x08000000
-!define SHCNF_IDLIST 0
-
-
 # Variables
 Var StartmenuFolder
-Var CreateFileAssociations
 Var CreateDesktopIcon
 Var Answer
 Var UserName
+Var InstDestination
 
 
 # Included files
 !include "MUI.nsh"
+!include "fileassoc.nsh"
 !include "LogicLib.nsh"
 
 
@@ -116,7 +103,7 @@ Var UserName
 !insertmacro MUI_PAGE_INSTFILES
 
 ; Finish page
-!define MUI_FINISHPAGE_RUN "${PRODUCT_EXE}"
+!define MUI_FINISHPAGE_RUN "$INSTDIR\${PRODUCT_EXE}"
 !define MUI_FINISHPAGE_TEXT "$(FinishPageMessage)"
 !define MUI_FINISHPAGE_RUN_TEXT "$(FinishPageRun)"
 !insertmacro MUI_PAGE_FINISH
@@ -157,7 +144,7 @@ Section "!JabRef" SecCore
 SectionEnd
 
 Section "$(SecAssociateBibTitle)" SecAssociateBib
- StrCpy $CreateFileAssociations "true"
+ !insertmacro APP_ASSOCIATE "bib" "JabRef.BibTeX" "$(FileTypeTitle)" "$INSTDIR\${PRODUCT_EXE},0" "$(OpenIn)" "$INSTDIR\${PRODUCT_EXE} $\"%1$\""
 SectionEnd
 
 Section "$(SecDesktopTitle)" SecDesktop
@@ -177,46 +164,30 @@ Section "-Installation actions" SecInstallation
   SetOverwrite on
   File /r dist\*.*
   WriteRegStr SHCTX "${REGKEY}\Components" Main 1
-  
   ; register JabRef
   WriteRegStr SHCTX "${REGKEY}" Path $INSTDIR
   WriteUninstaller $INSTDIR\uninstall.exe
-  
   ; create shortcuts to startmenu
   SetOutPath "$INSTDIR"
   CreateDirectory "$SMPROGRAMS\$StartmenuFolder"
-  CreateShortCut "$SMPROGRAMS\$StartmenuFolder\$(^Name).lnk" "${PRODUCT_EXE}" "" "$INSTDIR\JabRef.exe"
+  CreateShortCut "$SMPROGRAMS\$StartmenuFolder\$(^Name).lnk" "$INSTDIR\${PRODUCT_EXE}" "" "$INSTDIR\JabRef.exe"
   CreateShortCut "$SMPROGRAMS\$StartmenuFolder\Uninstall $(^Name).lnk" "$INSTDIR\uninstall.exe"
-  
   ; create desktop icon
   ${if} $CreateDesktopIcon == "true"
    SetOutPath "$INSTDIR"
-   CreateShortCut "$DESKTOP\$(^Name).lnk" "${PRODUCT_EXE}" "" "${PRODUCT_EXE}" ;$(^Name).lnk
+   CreateShortCut "$DESKTOP\$(^Name).lnk" "$INSTDIR\${PRODUCT_EXE}" "" "$INSTDIR\${PRODUCT_EXE}" ;$(^Name).lnk
   ${endif}
   WriteRegStr SHCTX "${PRODUCT_UNINST_KEY}" "StartMenu" "$SMPROGRAMS\$StartmenuFolder"
   ${if} $Answer == "yes" ; if user is admin
-  
    ; register information that appear in Windows' software listing
-   WriteRegStr SHCTX "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)"
-   WriteRegStr SHCTX "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${VERSION}"
-   WriteRegStr SHCTX "${PRODUCT_UNINST_KEY}" "Publisher" "${COMPANY}"
-   WriteRegStr SHCTX "${PRODUCT_UNINST_KEY}" "URLInfoAbout" "${URL}"
-   WriteRegStr SHCTX "${PRODUCT_UNINST_KEY}" "DisplayIcon" "${PRODUCT_EXE}"
-   WriteRegStr SHCTX "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninstall.exe"   
-   WriteRegDWORD SHCTX "${PRODUCT_UNINST_KEY}" "NoModify" 0x00000001
-   WriteRegDWORD SHCTX "${PRODUCT_UNINST_KEY}" "NoRepair" 0x00000001
-  ${endif}
-  
-  # register the extension .bib
-  ${if} $CreateFileAssociations == "true"
-   # write informations about file type
-   WriteRegStr SHCTX "Software\Classes\${PRODUCT_REGNAME}" "" "${PRODUCT_NAME} Document"
-   WriteRegStr SHCTX "Software\Classes\${PRODUCT_REGNAME}\DefaultIcon" "" "${PRODUCT_EXE},0"
-   WriteRegStr SHCTX "Software\Classes\${PRODUCT_REGNAME}\Shell\open\command" "" '"${PRODUCT_EXE}" "%1"'
-   # write informations about file extensions
-   WriteRegStr SHCTX "Software\Classes\${PRODUCT_EXT}" "" "${PRODUCT_REGNAME}"
-   # refresh shell
-   System::Call 'shell32.dll::SHChangeNotify(i, i, i, i) (${SHCNE_ASSOCCHANGED}, ${SHCNF_IDLIST}, 0, 0)'
+   WriteRegStr HKLM "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)"
+   WriteRegStr HKLM "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${VERSION}"
+   WriteRegStr HKLM "${PRODUCT_UNINST_KEY}" "Publisher" "${COMPANY}"
+   WriteRegStr HKLM "${PRODUCT_UNINST_KEY}" "URLInfoAbout" "${URL}"
+   WriteRegStr HKLM "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR\${PRODUCT_EXE}"
+   WriteRegStr HKLM "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninstall.exe"   
+   WriteRegDWORD HKLM "${PRODUCT_UNINST_KEY}" "NoModify" 0x00000001
+   WriteRegDWORD HKLM "${PRODUCT_UNINST_KEY}" "NoRepair" 0x00000001
   ${endif}
 
 SectionEnd
@@ -231,24 +202,19 @@ Section "un.JabRef" un.SecUnProgramFiles
   ; delete start menu entry
   ReadRegStr $0 SHCTX "${PRODUCT_UNINST_KEY}" "StartMenu"
   RMDir /r "$0"
-  
   ; delete desktop icon
   Delete "$DESKTOP\$(^Name).lnk"
-  
-  # remove file extension 
-  ReadRegStr $R0 SHCTX "Software\Classes\${PRODUCT_EXT}" ""
-  ${if} $R0 == "${PRODUCT_REGNAME}"
-   DeleteRegKey SHCTX "Software\Classes\${PRODUCT_EXT}"
-   DeleteRegKey SHCTX "Software\Classes\${PRODUCT_REGNAME}"
-  ${endif}
-  
-  ; delete remaining registry entries
+  ; delete registry entries
   DeleteRegKey HKCU "${PRODUCT_UNINST_KEY}"
   DeleteRegKey SHCTX "${PRODUCT_UNINST_KEY}"
-  DeleteRegKey HKCR "Applications\${PRODUCT_EXE2}"
+  DeleteRegKey HKCR "Applications\${PRODUCT_EXE}"
+  DeleteRegValue HKCR ".bib" "JabRef.BibTeX_backup"
+  DeleteRegValue HKCU "Software\Classes\.bib" "JabRef.BibTeX_backup"
+  DeleteRegValue SHCTX "Software\Classes\.bib" "JabRef.BibTeX_backup"
   DeleteRegKey HKCU "${REGKEY}"
   DeleteRegKey SHCTX "${REGKEY}"
-  
+  ; remove file association with .bib-files
+  !insertmacro APP_UNASSOCIATE "bib" "JabRef.BibTeX"
   ; close uninstaller automatically
   SetAutoClose true
 
@@ -258,15 +224,6 @@ SectionEnd
 # Installer functions
 Function .onInit
 
-  StrCpy $StartmenuFolder ${PRODUCT_NAME}
-
- # check if the same Jabref version is already installed
-  ReadRegStr $0 SHCTX "${PRODUCT_UNINST_KEY}" "Publisher"
-  ${if} $0 != ""
-   MessageBox MB_OK|MB_ICONSTOP "$(StillInstalled)" /SD IDOK
-   Abort
-  ${endif}
-  
  InitPluginsDir
   ; If the user does *not* have administrator privileges, abort
   StrCpy $Answer ""
@@ -291,17 +248,11 @@ Function un.onInit
   ${if} $Answer == "yes"
    SetShellVarContext all
   ${else}
-   # check if the Jabref has been installed with admin permisions
-   ReadRegStr $0 HKLM "${PRODUCT_UNINST_KEY}" "Publisher"
-   ${if} $0 != ""
-    MessageBox MB_OK|MB_ICONSTOP "$(UnNotAdminLabel)" /SD IDOK
-    Abort
-   ${endif}
    SetShellVarContext current
   ${endif}
   
   ; ask if it should really be removed
-  MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "$(UnReallyRemoveLabel)" /SD IDYES IDYES +2
+  MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "$(UnReallyRemoveLabel)" IDYES +2
   Abort
 
 FunctionEnd
@@ -309,7 +260,7 @@ FunctionEnd
 Function un.onUninstSuccess
 
   HideWindow
-  MessageBox MB_ICONINFORMATION|MB_OK "$(UnRemoveSuccessLabel)" /SD IDOK
+  MessageBox MB_ICONINFORMATION|MB_OK "$(UnRemoveSuccessLabel)"
 
 FunctionEnd
 

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



More information about the pkg-java-commits mailing list