public boolean addItem(Item item) {
    if (item.isMatch() || item.amount <= 0) {
      if (item.isMatch()) I.complain(
        "ADDING ILLEGAL ITEM: "+item+" amount/quality:"+
        item.amount+"/"+item.quality
      ) ;
      new Exception().printStackTrace() ;
      return false ;
    }
    //
    //  Check to see if a similar item already exists.  If so, blend the new
    //  quality with the old-
    final Item oldItem = itemTable.get(item) ;
    float amount = item.amount, quality = item.quality ;
    if (oldItem != null) {
      itemTable.remove(oldItem) ;
      quality = (quality * amount) + (oldItem.amount * oldItem.quality) ;
      amount += oldItem.amount ;
      quality /= amount ;
    }
    
    final Item entered = Item.with(item.type, item.refers, amount, quality) ;
    itemTable.put(entered, entered) ;
    if (owner != null) owner.afterTransaction(item, item.amount) ;
    return true ;
  }