diff --git a/bibtexparser/customization.py b/bibtexparser/customization.py
index 98cd246..c1b19b2 100644
--- a/bibtexparser/customization.py
+++ b/bibtexparser/customization.py
@@ -7,11 +7,10 @@ You can find inspiration from these functions to design yours.
 Each of them takes a record and return the modified record.
 """
 
-import itertools
 import re
 import logging
 
-from bibtexparser.latexenc import unicode_to_latex, unicode_to_crappy_latex1, unicode_to_crappy_latex2, string_to_latex, protect_uppercase
+from bibtexparser.latexenc import latex_to_unicode, string_to_latex, protect_uppercase
 
 logger = logging.getLogger(__name__)
 
@@ -495,22 +494,16 @@ def convert_to_unicode(record):
     :returns: dict -- the modified record.
     """
     for val in record:
-        if '\\' in record[val] or '{' in record[val]:
-            for k, v in itertools.chain(unicode_to_crappy_latex1, unicode_to_latex):
-                if v in record[val]:
-                    record[val] = record[val].replace(v, k)
-
-        # If there is still very crappy items
-        if '\\' in record[val]:
-            for k, v in unicode_to_crappy_latex2:
-                if v in record[val]:
-                    parts = record[val].split(str(v))
-                    for key, record[val] in enumerate(parts):
-                        if key+1 < len(parts) and len(parts[key+1]) > 0:
-                            # Change order to display accents
-                            parts[key] = parts[key] + parts[key+1][0]
-                            parts[key+1] = parts[key+1][1:]
-                    record[val] = k.join(parts)
+        if isinstance(record[val], list):
+            record[val] = [
+                latex_to_unicode(x) for x in record[val]
+            ]
+        elif isinstance(record[val], dict):
+            record[val] = {
+                k: latex_to_unicode(v) for k, v in record[val].items()
+            }
+        else:
+            record[val] = latex_to_unicode(record[val])
     return record
 
 
diff --git a/bibtexparser/latexenc.py b/bibtexparser/latexenc.py
index b919a24..e225de4 100644
--- a/bibtexparser/latexenc.py
+++ b/bibtexparser/latexenc.py
@@ -7,11 +7,14 @@
 # Etienne Posthumus (epoz)
 # Francois Boulogne <fboulogne at april dot org>
 
+import itertools
 import re
 import sys
+import unicodedata
 
-__all__ = ['string_to_latex', 'protect_uppercase', 'unicode_to_latex',
-           'unicode_to_crappy_latex1', 'unicode_to_crappy_latex2']
+__all__ = ['string_to_latex', 'latex_to_unicode', 'protect_uppercase',
+           'unicode_to_latex', 'unicode_to_crappy_latex1',
+           'unicode_to_crappy_latex2']
 
 
 def string_to_latex(string):
@@ -29,6 +32,62 @@ def string_to_latex(string):
     return ''.join(new)
 
 
+def latex_to_unicode(string):
+    """
+    Convert a LaTeX string to unicode equivalent.
+
+    :param string: string to convert
+    :returns: string
+    """
+    if '\\' in string or '{' in string:
+        for k, v in itertools.chain(unicode_to_crappy_latex1, unicode_to_latex):
+            if v in string:
+                string = string.replace(v, k)
+
+    # If there is still very crappy items
+    if '\\' in string:
+        for k, v in unicode_to_crappy_latex2:
+            if v in string:
+                parts = string.split(str(v))
+                for key, string in enumerate(parts):
+                    if key+1 < len(parts) and len(parts[key+1]) > 0:
+                        # Change order to display accents
+                        parts[key] = parts[key] + parts[key+1][0]
+                        parts[key+1] = parts[key+1][1:]
+                string = k.join(parts)
+
+    # Place accents at correct position
+    # LaTeX requires accents *before* the character. Unicode requires accents
+    # to be *after* the character. Hence, by a raw conversion, accents are not
+    # on the correct letter, see
+    # https://github.com/sciunto-org/python-bibtexparser/issues/121.
+    # We just swap accents positions to fix this.
+    cleaned_string = []
+    i = 0
+    while i < len(string):
+        if not unicodedata.combining(string[i]):
+            # Not a combining diacritical mark, append it
+            cleaned_string.append(string[i])
+            i += 1
+        elif i < len(string) - 1:
+            # Diacritical mark, append it but swap with next character
+            cleaned_string.append(string[i + 1])
+            cleaned_string.append(string[i])
+            i += 2
+        else:
+            # If trailing character is a combining one, just discard it
+            i += 1
+
+    # Normalize unicode characters
+    # Also, when converting to unicode, we should return a normalized Unicode
+    # string, that is always having only compound accentuated character (letter
+    # + accent) or single accentuated character (letter with accent). We choose
+    # to normalize to the latter.
+    cleaned_string = unicodedata.normalize("NFC", "".join(cleaned_string))
+
+    return cleaned_string
+
+
 def protect_uppercase(string):
     """
     Protect uppercase letters for bibtex

convert_to_unicode
I am using the 

parser.customization = convert_to_unicode

feature, but in the utf-8 output the accents are coming out on the character before the correct one.  What would cause this? 

diff --git a/bibtexparser/tests/test_customization.py b/bibtexparser/tests/test_customization.py
index 7587d5e..c6b168b 100644
--- a/bibtexparser/tests/test_customization.py
+++ b/bibtexparser/tests/test_customization.py
@@ -86,6 +86,11 @@ class TestBibtexParserMethod(unittest.TestCase):
         result = convert_to_unicode(record)
         expected = {'toto': 'ü ü'}
         self.assertEqual(result, expected)
+        # From issue 121
+        record = {'title': '{Two Gedenk\\"uberlieferung der Angelsachsen}'}
+        result = convert_to_unicode(record)
+        expected = {'title': '{Two Gedenküberlieferung der Angelsachsen}'}
+        self.assertEqual(result, expected)
 
     ###########
     # homogenize

pip install -e .
parse_log_pytest
requirements.txt
nose nose-cov pytest
3.9
requirements.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
-e git+https://github.com/sciunto-org/python-bibtexparser.git@2ce301ecd01f4db0cb355abc36486ab0c5c62331#egg=bibtexparser
cov-core==1.15.0
coverage==7.8.0
exceptiongroup==1.2.2
iniconfig==2.1.0
nose==1.3.7
nose-cov==1.6
packaging==24.2
pluggy==1.5.0
pyparsing==3.2.3
pytest==8.3.5
tomli==2.2.1

name: python-bibtexparser
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=3.0.16=h5eee18b_0
  - pip=25.0=py39h06a4308_0
  - python=3.9.21=he870216_1
  - readline=8.2=h5eee18b_0
  - setuptools=75.8.0=py39h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - tzdata=2025a=h04d1e81_0
  - wheel=0.45.1=py39h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - cov-core==1.15.0
      - coverage==7.8.0
      - exceptiongroup==1.2.2
      - iniconfig==2.1.0
      - nose==1.3.7
      - nose-cov==1.6
      - packaging==24.2
      - pluggy==1.5.0
      - pyparsing==3.2.3
      - pytest==8.3.5
      - tomli==2.2.1
prefix: /opt/conda/envs/python-bibtexparser

bibtexparser/tests/test_customization.py::TestBibtexParserMethod::test_convert_to_unicode
bibtexparser/tests/test_customization.py::TestBibtexParserMethod::test_getnames bibtexparser/tests/test_customization.py::TestBibtexParserMethod::test_homogenize bibtexparser/tests/test_customization.py::TestBibtexParserMethod::test_keywords bibtexparser/tests/test_customization.py::TestBibtexParserMethod::test_page_double_hyphen_alreadyOK bibtexparser/tests/test_customization.py::TestBibtexParserMethod::test_page_double_hyphen_nothing bibtexparser/tests/test_customization.py::TestBibtexParserMethod::test_page_double_hyphen_simple bibtexparser/tests/test_customization.py::TestBibtexParserMethod::test_page_double_hyphen_space
bibtexparser/customization.py bibtexparser/latexenc.py
bibtexparser/customization.py bibtexparser/latexenc.py