diff --git a/src/descriptions/officeDescription.js b/src/descriptions/officeDescription.js
index 07e72e31554197a3cd889c18726837e9e0931dc9..38eb166d4a4c571e2fe452cd3a573d05ebf05118 100644
--- a/src/descriptions/officeDescription.js
+++ b/src/descriptions/officeDescription.js
@@ -464,60 +464,42 @@ App.Desc.officeDescription = function(lastElement) {
 	function printTrinkets() {
 		const frag = new DocumentFragment();
 
-		// depending on length of trinketString, add necessary conjunctions
-		frag.append(
-			`There's a display case behind your desk, with `,
-			App.UI.DOM.linkReplace(`${num(V.trinkets.size)} items`, trinkets()),
-			` in it.`,
-		);
-
-		return frag;
-
-		function trinkets() {
-			const span = document.createElement("span");
-			const trinkets = [...V.trinkets];
-
-			trinkets.forEach((trinket, i) => {
-				const innerSpan = document.createElement("span");
-
-				if (trinkets.length > 1) {
-					if (i === trinkets.length - 1) {
-						if ((typeof trinket[1] === "number" && trinket[1] === 1) || (Array.isArray(trinket[1]) && trinket[1].length === 0)) {
-							innerSpan.append(
-								` and `,
-								trinket[0],
-							);
-						} else {
-							if (typeof trinket[1] !== "number") {
-								innerSpan.append(
-									` and `,
-									trinketPluralReplacer(trinket[0], trinket[1]),
-								);
-							}
-						}
-					} else {
-						innerSpan.append(`${trinket[0]}`);
-
-						if (trinkets.length > 2) {
-							innerSpan.append(`, `);
-						}
-					}
-				} else {
-					innerSpan.append(`a ${trinket[0]}`);
-				}
+		/** @type {Array<HTMLElement>} */
+		let trinketElements = [];
+		let plurals = false;
 
-				span.append(innerSpan);
-			});
+		for (const [trinketDesc, value] of V.trinkets) {
+			if ((typeof value === "number" && value === 1) || (Array.isArray(value) && value.length === 0)) {
+				trinketElements.push(App.UI.DOM.makeElement("li", capFirstChar(trinketDesc)));
+			} else {
+				trinketElements.push(trinketPluralReplacer(trinketDesc, value));
+				plurals = true;
+			}
+		}
+		trinketElements.sort((a, b) => a > b ? 1 : -1);
 
-			return span;
+		// depending on length of trinketString, add necessary conjunctions
+		frag.append(`There's a display case behind your desk, with `);
+		if (trinketElements.length === 1) {
+			if (V.trinkets.size === 1) {
+				frag.append(`a single item:`);
+			} else {
+				frag.append(`:`);
+			}
+		} else if (trinketElements.length === 2 && plurals === false) {
+			frag.append(`a couple of items:`);
 		}
+		const list = App.UI.DOM.appendNewElement("ul", frag);
+		list.style.textIndent = "0";
+		trinketElements.forEach(ts => App.UI.DOM.appendNewElement("li", list, ts));
+		return frag;
 	}
 
 	/**
 	 *
 	 * @param {string} desc
 	 * @param {Array} array
-	 * @returns {HTMLSpanElement}
+	 * @returns {HTMLElement}
 	 */
 	function trinketPluralReplacer(desc, array) {
 		const his = (array && array[0] && array[0].id && getSlave(array[0].id) ? getPronouns(getSlave(array[0].id)).possessive : "their");
@@ -527,9 +509,9 @@ App.Desc.officeDescription = function(lastElement) {
 				if (array.length > 0) {
 					const el = document.createElement("span");
 					if (array.length === 1) {
-						App.Events.addNode(el, [`a best in show ribbon awarded to`, slaveSentence(array), `for ${his} balls`]);
+						App.Events.addNode(el, [`A best in show ribbon awarded to`, slaveSentence(array), `for ${his} balls`]);
 					} else {
-						App.Events.addNode(el, [`best in show ribbons awarded to`, slaveSentence(array), `for their balls`]);
+						App.Events.addNode(el, [`Best in show ribbons awarded to`, slaveSentence(array), `for their balls`]);
 					}
 					return el;
 				} else {
@@ -539,9 +521,9 @@ App.Desc.officeDescription = function(lastElement) {
 				if (array.length > 0) {
 					const el = document.createElement("span");
 					if (array.length === 1) {
-						App.Events.addNode(el, [`a best in show ribbon awarded to`, slaveSentence(array), `as a milk cow`]);
+						App.Events.addNode(el, [`A best in show ribbon awarded to`, slaveSentence(array), `as a milk cow`]);
 					} else {
-						App.Events.addNode(el, [`best in show ribbons awarded to`, slaveSentence(array), `as milk cows`]);
+						App.Events.addNode(el, [`Best in show ribbons awarded to`, slaveSentence(array), `as milk cows`]);
 					}
 					return el;
 				} else {
@@ -551,9 +533,9 @@ App.Desc.officeDescription = function(lastElement) {
 				if (array.length > 0) {
 					const el = document.createElement("span");
 					if (array.length === 1) {
-						App.Events.addNode(el, [`a best in show ribbon awarded to`, slaveSentence(array), `as a breeder`]);
+						App.Events.addNode(el, [`A best in show ribbon awarded to`, slaveSentence(array), `as a breeder`]);
 					} else {
-						App.Events.addNode(el, [`best in show ribbons awarded to`, slaveSentence(array), `as breeders`]);
+						App.Events.addNode(el, [`Best in show ribbons awarded to`, slaveSentence(array), `as breeders`]);
 					}
 					return el;
 				} else {
@@ -563,9 +545,9 @@ App.Desc.officeDescription = function(lastElement) {
 				if (array.length > 0) {
 					const el = document.createElement("span");
 					if (array.length === 1) {
-						App.Events.addNode(el, [`a framed article written about`, slaveSentence(array), `when ${he} debuted as a famous courtesan`]);
+						App.Events.addNode(el, [`A framed article written about`, slaveSentence(array), `when ${he} debuted as a famous courtesan`]);
 					} else {
-						App.Events.addNode(el, [`framed articles written about`, slaveSentence(array), `when they debuted as famous courtesans`]);
+						App.Events.addNode(el, [`Framed articles written about`, slaveSentence(array), `when they debuted as famous courtesans`]);
 					}
 					return el;
 				} else {
@@ -575,9 +557,9 @@ App.Desc.officeDescription = function(lastElement) {
 				if (array.length > 0) {
 					const el = document.createElement("span");
 					if (array.length === 1) {
-						App.Events.addNode(el, [`a framed pornographic advertisement for`, slaveSentence(array), `from the week ${he} became a famous whore`]);
+						App.Events.addNode(el, [`A framed pornographic advertisement for`, slaveSentence(array), `from the week ${he} became a famous whore`]);
 					} else {
-						App.Events.addNode(el, [`framed pornographic advertisements from`, slaveSentence(array), `from the weeks they became famous whores`]);
+						App.Events.addNode(el, [`Framed pornographic advertisements from`, slaveSentence(array), `from the weeks they became famous whores`]);
 					}
 					return el;
 				} else {
@@ -587,9 +569,9 @@ App.Desc.officeDescription = function(lastElement) {
 				if (array.length > 0) {
 					const el = document.createElement("span");
 					if (array.length === 1) {
-						App.Events.addNode(el, [`a gorgeous quasi-religious icon made by`, slaveSentence(array), `showing you creating the catgirl race`]);
+						App.Events.addNode(el, [`A gorgeous quasi-religious icon made by`, slaveSentence(array), `showing you creating the catgirl race`]);
 					} else {
-						App.Events.addNode(el, [`gorgeous quasi-religious icons made by`, slaveSentence(array), `showing you creating the catgirl race`]);
+						App.Events.addNode(el, [`Gorgeous quasi-religious icons made by`, slaveSentence(array), `showing you creating the catgirl race`]);
 					}
 					return el;
 				} else {
@@ -599,9 +581,9 @@ App.Desc.officeDescription = function(lastElement) {
 				if (array.length > 0) {
 					const el = document.createElement("span");
 					if (array.length === 1) {
-						App.Events.addNode(el, [`a small, elegant clay sculpture made by`, slaveSentence(array), `showing you surrounded by happy catgirl slaves`]);
+						App.Events.addNode(el, [`A small, elegant clay sculpture made by`, slaveSentence(array), `showing you surrounded by happy catgirl slaves`]);
 					} else {
-						App.Events.addNode(el, [`small, elegant clay sculptures made by`, slaveSentence(array), `showing you surrounded by happy catgirl slaves`]);
+						App.Events.addNode(el, [`Small, elegant clay sculptures made by`, slaveSentence(array), `showing you surrounded by happy catgirl slaves`]);
 					}
 					return el;
 				} else {
@@ -611,9 +593,9 @@ App.Desc.officeDescription = function(lastElement) {
 				if (array.length > 0) {
 					const el = document.createElement("span");
 					if (array.length === 1) {
-						App.Events.addNode(el, [`a pretty drawing of you and`, slaveSentence(array), `cuddling together peacefully`]);
+						App.Events.addNode(el, [`A pretty drawing of you and`, slaveSentence(array), `cuddling together peacefully`]);
 					} else {
-						App.Events.addNode(el, [`pretty drawings of you and`, slaveSentence(array), `cuddling together peacefully`]);
+						App.Events.addNode(el, [`Pretty drawings of you and`, slaveSentence(array), `cuddling together peacefully`]);
 					}
 					return el;
 				} else {
@@ -623,9 +605,9 @@ App.Desc.officeDescription = function(lastElement) {
 				if (array.length > 0) {
 					const el = document.createElement("span");
 					if (array.length === 1) {
-						App.Events.addNode(el, [`a red construction paper heart with crude crayon figures of you and`, slaveSentence(array), `holding hands above text reading "I LUV U ${V.PC.title !== 0 ? `MASTER` : `MISTRESS`}"`]);
+						App.Events.addNode(el, [`A red construction paper heart with crude crayon figures of you and`, slaveSentence(array), `holding hands above text reading "I LUV U ${V.PC.title !== 0 ? `MASTER` : `MISTRESS`}"`]);
 					} else {
-						App.Events.addNode(el, [`red construction paper hearts with crude crayon figures of you and`, slaveSentence(array), `holding hands above text reading "I LUV U ${V.PC.title !== 0 ? `MASTER` : `MISTRESS`}"`]);
+						App.Events.addNode(el, [`Red construction paper hearts with crude crayon figures of you and`, slaveSentence(array), `holding hands above text reading "I LUV U ${V.PC.title !== 0 ? `MASTER` : `MISTRESS`}"`]);
 					}
 					return el;
 				} else {
@@ -635,7 +617,7 @@ App.Desc.officeDescription = function(lastElement) {
 				if (array.length > 0) {
 					const el = document.createElement("span");
 					if (array.length === 1) {
-						App.Events.addNode(el, [`a cloth napkin skillfully folded into the shape of`, array[0].napkinShape, `given to you by`, slaveSentence(array)]);
+						App.Events.addNode(el, [`A cloth napkin skillfully folded into the shape of`, array[0].napkinShape, `given to you by`, slaveSentence(array)]);
 					} else {
 						const r = [];
 						// Napkins are weird; we need to sort by two properties: napkinShape and the slave. First, set up a map of the types of napkins, and attach the appropriate slaves to them by array:
@@ -646,7 +628,7 @@ App.Desc.officeDescription = function(lastElement) {
 							}
 							napkinMap.get(slave.napkinShape).push(slave);
 						}
-						r.push(`cloth napkins skillfully folded into ${napkinMap.size === 1 ? "a single shape" : "various shapes"} by your slaves.`);
+						r.push(`Cloth napkins skillfully folded into ${napkinMap.size === 1 ? "a single shape" : "various shapes"} by your slaves.`);
 						// Make a fragment for each napkin type that we have, including the slaves that made that type
 						for (const [shape, slaves] of napkinMap) {
 							r.push(App.UI.DOM.combineNodes(slaveSentence(slaves), ` ${slaves.length === 1 ? "" : "each "}made ${shape}.`,));
@@ -659,7 +641,7 @@ App.Desc.officeDescription = function(lastElement) {
 				}
 			case "a poster for the movie that was made about the love between one of your mercenaries and": {
 				const el = document.createElement("span");
-				el.append("a poster for the movie that was made about the love between one of your mercenaries and ", slaveSentence(array), ".");
+				el.append("A poster for the movie that was made about the love between one of your mercenaries and ", slaveSentence(array), ".");
 				return el;
 			}
 			// should never have plurals
@@ -678,10 +660,10 @@ App.Desc.officeDescription = function(lastElement) {
 			case "a Daughters of Liberty flag that once hung in their forward command post within your arcology":
 			case "a Daughters of Liberty brassard":
 			case "a shot-torn flag of the failed nation whose militants attacked the Free City":
-				return App.UI.DOM.makeElement("span", desc);
+				return App.UI.DOM.makeElement("span", capFirstChar(desc));
 			// manual replacement
 			case "a thank-you note from a MILF tourist whom you made feel welcome in the arcology":
-				return App.UI.DOM.makeElement("span", "several thank-you notes from MILF tourists whom you made feel welcome in the arcology");
+				return App.UI.DOM.makeElement("span", "Several thank-you notes from MILF tourists whom you made feel welcome in the arcology");
 			// replacement by groups
 			default:
 				if (desc.endsWith("citizen")) { // will not reduce spam from different future societies
@@ -697,7 +679,7 @@ App.Desc.officeDescription = function(lastElement) {
 					desc = desc.replace("a ", "several ");
 					desc = desc.replace("owner", "owners");
 				}
-				return App.UI.DOM.makeElement("span", desc);
+				return App.UI.DOM.makeElement("span", capFirstChar(desc));
 		}
 
 		/**