public static <E> FunctionExecutor<Void> createAdd(final FeatureDefinition<? extends Property<? extends Collection<E>>> propertyDefinition) {

        return new FunctionExecutor<Void>() {

            @SuppressWarnings ("unchecked")
            @Override
            public Void invoke(FunctionInvocation<Void> invocation, Object... arguments) throws ExecutorInvocationException {

                for (Object element : arguments) {
                    // Hope that the using FunctionDefinition has the correct parameters
                    boolean changed = invocation.getHolder().get(propertyDefinition).get().add((E) element);

                    // Set the parent of the added element the new holder
                    if (changed && element instanceof ChildFeatureHolder) {
                        // Is always true because of <P extends FeatureHolder> in ChildFeatureHolder
                        ((ChildFeatureHolder<FeatureHolder>) element).setParent(invocation.getHolder());
                    }
                }

                return invocation.next(arguments);
            }

        };
    }