@Override
  public CRDTMessage add(UnorderedNode<T> father, T element) throws PreconditionException {
    if (!wcp.lookup().contains(father))
      throw new PreconditionException("Adding node " + element + " with father not in the tree");
    if (father.getChild(element) != null)
      throw new PreconditionException("Adding node " + element + " already present under father");

    CRDTMessage msg = null;
    for (List<T> wf : wcp.addMapping(father)) {
      List<T> w = new Word(wf, element);
      CRDTMessage add = words.add(w);
      msg = msg == null ? add : msg.concat(add);
    }
    return msg;
  }