if (prop instanceof PropertyBooleanImpl) {
PropertyBooleanImpl clone = new PropertyBooleanImpl();
clone.setValues(((PropertyBooleanImpl)prop).getValues());
ad = clone;
} else if (prop instanceof PropertyDateTimeImpl) {
PropertyDateTimeImpl clone = new PropertyDateTimeImpl();
clone.setValues(((PropertyDateTimeImpl)prop).getValues());
ad = clone;
} else if (prop instanceof PropertyDecimalImpl) {
PropertyDecimalImpl clone = new PropertyDecimalImpl();
clone.setValues(((PropertyDecimalImpl)prop).getValues());
ad = clone;
} else if (prop instanceof PropertyHtmlImpl) {
PropertyHtmlImpl clone = new PropertyHtmlImpl();
clone.setValues(((PropertyHtmlImpl)prop).getValues());
ad = clone;
} else if (prop instanceof PropertyIdImpl) {
PropertyIdImpl clone = new PropertyIdImpl();
clone.setValues(((PropertyIdImpl)prop).getValues());
ad = clone;
} else if (prop instanceof PropertyIntegerImpl) {
PropertyIntegerImpl clone = new PropertyIntegerImpl();
clone.setValues(((PropertyIntegerImpl)prop).getValues());
ad = clone;
} else if (prop instanceof PropertyStringImpl) {
PropertyStringImpl clone = new PropertyStringImpl();
clone.setValues(((PropertyStringImpl)prop).getValues());
ad = clone;
} else if (prop instanceof PropertyUriImpl) {
PropertyUriImpl clone = new PropertyUriImpl();
clone.setValues(((PropertyUriImpl)prop).getValues());
ad = clone;
} else {
throw new RuntimeException("Unknown property type: " + prop.getClass());
}