fix change recorder init in SemanticPEC
change API in context factory
diff --git a/plugins/org.eclipse.emf.eef.runtime/src/org/eclipse/emf/eef/runtime/context/PropertiesEditingContextFactory.java b/plugins/org.eclipse.emf.eef.runtime/src/org/eclipse/emf/eef/runtime/context/PropertiesEditingContextFactory.java
index a99674c..eef8be8 100644
--- a/plugins/org.eclipse.emf.eef.runtime/src/org/eclipse/emf/eef/runtime/context/PropertiesEditingContextFactory.java
+++ b/plugins/org.eclipse.emf.eef.runtime/src/org/eclipse/emf/eef/runtime/context/PropertiesEditingContextFactory.java
@@ -14,6 +14,7 @@
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
 import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.eef.runtime.internal.context.ReflectivePropertiesEditingContext;
 import org.eclipse.emf.eef.runtime.notify.PropertiesEditingEvent;
 import org.eclipse.emf.eef.runtime.services.EEFService;
 
@@ -109,7 +110,7 @@
 	 *            context.
 	 * @return the created {@link PropertiesEditingContext}.
 	 */
-	PropertiesEditingContext createSemanticPropertiesEditingContext(PropertiesEditingContext parentContext, PropertiesEditingEvent editingEvent);
+	SemanticPropertiesEditingContext createSemanticPropertiesEditingContext(PropertiesEditingContext parentContext, PropertiesEditingEvent editingEvent);
 
 	/**
 	 * Creates a reflective {@link PropertiesEditingContext} usable to preview a
@@ -121,7 +122,7 @@
 	 *            the view to preview.
 	 * @return the create {@link PropertiesEditingContext}.
 	 */
-	PropertiesEditingContext createReflectivePropertiesEditingContext(AdapterFactory adapterFactory, EObject view);
+	ReflectivePropertiesEditingContext createReflectivePropertiesEditingContext(AdapterFactory adapterFactory, EObject view);
 
 	/**
 	 * Creates a reflective {@link PropertiesEditingContext} usable to preview a
@@ -134,6 +135,6 @@
 	 *            the view to preview.
 	 * @return the create {@link PropertiesEditingContext}.
 	 */
-	PropertiesEditingContext createReflectivePropertiesEditingContext(PropertiesEditingContext parentContext, EObject view);
+	ReflectivePropertiesEditingContext createReflectivePropertiesEditingContext(PropertiesEditingContext parentContext, EObject view);
 
 }
diff --git a/plugins/org.eclipse.emf.eef.runtime/src/org/eclipse/emf/eef/runtime/internal/context/PropertiesEditingContextFactoryImpl.java b/plugins/org.eclipse.emf.eef.runtime/src/org/eclipse/emf/eef/runtime/internal/context/PropertiesEditingContextFactoryImpl.java
index 487d4f8..b2f958d 100644
--- a/plugins/org.eclipse.emf.eef.runtime/src/org/eclipse/emf/eef/runtime/internal/context/PropertiesEditingContextFactoryImpl.java
+++ b/plugins/org.eclipse.emf.eef.runtime/src/org/eclipse/emf/eef/runtime/internal/context/PropertiesEditingContextFactoryImpl.java
@@ -130,7 +130,7 @@
 			context = new DomainPropertiesEditingContext(parentContext, eObject);
 		} else if (parentContext instanceof EObjectPropertiesEditingContext) {
 			context = new EObjectPropertiesEditingContext(parentContext, eObject);
-		} else if (parentContext instanceof SemanticPropertiesEditingContext){
+		} else if (parentContext instanceof SemanticPropertiesEditingContext) {
 			context = new EObjectPropertiesEditingContext(parentContext, eObject);
 		} else {
 			throw new IllegalArgumentException("Unable to process this context as a parent");
@@ -170,7 +170,7 @@
 	 * @see org.eclipse.emf.eef.runtime.context.PropertiesEditingContextFactory#createSemanticPropertiesEditingContext(org.eclipse.emf.eef.runtime.context.PropertiesEditingContext,
 	 *      org.eclipse.emf.eef.runtime.notify.PropertiesEditingEvent)
 	 */
-	public PropertiesEditingContext createSemanticPropertiesEditingContext(PropertiesEditingContext parentContext, PropertiesEditingEvent editingEvent) {
+	public SemanticPropertiesEditingContext createSemanticPropertiesEditingContext(PropertiesEditingContext parentContext, PropertiesEditingEvent editingEvent) {
 		SemanticPropertiesEditingContext context;
 		if (parentContext instanceof DomainAwarePropertiesEditingContext) {
 			context = new SemanticDomainPropertiesEditingContext((DomainAwarePropertiesEditingContext) parentContext, editingEvent);
@@ -186,7 +186,7 @@
 	 * @see org.eclipse.emf.eef.runtime.context.PropertiesEditingContextFactory#createReflectivePropertiesEditingContext(org.eclipse.emf.common.notify.AdapterFactory,
 	 *      org.eclipse.emf.ecore.EObject)
 	 */
-	public PropertiesEditingContext createReflectivePropertiesEditingContext(AdapterFactory adapterFactory, EObject view) {
+	public ReflectivePropertiesEditingContext createReflectivePropertiesEditingContext(AdapterFactory adapterFactory, EObject view) {
 		ReflectivePropertiesEditingContext context = new ReflectivePropertiesEditingContext(adapterFactory, view);
 		context.setEMFServiceProvider(emfServiceProvider);
 		context.setEEFEditingServiceProvider(eefEditingServiceProvider);
@@ -202,7 +202,7 @@
 	 * @see org.eclipse.emf.eef.runtime.context.PropertiesEditingContextFactory#createReflectivePropertiesEditingContext(context,
 	 *      org.eclipse.emf.ecore.EObject)
 	 */
-	public PropertiesEditingContext createReflectivePropertiesEditingContext(PropertiesEditingContext parentContext, EObject view) {
+	public ReflectivePropertiesEditingContext createReflectivePropertiesEditingContext(PropertiesEditingContext parentContext, EObject view) {
 		ReflectivePropertiesEditingContext context = new ReflectivePropertiesEditingContext(parentContext, view);
 		context.setEMFServiceProvider(emfServiceProvider);
 		context.setEEFEditingServiceProvider(eefEditingServiceProvider);
diff --git a/plugins/org.eclipse.emf.eef.runtime/src/org/eclipse/emf/eef/runtime/internal/context/SemanticPropertiesEditingContextImpl.java b/plugins/org.eclipse.emf.eef.runtime/src/org/eclipse/emf/eef/runtime/internal/context/SemanticPropertiesEditingContextImpl.java
index adeda8e..47cd472 100644
--- a/plugins/org.eclipse.emf.eef.runtime/src/org/eclipse/emf/eef/runtime/internal/context/SemanticPropertiesEditingContextImpl.java
+++ b/plugins/org.eclipse.emf.eef.runtime/src/org/eclipse/emf/eef/runtime/internal/context/SemanticPropertiesEditingContextImpl.java
@@ -43,7 +43,6 @@
 		this.editingEvent = editingEvent;
 		this.options = new ContextOptions(parentContext.getOptions());
 		this.editingRecorder = new EditingRecorderImpl();
-		editingRecorder.initRecording(parentContext.getEditingComponent().getEObject());
 	}
 
 	/**
@@ -87,7 +86,9 @@
 	 * @see org.eclipse.emf.eef.runtime.context.PropertiesEditingContext#startEditing()
 	 */
 	public void startEditing() {
-		editingRecorder.initRecording(parentContext.getEditingComponent().getEObject());
+		if (editingRecorder.getChangeRecorder() == null || (editingRecorder.getChangeRecorder() != null && !editingRecorder.getChangeRecorder().isRecording())) {
+			editingRecorder.initRecording(parentContext.getEditingComponent().getEObject());
+		}
 	}
 
 	/**