diff --git a/src/calibre/ebooks/metadata/opf3.py b/src/calibre/ebooks/metadata/opf3.py
index 7bfd51becc..6f41a58119 100644
--- a/src/calibre/ebooks/metadata/opf3.py
+++ b/src/calibre/ebooks/metadata/opf3.py
@@ -421,7 +421,7 @@ def set_authors(root, prefixes, refines, authors):
for item in XPath('./opf:metadata/dc:creator')(root):
props = properties_for_id_with_scheme(item.get('id'), prefixes, refines)
opf_role = item.get(OPF('role'))
- if (is_relators_role(props, 'aut')) or (opf_role and opf_role.lower() != 'aut'):
+ if (opf_role and opf_role.lower() != 'aut') or (props.get('role') and not is_relators_role(props, 'aut')):
continue
remove_element(item, refines)
metadata = XPath('./opf:metadata')(root)[0]
@@ -457,7 +457,7 @@ def set_book_producers(root, prefixes, refines, producers):
for item in XPath('./opf:metadata/dc:contributor')(root):
props = properties_for_id_with_scheme(item.get('id'), prefixes, refines)
opf_role = item.get(OPF('role'))
- if (is_relators_role(props, 'bkp')) or (opf_role and opf_role.lower() != 'bkp'):
+ if (opf_role and opf_role.lower() != 'bkp') or (props.get('role') and not is_relators_role(props, 'bkp')):
continue
remove_element(item, refines)
metadata = XPath('./opf:metadata')(root)[0]
diff --git a/src/calibre/ebooks/metadata/opf3_test.py b/src/calibre/ebooks/metadata/opf3_test.py
index 853226cd85..0acaf592d3 100644
--- a/src/calibre/ebooks/metadata/opf3_test.py
+++ b/src/calibre/ebooks/metadata/opf3_test.py
@@ -141,6 +141,9 @@ class TestOPF3(unittest.TestCase):
authors = [Author('x y', 'y, x'), Author('u i', None)]
self.ae(authors, st(root, authors))
self.ae(root.get('prefix'), 'calibre: %s' % CALIBRE_PREFIX)
+ root = self.get_opf('''a bc d''')
+ self.ae([Author('c d', None)], rl(root))
+ self.ae(authors, st(root, authors))
# }}}
def test_book_producer(self): # {{{
@@ -155,7 +158,7 @@ class TestOPF3(unittest.TestCase):
self.ae(['c d'], rl(root))
root = self.get_opf('''a bc d''')
self.ae(['c d'], rl(root))
- self.ae('12'.split(), st(root, '12'.split()))
+ self.ae(['12'], st(root, ['12']))
# }}}
def test_dates(self): # {{{