diff --git a/src/Mods/SecExp/events/secExpSmilingMan0.js b/src/Mods/SecExp/events/secExpSmilingMan0.js
index 17a40239093a602a87cbc431af7e6d50953ae565..f7ac2f74f0180ca9767da9e9e4c5e8f44f01e0a8 100644
--- a/src/Mods/SecExp/events/secExpSmilingMan0.js
+++ b/src/Mods/SecExp/events/secExpSmilingMan0.js
@@ -23,13 +23,9 @@ App.Events.secExpSmilingMan0 = class secExpSmilingMan0 extends App.Events.BaseEv
 			App.UI.DOM.makeElement("span", "the Smiling Man.", "note")
 		);
 		App.Events.addParagraph(node, r);
-		r = [];
-		r.push(`Despite the sheer damage this criminal did, you cannot help but admire the skill with which every misdeed was performed — the worst white collar crimes of the century, carried out with such elegance that they almost seemed the product of natural laws, rather than masterful manipulation of the digital market. While sifting through the report, ${V.assistant.name} remains strangely quiet. "I'm worried, ${properTitle()} — this individual seems to be able to penetrate whichever system garners his attention. I... feel vulnerable," ${heA} says. "It's not something I'm used to."`);
-		App.Events.addParagraph(node, r);
-		r = [];
-		r.push(`Fortunately you have not been hit directly by this criminal — yet. Still, the repercussions of numerous bankruptcies take their toll on your arcology, whose <span class="red">prosperity suffers.</span>`);
+		App.Events.addParagraph(node, [`Despite the sheer damage this criminal did, you cannot help but admire the skill with which every misdeed was performed — the worst white collar crimes of the century, carried out with such elegance that they almost seemed the product of natural laws, rather than masterful manipulation of the digital market. While sifting through the report, ${V.assistant.name} remains strangely quiet. "I'm worried, ${properTitle()} — this individual seems to be able to penetrate whichever system garners his attention. I... feel vulnerable," ${heA} says. "It's not something I'm used to."`]);
+		App.Events.addParagraph(node, [`Fortunately you have not been hit directly by this criminal — yet. Still, the repercussions of numerous bankruptcies take their toll on your arcology, whose <span class="red">prosperity suffers.</span>`]);
 		V.arcologies[0].prosperity *= random(80, 90) * 0.01;
-		App.Events.addParagraph(node, r);
 
 		const choices = [];
 		const cost = 10000;
diff --git a/src/Mods/SecExp/events/secExpSmilingMan1.js b/src/Mods/SecExp/events/secExpSmilingMan1.js
index fa96a17fe7849b0883fbe3dd72222e878bb4a933..91a47b57f7cee98eaad8363563866961312ecdfa 100644
--- a/src/Mods/SecExp/events/secExpSmilingMan1.js
+++ b/src/Mods/SecExp/events/secExpSmilingMan1.js
@@ -24,12 +24,8 @@ App.Events.secExpSmilingMan1 = class secExpSmilingMan1 extends App.Events.BaseEv
 			`It is indeed a great opportunity, one you cannot resist. You quickly organize the affair and in a few minutes a message reaches your assistant.`
 		);
 		App.Events.addParagraph(node, r);
-		r = [];
-		r.push(`"Should I open it?" your assistant asks. You silently nod.`);
-		App.Events.addParagraph(node, r);
-		r = [];
-		r.push(`Suddenly the room flashes red, while your assistant fades for half a second. When ${heA} reappears, ${hisA} face has been replaced by a stylized smiling face.`);
-		App.Events.addParagraph(node, r);
+		App.Events.addParagraph(node, [`"Should I open it?" your assistant asks. You silently nod.`]);
+		App.Events.addParagraph(node, [`Suddenly the room flashes red, while your assistant fades for half a second. When ${heA} reappears, ${hisA} face has been replaced by a stylized smiling face.`]);
 		r = [];
 		r.push(
 			`"Hello, my dear ${V.PC.birthName}. I can call you ${V.PC.birthName}, right? I've been keeping an eye on you for so long now, it feels like we're friends! I am terribly sorry for my unannounced visit, but I wanted to meet face to face... well, face to hologram."`,
@@ -37,15 +33,9 @@ App.Events.secExpSmilingMan1 = class secExpSmilingMan1 extends App.Events.BaseEv
 			`"I'm sure you're aware of my recent activities around this rock of ours, and, well, to put it simply, it's your turn to contribute to my great project! You'll love it when you see it, I'm sure! By the way, thanks for the offer — it's so nice to see people contribute to a worthy cause so generously! Well, I've taken enough of your time, see you soon!"`
 		);
 		App.Events.addParagraph(node, r);
-		r = [];
-		r.push(`The lights flicker once more and an instant later your assistant returns to ${hisA} usual self.`);
-		App.Events.addParagraph(node, r);
-		r = [];
-		r.push(`"I... I — I couldn't stop him! I'm sorry, ${properTitle()}."`);
-		App.Events.addParagraph(node, r);
-		r = [];
-		r.push(`You waste no time in rushing to the console and checking your finances. It's as you feared, <span class="cash dec">you have been robbed.</span>`);
-		App.Events.addParagraph(node, r);
+		App.Events.addParagraph(node, [`The lights flicker once more and an instant later your assistant returns to ${hisA} usual self.`]);
+		App.Events.addParagraph(node, [`"I... I — I couldn't stop him! I'm sorry, ${properTitle()}."`]);
+		App.Events.addParagraph(node, [`You waste no time in rushing to the console and checking your finances. It's as you feared, <span class="cash dec">you have been robbed.</span>`]);
 		r = [];
 		let lostCash = Math.clamp(50000 * Math.trunc(V.week / 20), 50000, 1000000);
 		if (V.assistant.power >= 1) {
diff --git a/src/Mods/SecExp/events/secExpSmilingMan2.js b/src/Mods/SecExp/events/secExpSmilingMan2.js
index 10f47cfa6e171dcebdb9ba34c8a45b81ea0fabd9..4f1f0f9b43d6baaaf4ebfab1c4571899f09aa7cc 100644
--- a/src/Mods/SecExp/events/secExpSmilingMan2.js
+++ b/src/Mods/SecExp/events/secExpSmilingMan2.js
@@ -20,31 +20,17 @@ App.Events.secExpSmilingMan2 = class secExpSmilingMan2 extends App.Events.BaseEv
 		r.push(`When ${V.assistant.name} violently wakes you up, ${hisA} worried expression can mean only one thing: the Smiling Man had been back. "We were anonymously sent a link to a new website: it's a very simple site, no visuals, no text; only a countdown ticking away. It will reach zero this evening." your assistant says.`);
 		r.push(`This is troubling, yet somewhat exciting. The Smiling Man never failed to cause damage, but his ego had gotten the best of him this time — having time to prepare before their attack will give you a chance to find them. For the rest of the day you do your best to plan, prepare and focus.`);
 		App.Events.addParagraph(node, r);
-		r = [];
-		r.push(`Evening came faster than you anticipated. Your security team was already at full alert, waiting for any signal on the horizon. The die was cast.`);
-		App.Events.addParagraph(node, r);
-		r = [];
-		r.push(`Suddenly all the computers in the room begin to act strangely, and then it happened. On all of the screens across the arcology the Smiling Man's icon appears, then every speaker begins broadcasting the same voice, one that you have already heard once before:`);
-		App.Events.addParagraph(node, r);
-		r = [];
-		r.push(`"Hello citizens of ${V.arcologies[0].name}! I am here on this special day to relay to you a very important message: we find ourselves in very peculiar times, times of strife and suffering! But these are also times of change and regeneration! Indeed, I say humanity itself is regenerating, turning into a new being for which the ideals of the old world no longer hold meaning. A new blank page from which humanity can begin to prosper again.`);
-		App.Events.addParagraph(node, r);
+		App.Events.addParagraph(node, [`Evening came faster than you anticipated. Your security team was already at full alert, waiting for any signal on the horizon. The die was cast.`]);
+		App.Events.addParagraph(node, [`Suddenly all the computers in the room begin to act strangely, and then it happened. On all of the screens across the arcology the Smiling Man's icon appears, then every speaker begins broadcasting the same voice, one that you have already heard once before:`]);
+		App.Events.addParagraph(node, [`"Hello citizens of ${V.arcologies[0].name}! I am here on this special day to relay to you a very important message: we find ourselves in very peculiar times, times of strife and suffering! But these are also times of change and regeneration! Indeed, I say humanity itself is regenerating, turning into a new being for which the ideals of the old world no longer hold meaning. A new blank page from which humanity can begin to prosper again.`]);
 		r = [];
 		r.push(`Alas, my friends, not all is good, as in this rebirth a great injustice is being perpetrated. If we truly want to ascend to this new form of humanity the old must give way to the new. If we must cleanse our mind of old ideas, our world must cleanse itself of them as well.`);
 		r.push(`It's to fix this injustice, that I worked so hard all this time! To cleanse the world of the old, we must get rid of our precious, precious data. At the end of this message every digital device will see its memory erased, every archive cleaned, every drive deleted.`);
 		App.Events.addParagraph(node, r);
-		r = [];
-		r.push(`It will be a true rebirth! A true new beginning! No longer will the chains of the past keep humanity anchored!"`);
-		App.Events.addParagraph(node, r);
-		r = [];
-		r.push(`The voice stopped for a second.`);
-		App.Events.addParagraph(node, r);
-		r = [];
-		r.push(`"Have a good day," it simply concluded.`);
-		App.Events.addParagraph(node, r);
-		r = [];
-		r.push(`Then it happened.`);
-		App.Events.addParagraph(node, r);
+		App.Events.addParagraph(node, [`It will be a true rebirth! A true new beginning! No longer will the chains of the past keep humanity anchored!"`]);
+		App.Events.addParagraph(node, [`The voice stopped for a second.`]);
+		App.Events.addParagraph(node, [`"Have a good day," it simply concluded.`]);
+		App.Events.addParagraph(node, [`Then it happened.`]);
 		r = [];
 		r.push(`In little more than seconds all the data collected in the years past vanished. It's a disaster.`);
 		r.push(`The vast majority of currency is digital, so the actions of the Smiling Man have a devastating effect on the money supply.`);
@@ -80,11 +66,8 @@ App.Events.secExpSmilingMan2 = class secExpSmilingMan2 extends App.Events.BaseEv
 			}
 		}
 		App.Events.addParagraph(node, r);
-		r = [];
-		r.push(`A short, meek man approaches you with a weak smile. "Not all is lost, ${properTitle()}. We have a lead on him — he is here, in ${V.arcologies[0].name}."`);
-		App.Events.addParagraph(node, r);
-		r = [];
-		r.push(`Despite the bleak situation, you cannot help but smile back.`);
+		App.Events.addParagraph(node, [`A short, meek man approaches you with a weak smile. "Not all is lost, ${properTitle()}. We have a lead on him — he is here, in ${V.arcologies[0].name}."`]);
+		App.Events.addParagraph(node, [`Despite the bleak situation, you cannot help but smile back.`]);
 
 
 		App.Events.addResponses(node, [
diff --git a/src/Mods/SecExp/events/secExpSmilingMan3.js b/src/Mods/SecExp/events/secExpSmilingMan3.js
index 66fabc0f519b7c9d9928482b9e9ff0fff92a638b..c658b0b6e9b221a92fa8c17d7497abc3f60ccf93 100644
--- a/src/Mods/SecExp/events/secExpSmilingMan3.js
+++ b/src/Mods/SecExp/events/secExpSmilingMan3.js
@@ -99,12 +99,8 @@ App.Events.secExpSmilingMan3 = class secExpSmilingMan3 extends App.Events.BaseEv
 			}
 			r.push(`Well, I hope I'm everything you expected," you hear a voice say. Despite recognizing it, you struggle to convince yourself that the little ${girl} in front of you is indeed the famous criminal mastermind.`);
 			App.Events.addParagraph(frag, r);
-			r = [];
-			r.push(`"As you can see, I have no intention of escaping. I knew my life was over the second my plan went into effect. I accepted my end a long time ago, so feel free to do your worst; my life has already ended in triumph."`);
-			App.Events.addParagraph(frag, r);
-			r = [];
-			r.push(`You evaluate the situation: the burning desire of vengeance for all the damage that little twerp caused is hard to ignore, but equally so is the admiration for ${his} skill and determination. Indeed, ${he} would be a great addition to your court, as a free individual or not.`);
-			App.Events.addParagraph(frag, r);
+			App.Events.addParagraph(frag, [`"As you can see, I have no intention of escaping. I knew my life was over the second my plan went into effect. I accepted my end a long time ago, so feel free to do your worst; my life has already ended in triumph."`]);
+			App.Events.addParagraph(frag, [`You evaluate the situation: the burning desire of vengeance for all the damage that little twerp caused is hard to ignore, but equally so is the admiration for ${his} skill and determination. Indeed, ${he} would be a great addition to your court, as a free individual or not.`]);
 
 			App.Events.addResponses(frag, [
 				new App.Events.Result(`Offer ${him} a new life`, offer),
diff --git a/src/Mods/SpecialForce/TrickShotNight.js b/src/Mods/SpecialForce/TrickShotNight.js
index 9b88a28d47eed51e78e7b564e30d789f5c4b2a66..89df85ccf38afb2a2919a744a88cc215d6f3128a 100644
--- a/src/Mods/SpecialForce/TrickShotNight.js
+++ b/src/Mods/SpecialForce/TrickShotNight.js
@@ -42,9 +42,7 @@ App.Events.TrickShotNight = class TrickShotNight extends App.Events.BaseEvent {
 
 		function attend() {
 			const frag = new DocumentFragment();
-			let r = [];
-			r.push(`You instruct ${V.assistant.name} to inform ${V.SF.Lower} that you will be attending their trick shot night, and after settling your affairs in the penthouse you head down to the firebase. The atmosphere in the firebase is casual, especially in comparison to the usual situations you meet them, though your security force still maintain some measure of decorum towards you as their employer. Eventually, you settle in at the table with a handful of ${V.SF.Lower} officers and turn your <span class="cash">${cashFormat(buyIn)}</span> into bullets. All that remains is to decide your strategy for the night.`);
-			App.Events.addParagraph(frag, r);
+			App.Events.addParagraph(frag, [`You instruct ${V.assistant.name} to inform ${V.SF.Lower} that you will be attending their trick shot night, and after settling your affairs in the penthouse you head down to the firebase. The atmosphere in the firebase is casual, especially in comparison to the usual situations you meet them, though your security force still maintain some measure of decorum towards you as their employer. Eventually, you settle in at the table with a handful of ${V.SF.Lower} officers and turn your <span class="cash">${cashFormat(buyIn)}</span> into bullets. All that remains is to decide your strategy for the night.`]);
 
 			const choices = [];
 			choices.push(new App.Events.Result(`Play it safe`, safe));
@@ -55,20 +53,16 @@ App.Events.TrickShotNight = class TrickShotNight extends App.Events.BaseEvent {
 			return frag;
 
 			function safe() {
-				const frag = new DocumentFragment();
-				let r = [];
 				if (random(1, 100) > shootChance) {
-					r.push(`Despite your attempts to mitigate risk and play the safest shots possible, it seems lady luck has conspired against you this evening. However, even when your last bullet is shot, your security force pitch you a few bullets to keep you in the game for the rest of the night. You may have lost most of your ¤, but it seems you've <span class="reputation inc">made some friends.</span>`);
 					repX(5000, "event");
 					cashX(-25000, "event");
+					return `Despite your attempts to mitigate risk and play the safest shots possible, it seems lady luck has conspired against you this evening. However, even when your last bullet is shot, your security force pitch you a few bullets to keep you in the game for the rest of the night. You may have lost most of your ¤, but it seems you've <span class="reputation inc">made some friends.</span>`;
 				} else {
 					const winnings = buyIn * 2;
-					r.push(`While a careful eye for accuracy has buoyed you through the evening, ultimately lady luck is the decider in handing you the win in a number of close shots. Unfortunately your meticulous play limited your chance at a larger payout, and you only come away from the evening with <span class="cash inc">${cashFormat(winnings)}</span> more than you arrived with and <span class="reputation inc">the respect of your security force.</span>`);
 					repX(5000, "event");
 					cashX(winnings, "event");
+					return `While a careful eye for accuracy has buoyed you through the evening, ultimately lady luck is the decider in handing you the win in a number of close shots. Unfortunately your meticulous play limited your chance at a larger payout, and you only come away from the evening with <span class="cash inc">${cashFormat(winnings)}</span> more than you arrived with and <span class="reputation inc">the respect of your security force.</span>`;
 				}
-				App.Events.addParagraph(frag, r);
-				return frag;
 			}
 
 			function ante() {
@@ -134,20 +128,16 @@ App.Events.TrickShotNight = class TrickShotNight extends App.Events.BaseEvent {
 				}
 
 				function wages() {
-					const frag = new DocumentFragment();
-					let r = [];
+					IncreasePCSkills('warfare', 1);
 					if (random(1, 100) > shootChance) {
-						r.push(`For all your skillful maneuvering to reach this position, ultimately the win comes down to chance. This time, however, luck was not on your side. As the victor sweeps up ${his} spoils, the other security force members clap you on the back and offer their condolences for your defeat. Though you may have lost your ¤, it seems you've <span class="reputation inc">made some friends.</span>`);
 						repX(5000, "event");
 						cashX(-buyIn, "event");
+						return `For all your skillful maneuvering to reach this position, ultimately the win comes down to chance. This time, however, luck was not on your side. As the victor sweeps up ${his} spoils, the other security force members clap you on the back and offer their condolences for your defeat. Though you may have lost your ¤, it seems you've <span class="reputation inc">made some friends.</span>`;
 					} else {
-						r.push(`For all your skillful maneuvering to reach this position, ultimately the win comes down to chance. This time, however, luck has rendered you the victor. Your opponent accepts ${his} defeat with grace and jokes to ${his} comrades that ${he}'ll be fighting in ${his} underwear for the next few months, and their uproar of laughter fills the room. Though you take the lion's share of the ¤, your security force also <span class="reputation inc">had a good time fraternizing with you.</span>`);
 						repX(10000, "event");
 						cashX(buyIn, "event");
+						return `For all your skillful maneuvering to reach this position, ultimately the win comes down to chance. This time, however, luck has rendered you the victor. Your opponent accepts ${his} defeat with grace and jokes to ${his} comrades that ${he}'ll be fighting in ${his} underwear for the next few months, and their uproar of laughter fills the room. Though you take the lion's share of the ¤, your security force also <span class="reputation inc">had a good time fraternizing with you.</span>`;
 					}
-					IncreasePCSkills('warfare', 1);
-					App.Events.addParagraph(frag, r);
-					return frag;
 				}
 			}
 		}