[212765] Preserving redefinition details for duplicate features.
diff --git a/plugins/org.eclipse.uml2.uml/model/UML.ecore b/plugins/org.eclipse.uml2.uml/model/UML.ecore
index d7a1856..24cd3b6 100644
--- a/plugins/org.eclipse.uml2.uml/model/UML.ecore
+++ b/plugins/org.eclipse.uml2.uml/model/UML.ecore
@@ -38,6 +38,9 @@
       <details key="documentation" value="Packageable elements are able to serve as a template parameter.&#xA;A packageable element indicates a named element that may be owned directly by a package."/>
     </eAnnotations>
     <eAnnotations source="duplicates">
+      <eAnnotations source="visibility">
+        <details key="lowerBound" value="1"/>
+      </eAnnotations>
       <contents xsi:type="ecore:EAttribute" name="visibility" ordered="false" eType="#//VisibilityKind"
           defaultValueLiteral="public">
         <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
@@ -889,6 +892,12 @@
       <details key="documentation" value="A classifier is a classification of instances - it describes a set of instances that have features in common. A classifier can specify a generalization hierarchy by referencing its general classifiers.&#xA;A classifier has the capability to own use cases. Although the owning classifier typically represents the subject to which the owned use cases apply, this is not necessarily the case. In principle, the same use case can be applied to multiple subjects, as identified by the subject association role of a use case.&#xA;Classifier is defined to be a kind of templateable element so that a classifier can be parameterized. It is also defined to be a kind of parameterable element so that a classifier can be a formal template parameter.&#xA;A classifier has the capability to own collaboration uses. These collaboration uses link a collaboration with the classifier to give a description of the workings of the classifier."/>
     </eAnnotations>
     <eAnnotations source="duplicates">
+      <eAnnotations source="ownedTemplateSignature">
+        <details key="eType" value="uml::RedefinableTemplateSignature"/>
+      </eAnnotations>
+      <eAnnotations source="templateParameter">
+        <details key="eType" value="uml::ClassifierTemplateParameter"/>
+      </eAnnotations>
       <contents xsi:type="ecore:EOperation" name="isTemplate" ordered="false" lowerBound="1"
           eType="ecore:EDataType platform:/plugin/org.eclipse.uml2.types/model/Types.ecore#//Boolean">
         <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
@@ -2683,6 +2692,10 @@
       <details key="documentation" value="An extension is used to indicate that the properties of a metaclass are extended through a stereotype, and gives the ability to flexibly add (and later remove) stereotypes to classes."/>
     </eAnnotations>
     <eAnnotations source="duplicates">
+      <eAnnotations source="ownedEnd">
+        <details key="lowerBound" value="1"/>
+        <details key="upperBound" value="1"/>
+      </eAnnotations>
       <contents xsi:type="ecore:EReference" name="ownedEnd" upperBound="-1" eType="#//ExtensionEnd"
           containment="true">
         <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
@@ -3672,6 +3685,9 @@
       <details key="documentation" value="ConnectableElement is an abstract metaclass representing a set of instances that play roles of a classifier. Connectable elements may be joined by attached connectors and specify configurations of linked instances to be created within an instance of the containing classifier.&#xA;A connectable element may be exposed as a connectable element template parameter."/>
     </eAnnotations>
     <eAnnotations source="duplicates">
+      <eAnnotations source="templateParameter">
+        <details key="eType" value="uml::ConnectableElementTemplateParameter"/>
+      </eAnnotations>
       <contents xsi:type="ecore:EReference" name="templateParameter" ordered="false"
           eType="#//TemplateParameter" eOpposite="#//ConnectableElementTemplateParameter/%duplicates%/parameteredElement">
         <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
@@ -3804,6 +3820,9 @@
       <details key="documentation" value="A connectable element template parameter exposes a connectable element as a formal parameter for a template."/>
     </eAnnotations>
     <eAnnotations source="duplicates">
+      <eAnnotations source="parameteredElement">
+        <details key="eType" value="uml::ConnectableElement"/>
+      </eAnnotations>
       <contents xsi:type="ecore:EReference" name="parameteredElement" ordered="false"
           lowerBound="1" eType="#//ParameterableElement" eOpposite="#//ConnectableElement/%duplicates%/templateParameter">
         <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
@@ -4040,6 +4059,9 @@
       <details key="documentation" value="An operation is a behavioral feature of a classifier that specifies the name, type, parameters, and constraints for invoking an associated behavior.&#xA;An operation may invoke both the execution of method behaviors as well as other behavioral responses.&#xA;Operation specializes TemplateableElement in order to support specification of template operations and bound operations. Operation specializes ParameterableElement to specify that an operation can be exposed as a formal template parameter, and provided as an actual parameter in a binding of a template."/>
     </eAnnotations>
     <eAnnotations source="duplicates">
+      <eAnnotations source="templateParameter">
+        <details key="eType" value="uml::OperationTemplateParameter"/>
+      </eAnnotations>
       <contents xsi:type="ecore:EOperation" name="isConsistentWith" ordered="false"
           lowerBound="1" eType="ecore:EDataType platform:/plugin/org.eclipse.uml2.types/model/Types.ecore#//Boolean">
         <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
@@ -5247,6 +5269,10 @@
       <details key="documentation" value="A region is an orthogonal part of either a composite state or a state machine. It contains states and transitions."/>
     </eAnnotations>
     <eAnnotations source="duplicates">
+      <eAnnotations source="redefinitionContext">
+        <details key="lowerBound" value="1"/>
+        <details key="upperBound" value="1"/>
+      </eAnnotations>
       <contents xsi:type="ecore:EOperation" name="isConsistentWith" ordered="false"
           lowerBound="1" eType="ecore:EDataType platform:/plugin/org.eclipse.uml2.types/model/Types.ecore#//Boolean">
         <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
@@ -5404,6 +5430,10 @@
       <details key="documentation" value="A state models a situation during which some (usually implicit) invariant condition holds.&#xA;The states of protocol state machines are exposed to the users of their context classifiers. A protocol state represents an exposed stable situation of its context classifier: when an instance of the classifier is not processing any operation, users of this instance can always know its state configuration."/>
     </eAnnotations>
     <eAnnotations source="duplicates">
+      <eAnnotations source="redefinitionContext">
+        <details key="lowerBound" value="1"/>
+        <details key="upperBound" value="1"/>
+      </eAnnotations>
       <contents xsi:type="ecore:EOperation" name="containingStateMachine" ordered="false"
           lowerBound="1" eType="#//StateMachine">
         <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
@@ -5970,6 +6000,10 @@
       <details key="documentation" value="A transition is a directed relationship between a source vertex and a target vertex. It may be part of a compound transition, which takes the state machine from one state configuration to another, representing the complete response of the state machine to an occurrence of an event of a particular type."/>
     </eAnnotations>
     <eAnnotations source="duplicates">
+      <eAnnotations source="redefinitionContext">
+        <details key="lowerBound" value="1"/>
+        <details key="upperBound" value="1"/>
+      </eAnnotations>
       <contents xsi:type="ecore:EOperation" name="isConsistentWith" ordered="false"
           lowerBound="1" eType="ecore:EDataType platform:/plugin/org.eclipse.uml2.types/model/Types.ecore#//Boolean">
         <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
@@ -6774,6 +6808,9 @@
       <details key="documentation" value="An operation template parameter exposes an operation as a formal parameter for a template."/>
     </eAnnotations>
     <eAnnotations source="duplicates">
+      <eAnnotations source="parameteredElement">
+        <details key="eType" value="uml::Operation"/>
+      </eAnnotations>
       <contents xsi:type="ecore:EReference" name="parameteredElement" ordered="false"
           lowerBound="1" eType="#//ParameterableElement" eOpposite="#//Operation/%duplicates%/templateParameter">
         <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
@@ -6808,6 +6845,10 @@
       <details key="documentation" value="An extension end is used to tie an extension to a stereotype when extending a metaclass.&#xA;The default multiplicity of an extension end is 0..1."/>
     </eAnnotations>
     <eAnnotations source="duplicates">
+      <eAnnotations source="type">
+        <details key="lowerBound" value="1"/>
+        <details key="eType" value="uml::Stereotype"/>
+      </eAnnotations>
       <contents xsi:type="ecore:EOperation" name="getLower" ordered="false" eType="ecore:EDataType platform:/plugin/org.eclipse.uml2.types/model/Types.ecore#//Integer">
         <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
           <details key="suppressedVisibility" value="true"/>
@@ -6911,6 +6952,10 @@
       <details key="documentation" value="An enumeration literal is a user-defined data value for an enumeration."/>
     </eAnnotations>
     <eAnnotations source="duplicates">
+      <eAnnotations source="classifier">
+        <details key="lowerBound" value="1"/>
+        <details key="upperBound" value="1"/>
+      </eAnnotations>
       <contents xsi:type="ecore:EReference" name="classifier" ordered="false" upperBound="-1"
           eType="#//Enumeration" changeable="false" volatile="true" transient="true"
           derived="true">
@@ -7601,6 +7646,9 @@
       <details key="documentation" value="A classifier template parameter exposes a classifier as a formal template parameter."/>
     </eAnnotations>
     <eAnnotations source="duplicates">
+      <eAnnotations source="parameteredElement">
+        <details key="eType" value="uml::Classifier"/>
+      </eAnnotations>
       <contents xsi:type="ecore:EReference" name="parameteredElement" ordered="false"
           lowerBound="1" eType="#//ParameterableElement" eOpposite="#//Classifier/%duplicates%/templateParameter">
         <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
@@ -10254,6 +10302,10 @@
       <details key="documentation" value="An occurrence specification is the basic semantic unit of interactions. The sequences of occurrences specified by them are the meanings of interactions."/>
     </eAnnotations>
     <eAnnotations source="duplicates">
+      <eAnnotations source="covered">
+        <details key="lowerBound" value="1"/>
+        <details key="upperBound" value="1"/>
+      </eAnnotations>
       <contents xsi:type="ecore:EReference" name="covered" ordered="false" upperBound="-1"
           eType="#//Lifeline">
         <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
@@ -13471,6 +13523,9 @@
       <details key="documentation" value="A duration constraint is a constraint that refers to a duration interval."/>
     </eAnnotations>
     <eAnnotations source="duplicates">
+      <eAnnotations source="specification">
+        <details key="eType" value="uml::DurationInterval"/>
+      </eAnnotations>
       <contents xsi:type="ecore:EReference" name="specification" ordered="false" lowerBound="1"
           eType="#//ValueSpecification" containment="true">
         <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
@@ -13510,6 +13565,9 @@
       <details key="documentation" value="An interval constraint is a constraint that refers to an interval."/>
     </eAnnotations>
     <eAnnotations source="duplicates">
+      <eAnnotations source="specification">
+        <details key="eType" value="uml::Interval"/>
+      </eAnnotations>
       <contents xsi:type="ecore:EReference" name="specification" ordered="false" lowerBound="1"
           eType="#//ValueSpecification" containment="true">
         <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
@@ -13541,6 +13599,12 @@
       <details key="documentation" value="A duration interval defines the range between two durations."/>
     </eAnnotations>
     <eAnnotations source="duplicates">
+      <eAnnotations source="max">
+        <details key="eType" value="uml::Duration"/>
+      </eAnnotations>
+      <eAnnotations source="min">
+        <details key="eType" value="uml::Duration"/>
+      </eAnnotations>
       <contents xsi:type="ecore:EReference" name="max" ordered="false" lowerBound="1"
           eType="#//ValueSpecification">
         <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
@@ -16116,6 +16180,10 @@
       <details key="documentation" value="A state invariant is a runtime constraint on the participants of the interaction. It may be used to specify a variety of different kinds of constraints, such as values of attributes or variables, internal or external states, and so on. A state invariant is an interaction fragment and it is placed on a lifeline."/>
     </eAnnotations>
     <eAnnotations source="duplicates">
+      <eAnnotations source="covered">
+        <details key="lowerBound" value="1"/>
+        <details key="upperBound" value="1"/>
+      </eAnnotations>
       <contents xsi:type="ecore:EReference" name="covered" ordered="false" upperBound="-1"
           eType="#//Lifeline">
         <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
@@ -16220,6 +16288,9 @@
       <details key="documentation" value="A time constraint is a constraint that refers to a time interval."/>
     </eAnnotations>
     <eAnnotations source="duplicates">
+      <eAnnotations source="specification">
+        <details key="eType" value="uml::TimeInterval"/>
+      </eAnnotations>
       <contents xsi:type="ecore:EReference" name="specification" ordered="false" lowerBound="1"
           eType="#//ValueSpecification" containment="true">
         <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
@@ -16241,6 +16312,12 @@
       <details key="documentation" value="A time interval defines the range between two time expressions."/>
     </eAnnotations>
     <eAnnotations source="duplicates">
+      <eAnnotations source="max">
+        <details key="eType" value="uml::TimeExpression"/>
+      </eAnnotations>
+      <eAnnotations source="min">
+        <details key="eType" value="uml::TimeExpression"/>
+      </eAnnotations>
       <contents xsi:type="ecore:EReference" name="max" ordered="false" lowerBound="1"
           eType="#//ValueSpecification">
         <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
diff --git a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/uml.ecore b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/uml.ecore
index 19b120d..e61eb0d 100644
--- a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/uml.ecore
+++ b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/uml.ecore
@@ -20,6 +20,9 @@
   <eClassifiers xsi:type="ecore:EClass" name="PackageableElement" abstract="true"
       eSuperTypes="#//NamedElement #//ParameterableElement">
     <eAnnotations source="duplicates">
+      <eAnnotations source="visibility">
+        <details key="lowerBound" value="1"/>
+      </eAnnotations>
       <contents xsi:type="ecore:EAttribute" name="visibility" ordered="false" eType="#//VisibilityKind"
           defaultValueLiteral="public">
         <eAnnotations source="redefines" references="#//NamedElement/visibility"/>
@@ -340,6 +343,12 @@
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="Classifier" abstract="true" eSuperTypes="#//Namespace #//RedefinableElement #//Type #//TemplateableElement">
     <eAnnotations source="duplicates">
+      <eAnnotations source="ownedTemplateSignature">
+        <details key="eType" value="uml::RedefinableTemplateSignature"/>
+      </eAnnotations>
+      <eAnnotations source="templateParameter">
+        <details key="eType" value="uml::ClassifierTemplateParameter"/>
+      </eAnnotations>
       <contents xsi:type="ecore:EOperation" name="isTemplate" ordered="false" lowerBound="1"
           eType="ecore:EDataType http://www.eclipse.org/uml2/4.0.0/Types#//Boolean">
         <eAnnotations source="redefines" references="#//TemplateableElement/isTemplate"/>
@@ -1080,6 +1089,10 @@
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="Extension" eSuperTypes="#//Association">
     <eAnnotations source="duplicates">
+      <eAnnotations source="ownedEnd">
+        <details key="lowerBound" value="1"/>
+        <details key="upperBound" value="1"/>
+      </eAnnotations>
       <contents xsi:type="ecore:EReference" name="ownedEnd" upperBound="-1" eType="#//ExtensionEnd"
           containment="true">
         <eAnnotations source="redefines" references="#//Association/ownedEnd"/>
@@ -1521,6 +1534,9 @@
   <eClassifiers xsi:type="ecore:EClass" name="ConnectableElement" abstract="true"
       eSuperTypes="#//TypedElement #//ParameterableElement">
     <eAnnotations source="duplicates">
+      <eAnnotations source="templateParameter">
+        <details key="eType" value="uml::ConnectableElementTemplateParameter"/>
+      </eAnnotations>
       <contents xsi:type="ecore:EReference" name="templateParameter" ordered="false"
           eType="#//TemplateParameter" eOpposite="#//ConnectableElementTemplateParameter/%duplicates%/parameteredElement">
         <eAnnotations source="redefines" references="#//ParameterableElement/templateParameter"/>
@@ -1578,6 +1594,9 @@
   <eClassifiers xsi:type="ecore:EClass" name="ConnectableElementTemplateParameter"
       eSuperTypes="#//TemplateParameter">
     <eAnnotations source="duplicates">
+      <eAnnotations source="parameteredElement">
+        <details key="eType" value="uml::ConnectableElement"/>
+      </eAnnotations>
       <contents xsi:type="ecore:EReference" name="parameteredElement" ordered="false"
           lowerBound="1" eType="#//ParameterableElement" eOpposite="#//ConnectableElement/%duplicates%/templateParameter">
         <eAnnotations source="redefines" references="#//TemplateParameter/parameteredElement"/>
@@ -1677,6 +1696,9 @@
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="Operation" eSuperTypes="#//BehavioralFeature #//ParameterableElement #//TemplateableElement">
     <eAnnotations source="duplicates">
+      <eAnnotations source="templateParameter">
+        <details key="eType" value="uml::OperationTemplateParameter"/>
+      </eAnnotations>
       <contents xsi:type="ecore:EOperation" name="isConsistentWith" ordered="false"
           lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/uml2/4.0.0/Types#//Boolean">
         <eAnnotations source="redefines" references="#//RedefinableElement/isConsistentWith"/>
@@ -2236,6 +2258,10 @@
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="Region" eSuperTypes="#//Namespace #//RedefinableElement">
     <eAnnotations source="duplicates">
+      <eAnnotations source="redefinitionContext">
+        <details key="lowerBound" value="1"/>
+        <details key="upperBound" value="1"/>
+      </eAnnotations>
       <contents xsi:type="ecore:EOperation" name="isConsistentWith" ordered="false"
           lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/uml2/4.0.0/Types#//Boolean">
         <eAnnotations source="redefines" references="#//RedefinableElement/isConsistentWith"/>
@@ -2314,6 +2340,10 @@
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="State" eSuperTypes="#//Namespace #//RedefinableElement #//Vertex">
     <eAnnotations source="duplicates">
+      <eAnnotations source="redefinitionContext">
+        <details key="lowerBound" value="1"/>
+        <details key="upperBound" value="1"/>
+      </eAnnotations>
       <contents xsi:type="ecore:EOperation" name="containingStateMachine" ordered="false"
           lowerBound="1" eType="#//StateMachine">
         <eAnnotations source="redefines" references="#//Vertex/containingStateMachine"/>
@@ -2576,6 +2606,10 @@
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="Transition" eSuperTypes="#//Namespace #//RedefinableElement">
     <eAnnotations source="duplicates">
+      <eAnnotations source="redefinitionContext">
+        <details key="lowerBound" value="1"/>
+        <details key="upperBound" value="1"/>
+      </eAnnotations>
       <contents xsi:type="ecore:EOperation" name="isConsistentWith" ordered="false"
           lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/uml2/4.0.0/Types#//Boolean">
         <eAnnotations source="redefines" references="#//RedefinableElement/isConsistentWith"/>
@@ -2903,6 +2937,9 @@
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="OperationTemplateParameter" eSuperTypes="#//TemplateParameter">
     <eAnnotations source="duplicates">
+      <eAnnotations source="parameteredElement">
+        <details key="eType" value="uml::Operation"/>
+      </eAnnotations>
       <contents xsi:type="ecore:EReference" name="parameteredElement" ordered="false"
           lowerBound="1" eType="#//ParameterableElement" eOpposite="#//Operation/%duplicates%/templateParameter">
         <eAnnotations source="redefines" references="#//TemplateParameter/parameteredElement"/>
@@ -2916,6 +2953,10 @@
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="ExtensionEnd" eSuperTypes="#//Property">
     <eAnnotations source="duplicates">
+      <eAnnotations source="type">
+        <details key="lowerBound" value="1"/>
+        <details key="eType" value="uml::Stereotype"/>
+      </eAnnotations>
       <contents xsi:type="ecore:EOperation" name="getLower" ordered="false" eType="ecore:EDataType http://www.eclipse.org/uml2/4.0.0/Types#//Integer">
         <eAnnotations source="redefines" references="#//MultiplicityElement/getLower"/>
       </contents>
@@ -2966,6 +3007,10 @@
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="EnumerationLiteral" eSuperTypes="#//InstanceSpecification">
     <eAnnotations source="duplicates">
+      <eAnnotations source="classifier">
+        <details key="lowerBound" value="1"/>
+        <details key="upperBound" value="1"/>
+      </eAnnotations>
       <contents xsi:type="ecore:EReference" name="classifier" ordered="false" upperBound="-1"
           eType="#//Enumeration" changeable="false" volatile="true" transient="true"
           derived="true">
@@ -3293,6 +3338,9 @@
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="ClassifierTemplateParameter" eSuperTypes="#//TemplateParameter">
     <eAnnotations source="duplicates">
+      <eAnnotations source="parameteredElement">
+        <details key="eType" value="uml::Classifier"/>
+      </eAnnotations>
       <contents xsi:type="ecore:EReference" name="parameteredElement" ordered="false"
           lowerBound="1" eType="#//ParameterableElement" eOpposite="#//Classifier/%duplicates%/templateParameter">
         <eAnnotations source="redefines" references="#//TemplateParameter/parameteredElement"/>
@@ -4539,6 +4587,10 @@
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="OccurrenceSpecification" eSuperTypes="#//InteractionFragment">
     <eAnnotations source="duplicates">
+      <eAnnotations source="covered">
+        <details key="lowerBound" value="1"/>
+        <details key="upperBound" value="1"/>
+      </eAnnotations>
       <contents xsi:type="ecore:EReference" name="covered" ordered="false" upperBound="-1"
           eType="#//Lifeline">
         <eAnnotations source="redefines" references="#//InteractionFragment/covered"/>
@@ -5987,6 +6039,9 @@
   <eClassifiers xsi:type="ecore:EClass" name="Observation" abstract="true" eSuperTypes="#//PackageableElement"/>
   <eClassifiers xsi:type="ecore:EClass" name="DurationConstraint" eSuperTypes="#//IntervalConstraint">
     <eAnnotations source="duplicates">
+      <eAnnotations source="specification">
+        <details key="eType" value="uml::DurationInterval"/>
+      </eAnnotations>
       <contents xsi:type="ecore:EReference" name="specification" ordered="false" lowerBound="1"
           eType="#//ValueSpecification" containment="true">
         <eAnnotations source="redefines" references="#//IntervalConstraint/%duplicates%/specification #//Constraint/specification"/>
@@ -6006,6 +6061,9 @@
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="IntervalConstraint" eSuperTypes="#//Constraint">
     <eAnnotations source="duplicates">
+      <eAnnotations source="specification">
+        <details key="eType" value="uml::Interval"/>
+      </eAnnotations>
       <contents xsi:type="ecore:EReference" name="specification" ordered="false" lowerBound="1"
           eType="#//ValueSpecification" containment="true">
         <eAnnotations source="redefines" references="#//Constraint/specification"/>
@@ -6020,6 +6078,12 @@
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="DurationInterval" eSuperTypes="#//Interval">
     <eAnnotations source="duplicates">
+      <eAnnotations source="max">
+        <details key="eType" value="uml::Duration"/>
+      </eAnnotations>
+      <eAnnotations source="min">
+        <details key="eType" value="uml::Duration"/>
+      </eAnnotations>
       <contents xsi:type="ecore:EReference" name="max" ordered="false" lowerBound="1"
           eType="#//ValueSpecification">
         <eAnnotations source="redefines" references="#//Interval/max"/>
@@ -7228,6 +7292,10 @@
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="StateInvariant" eSuperTypes="#//InteractionFragment">
     <eAnnotations source="duplicates">
+      <eAnnotations source="covered">
+        <details key="lowerBound" value="1"/>
+        <details key="upperBound" value="1"/>
+      </eAnnotations>
       <contents xsi:type="ecore:EReference" name="covered" ordered="false" upperBound="-1"
           eType="#//Lifeline">
         <eAnnotations source="redefines" references="#//InteractionFragment/covered"/>
@@ -7281,6 +7349,9 @@
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="TimeConstraint" eSuperTypes="#//IntervalConstraint">
     <eAnnotations source="duplicates">
+      <eAnnotations source="specification">
+        <details key="eType" value="uml::TimeInterval"/>
+      </eAnnotations>
       <contents xsi:type="ecore:EReference" name="specification" ordered="false" lowerBound="1"
           eType="#//ValueSpecification" containment="true">
         <eAnnotations source="redefines" references="#//IntervalConstraint/%duplicates%/specification #//Constraint/specification"/>
@@ -7292,6 +7363,12 @@
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="TimeInterval" eSuperTypes="#//Interval">
     <eAnnotations source="duplicates">
+      <eAnnotations source="max">
+        <details key="eType" value="uml::TimeExpression"/>
+      </eAnnotations>
+      <eAnnotations source="min">
+        <details key="eType" value="uml::TimeExpression"/>
+      </eAnnotations>
       <contents xsi:type="ecore:EReference" name="max" ordered="false" lowerBound="1"
           eType="#//ValueSpecification">
         <eAnnotations source="redefines" references="#//Interval/max"/>
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 a2a7b4a..1c8d0ab 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
@@ -10,7 +10,7 @@
  *   Kenn Hussey (Embarcadero Technologies) - 199624, 184249, 204406, 208125, 204200, 213218, 213903, 220669, 208016, 226396, 271470
  *   Nicolas Rouquette (JPL) - 260120, 313837
  *   Kenn Hussey - 286329, 313601, 314971, 344907, 236184, 335125
- *   Kenn Hussey (CEA) - 327039, 358792, 364419, 366350, 307343, 382637, 273949, 389542, 389495, 316165, 392833, 399544, 322715, 163556
+ *   Kenn Hussey (CEA) - 327039, 358792, 364419, 366350, 307343, 382637, 273949, 389542, 389495, 316165, 392833, 399544, 322715, 163556, 212765
  *   Yann Tanguy (CEA) - 350402
  *   Christian W. Damus (CEA) - 392833
  *
@@ -5153,6 +5153,13 @@
 													otherEStructuralFeature}));
 									}
 
+									int lowerBound = eStructuralFeature
+										.getLowerBound();
+									int upperBound = eStructuralFeature
+										.getUpperBound();
+									EClassifier eType = eStructuralFeature
+										.getEType();
+
 									if (!featuresToDuplicate
 										.contains(eStructuralFeature)) {
 
@@ -5179,9 +5186,11 @@
 											otherEStructuralFeature);
 									}
 
-									EList<EObject> redefinedFeatures = getEAnnotation(
+									EAnnotation redefinesAnnotation = getEAnnotation(
 										eStructuralFeature,
-										ANNOTATION__REDEFINES, true)
+										ANNOTATION__REDEFINES, true);
+
+									EList<EObject> redefinedFeatures = redefinesAnnotation
 										.getReferences();
 
 									if (!redefinedFeatures
@@ -5190,6 +5199,34 @@
 										redefinedFeatures
 											.add(otherEStructuralFeature);
 									}
+
+									EMap<String, String> redefinitionDetails = redefinesAnnotation
+										.getDetails();
+
+									if (eStructuralFeature.getLowerBound() != lowerBound) {
+										redefinitionDetails
+											.put(
+												EcorePackage.Literals.ETYPED_ELEMENT__LOWER_BOUND
+													.getName(), String
+													.valueOf(lowerBound));
+									}
+
+									if (eStructuralFeature.getUpperBound() != upperBound) {
+										redefinitionDetails
+											.put(
+												EcorePackage.Literals.ETYPED_ELEMENT__UPPER_BOUND
+													.getName(), String
+													.valueOf(upperBound));
+									}
+
+									if (eStructuralFeature.getEType() != eType) {
+										redefinitionDetails
+											.put(
+												EcorePackage.Literals.ETYPED_ELEMENT__ETYPE
+													.getName(),
+												getQualifiedName(eType,
+													NamedElement.SEPARATOR));
+									}
 								} else if (OPTION__DISCARD.equals(options
 									.get(OPTION__DUPLICATE_FEATURES))) {
 
@@ -5245,9 +5282,25 @@
 			}
 
 			for (EStructuralFeature.Internal eStructuralFeature : featuresToDuplicate) {
-				getEAnnotation(eStructuralFeature.getEContainingClass(),
-					ANNOTATION__DUPLICATES, true).getContents().add(
-					eStructuralFeature);
+				EAnnotation duplicatesAnnotation = getEAnnotation(
+					eStructuralFeature.getEContainingClass(),
+					ANNOTATION__DUPLICATES, true);
+				duplicatesAnnotation.getContents().add(eStructuralFeature);
+
+				EAnnotation redefinesAnnotation = eStructuralFeature
+					.getEAnnotation(ANNOTATION__REDEFINES);
+
+				if (redefinesAnnotation != null) {
+					EMap<String, String> redefinitionDetails = redefinesAnnotation
+						.getDetails();
+
+					if (!redefinitionDetails.isEmpty()) {
+						getEAnnotation(duplicatesAnnotation,
+							eStructuralFeature.getName(), true).getDetails()
+							.putAll(redefinitionDetails);
+						redefinitionDetails.clear();
+					}
+				}
 
 				EReference eOpposite = eStructuralFeature.getEOpposite();
 
diff --git a/tests/org.eclipse.uml2.uml.tests/src/org/eclipse/uml2/uml/tests/ElementTest.java b/tests/org.eclipse.uml2.uml.tests/src/org/eclipse/uml2/uml/tests/ElementTest.java
index 272a66c..1b230c4 100644
--- a/tests/org.eclipse.uml2.uml.tests/src/org/eclipse/uml2/uml/tests/ElementTest.java
+++ b/tests/org.eclipse.uml2.uml.tests/src/org/eclipse/uml2/uml/tests/ElementTest.java
@@ -335,7 +335,8 @@
 	 * @generated NOT
 	 */
 	public void testAddKeyword__String() {
-		assertNull(getFixture().getEAnnotation(UMLUtil.UML2_UML_PACKAGE_2_0_NS_URI));
+		assertNull(getFixture().getEAnnotation(
+			UMLUtil.UML2_UML_PACKAGE_2_0_NS_URI));
 
 		assertTrue(getFixture().addKeyword(getName()));