       trim: true
       # normalize implicates trimming, just so you know
       normalize: true
+      # set default attribute object key
+      attrkey: "@"
+      # set default char object key
+      charkey: "#"
     # overwrite them with the specified options, if any
     options[key] = value for own key, value of opts
 

    # setting this property by and is deprecated, yet still supported.
    # better pass it as explicitCharkey option to the constructor
    @EXPLICIT_CHARKEY = options.explicitCharkey
    @resultObject = null
    stack = []

    @saxParser.onopentag = (node) =>
      obj = {}
      obj["#"] = ""
      for own key of node.attributes
        if "@" not of obj
          obj["@"] = {}
        obj["@"][key] = node.attributes[key]

      # need a place to store the node name
      obj["#name"] = node.name

    @saxParser.ontext = @saxParser.oncdata = (text) =>
      s = stack[stack.length - 1]
      if s
        s[@CHARKEY] += text

  parseString: (str) =>
    @saxParser.write str.toString()
