diff --git a/org.eclipse.rmf.reqif10.pror.editor/src/org/eclipse/rmf/reqif10/pror/editor/agilegrid/AbstractProrCellEditorProvider.java b/org.eclipse.rmf.reqif10.pror.editor/src/org/eclipse/rmf/reqif10/pror/editor/agilegrid/AbstractProrCellEditorProvider.java
index 742b694..92b1975 100644
--- a/org.eclipse.rmf.reqif10.pror.editor/src/org/eclipse/rmf/reqif10/pror/editor/agilegrid/AbstractProrCellEditorProvider.java
+++ b/org.eclipse.rmf.reqif10.pror.editor/src/org/eclipse/rmf/reqif10/pror/editor/agilegrid/AbstractProrCellEditorProvider.java
@@ -76,7 +76,7 @@
 
 		if (dd instanceof DatatypeDefinitionBoolean) {
 			return new ProrCheckboxCellEditor(agileGrid, editingDomain,
-					parent);
+					parent, affectedObject);
 		}
 		else if (dd instanceof DatatypeDefinitionDate) {
 			return new ProrDateCellEditor(agileGrid, editingDomain,
@@ -110,11 +110,11 @@
 					.getAttributeDefinition(value)).isMultiValued();
 			if (multiValued == null || multiValued.booleanValue() == false) {
 				return new ProrEnumerationSingleValueCellEditor(agileGrid, dde,
-						parent,
+						parent, affectedObject,
 						editingDomain, adapterFactory);
 			} else {
 				return new ProrEnumerationMultiValueCellEditor(agileGrid, dde,
-						parent,
+						parent, affectedObject,
 						editingDomain, adapterFactory);
 			}
 		} else if (dd instanceof DatatypeDefinitionXHTML) {
diff --git a/org.eclipse.rmf.reqif10.pror.editor/src/org/eclipse/rmf/reqif10/pror/editor/agilegrid/ProrCellEditor.java b/org.eclipse.rmf.reqif10.pror.editor/src/org/eclipse/rmf/reqif10/pror/editor/agilegrid/ProrCellEditor.java
index 171a949..ea13660 100644
--- a/org.eclipse.rmf.reqif10.pror.editor/src/org/eclipse/rmf/reqif10/pror/editor/agilegrid/ProrCellEditor.java
+++ b/org.eclipse.rmf.reqif10.pror.editor/src/org/eclipse/rmf/reqif10/pror/editor/agilegrid/ProrCellEditor.java
@@ -43,7 +43,7 @@
 	public ProrCellEditor(AgileGrid agileGrid, EditingDomain editingDomain,
 			Object parent,
 			Object affectedObject) {
-		super(agileGrid);
+		super(agileGrid, SWT.WRAP);
 		this.editingDomain = editingDomain;
 		this.affectedObject = affectedObject;
 		this.parent = parent;
diff --git a/org.eclipse.rmf.reqif10.pror.editor/src/org/eclipse/rmf/reqif10/pror/editor/agilegrid/ProrCheckboxCellEditor.java b/org.eclipse.rmf.reqif10.pror.editor/src/org/eclipse/rmf/reqif10/pror/editor/agilegrid/ProrCheckboxCellEditor.java
index b75abe7..b3ac23c 100644
--- a/org.eclipse.rmf.reqif10.pror.editor/src/org/eclipse/rmf/reqif10/pror/editor/agilegrid/ProrCheckboxCellEditor.java
+++ b/org.eclipse.rmf.reqif10.pror.editor/src/org/eclipse/rmf/reqif10/pror/editor/agilegrid/ProrCheckboxCellEditor.java
@@ -10,6 +10,10 @@
  ******************************************************************************/
 package org.eclipse.rmf.reqif10.pror.editor.agilegrid;
 
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
 import org.agilemore.agilegrid.AgileGrid;
 import org.agilemore.agilegrid.CellEditor;
 import org.agilemore.agilegrid.EditorActivationEvent;
@@ -39,12 +43,14 @@
 	private EditingDomain domain;
 	private AttributeValueBoolean attributeValue;
 	private Object parent;
+	private Object affectedObject;
 
 	public ProrCheckboxCellEditor(AgileGrid agileGrid, EditingDomain domain,
-			Object parent) {
+			Object parent, Object affectedObject) {
 		super(agileGrid, SWT.NONE);
 		this.domain = domain;
 		this.parent = parent;
+		this.affectedObject = affectedObject;
 	}
 
 	/**
@@ -72,7 +78,17 @@
 		}
 
 		AttributeValueBoolean av = (AttributeValueBoolean) value;
-		CompoundCommand cmd = new CompoundCommand();
+
+		final List<? super Object> affectedElements = new ArrayList<Object>();
+		affectedElements.add(affectedObject);
+
+		CompoundCommand cmd = new CompoundCommand() {
+			@Override
+			public Collection<?> getAffectedObjects() {
+				return affectedElements;
+			}
+		};
+
 		if (av.eContainer() == null) {
 			cmd.append(AddCommand
 					.create(domain,
diff --git a/org.eclipse.rmf.reqif10.pror.editor/src/org/eclipse/rmf/reqif10/pror/editor/agilegrid/ProrEnumerationMultiValueCellEditor.java b/org.eclipse.rmf.reqif10.pror.editor/src/org/eclipse/rmf/reqif10/pror/editor/agilegrid/ProrEnumerationMultiValueCellEditor.java
index cda6641..725c695 100644
--- a/org.eclipse.rmf.reqif10.pror.editor/src/org/eclipse/rmf/reqif10/pror/editor/agilegrid/ProrEnumerationMultiValueCellEditor.java
+++ b/org.eclipse.rmf.reqif10.pror.editor/src/org/eclipse/rmf/reqif10/pror/editor/agilegrid/ProrEnumerationMultiValueCellEditor.java
@@ -50,16 +50,18 @@
 	private AttributeValueEnumeration attributeValue;
 	private final EditingDomain editingDomain;
 	private Object parent;
+	private Object affectedObject;
 
 	public ProrEnumerationMultiValueCellEditor(AgileGrid agileGrid,
 			DatatypeDefinitionEnumeration dde,
-			Object parent, EditingDomain editingDomain,
+			Object parent, Object affectedObject, EditingDomain editingDomain,
 			AdapterFactory adapterFactory) {
 		super(agileGrid);
 		this.dde = dde;
 		this.editingDomain = editingDomain;
 		this.adapterFactory = adapterFactory;
 		this.parent = parent;
+		this.affectedObject = affectedObject;
 		populateItemList(dde);
 	}
 
@@ -111,7 +113,7 @@
 		CompoundCommand cmd = new CompoundCommand("Set Enumeration") {
 			public java.util.Collection<?> getAffectedObjects() {
 				ArrayList<? super Object> list = new ArrayList<Object>();
-				list.add(parent);
+				list.add(affectedObject);
 				return list;
 			};
 		};
diff --git a/org.eclipse.rmf.reqif10.pror.editor/src/org/eclipse/rmf/reqif10/pror/editor/agilegrid/ProrEnumerationSingleValueCellEditor.java b/org.eclipse.rmf.reqif10.pror.editor/src/org/eclipse/rmf/reqif10/pror/editor/agilegrid/ProrEnumerationSingleValueCellEditor.java
index f19db09..d4a944a 100644
--- a/org.eclipse.rmf.reqif10.pror.editor/src/org/eclipse/rmf/reqif10/pror/editor/agilegrid/ProrEnumerationSingleValueCellEditor.java
+++ b/org.eclipse.rmf.reqif10.pror.editor/src/org/eclipse/rmf/reqif10/pror/editor/agilegrid/ProrEnumerationSingleValueCellEditor.java
@@ -36,15 +36,17 @@
 	private final EditingDomain editingDomain;
 	private AttributeValueEnumeration attributeValue;
 	private Object parent;
+	private Object affectedObject;
 
 	public ProrEnumerationSingleValueCellEditor(AgileGrid agileGrid,
 			DatatypeDefinitionEnumeration dde,
-			Object parent, EditingDomain editingDomain,
+			Object parent, Object affectedObject, EditingDomain editingDomain,
 			AdapterFactory adapterFactory) {
 		super(agileGrid);
 		this.editingDomain = editingDomain;
 		this.adapterFactory = adapterFactory;
 		this.parent = parent;
+		this.affectedObject = affectedObject;
 
 		Combo combo = (Combo) getControl();
 		String[] items = populateItemList(dde);
@@ -84,7 +86,7 @@
 		CompoundCommand cmd = new CompoundCommand("Set Enumeration") {
 			public java.util.Collection<?> getAffectedObjects() {
 				List<? super Object> list = new ArrayList<Object>();
-				list.add(parent);
+				list.add(affectedObject);
 				return list;
 			};
 		};
diff --git a/org.eclipse.rmf.reqif10.pror.editor/src/org/eclipse/rmf/reqif10/pror/editor/agilegrid/ProrXhtmlSimplifiedCellEditor.java b/org.eclipse.rmf.reqif10.pror.editor/src/org/eclipse/rmf/reqif10/pror/editor/agilegrid/ProrXhtmlSimplifiedCellEditor.java
index 4aff5ea..323944f 100644
--- a/org.eclipse.rmf.reqif10.pror.editor/src/org/eclipse/rmf/reqif10/pror/editor/agilegrid/ProrXhtmlSimplifiedCellEditor.java
+++ b/org.eclipse.rmf.reqif10.pror.editor/src/org/eclipse/rmf/reqif10/pror/editor/agilegrid/ProrXhtmlSimplifiedCellEditor.java
@@ -10,6 +10,10 @@
  ******************************************************************************/
 package org.eclipse.rmf.reqif10.pror.editor.agilegrid;
 
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
 import org.agilemore.agilegrid.AgileGrid;
 import org.eclipse.emf.common.command.Command;
 import org.eclipse.emf.common.command.CompoundCommand;
@@ -26,7 +30,6 @@
 import org.eclipse.rmf.reqif10.pror.editor.presentation.Reqif10EditorPlugin;
 import org.eclipse.rmf.reqif10.pror.util.ProrXhtmlSimplifiedHelper;
 import org.eclipse.rmf.reqif10.xhtml.XhtmlDivType;
-import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Display;
 
 /**
@@ -39,7 +42,7 @@
 	public ProrXhtmlSimplifiedCellEditor(AgileGrid agileGrid,
 			EditingDomain editingDomain, Object parent,
 			Object affectedObject) {
-		super(agileGrid, editingDomain, parent, SWT.WRAP);
+		super(agileGrid, editingDomain, parent, affectedObject);
 		this.parent = parent;
 	}
 
@@ -51,7 +54,16 @@
 				.stringToSimplifiedXhtml(text.getText());
 		
 		XhtmlContent origTheValue = attributeValue.getTheValue();
-		CompoundCommand compoundCommand = new CompoundCommand();
+		
+		final List<? super Object> affectedObjects = new ArrayList<Object>();
+		affectedObjects.add(affectedObject);
+		
+		CompoundCommand compoundCommand = new CompoundCommand() {
+			@Override
+			public Collection<?> getAffectedObjects() {
+				return affectedObjects;
+			}
+		};
 
 		// Set parent if necessary
 		if (attributeValue.eContainer() == null) {
