var requTerm = subject.uri ? kb.sym(UI.rdf.uri.docpart(subject.uri)) : subject
function render () {
      subject = kb.canon(subject)
      if (!p || !p.parentNode || !p.parentNode.parentNode) return false

      var newTable
      UI.log.info('@@ REPAINTING ')
      if (!already) { // first expand
        newTable = propertyTable(subject, undefined, pane, options)
      } else {
        UI.log.info(' ... p is  ' + p)
        for (newTable = p.firstChild; newTable.nextSibling; newTable = newTable.nextSibling) {
          UI.log.info(' ... checking node ' + newTable)
          if (newTable.nodeName === 'table') break
        }
        newTable = propertyTable(subject, newTable, pane, options)
      }
      already = true
      if (UI.utils.ancestor(p, 'TABLE') && UI.utils.ancestor(p, 'TABLE').style.backgroundColor === 'white') {
        newTable.style.backgroundColor = '#eee'
      } else {
        newTable.style.backgroundColor = 'white'
      }
      try {
        if (YAHOO.util.Event.off) YAHOO.util.Event.off(p, 'mousedown', 'dragMouseDown')
      } catch (e) {
        console.log('YAHOO ' + e)
      }
      UI.utils.emptyNode(p).appendChild(newTable)
      thisOutline.focusTd = p // I don't know why I couldn't use 'this'...because not defined in callbacks
      UI.log.debug('expand: Node for ' + subject + ' expanded')
          // fetch seeAlso when render()
          // var seeAlsoStats = sf.store.statementsMatching(subject, UI.ns.rdfs('seeAlso'))
          // seeAlsoStats.map(function (x) {sf.lookUpThing(x.object, subject,false);})
      var seeAlsoWhat = kb.each(subject, UI.ns.rdfs('seeAlso'))
      for (var i = 0; i < seeAlsoWhat.length; i++) {
        if (i === 25) {
          UI.log.warn('expand: Warning: many (' +
                seeAlsoWhat.length + ') seeAlso links for ' + subject)
              // break; Not sure what limits the AJAX system has here
        }
        sf.lookUpThing(seeAlsoWhat[i], subject)
      }
    }