diff --git a/src/lib/make-toolbox-xml.js b/src/lib/make-toolbox-xml.js
index 94ffc44ab4126b1f1cf42e69a6556f65655104b4..608cf92b3c307efd54e34ae6aa2d26a19e747f6c 100644
--- a/src/lib/make-toolbox-xml.js
+++ b/src/lib/make-toolbox-xml.js
@@ -2,7 +2,8 @@ const categorySeparator = '<sep gap="36"/>';
 
 const blockSeparator = '<sep gap="36"/>'; // At default scale, about 28px
 
-const motion = `
+const motion = function (targetId) {
+    return `
     <category name="Motion" colour="#4C97FF" secondaryColour="#3373CC">
         <block type="motion_movesteps">
             <value name="STEPS">
@@ -120,14 +121,16 @@ const motion = `
         ${blockSeparator}
         <block type="motion_setrotationstyle"/>
         ${blockSeparator}
-        <block id="<TARGET_ID>_xposition" type="motion_xposition"/>
-        <block id="<TARGET_ID>_yposition" type="motion_yposition"/>
-        <block id="<TARGET_ID>_direction" type="motion_direction"/>
+        <block id="${targetId}_xposition" type="motion_xposition"/>
+        <block id="${targetId}_yposition" type="motion_yposition"/>
+        <block id="${targetId}_direction" type="motion_direction"/>
         ${categorySeparator}
     </category>
-`;
+    `;
+};
 
-const looks = `
+const looks = function (targetId) {
+    return `
     <category name="Looks" colour="#9966FF" secondaryColour="#774DCB">
         <block type="looks_sayforsecs">
             <value name="MESSAGE">
@@ -229,15 +232,17 @@ const looks = `
             </value>
         </block>
         ${blockSeparator}
-        <block id="<TARGET_ID>_costumeorder" type="looks_costumeorder"/>
+        <block id="${targetId}_costumeorder" type="looks_costumeorder"/>
         <block id="backdroporder" type="looks_backdroporder"/>
         <block id="backdropname" type="looks_backdropname"/>
-        <block id="<TARGET_ID>_size" type="looks_size"/>
+        <block id="${targetId}_size" type="looks_size"/>
         ${categorySeparator}
     </category>
-`;
+    `;
+};
 
-const sound = `
+const sound = function () {
+    return `
     <category name="Sound" colour="#D65CD6" secondaryColour="#BD42BD">
         <block type="sound_play">
             <value name="SOUND_MENU">
@@ -284,9 +289,11 @@ const sound = `
         <block id="volume" type="sound_volume"/>
         ${categorySeparator}
     </category>
-`;
+    `;
+};
 
-const events = `
+const events = function () {
+    return `
     <category name="Events" colour="#FFD500" secondaryColour="#CC9900">
         <block type="event_whenflagclicked"/>
         <block type="event_whenkeypressed">
@@ -317,9 +324,11 @@ const events = `
         </block>
         ${categorySeparator}
     </category>
-`;
+    `;
+};
 
-const control = `
+const control = function () {
+    return `
     <category name="Control" colour="#FFAB19" secondaryColour="#CF8B17">
         <block type="control_wait">
             <value name="DURATION">
@@ -354,9 +363,11 @@ const control = `
         <block type="control_delete_this_clone"/>
         ${categorySeparator}
     </category>
-`;
+    `;
+};
 
-const sensing = `
+const sensing = function () {
+    return `
     <category name="Sensing" colour="#4CBFE6" secondaryColour="#2E8EB8">
         <block type="sensing_touchingobject">
             <value name="TOUCHINGOBJECTMENU">
@@ -422,9 +433,11 @@ const sensing = `
         <block type="sensing_dayssince2000"/>
         ${categorySeparator}
     </category>
-`;
+    `;
+};
 
-const operators = `
+const operators = function () {
+    return `
     <category name="Operators" colour="#40BF4A" secondaryColour="#389438">
         <block type="operator_add">
             <value name="NUM1">
@@ -602,12 +615,15 @@ const operators = `
         </block>
         ${categorySeparator}
     </category>
-`;
+    `;
+};
 
-const data = `
+const data = function () {
+    return `
     <category name="Data" colour="#FF8C1A" secondaryColour="#DB6E00" custom="VARIABLE">
     </category>
-`;
+    `;
+};
 
 const xmlOpen = '<xml style="display: none">';
 const xmlClose = '</xml>';
@@ -622,14 +638,14 @@ const makeToolboxXML = function (targetId, categoriesXML) {
 
     const everything = [
         xmlOpen,
-        motion, gap,
-        looks, gap,
-        sound, gap,
-        events, gap,
-        control, gap,
-        sensing, gap,
-        operators, gap,
-        data
+        motion(targetId), gap,
+        looks(targetId), gap,
+        sound(targetId), gap,
+        events(targetId), gap,
+        control(targetId), gap,
+        sensing(targetId), gap,
+        operators(targetId), gap,
+        data(targetId)
     ];
 
     if (categoriesXML) {
@@ -637,9 +653,7 @@ const makeToolboxXML = function (targetId, categoriesXML) {
     }
 
     everything.push(xmlClose);
-    return everything.join('\n').split('<TARGET_ID>')
-        .join(targetId); // targetIds are designed to not break XML.
-    // @todo consider something less hacky?
+    return everything.join('\n');
 };
 
 export default makeToolboxXML;