diff --git a/examples/org.eclipse.uml2.examples.uml.ui/src/org/eclipse/uml2/examples/uml/ui/dialogs/UML2EcoreConverterOptionsDialog.java b/examples/org.eclipse.uml2.examples.uml.ui/src/org/eclipse/uml2/examples/uml/ui/dialogs/UML2EcoreConverterOptionsDialog.java
index 5c0c0c7..c071b8c 100644
--- a/examples/org.eclipse.uml2.examples.uml.ui/src/org/eclipse/uml2/examples/uml/ui/dialogs/UML2EcoreConverterOptionsDialog.java
+++ b/examples/org.eclipse.uml2.examples.uml.ui/src/org/eclipse/uml2/examples/uml/ui/dialogs/UML2EcoreConverterOptionsDialog.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2018 IBM Corporation, Embarcadero Technologies, CEA, and others.
+ * Copyright (c) 2005, 2019 IBM Corporation, Embarcadero Technologies, CEA, and others.
  * All rights reserved.   This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v2.0
  * which accompanies this distribution, and is available at
@@ -10,7 +10,7 @@
  *   Kenn Hussey (Embarcadero Technologies) - 213218
  *   Kenn Hussey (CEA) - 322715, 535301
  *   Christian W. Damus (CEA) - 409396, 403374, 420338, 405065
- *
+ *   Camille Letavernier (EclipseSource) - 544487
  */
 package org.eclipse.uml2.examples.uml.ui.dialogs;
 
@@ -203,6 +203,22 @@
 			UMLUtil.UML2EcoreConverter.OPTION__OPPOSITE_ROLE_NAMES,
 			new String[]{ignoreChoiceLabel, processChoiceLabel},
 			ignoreChoiceLabel);
+		
+		createOptionArea(
+			parent,
+			UMLExamplesUIPlugin.INSTANCE
+				.getString("_UI_UnsettablePrimitiveAttributes_label"), //$NON-NLS-1$
+			UMLUtil.UML2EcoreConverter.OPTION__UNSETTABLE_PRIMITIVE_ATTRIBUTES,
+			new String[]{ignoreChoiceLabel, reportChoiceLabel, processChoiceLabel},
+			ignoreChoiceLabel);
+		
+		createOptionArea(
+			parent,
+			UMLExamplesUIPlugin.INSTANCE
+				.getString("_UI_NullableEnumAttributes_label"), //$NON-NLS-1$
+			UMLUtil.UML2EcoreConverter.OPTION__NULLABLE_ENUM_ATTRIBUTES,
+			new String[]{ignoreChoiceLabel, reportChoiceLabel, processChoiceLabel},
+			ignoreChoiceLabel);
 	}
 
 }
diff --git a/plugins/org.eclipse.uml2.uml.ecore.importer/src/org/eclipse/uml2/uml/ecore/importer/UMLImporterApplication.java b/plugins/org.eclipse.uml2.uml.ecore.importer/src/org/eclipse/uml2/uml/ecore/importer/UMLImporterApplication.java
index 7a59a0a..36b04ab 100644
--- a/plugins/org.eclipse.uml2.uml.ecore.importer/src/org/eclipse/uml2/uml/ecore/importer/UMLImporterApplication.java
+++ b/plugins/org.eclipse.uml2.uml.ecore.importer/src/org/eclipse/uml2/uml/ecore/importer/UMLImporterApplication.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2018 IBM Corporation, Embarcadero Technologies, CEA, and others.
+ * Copyright (c) 2007, 2019 IBM Corporation, Embarcadero Technologies, CEA, EclipseSource and others.
  * All rights reserved.   This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v2.0
  * which accompanies this distribution, and is available at
@@ -11,7 +11,7 @@
  *   Kenn Hussey (CEA) - 322715
  *   Christian W. Damus (CEA) - 403374, 420338, 405065
  *   Kenn Hussey - 535301
- *
+ *   Camille Letavernier (EclipseSource) - 544487
  */
 package org.eclipse.uml2.uml.ecore.importer;
 
@@ -206,6 +206,10 @@
 			|| UMLUtil.UML2EcoreConverter.OPTION__CAMEL_CASE_NAMES
 				.equalsIgnoreCase(strippedKey)
 			|| UMLUtil.UML2EcoreConverter.OPTION__OPPOSITE_ROLE_NAMES
+				.equalsIgnoreCase(strippedKey)
+			|| UMLUtil.UML2EcoreConverter.OPTION__NULLABLE_ENUM_ATTRIBUTES
+				.equalsIgnoreCase(strippedKey)
+			|| UMLUtil.UML2EcoreConverter.OPTION__UNSETTABLE_PRIMITIVE_ATTRIBUTES
 				.equalsIgnoreCase(strippedKey);
 	}
 
diff --git a/plugins/org.eclipse.uml2.uml.ecore.importer/src/org/eclipse/uml2/uml/ecore/importer/ui/UMLImporterDetailPage.java b/plugins/org.eclipse.uml2.uml.ecore.importer/src/org/eclipse/uml2/uml/ecore/importer/ui/UMLImporterDetailPage.java
index ad653e6..9351684 100644
--- a/plugins/org.eclipse.uml2.uml.ecore.importer/src/org/eclipse/uml2/uml/ecore/importer/ui/UMLImporterDetailPage.java
+++ b/plugins/org.eclipse.uml2.uml.ecore.importer/src/org/eclipse/uml2/uml/ecore/importer/ui/UMLImporterDetailPage.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2006, 2015 IBM Corporation, Embarcadero Technologies, CEA, and others.
+ * Copyright (c) 2006, 2019 IBM Corporation, Embarcadero Technologies, CEA, EclipseSource and others.
  * All rights reserved.   This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v2.0
  * which accompanies this distribution, and is available at
@@ -10,7 +10,7 @@
  *   Kenn Hussey (Embarcadero Technologies) - 213218
  *   Kenn Hussey (CEA) - 322715, 482214
  *   Christian W. Damus (CEA) - 409396, 403374, 420338, 405065
- *
+ *   Camille Letavernier (EclipseSource) - 544487
  */
 package org.eclipse.uml2.uml.ecore.importer.ui;
 
@@ -286,6 +286,18 @@
 			UMLUtil.UML2EcoreConverter.OPTION__OPPOSITE_ROLE_NAMES,
 			new String[]{ignoreChoiceLabel, processChoiceLabel},
 			ignoreChoiceLabel);
+		addOptionControl(
+			optionsComposite,
+			UMLImporterPlugin.INSTANCE.getString("_UI_UnsettablePrimitiveAttributes_label"), //$NON-NLS-1$
+			UMLUtil.UML2EcoreConverter.OPTION__UNSETTABLE_PRIMITIVE_ATTRIBUTES,
+			new String[]{ignoreChoiceLabel, reportChoiceLabel, processChoiceLabel},
+			ignoreChoiceLabel);
+		addOptionControl(
+			optionsComposite,
+			UMLImporterPlugin.INSTANCE.getString("_UI_NullableEnumAttributes_label"), //$NON-NLS-1$
+			UMLUtil.UML2EcoreConverter.OPTION__NULLABLE_ENUM_ATTRIBUTES,
+			new String[]{ignoreChoiceLabel, reportChoiceLabel, processChoiceLabel},
+			ignoreChoiceLabel);
 
 		scrolledComposite.setContent(optionsComposite);
 		scrolledComposite.setExpandHorizontal(true);
diff --git a/plugins/org.eclipse.uml2.uml.editor/src/org/eclipse/uml2/uml/editor/dialogs/Profile2EPackageConverterOptionsDialog.java b/plugins/org.eclipse.uml2.uml.editor/src/org/eclipse/uml2/uml/editor/dialogs/Profile2EPackageConverterOptionsDialog.java
index ce80593..a6bec71 100644
--- a/plugins/org.eclipse.uml2.uml.editor/src/org/eclipse/uml2/uml/editor/dialogs/Profile2EPackageConverterOptionsDialog.java
+++ b/plugins/org.eclipse.uml2.uml.editor/src/org/eclipse/uml2/uml/editor/dialogs/Profile2EPackageConverterOptionsDialog.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2018 IBM Corporation, CEA, and others.
+ * Copyright (c) 2007, 2019 IBM Corporation, CEA, EclipseSource and others.
  * All rights reserved.   This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v2.0
  * which accompanies this distribution, and is available at
@@ -10,7 +10,7 @@
  *   Kenn Hussey (CEA) - 322715, 163556
  *   Christian W. Damus (CEA) - 409396, 403374, 420338, 405065
  *   Kenn Hussey - 535301
- *
+ *   Camille Letavernier (EclipseSource) - 544487
  */
 package org.eclipse.uml2.uml.editor.dialogs;
 
@@ -193,5 +193,19 @@
 			UMLUtil.UML2EcoreConverter.OPTION__OPPOSITE_ROLE_NAMES,
 			new String[]{ignoreChoiceLabel, processChoiceLabel},
 			ignoreChoiceLabel);
+		
+		createOptionArea(
+			parent,
+			UMLEditorPlugin.INSTANCE.getString("_UI_UnsettablePrimitiveAttributes_label"), //$NON-NLS-1$
+			UMLUtil.UML2EcoreConverter.OPTION__UNSETTABLE_PRIMITIVE_ATTRIBUTES,
+			new String[]{ignoreChoiceLabel, reportChoiceLabel, processChoiceLabel},
+			ignoreChoiceLabel);
+		
+		createOptionArea(
+			parent,
+			UMLEditorPlugin.INSTANCE.getString("_UI_NullableEnumAttributes_label"), //$NON-NLS-1$
+			UMLUtil.UML2EcoreConverter.OPTION__NULLABLE_ENUM_ATTRIBUTES,
+			new String[]{ignoreChoiceLabel, reportChoiceLabel, processChoiceLabel},
+			ignoreChoiceLabel);
 	}
 }
diff --git a/plugins/org.eclipse.uml2.uml/META-INF/MANIFEST.MF b/plugins/org.eclipse.uml2.uml/META-INF/MANIFEST.MF
index c7d5bc5..95d87f9 100644
--- a/plugins/org.eclipse.uml2.uml/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.uml2.uml/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.uml2.uml; singleton:=true
-Bundle-Version: 5.5.0.qualifier
+Bundle-Version: 5.6.0.qualifier
 Bundle-ClassPath: .
 Bundle-Activator: org.eclipse.uml2.uml.UMLPlugin$Implementation
 Bundle-Vendor: %providerName
diff --git a/plugins/org.eclipse.uml2.uml/plugin.properties b/plugins/org.eclipse.uml2.uml/plugin.properties
index 4c3ffe9..aea308f 100644
--- a/plugins/org.eclipse.uml2.uml/plugin.properties
+++ b/plugins/org.eclipse.uml2.uml/plugin.properties
@@ -80,6 +80,8 @@
 _UI_UML2EcoreConverter_ReportSuperClassOrder_diagnostic = The super classes of class ''{0}'' should be re-ordered for optimal code generation.
 _UI_UML2EcoreConverter_ReportAnnotationDetails_diagnostic = Model element ''{0}'' should be annotated with details from source ''{1}''.
 _UI_UML2EcoreConverter_ReportUntypedProperty_diagnostic = Feature ''{0}'' has no type specified.
+_UI_UML2EcoreConverter_ReportOptionalPrimitiveAttribute_diagnostic = The optional primitive attribute ''{0}'' is not unsettable; it will always have a value.
+_UI_UML2EcoreConverter_ReportOptionalEnumAttribute_diagnostic = The optional enum attribute ''{0}'' is not nullable; it will always have a value.
 
 _UI_Ecore2UMLConverter_ProcessEcoreTaggedValue_diagnostic = Applied Ecore tag ''{1}'' with value of ''{2}'' to element ''{0}''.
 _UI_Ecore2UMLConverter_ProcessRedefinesAnnotation_diagnostic = Made ''{0}'' redefine ''{1}'' based on an annotation.
@@ -87,6 +89,8 @@
 _UI_Ecore2UMLConverter_ProcessUnionAnnotation_diagnostic = Made ''{0}'' a union based on an annotation.
 _UI_Ecore2UMLConverter_ProcessAnnotationDetails_diagnostic = Annotated element ''{0}'' with details from source ''{1}''.
 _UI_Ecore2UMLConverter_ProcessOppositeRoleName_diagnostic = Property ''{0}'' association-owned opposite has been named ''{1}''.
+_UI_UML2EcoreConverter_ProcessOptionalPrimitiveAttribute_diagnostic = Optional primitive attribute ''{0}}'' has been made unsettable.
+_UI_UML2EcoreConverter_ProcessOptionalEnumAttribute_diagnostic = Optional enum attribute ''{0}'' has been typed with a nullable enumeration.
 
 _UI_Ecore2UMLConverter_ReportEcoreTaggedValue_diagnostic = Element ''{0}'' should have an Ecore tag ''{1}'' with value of ''{2}''.
 _UI_Ecore2UMLConverter_ReportRedefinesAnnotation_diagnostic = ''{0}'' should redefine ''{1}'' based on an annotation.
@@ -207,6 +211,8 @@
 _UI_Comments_label = Comments
 _UI_UntypedProperties_label = Untyped Properties
 _UI_OppositeRoleNames_label = Opposite Role Names
+_UI_UnsettablePrimitiveAttributes_label = Unsettable Primitive Attributes
+_UI_NullableEnumAttributes_label = Nullable Enum Attributes
 
 _UI_RedefinesAnnotations_label = Redefines Annotations
 _UI_SubsetsAnnotations_label = Subsets Annotations
diff --git a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/util/UMLUtil.java b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/util/UMLUtil.java
index 8bc9cc0..9bba684 100644
--- a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/util/UMLUtil.java
+++ b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/util/UMLUtil.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2018 IBM Corporation, Embarcadero Technologies, CEA, Christian W. Damus, and others.
+ * Copyright (c) 2005, 2019 IBM Corporation, Embarcadero Technologies, CEA, Christian W. Damus, EclipseSource and others.
  * All rights reserved.   This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v2.0
  * which accompanies this distribution, and is available at
@@ -16,7 +16,7 @@
  *   E.D.Willink - 420338, 512439
  *   Christian W. Damus - 444588, 497359, 501740
  *   Camille Letavernier - 528925, 529564
- *
+ *   Camille Letavernier (EclipseSource) - 544487
  */
 package org.eclipse.uml2.uml.util;
 
@@ -44,6 +44,7 @@
 import org.eclipse.emf.common.util.ECollections;
 import org.eclipse.emf.common.util.EList;
 import org.eclipse.emf.common.util.EMap;
+import org.eclipse.emf.common.util.Enumerator;
 import org.eclipse.emf.common.util.TreeIterator;
 import org.eclipse.emf.common.util.URI;
 import org.eclipse.emf.common.util.UniqueEList;
@@ -4162,6 +4163,25 @@
 		 * @since 5.0
 		 */
 		public static final String OPTION__LINE_SEPARATOR = "LINE_SEPARATOR"; //$NON-NLS-1$
+		
+		/**
+		 * The option for converting optional UML properties to unsettable Ecore attributes,
+		 * when they are typed with primitives.
+		 * Supported choices are <code>OPTION__IGNORE</code>, <code>OPTION__REPORT</code>
+		 * and <code>OPTION__PROCESS</code>.
+		 * 
+		 * @since 5.6
+		 */
+		public static final String OPTION__UNSETTABLE_PRIMITIVE_ATTRIBUTES = "UNSETTABLE_PRIMITIVE_ATTRIBUTES"; //$NON-NLS-1$
+		
+		/**
+		 * The option for converting optional UML properties typed with an Enumeration
+		 * to nullable Ecore attributes. Supported choices are <code>OPTION__IGNORE</code>, 
+		 * <code>OPTION__REPORT</code> and <code>OPTION__PROCESS</code>.
+		 * 
+		 * @since 5.6
+		 */
+		public static final String OPTION__NULLABLE_ENUM_ATTRIBUTES = "NULLABLE_ENUM_ATTRIBUTES"; //$NON-NLS-1$
 
 		private static final int DIAGNOSTIC_CODE_OFFSET = 2000;
 
@@ -4278,7 +4298,23 @@
 		 * @since 5.0
 		 */
 		public static final int PROPERTY_DEFAULT_EXPRESSION = DIAGNOSTIC_CODE_OFFSET + 19;
-
+		
+		/**
+		 * The diagnostic code for cases where optional attributes are not
+		 * marked as unsettable.
+		 * 
+		 * @since 5.6
+		 */
+		public static final int OPTIONAL_ATTRIBUTE = DIAGNOSTIC_CODE_OFFSET + 20;
+		
+		/**
+		 * The diagnostic code for cases where optional enum attributes are not
+		 * marked as nullable.
+		 * 
+		 * @since 5.6
+		 */
+		public static final int OPTIONAL_ENUM_ATTRIBUTE = DIAGNOSTIC_CODE_OFFSET + 21;
+		
 		protected static final Pattern ANNOTATION_PATTERN = Pattern
 			.compile("\\G\\s*((?>\\\\.|\\S)+)((?:\\s+(?>\\\\.|\\S)+\\s*+=\\s*(['\"])((?>\\\\.|.)*?)\\3)*)"); //$NON-NLS-1$
 
@@ -4291,6 +4327,8 @@
 
 		protected final Map<Element, EModelElement> elementToEModelElementMap = new LinkedHashMap<Element, EModelElement>();
 
+		protected final Map<EEnum, EDataType> enumToDataType = new LinkedHashMap<EEnum, EDataType>();
+
 		protected Collection<org.eclipse.uml2.uml.Package> packages = null;
 
 		protected Map<String, String> options = null;
@@ -4836,6 +4874,22 @@
 
 				setName(eEnum, enumeration);
 
+				if (options != null && OPTION__PROCESS
+							.equals(options.get(OPTION__NULLABLE_ENUM_ATTRIBUTES))) {
+					// Also generate the corresponding EDataType, for Optional Enums
+					// https://wiki.eclipse.org/EMF/Recipes#Recipe:_Generating_enumeration-based_attributes_that_support_null
+					EDataType enumType = EcoreFactory.eINSTANCE.createEDataType();
+					enumToDataType.put(eEnum, enumType);
+					ePackage.getEClassifiers().add(enumType);
+	
+					// XXX EMF Recipe recommends using the same name, but that's not required;
+					// Using a different name will probably make it easier to generate Java and
+					// the validation isn't going to complain that 2 classifiers have the same name
+					enumType.setName(eEnum.getName()+"_Optional");
+					enumType.setInstanceTypeName(Enumerator.class.getName());
+					ExtendedMetaData.INSTANCE.setBaseType(enumType, eEnum);
+				}
+
 				defaultCase(enumeration);
 
 				return eEnum;
@@ -5351,6 +5405,68 @@
 				}
 
 				caseMultiplicityElement(property);
+				
+				if (eStructuralFeature.getEType() != null && eStructuralFeature instanceof EAttribute 
+						&& eStructuralFeature.getLowerBound() == 0 && eStructuralFeature.getUpperBound() == 1) {
+					EAttribute eAttribute = (EAttribute)eStructuralFeature;
+					
+					Class<?> instanceClass = eAttribute.getEType().getInstanceClass();
+					if (instanceClass != null && (instanceClass.isPrimitive() || instanceClass == String.class)) { // Optional Primitives + Strings
+						// Note: we need String as well, because EMF/Ecore is inconsistent regarding Optional 
+						// Strings that aren't unsettable, when they have a default value. The null value will 
+						// be kept in memory, but not persisted, causing the value to change (from null to 
+						// default) when the model is reloaded.
+						if (options != null
+								&& OPTION__PROCESS.equals(options.get(OPTION__UNSETTABLE_PRIMITIVE_ATTRIBUTES))){
+							((EAttribute)eAttribute).setUnsettable(true);
+							if (diagnostics != null) {
+								diagnostics.add(new BasicDiagnostic(Diagnostic.INFO,
+										UMLValidator.DIAGNOSTIC_SOURCE, OPTIONAL_ATTRIBUTE, UMLPlugin.INSTANCE
+										.getString(
+												"_UI_UML2EcoreConverter_ProcessOptionalPrimitiveAttribute_diagnostic", //$NON-NLS-1$
+												getMessageSubstitutions(context, property)),
+										new Object[]{eAttribute}));
+							}
+						} else if (options != null 
+								&& OPTION__REPORT.equals(options.get(OPTION__UNSETTABLE_PRIMITIVE_ATTRIBUTES))) {
+							// UML Multiplicity is 0..1 but the EAttribute is not unsettable; 
+							// warn about the semantic inconsistency
+							diagnostics.add(new BasicDiagnostic(Diagnostic.WARNING,
+									UMLValidator.DIAGNOSTIC_SOURCE, OPTIONAL_ATTRIBUTE, UMLPlugin.INSTANCE
+									.getString(
+											"_UI_UML2EcoreConverter_ReportOptionalPrimitiveAttribute_diagnostic", //$NON-NLS-1$
+											getMessageSubstitutions(context, property)),
+									new Object[]{eAttribute}));
+						}
+					} else if (eAttribute.getEType() instanceof EEnum) { // Optional Enums 
+						if (options != null 
+							&& OPTION__PROCESS.equals(options.get(OPTION__NULLABLE_ENUM_ATTRIBUTES))){
+							EEnum eEnum = (EEnum)eAttribute.getEType();
+							EDataType enumType = enumToDataType.get(eEnum);
+							eAttribute.setEType(enumType); // Use the Optional Enum type
+							eAttribute.setUnsettable(true); // Make unsettable, so EMF can distinguish Null (NIL) from Default
+							
+							if (diagnostics != null) {
+								diagnostics.add(new BasicDiagnostic(Diagnostic.INFO,
+									UMLValidator.DIAGNOSTIC_SOURCE, OPTIONAL_ENUM_ATTRIBUTE, UMLPlugin.INSTANCE
+										.getString(
+											"_UI_UML2EcoreConverter_ProcessOptionalEnumAttribute_diagnostic", //$NON-NLS-1$
+											getMessageSubstitutions(context, property)),
+									new Object[]{eAttribute}));
+							}
+						} else if (options != null 
+								&& OPTION__REPORT.equals(options.get(OPTION__NULLABLE_ENUM_ATTRIBUTES))) {
+							// UML Multiplicity is 0..1 but the EAttribute is not a Nullable Enum; 
+							// warn about the semantic inconsistency
+							diagnostics.add(new BasicDiagnostic(Diagnostic.WARNING,
+									UMLValidator.DIAGNOSTIC_SOURCE, OPTIONAL_ENUM_ATTRIBUTE, UMLPlugin.INSTANCE
+									.getString(
+											"_UI_UML2EcoreConverter_ReportOptionalEnumAttribute_diagnostic", //$NON-NLS-1$
+											getMessageSubstitutions(context, property)),
+									new Object[]{eAttribute}));
+						}
+					}
+				}
 
 				defaultCase(property);
 
@@ -12940,6 +13056,22 @@
 				UML2EcoreConverter.OPTION__PROPERTY_DEFAULT_EXPRESSIONS,
 				OPTION__IGNORE);
 		}
+		
+		if (!options
+				.containsKey(UML2EcoreConverter.OPTION__UNSETTABLE_PRIMITIVE_ATTRIBUTES)) {
+
+				options.put(
+					UML2EcoreConverter.OPTION__UNSETTABLE_PRIMITIVE_ATTRIBUTES,
+					OPTION__IGNORE);
+		}
+		
+		if (!options
+				.containsKey(UML2EcoreConverter.OPTION__NULLABLE_ENUM_ATTRIBUTES)) {
+
+				options.put(
+					UML2EcoreConverter.OPTION__NULLABLE_ENUM_ATTRIBUTES,
+					OPTION__IGNORE);
+		}
 
 		return convertToEcore(package_, options, null, null);
 	}
@@ -13089,6 +13221,14 @@
 				UML2EcoreConverter.OPTION__PROPERTY_DEFAULT_EXPRESSIONS,
 				OPTION__REPORT);
 		}
+		
+		if (!options.containsKey(UML2EcoreConverter.OPTION__UNSETTABLE_PRIMITIVE_ATTRIBUTES)) {
+			options.put(UML2EcoreConverter.OPTION__UNSETTABLE_PRIMITIVE_ATTRIBUTES, OPTION__REPORT);
+		}
+		
+		if (!options.containsKey(UML2EcoreConverter.OPTION__NULLABLE_ENUM_ATTRIBUTES)) {
+			options.put(UML2EcoreConverter.OPTION__NULLABLE_ENUM_ATTRIBUTES, OPTION__REPORT);
+		}
 
 		@SuppressWarnings("unchecked")
 		Collection<EPackage> ePackages = (Collection<EPackage>) new UML2EcoreConverter()
@@ -13227,6 +13367,14 @@
 				UML2EcoreConverter.OPTION__PROPERTY_DEFAULT_EXPRESSIONS,
 				OPTION__IGNORE);
 		}
+		
+		if (!options.containsKey(UML2EcoreConverter.OPTION__UNSETTABLE_PRIMITIVE_ATTRIBUTES)) {
+			options.put(UML2EcoreConverter.OPTION__UNSETTABLE_PRIMITIVE_ATTRIBUTES, OPTION__IGNORE);
+		}
+		
+		if (!options.containsKey(UML2EcoreConverter.OPTION__NULLABLE_ENUM_ATTRIBUTES)) {
+			options.put(UML2EcoreConverter.OPTION__NULLABLE_ENUM_ATTRIBUTES, OPTION__IGNORE);
+		}
 
 		return convertToEcore(profile, options, null, null);
 	}
@@ -13359,6 +13507,14 @@
 				UML2EcoreConverter.OPTION__PROPERTY_DEFAULT_EXPRESSIONS,
 				OPTION__REPORT);
 		}
+		
+		if (!options.containsKey(UML2EcoreConverter.OPTION__UNSETTABLE_PRIMITIVE_ATTRIBUTES)) {
+			options.put(UML2EcoreConverter.OPTION__UNSETTABLE_PRIMITIVE_ATTRIBUTES, OPTION__REPORT);
+		}
+		
+		if (!options.containsKey(UML2EcoreConverter.OPTION__NULLABLE_ENUM_ATTRIBUTES)) {
+			options.put(UML2EcoreConverter.OPTION__NULLABLE_ENUM_ATTRIBUTES, OPTION__REPORT);
+		}
 
 		@SuppressWarnings("unchecked")
 		Collection<EPackage> ePackages = (Collection<EPackage>) new Profile2EPackageConverter()
