 
   generate_names (o, prefix, identifier);
 
-  var output = identifier + " " + typeof (o) + "[" + prefix +
-    (prefix != "" ? "." : "") + identifier + "]";
-  if (typeof (o) == "object")
-    output += " : toString => \"" + o[prop] + "\"";
-  trace (output);
-
   if (typeof (o) == "object" || typeof (o) == "function")
+  {
+    if (prefix + (prefix != "" ? "." : "") + identifier == o["mySecretId"])
+    {
+      trace (prefix + (prefix != "" ? "." : "") + identifier + " = " +
+	  typeof (o));
+    }
+    else
+    {
+      trace (prefix + (prefix != "" ? "." : "") + identifier + " = " +
+	  o["mySecretId"]);
+    }
     trace_properties_recurse (o, prefix, identifier, 1);
-}
+  }
+  else
+  {
+    trace (prefix + (prefix != "" ? "." : "") + identifier + " = " +
+	typeof (o[prop]) + value);
+  }
+}


    o.__proto__[prop] = old;
    if (o.__proto__[prop] != old)
      trace ("Error: Couldn't set __proto__[\"" + prop + "\"] back to old value");
    if (constant)
      ASSetPropFlags (o.__proto__, prop, 4);


    if (flags != "")
      flags = " (" + flags + ")";

    var value = "";
    // add value depending on the type
    if (typeof (o[prop]) == "number" || typeof (o[prop]) == "boolean") {
      value += " : " + o[prop];
    } else if (typeof (o[prop]) == "string") {
      value += " : \"" + o[prop] + "\"";
    }

    // recurse if it's object or function and this is the place it has been
    // named after
    if (typeof (o[prop]) == "object" || typeof (o[prop]) == "function")
    {
      if (prefix + (prefix != "" ? "." : "") + identifier + "." + prop ==
	  o[prop]["mySecretId"])
      {
	trace (indentation + prop + flags + " = " + typeof (o[prop]));
	trace_properties_recurse (o[prop], prefix + (prefix != "" ? "." : "") +
	    identifier, prop, level + 1);
      }
      else
      {
	trace (indentation + prop + flags + " = " + o[prop]["mySecretId"]);
      }
    }
    else
    {
      trace (indentation + prop + flags + " = " + typeof (o[prop]) + value);
    }
  }
}

function generate_names (o, prefix, identifier)
{
  // mark the ones that are not hidden
  var nothidden = new Array ();
  for (var prop in o) {
    nothidden.push (prop);
  }

  // unhide everything
  ASSetPropFlags (o, null, 0, 1);

  var all = new Array ();
  for (var prop in o)
  {
    if (is_blaclisted (o, prop) == false) {
      // only get the ones that are not only in the __proto__
      if (hasOwnProperty (o, prop) == true) {
	all.push (prop);
      }
    }
  }
  all.sort ();

  // hide the ones that were already hidden
  ASSetPropFlags (o, null, 1, 0);
  ASSetPropFlags (o, nothidden, 0, 1);

  for (var i = 0; i < all.length; i++) {
    var prop = all[i];
