@SuppressWarnings("unchecked")
    public T usingId(Id id) {
        if (this.id != null) {
            throw new IllegalStateException("Id already assigned!");
        }
        this.id = id;
        return (T)this;
    }