diff --git a/src/calibre/ebooks/metadata/opf2.py b/src/calibre/ebooks/metadata/opf2.py index e429574e57..2f61b5b8fe 100644 --- a/src/calibre/ebooks/metadata/opf2.py +++ b/src/calibre/ebooks/metadata/opf2.py @@ -669,10 +669,19 @@ class OPF(object): remove = list(self.authors_path(self.metadata)) for elem in remove: elem.getparent().remove(elem) + elems = [] for author in val: attrib = {'{%s}role'%self.NAMESPACES['opf']: 'aut'} elem = self.create_metadata_element('creator', attrib=attrib) self.set_text(elem, author.strip()) + # Ensure new author element is at the top of the list + # for broken implementations that always use the first + # element with no attention to the role + elems.append(elem) + for elem in reversed(elems): + parent = elem.getparent() + parent.remove(elem) + parent.insert(0, elem) return property(fget=fget, fset=fset)