diff --git a/game.js b/game.js
index 1811593..8d22f7b 100644
--- a/game.js
+++ b/game.js
@@ -18,6 +18,7 @@ victims = {};
 var macro =
 {
   "scaling": function(value, scale, factor) { return value * Math.pow(scale,factor); },
+  "name": "",
   "species": "crux",
   "color" : "blue",
   "baseHeight": 2.26,
@@ -382,7 +383,7 @@ var macro =
 
   get description() {
     result = [];
-    line = "You are a " + length(macro.height, unit, true) + " tall " + macro.species + ". You weigh " + mass(macro.mass, unit) + ".";
+    line = "You are " + (macro.name == "" ? "" : macro.name + ", ") + "a " + length(macro.height, unit, true) + " tall " + macro.species + ". You weigh " + mass(macro.mass, unit) + ".";
     result.push(line);
 
     if (this.arousalEnabled) {
diff --git a/recursive-desc.js b/recursive-desc.js
index 2e85f32..efe6c84 100644
--- a/recursive-desc.js
+++ b/recursive-desc.js
@@ -19,6 +19,10 @@ rules["balls"] = [];
 rules["womb"] = [];
 rules["bowels"] = [];
 
+function isNonFatal(macro) {
+  return macro.brutality == 0;
+}
+
 function isFatal(macro) {
   return macro.brutality >= 1;
 }
@@ -52,11 +56,8 @@ function hasExactly(container, thing, amount) {
 }
 
 function hasOnly(container, things) {
-  for (var key in container.contents) {
-    if (container.contents.hasOwnProperty(key))
-      if (!things.includes(key))
-        return false;
-  }
+  if (!hasNothingElse(container, things))
+    return false;
 
   for (var i=0; i