<%if ("java.lang.String".equals(genFeature.getType()) && UML2GenModelUtil.isSafeStrings(genModel)) {%>
		new<%=genFeature.getCapName()%> = new<%=genFeature.getCapName()%> == null ? <%=genFeature.getUpperName()%>_EDEFAULT : new<%=genFeature.getCapName()%>;
<%}%>
<%if (!genFeature.isBasicSet()) { boolean first = genFeature.isContainer() && !genFeature.isVolatile();%>
  <%for (Iterator supersetGenFeatures = UML2GenModelUtil.getSupersetGenFeatures(genClass, genFeature).iterator(); supersetGenFeatures.hasNext(); ) { GenFeature supersetGenFeature = (GenFeature) supersetGenFeatures.next();%>
    <%if (!UML2GenModelUtil.isUnion(supersetGenFeature)) {%>
      <%if (supersetGenFeature.isListType()) {%>
		if (new<%=genFeature.getCapName()%> != null && !<%=supersetGenFeature.getGetAccessor()%>().contains(new<%=genFeature.getCapName()%>))
		{
			<%=supersetGenFeature.getGetAccessor()%>().add(new<%=genFeature.getCapName()%>);
		}
      <%} else {%>
        <%if (first) { first = false;%>
		<%=genModel.getImportedName("org.eclipse.emf.ecore.EObject")%> old<%=genFeature.getCapName()%> = eContainer();
        <%}%>
      <%}%>
    <%}%>
  <%}%>
<%}%>