def METHOD_NAME(tree, top_node, bottom_node, new_shared_mut, up=True):
    ##create new node between top_node and bottom node which shares reversion mutations 
    ##with branch from top to bottom node if up=True and mutations with branch from top 
    ##to bottom node if up=False
    tree.tree.MAX_id += 1
    new_node =Phylo.Newick.Clade(name="parent_"+str(tree.tree.MAX_id))
    new_node.id  = tree.tree.MAX_id
    new_node.up = top_node
    new_node.clade_membership = new_node.up.clade_membership
    if up==True:
        new_node_mut = remove_mut(bottom_node.reversion_mutations, new_shared_mut)
        new_node.reversion_mutations = new_node_mut
        new_node.mutations = [revert(m) for m in new_node.reversion_mutations]
        ##correct private mutations of bottom node
        bottom_node.reversion_mutations = new_shared_mut
        bottom_node.mutations = [revert(m) for m in bottom_node.reversion_mutations]
    else:
        new_node.mutations = new_shared_mut
        new_node.reversion_mutations = [revert(m) for m in new_node.mutations]
        ##correct private mutations of bottom node
        new_bottom_node_mut = remove_mut(bottom_node.mutations, new_shared_mut)
        bottom_node.mutations = new_bottom_node_mut
        bottom_node.reversion_mutations = [revert(m) for m in bottom_node.mutations]
    new_node.branch_length = get_branch_length(new_node.mutations, tree.len_ref_seq)
    new_node.div = top_node.div + new_node.branch_length
    bottom_node.branch_length = get_branch_length(bottom_node.mutations, tree.len_ref_seq) 
    ##correct links to nodes
    top_node.clades.remove(bottom_node)
    top_node.clades.append(new_node)
    new_node.clades.append(bottom_node)
    bottom_node.up = new_node
    return new_node