public void addChild(String rootTaxonName, String taxonName, TaxonRank taxonRank){

    TaxaNode newNode = null;
    TaxaNode nodePointer = null;
    TaxaNode father = null;

    // check if the element is already in the tree
    if (null != this.nodeList.get(taxonName))
    	return;
//    nodePointer = this.nodeList.get(taxonName);

    // is the father already there?
    father = this.find(rootTaxonName);
    
    // the new node of the tree
    newNode = new TaxaNode(rootTaxonName, taxonName, taxonRank, this.nextId++, null);

    if (null != father){

      newNode.setFatherId(father.getNodeId());
      
      // is the son already there?
      if ( this.find(father, taxonName) == null){
        father.addChild(newNode);
      }
      // if there is no father in the tree. add the node to the root.
    }else{
      newNode.setFathersName("ROOT");
      this.root.addChild(newNode);
    }

    this.nodeList.put(newNode.getTaxonName(), newNode);
  }