--- /tmp/osishtmlhref.cpp.orig	2026-03-04 10:23:03.077679640 +0100
+++ /home/cyrille/sword-deb-build/sword-1.9.0+dfsg/src/modules/filters/osishtmlhref.cpp	2026-03-04 10:07:40.396878811 +0100
@@ -400,11 +400,19 @@
 
 		// <title>
 		else if (!strcmp(tag.getName(), "title")) {
+			SWBuf canonical = tag.getAttribute("canonical");
+			bool isCanonical = (canonical.size() && !strcmp(canonical, "true"));
 			if ((!tag.isEndTag()) && (!tag.isEmpty())) {
-				outText("<b>", buf, u);
+				if (isCanonical)
+					outText("<i>", buf, u);
+				else
+					outText("<b>", buf, u);
 			}
 			else if (tag.isEndTag()) {
-				outText("</b><br />", buf, u);
+				if (isCanonical)
+					outText("</i> ", buf, u);
+				else
+					outText("</b><br />", buf, u);
 			}
 		}
 		
--- /tmp/osisxhtml.cpp.orig	2026-03-04 10:23:06.888691761 +0100
+++ /home/cyrille/sword-deb-build/sword-1.9.0+dfsg/src/modules/filters/osisxhtml.cpp	2026-03-04 10:09:23.565228895 +0100
@@ -576,8 +576,15 @@
 					}
 				}
 				else {
-					outText(SWBuf("<h3 class=\"title") + classExtras + "\">", buf, u);
-					tag.setAttribute("pushed", "h3");
+					SWBuf canonical = tag.getAttribute("canonical");
+					bool isCanonical = (canonical.size() && !strcmp(canonical, "true"));
+					if (isCanonical) {
+						outText(SWBuf("<span class=\"title") + classExtras + "\">", buf, u);
+						tag.setAttribute("pushed", "span");
+					} else {
+						outText(SWBuf("<h3 class=\"title") + classExtras + "\">", buf, u);
+						tag.setAttribute("pushed", "h3");
+					}
 				}
 				u->titleStack->push(tag.toString());
 			}
@@ -587,13 +594,19 @@
 					if (u->titleStack->size()) u->titleStack->pop();
 					SWBuf pushed = tag.getAttribute("pushed");
 					if (pushed.size()) {
-						outText((SWBuf)"</" + pushed + ">\n\n", buf, u);
+						if (!strcmp(pushed, "span")) {
+							outText((SWBuf)"</" + pushed + "> ", buf, u);
+						} else {
+							outText((SWBuf)"</" + pushed + ">\n\n", buf, u);
+							++u->consecutiveNewlines;
+							u->supressAdjacentWhitespace = true;
+						}
 					}
 					else {
 						outText( "</h3>\n\n", buf, u);
+						++u->consecutiveNewlines;
+						u->supressAdjacentWhitespace = true;
 					}
-					++u->consecutiveNewlines;
-					u->supressAdjacentWhitespace = true;
 				}
 			}
 		}
