Iterator iter = getLocalPropertyNames();
Iterator iter = getSortedLocalPropertyNames();
  public ComponentProperties copy(ComponentProperties result) {    // Make sure we're copying apples into apples    // The result can be a sub-class, but we want it    // to at least have the same set of properties    if (! (this.getClass().isAssignableFrom(result.getClass())))      return null;    Iterator iter = getLocalPropertyNames();    while(iter.hasNext()) {      CompositeName name = (CompositeName)iter.next();      Property myProp = getProperty(name);      // compose the correct name for the property      // name must be prepended by new society name      String s = name.last().toString();      ComponentName hisPropName = new ComponentName((ConfigurableComponent)result, s);      Property hisProp = result.getProperty(hisPropName);      try {	// if have experimental values, then copy those	// else copy the property value	if (myProp.getExperimentValues() != null) {	  List experimentValues = myProp.getExperimentValues();	  Object newValue = Array.newInstance(myProp.getPropertyClass(),					      experimentValues.size());	  for (int j = 0; j < experimentValues.size(); j++)	    Array.set(newValue, j,		      PropertyHelper.validateValue(myProp, 						   experimentValues.get(j)));	  hisProp.setExperimentValues(Arrays.asList((Object[])newValue));	  hisProp.setValue(null); // no specific value	} else {	  Object o = PropertyHelper.validateValue(myProp, myProp.getValue());	  if (o != null)	    hisProp.setValue(o);	}      } catch (InvalidPropertyValueException e) {	System.out.println(getClass().getName() + e);      }    }    // Now, clone my children    for(int i=0; i < getChildCount(); i++) {      ConfigurableComponent cc = getChild(i);      ConfigurableComponent co = ((ConfigurableComponent)result).getChild(cc.getFullName().last());      if(co != null) {	cc.copy(co);      }    }    return result;  }