proposing this fix for 3-4 http://cgit.freedesktop.org/libreoffice/writer/commit/?id=a7058d28e5d36778b9f16308632ffb4c9608479c if we look at what is passed to lcl_LineToSvxLine it is table::BorderLine members of a table::TableBorder, so they really are table::BorderLine, upcasting them to a table::BorderLine2 just gives random junk for the extended table::BorderLine2 methods, hence the weird and wonderful resulting .odt Presumably ideally we need a table::TableBorder2 which can transport table::BorderLine2's around, and do the same kind of a "is it a TableBorder2 or a classic TableBorder" like http://cgit.freedesktop.org/libreoffice/libs-core/commit/?id=0d209ac289dd5c79da6950b4c01b0cec9b7fbe6d on that and dispatch to appropriate BorderLine/BorderLine2 mappers, but that's out of scope of the immediate fix. C.