diff --git a/autotests/data/vcard_extension_case_normalization.vcf b/autotests/data/vcard_extension_case_normalization.vcf
new file mode 100644
--- /dev/null
+++ b/autotests/data/vcard_extension_case_normalization.vcf
@@ -0,0 +1,18 @@
+BEGIN:VCARD
+VERSION:3.0
+FN:My Name
+N:Name;My;;;
+UID:628d6072-5385-41d3-ad45-cb79a3afa987
+X-KADDRESSBOOK-BLOGFEED:https://my.blog/
+X-KADDRESSBOOK-CRYPTOENCRYPTPREF:askAlways
+X-KADDRESSBOOK-CRYPTOPROTOPREF:inline openpgp\,openpgp/mime\,s/mime\,s/mime
+ opaque\,any s/mime\,any openpgp
+X-KADDRESSBOOK-CRYPTOSIGNPREF:always
+X-KADDRESSBOOK-X-ANNIVERSARY:1970-01-01
+X-KADDRESSBOOK-X-ASSISTANTSNAME:Mycroft
+X-KADDRESSBOOK-X-MANAGERSNAME:My Boss
+X-KADDRESSBOOK-X-OFFICE:My Office
+X-KADDRESSBOOK-X-PROFESSION:My Job
+X-KADDRESSBOOK-X-SPOUSESNAME:My Spouse
+END:VCARD
+
diff --git a/autotests/data/vcard_extension_case_normalization.vcf.ref b/autotests/data/vcard_extension_case_normalization.vcf.ref
new file mode 100644
--- /dev/null
+++ b/autotests/data/vcard_extension_case_normalization.vcf.ref
@@ -0,0 +1,18 @@
+BEGIN:VCARD
+VERSION:3.0
+FN:My Name
+N:Name;My;;;
+UID:628d6072-5385-41d3-ad45-cb79a3afa987
+X-KADDRESSBOOK-BlogFeed:https://my.blog/
+X-KADDRESSBOOK-CRYPTOENCRYPTPREF:askAlways
+X-KADDRESSBOOK-CRYPTOPROTOPREF:inline openpgp\,openpgp/mime\,s/mime\,s/mime
+ opaque\,any s/mime\,any openpgp
+X-KADDRESSBOOK-CRYPTOSIGNPREF:always
+X-KADDRESSBOOK-X-Anniversary:1970-01-01
+X-KADDRESSBOOK-X-AssistantsName:Mycroft
+X-KADDRESSBOOK-X-ManagersName:My Boss
+X-KADDRESSBOOK-X-Office:My Office
+X-KADDRESSBOOK-X-Profession:My Job
+X-KADDRESSBOOK-X-SpousesName:My Spouse
+END:VCARD
+
diff --git a/autotests/testroundtrip.qrc b/autotests/testroundtrip.qrc
--- a/autotests/testroundtrip.qrc
+++ b/autotests/testroundtrip.qrc
@@ -16,6 +16,7 @@
data/vcard13.vcf
data/vcard14.vcf
data/vcard15.vcf
+ data/vcard_extension_case_normalization.vcf
@@ -47,6 +48,7 @@
data/vcard13.vcf.ref
data/vcard14.vcf.ref
data/vcard15.vcf.ref
+ data/vcard_extension_case_normalization.vcf.ref
diff --git a/src/vcardtool.cpp b/src/vcardtool.cpp
--- a/src/vcardtool.cpp
+++ b/src/vcardtool.cpp
@@ -1159,20 +1159,30 @@
else if (identifier.startsWith(QLatin1String("x-"))) {
QString ident = (*lineIt).identifier();
//X-Evolution
+ // also normalize case of our own extensions, some backends "adjust" that
if (identifier == QLatin1String("x-evolution-spouse")
|| identifier == QLatin1String("x-spouse")) {
ident = QStringLiteral("X-KADDRESSBOOK-X-SpousesName");
- } else if (identifier == QLatin1String("x-evolution-blog-url")) {
+ } else if (identifier == QLatin1String("x-evolution-blog-url") || identifier.compare(QLatin1String("X-KADDRESSBOOK-BLOGFEED"), Qt::CaseInsensitive) == 0) {
ident = QStringLiteral("X-KADDRESSBOOK-BlogFeed");
} else if (identifier == QLatin1String("x-evolution-assistant")
- || identifier == QLatin1String("x-assistant")) {
+ || identifier == QLatin1String("x-assistant")
+ || identifier.compare(QLatin1String("X-KADDRESSBOOK-X-ASSISTANTSNAME"), Qt::CaseInsensitive) == 0) {
ident = QStringLiteral("X-KADDRESSBOOK-X-AssistantsName");
} else if (identifier == QLatin1String("x-evolution-anniversary")
- || identifier == QLatin1String("x-anniversary")) {
+ || identifier == QLatin1String("x-anniversary")
+ || identifier.compare(QLatin1String("X-KADDRESSBOOK-X-ANNIVERSARY"), Qt::CaseInsensitive) == 0) {
ident = QStringLiteral("X-KADDRESSBOOK-X-Anniversary");
} else if (identifier == QLatin1String("x-evolution-manager")
- || identifier == QLatin1String("x-manager")) {
+ || identifier == QLatin1String("x-manager")
+ || identifier.compare(QLatin1String("X-KADDRESSBOOK-X-MANAGERSNAME"), Qt::CaseInsensitive) == 0) {
ident = QStringLiteral("X-KADDRESSBOOK-X-ManagersName");
+ } else if (identifier.compare(QLatin1String("X-KADDRESSBOOK-X-PROFESSION"), Qt::CaseInsensitive) == 0) {
+ ident = QStringLiteral("X-KADDRESSBOOK-X-Profession");
+ } else if (identifier.compare(QLatin1String("X-KADDRESSBOOK-X-OFFICE"), Qt::CaseInsensitive) == 0) {
+ ident = QStringLiteral("X-KADDRESSBOOK-X-Office");
+ } else if (identifier.compare(QLatin1String("X-KADDRESSBOOK-X-SPOUSESNAME"), Qt::CaseInsensitive) == 0) {
+ ident = QStringLiteral("X-KADDRESSBOOK-X-SpousesName");
} else if (identifier == QLatin1String("x-aim")) {
ident = QStringLiteral("X-messaging/aim-All");
} else if (identifier == QLatin1String("x-icq")) {