{
final CombiningAlgorithm alg = getCombiningAlgorithm();
if(!(alg instanceof PolicyCombiningAlgorithm))
{throw new IllegalStateException("Combining algorithm must be a policy combining algorithm");}
final PolicyCombiningAlgorithm algorithm = (PolicyCombiningAlgorithm)alg;
final Target target = getTarget().getTarget();
final List<PolicyTreeElement> copy = new ArrayList<PolicyTreeElement>(children.size());
for(final PolicyElementNode child : children)
copy.add(child.create());
final URI useId = (id == null) ? getId() : id;
return new PolicySet(useId, algorithm, getDescription(), target, copy);