diff --git a/de.bmotionstudio.gef.editor/plugin.xml b/de.bmotionstudio.gef.editor/plugin.xml
index f7e7118ba7f96773030a3b4f474eceb4995ecdc6..f47f0425c14f9414dd6c957beeab37d8df344047 100644
--- a/de.bmotionstudio.gef.editor/plugin.xml
+++ b/de.bmotionstudio.gef.editor/plugin.xml
@@ -61,6 +61,21 @@
             name="Observer"
             restorable="true">
       </view>
+      <view
+            allowMultiple="true"
+            category="de.bmotionstudio.views"
+            class="de.bmotionstudio.gef.editor.VisualizationView"
+            id="de.bmotionstudio.gef.editor.VisualizationView"
+            name="Visualization"
+            restorable="true">
+      </view>
+      <view
+            category="de.bmotionstudio.views"
+            class="de.bmotionstudio.gef.editor.BMSPaletteView"
+            id="de.bmotionstudio.gef.editor.PaletteView"
+            name="Palette"
+            restorable="true">
+      </view>
    </extension>
    <extension
          point="org.eclipse.ui.menus">
@@ -357,6 +372,10 @@
             class="de.bmotionstudio.gef.editor.observer.ColumnObserver"
             name="Column Observer">
       </observer>
+      <observer
+            class="de.bmotionstudio.gef.editor.observer.CSPEventObserver"
+            name="CSP Event Observer">
+      </observer>
    </extension>
    <extension
          point="de.bmotionstudio.gef.editor.schedulerEvent">
@@ -397,6 +416,10 @@
 	        service="de.bmotionstudio.gef.editor.eventb.EventBLanguageService"
             id="EventB">
       </language>
+      <language
+            id="CSP"
+            service="de.bmotionstudio.gef.editor.csp.CSPLanguageService">
+      </language>
    </extension>
    <extension
          point="de.bmotionstudio.gef.editor.includeObserver">
@@ -651,6 +674,21 @@
                   id="de.bmotionstudio.gef.editor.observer.SwitchCoordinates">
             </observer>
          </control>
+      </include>
+      <include
+            language="CSP">
+         <control
+               id="de.bmotionstudio.gef.editor.rectangle">
+            <observer
+                  id="de.bmotionstudio.gef.editor.observer.CSPEventObserver">
+            </observer>
+         </control>
+         <control
+               id="de.bmotionstudio.gef.editor.tank">
+            <observer
+                  id="de.bmotionstudio.gef.editor.observer.CSPEventObserver">
+            </observer>
+         </control>
       </include>   
    </extension>   
 </plugin>
diff --git a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/Animation.java b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/Animation.java
index 0725ead409ccbc55cc3a602e498d3189b6ba9b9c..4f079d5b435eed1db3df4a6b7d9255ad9b08439b 100644
--- a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/Animation.java
+++ b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/Animation.java
@@ -30,6 +30,8 @@ public class Animation implements IAnimationListener {
 
 	private Animator animator;
 
+	private Operation lastExecutedOperation;
+
 	private final Map<String, Operation> currentStateOperations;
 
 	private final Map<String, EvaluationElement> cachedEvalElements = new HashMap<String, EvaluationElement>();
@@ -58,19 +60,18 @@ public class Animation implements IAnimationListener {
 
 	@Override
 	public void currentStateChanged(State currentState, Operation operation) {
+		this.lastExecutedOperation = operation;
 		// set new state and remember old state, if possible
 		setNewState(currentState);
-		updateCachedExpressions(currentState);
-		if (currentState.isInitialized()) {
-
+		// updateCachedExpressions(currentState);
+		// if (currentState.isInitialized()) {
 			if (animator == null) {
 				animator = Animator.getAnimator();
 			}
 
+		if (!operation.getName().equals("start_cspm_MAIN"))
 			checkObserver();
-
-		}
-
+		// }
 	}
 
 	/**
@@ -174,5 +175,9 @@ public class Animation implements IAnimationListener {
 	public Map<String, Operation> getCurrentStateOperations() {
 		return currentStateOperations;
 	}
-	
+
+	public Operation getLastExecutedOperation() {
+		return lastExecutedOperation;
+	}
+
 }
diff --git a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/BMSPaletteView.java b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/BMSPaletteView.java
new file mode 100644
index 0000000000000000000000000000000000000000..c88ccf699ffd62b88147cc1ef73b019340337f66
--- /dev/null
+++ b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/BMSPaletteView.java
@@ -0,0 +1,33 @@
+package de.bmotionstudio.gef.editor;
+
+import org.eclipse.gef.ui.views.palette.PaletteView;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchPart;
+
+public class BMSPaletteView extends PaletteView {
+
+	@Override
+	protected IWorkbenchPart getBootstrapPart() {
+		IWorkbenchPage page = getSite().getPage();
+		if (page != null)
+			return page.getActiveEditor();
+		return null;
+	}
+
+	// public BMSPaletteView() {
+	// // TODO Auto-generated constructor stub
+	// }
+	//
+	// @Override
+	// public void createPartControl(Composite parent) {
+	// // TODO Auto-generated method stub
+	//
+	// }
+	//
+	// @Override
+	// public void setFocus() {
+	// // TODO Auto-generated method stub
+	//
+	// }
+
+}
diff --git a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/VisualizationView.java b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/VisualizationView.java
new file mode 100644
index 0000000000000000000000000000000000000000..e8346b6b9ea26ce36c30326c6d4c0beca9cee1bd
--- /dev/null
+++ b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/VisualizationView.java
@@ -0,0 +1,81 @@
+package de.bmotionstudio.gef.editor;
+
+import java.io.InputStream;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.gef.EditDomain;
+import org.eclipse.gef.editparts.ScalableRootEditPart;
+import org.eclipse.gef.ui.parts.ScrollingGraphicalViewer;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.part.ViewPart;
+
+import com.thoughtworks.xstream.XStream;
+import com.thoughtworks.xstream.mapper.MapperWrapper;
+
+import de.bmotionstudio.gef.editor.model.Visualization;
+import de.bmotionstudio.gef.editor.part.BMSEditPartFactory;
+
+public class VisualizationView extends ViewPart {
+
+	@Override
+	public void createPartControl(Composite parent) {
+
+		ScrollingGraphicalViewer scrollingGraphicalViewer = new ScrollingGraphicalViewer();
+		scrollingGraphicalViewer.createControl(parent);
+
+		ScalableRootEditPart rootEditPart = new ScalableRootEditPart();
+		rootEditPart.setViewer(scrollingGraphicalViewer);
+		
+		scrollingGraphicalViewer.setRootEditPart(rootEditPart);
+		scrollingGraphicalViewer.setEditPartFactory(new BMSEditPartFactory());
+		scrollingGraphicalViewer.setEditDomain(new EditDomain());
+
+		IFile file = ResourcesPlugin.getWorkspace().getRoot()
+				.getProject("Farmer").getFile("Farmer.bmso");
+
+		try {
+			InputStream inputStream = file.getContents();
+
+			XStream xstream = new XStream() {
+				@Override
+				protected MapperWrapper wrapMapper(final MapperWrapper next) {
+					return new MapperWrapper(next) {
+						@Override
+						public boolean shouldSerializeMember(
+								@SuppressWarnings("rawtypes") final Class definedIn,
+								final String fieldName) {
+							if (definedIn == Object.class)
+								return false;
+							return super.shouldSerializeMember(definedIn,
+									fieldName);
+						}
+					};
+				}
+			};
+
+			BMotionEditorPlugin.setAliases(xstream);
+
+			Visualization visualization = (Visualization) xstream
+					.fromXML(inputStream);
+			visualization.setProjectFile(file);
+
+			scrollingGraphicalViewer.setContents(visualization);
+
+		} catch (CoreException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+
+
+
+	}
+
+	@Override
+	public void setFocus() {
+		// TODO Auto-generated method stub
+
+	}
+
+}
diff --git a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/csp/CSPLanguageService.java b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/csp/CSPLanguageService.java
new file mode 100644
index 0000000000000000000000000000000000000000..0cb7ef725b3be72ffcb141cf437af3b2472a5a3d
--- /dev/null
+++ b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/csp/CSPLanguageService.java
@@ -0,0 +1,30 @@
+package de.bmotionstudio.gef.editor.csp;
+
+import java.io.File;
+
+import org.eclipse.core.resources.IFile;
+
+import de.bmotionstudio.gef.editor.ILanguageService;
+import de.bmotionstudio.gef.editor.model.Visualization;
+import de.prob.core.command.LoadCspModelCommand;
+import de.prob.exceptions.ProBException;
+
+public class CSPLanguageService implements ILanguageService {
+
+	@Override
+	public void startProBAnimator(Visualization v) throws ProBException {
+		IFile f = v.getProjectFile().getProject().getFile(v.getMachineName());
+		String n = f.getName();
+		String name = n.substring(0, n.length() - 4);
+		File file = new File(f.getLocationURI());
+		LoadCspModelCommand.load(v.getAnimation().getAnimator(), file, name);
+	}
+
+	@Override
+	public boolean isLanguageFile(IFile f) {
+		if (f.getFileExtension().equals("csp"))
+			return true;
+		return false;
+	}
+
+}
diff --git a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/internal/NewBMotionProjectWizard.java b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/internal/NewBMotionProjectWizard.java
index ae7689f1420914eb61a023b05dd64ce66467e40a..27d8401694e03f5f159574ca91c2b2be77f6ff8d 100644
--- a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/internal/NewBMotionProjectWizard.java
+++ b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/internal/NewBMotionProjectWizard.java
@@ -91,10 +91,15 @@ public class NewBMotionProjectWizard extends Wizard implements INewWizard {
 		try {
 			getContainer().run(true, false, op);
 		} catch (final InterruptedException e) {
+			e.printStackTrace();
+			final Throwable realException = e.getCause();
+			MessageDialog.openError(getShell(), e.getMessage(),
+					realException.getMessage());
 			return false;
 		} catch (final InvocationTargetException e) {
+			e.printStackTrace();
 			final Throwable realException = e.getTargetException();
-			MessageDialog.openError(getShell(), "Error",
+			MessageDialog.openError(getShell(), e.getMessage(),
 					realException.getMessage());
 			return false;
 		}
diff --git a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/model/BControl.java b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/model/BControl.java
index 8d153efff02722e88a8414eb283afa1ca8f4abd6..93f27043feb8393949b6962536ad516cc64dedd4 100644
--- a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/model/BControl.java
+++ b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/model/BControl.java
@@ -186,6 +186,7 @@ public abstract class BControl implements IAdaptable, Cloneable {
 					String langID = configurationElement
 							.getAttribute("language");
 
+
 					if (langID != null
 							&& langID.equals(getVisualization()
 									.getLanguage())) {
@@ -194,7 +195,6 @@ public abstract class BControl implements IAdaptable, Cloneable {
 								.getChildren("control")) {
 
 							String cID = configC.getAttribute("id");
-
 							if (getType().equals(cID)) {
 
 								for (IConfigurationElement configO : configC
@@ -228,17 +228,22 @@ public abstract class BControl implements IAdaptable, Cloneable {
 			// Check if control has already the observer
 			if (!hasObserver(oID)) {
 
+
+
 				// If no, create a new instance and add the observer to the
 				// control
 				IConfigurationElement observerExtension = BMotionEditorPlugin
 						.getObserverExtension(oID);
-				
+
 				if (observerExtension != null) {
 					try {
 
 
 						Observer newObserver = (Observer) observerExtension
 								.createExecutableExtension("class");
+
+
+
 						addObserver(newObserver);
 					} catch (CoreException e) {
 						e.printStackTrace();
diff --git a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/CSPEventObserver.java b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/CSPEventObserver.java
new file mode 100644
index 0000000000000000000000000000000000000000..51685e8dabfa72d733aff9f85a61818a926897a9
--- /dev/null
+++ b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/CSPEventObserver.java
@@ -0,0 +1,161 @@
+package de.bmotionstudio.gef.editor.observer;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.swt.widgets.Shell;
+
+import de.bmotionstudio.gef.editor.Animation;
+import de.bmotionstudio.gef.editor.model.BControl;
+import de.bmotionstudio.gef.editor.observer.wizard.WizardObserverCSPOperation;
+import de.prob.core.command.CSPEvauateExpressionCommand;
+import de.prob.exceptions.ProBException;
+
+public class CSPEventObserver extends Observer {
+
+	private List<SetAttributeObject> setAttributeObjects;
+	private transient List<String> setAttributes;
+
+	public CSPEventObserver() {
+		super();
+		this.setAttributeObjects = new ArrayList<SetAttributeObject>();
+		this.setAttributes = new ArrayList<String>();
+	}
+
+	protected Object readResolve() {
+		setAttributes = new ArrayList<String>();
+		return super.readResolve();
+	}
+
+	@Override
+	public void check(Animation animation, BControl control) {
+		IFile f = animation.getVisualization().getProjectFile().getProject()
+				.getFile(animation.getVisualization().getMachineName());
+
+		// String n = f.getName();
+		// String name = n.substring(0, n.length() - 4);
+		File file = new File(f.getLocationURI());
+
+		this.setAttributes.clear();
+
+		// Collect evaluate predicate objects in list
+		for (SetAttributeObject obj : setAttributeObjects) {
+
+			obj.setHasError(false);
+
+			// First evaluate predicate (predicate field)
+			String bolValue = "true";
+			if (obj.getEval().length() > 0) {
+
+				String AsImplodedString = "";
+
+				if (animation.getLastExecutedOperation().getArguments().size() > 0) {
+
+					String[] inputArray = animation
+							.getLastExecutedOperation()
+							.getArguments()
+							.toArray(
+									new String[animation
+											.getLastExecutedOperation()
+											.getArguments().size()]);
+
+					StringBuffer sb = new StringBuffer();
+					sb.append(inputArray[0]);
+					for (int i = 1; i < inputArray.length; i++) {
+						sb.append(".");
+						sb.append(inputArray[i]);
+					}
+					AsImplodedString = "." + sb.toString();
+
+				}
+				try {
+					bolValue = CSPEvauateExpressionCommand.evaluate(animation
+							.getAnimator(), "member("
+							+ animation.getLastExecutedOperation().getName()
+							+ AsImplodedString + "," + obj.getEval()
+							+ ")",
+							file
+							.getAbsolutePath());
+					System.out.println("BOOL: ==> " + bolValue);
+				} catch (ProBException e) {
+					e.printStackTrace();
+				}
+
+				// bolValue = BMSUtil.parsePredicate(obj.getEval(), control,
+				// animation);
+			}
+
+			System.out.println(Boolean.valueOf(bolValue));
+
+			if (!obj.hasError() && Boolean.valueOf(bolValue)) {
+
+
+
+				String attributeID = obj.getAttribute();
+
+				// AbstractAttribute attributeObj = control
+				// .getAttribute(attributeID);
+
+				Object attributeVal = obj.getValue();
+
+				// if (obj.isExpressionMode()) {
+				// String strAtrVal = BMSUtil.parseExpression(
+				// attributeVal.toString(), control, animation);
+				// String er = attributeObj.validateValue(strAtrVal, null);
+				// if (er != null) {
+				// obj.setHasError(true);
+				// } else {
+				// attributeVal = attributeObj.unmarshal(strAtrVal);
+				// }
+				// }
+
+				if (!obj.hasError()) {
+					Object oldAttrVal = control.getAttributeValue(attributeID);
+					if (!oldAttrVal.equals(attributeVal)) {
+						control.setAttributeValue(attributeID, attributeVal,
+								true, false);
+					}
+				}
+
+				setAttributes.add(attributeID);
+
+			}
+
+		}
+
+		// Restore attribute values
+		// for (SetAttributeObject obj : setAttributeObjects) {
+		// if (!setAttributes.contains(obj.getAttribute())) {
+		// AbstractAttribute attributeObj = control.getAttribute(obj
+		// .getAttribute());
+		// Object oldAttrVal = control.getAttributeValue(obj
+		// .getAttribute());
+		// if (!oldAttrVal.equals(attributeObj.getInitValue())) {
+		// control.restoreDefaultValue(attributeObj.getID());
+		// }
+		// }
+		// }
+
+
+
+
+
+	}
+
+	public void setSetAttributeObjects(
+			List<SetAttributeObject> setAttributeObjects) {
+		this.setAttributeObjects = setAttributeObjects;
+	}
+
+	public List<SetAttributeObject> getSetAttributeObjects() {
+		return setAttributeObjects;
+	}
+
+	@Override
+	public ObserverWizard getWizard(Shell shell, BControl control) {
+		return new WizardObserverCSPOperation(shell, control, this);
+	}
+
+}
diff --git a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/wizard/WizardObserverCSPOperation.java b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/wizard/WizardObserverCSPOperation.java
new file mode 100644
index 0000000000000000000000000000000000000000..5fce0903b8ae648d3ece10c376328c9e22dee5f8
--- /dev/null
+++ b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/wizard/WizardObserverCSPOperation.java
@@ -0,0 +1,344 @@
+/** 
+ * (c) 2009 Lehrstuhl fuer Softwaretechnik und Programmiersprachen, 
+ * Heinrich Heine Universitaet Duesseldorf
+ * This software is licenced under EPL 1.0 (http://www.eclipse.org/org/documents/epl-v10.html) 
+ * */
+package de.bmotionstudio.gef.editor.observer.wizard;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.databinding.DataBindingContext;
+import org.eclipse.core.databinding.beans.BeansObservables;
+import org.eclipse.core.databinding.observable.list.ComputedList;
+import org.eclipse.core.databinding.observable.list.WritableList;
+import org.eclipse.core.databinding.observable.map.IObservableMap;
+import org.eclipse.jface.databinding.viewers.ObservableListContentProvider;
+import org.eclipse.jface.databinding.viewers.ObservableMapLabelProvider;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.viewers.CellEditor;
+import org.eclipse.jface.viewers.ComboBoxViewerCellEditor;
+import org.eclipse.jface.viewers.EditingSupport;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.ITableColorProvider;
+import org.eclipse.jface.viewers.ITableFontProvider;
+import org.eclipse.jface.viewers.ITableLabelProvider;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.TableViewerColumn;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.CCombo;
+import org.eclipse.swt.events.FocusEvent;
+import org.eclipse.swt.events.FocusListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.layout.RowLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
+
+import de.bmotionstudio.gef.editor.BMotionStudioImage;
+import de.bmotionstudio.gef.editor.EditorImageRegistry;
+import de.bmotionstudio.gef.editor.attribute.AbstractAttribute;
+import de.bmotionstudio.gef.editor.edit.AttributeExpressionEdittingSupport;
+import de.bmotionstudio.gef.editor.edit.IsExpressionModeEditingSupport;
+import de.bmotionstudio.gef.editor.edit.PredicateEditingSupport;
+import de.bmotionstudio.gef.editor.model.BControl;
+import de.bmotionstudio.gef.editor.observer.CSPEventObserver;
+import de.bmotionstudio.gef.editor.observer.Observer;
+import de.bmotionstudio.gef.editor.observer.ObserverWizard;
+import de.bmotionstudio.gef.editor.observer.SetAttributeObject;
+import de.bmotionstudio.gef.editor.property.CheckboxCellEditorHelper;
+import de.bmotionstudio.gef.editor.util.BMotionWizardUtil;
+
+public class WizardObserverCSPOperation extends ObserverWizard {
+
+	private WritableList input;
+
+	private TableViewer tableViewer;
+
+	@Override
+	public Control createWizardContent(Composite parent) {
+
+		parent.setLayout(new FillLayout());
+
+		DataBindingContext dbc = new DataBindingContext();
+
+		GridLayout gl = new GridLayout(1, true);
+		gl.horizontalSpacing = 0;
+		gl.verticalSpacing = 0;
+		gl.marginHeight = 0;
+		gl.marginWidth = 0;
+
+		Composite container = new Composite(parent, SWT.NONE);
+		container.setLayout(gl);
+
+		tableViewer = BMotionWizardUtil.createBMotionWizardTableViewer(
+				container, SetAttributeObject.class, getName());
+
+		TableViewerColumn column = new TableViewerColumn(tableViewer, SWT.NONE);
+		column.getColumn().setText("Expression");
+		column.getColumn().setWidth(300);
+
+		PredicateEditingSupport pEditingSupport = new PredicateEditingSupport(
+				tableViewer, dbc, "eval", getBControl().getVisualization(),
+				getShell());
+		column.setEditingSupport(pEditingSupport);
+
+		column = new TableViewerColumn(tableViewer, SWT.NONE);
+		column.getColumn().setText("Attribute");
+		column.getColumn().setWidth(150);
+		column.setEditingSupport(new AttributeObserverValueEditing(tableViewer));
+
+		column = new TableViewerColumn(tableViewer, SWT.NONE);
+		column.getColumn().setText("Value");
+		column.getColumn().setWidth(175);
+		column.setEditingSupport(new AttributeExpressionEdittingSupport(
+				tableViewer, getBControl()));
+
+		column = new TableViewerColumn(tableViewer, SWT.NONE);
+		column.getColumn().setText("Expression?");
+		column.getColumn().setWidth(100);
+		column.setEditingSupport(new IsExpressionModeEditingSupport(
+				tableViewer, getBControl()));
+
+		ObservableListContentProvider contentProvider = new ObservableListContentProvider();
+		tableViewer.setContentProvider(contentProvider);
+
+		tableViewer.setLabelProvider(new ObserverLabelProvider(BeansObservables
+				.observeMaps(contentProvider.getKnownElements(), new String[] {
+						"eval", "attribute", "value", "isExpressionMode" })));
+		input = new WritableList(
+				((CSPEventObserver) getObserver()).getSetAttributeObjects(),
+				SetAttributeObject.class);
+		tableViewer.setInput(input);
+
+		Composite comp = new Composite(container, SWT.NONE);
+		comp.setLayout(new RowLayout());
+		comp.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END));
+
+		Button btRemove = new Button(comp, SWT.PUSH);
+		btRemove.setText("Remove");
+		btRemove.setImage(BMotionStudioImage
+				.getImage(EditorImageRegistry.IMG_ICON_DELETE_EDIT));
+		btRemove.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				if (tableViewer.getSelection().isEmpty()) {
+					MessageDialog.openInformation(getShell(),
+							"Please select an entry.",
+							"Please select an entry.");
+					return;
+				}
+				SetAttributeObject toggleObj = (SetAttributeObject) ((IStructuredSelection) tableViewer
+						.getSelection()).getFirstElement();
+				input.remove(toggleObj);
+			}
+		});
+
+		Button btAdd = new Button(comp, SWT.PUSH);
+		btAdd.setText("Add");
+		btAdd.setImage(BMotionStudioImage
+				.getImage(EditorImageRegistry.IMG_ICON_NEW_WIZ));
+		btAdd.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				SetAttributeObject toggleObj = new SetAttributeObject("");
+				input.add(toggleObj);
+				tableViewer.setSelection(new StructuredSelection(toggleObj));
+			}
+		});
+
+		return container;
+
+	}
+
+	public WizardObserverCSPOperation(Shell shell, BControl control,
+			Observer observer) {
+		super(shell, control, observer);
+	}
+
+	@Override
+	public Point getSize() {
+		return new Point(800, 500);
+	}
+
+	private class ObserverLabelProvider extends ObservableMapLabelProvider
+			implements ITableLabelProvider, ITableColorProvider,
+			ITableFontProvider {
+
+		public ObserverLabelProvider(IObservableMap[] attributeMaps) {
+			super(attributeMaps);
+		}
+
+		private final Color errorColor = Display.getDefault().getSystemColor(
+				SWT.COLOR_INFO_BACKGROUND);
+
+		// final Font bold = JFaceResources.getFontRegistry().getBold(
+		// JFaceResources.BANNER_FONT);
+
+		@Override
+		public Image getColumnImage(Object element, int columnIndex) {
+			if (columnIndex == 3) {
+				return CheckboxCellEditorHelper
+						.getCellEditorImage(((SetAttributeObject) element)
+								.isExpressionMode());
+			}
+			return null;
+		}
+
+		@Override
+		public String getColumnText(Object element, int columnIndex) {
+
+			SetAttributeObject attributeObject = (SetAttributeObject) element;
+
+			if (columnIndex == 1) {
+
+				String atrID = attributeObject.getAttribute();
+				String atrName = "";
+				if (atrID != null) {
+					if (atrID.length() > 0) {
+						AbstractAttribute atr = getBControl().getAttributes()
+								.get(atrID);
+						if (atr != null)
+							atrName = atr.getName();
+					}
+				}
+				return atrName;
+
+			}
+			if (columnIndex == 2) {
+
+				if (attributeObject.getValue() != null)
+					return attributeObject.getValue().toString();
+				return "";
+
+			}
+
+			if (columnIndex == 3)
+				return "";
+
+			return super.getColumnText(element, columnIndex);
+		}
+
+		public Color getBackground(final Object element, final int column) {
+			SetAttributeObject attributeObject = (SetAttributeObject) element;
+			if (attributeObject.hasError())
+				return errorColor;
+			return null;
+		}
+
+		public Color getForeground(final Object element, final int column) {
+			return null;
+		}
+
+		public Font getFont(final Object element, final int column) {
+			return null;
+		}
+
+	}
+
+	private class AttributeObserverValueEditing extends EditingSupport {
+
+		private ComboBoxViewerCellEditor cellEditor = null;
+
+		public AttributeObserverValueEditing(TableViewer cv) {
+			super(cv);
+		}
+
+		@Override
+		protected boolean canEdit(Object element) {
+			return BMotionWizardUtil.isEditElement(getViewer());
+		}
+
+		@Override
+		protected Object getValue(Object element) {
+			return ((SetAttributeObject) element).getAttribute();
+		}
+
+		@Override
+		protected void setValue(Object element, Object value) {
+			if (value != null) {
+				SetAttributeObject obj = (SetAttributeObject) element;
+				obj.setAttribute(value.toString());
+				obj.setIsExpressionMode(false);
+			}
+		}
+
+		@Override
+		protected CellEditor getCellEditor(Object element) {
+			if (cellEditor == null) {
+
+				cellEditor = new ComboBoxViewerCellEditor(
+						(Composite) tableViewer.getControl(), SWT.READ_ONLY);
+				cellEditor
+						.setContentProvider(new ObservableListContentProvider());
+				cellEditor.setLabelProvider(new LabelProvider() {
+					public String getText(Object element) {
+						return getBControl().getAttributes()
+								.get(element.toString()).getName();
+					}
+				});
+				cellEditor.setInput(new ComputedList() {
+					@Override
+					protected List<String> calculate() {
+						ArrayList<String> atrList = new ArrayList<String>();
+						for (AbstractAttribute atr : getBControl()
+								.getAttributes().values()) {
+							atrList.add(atr.getID());
+						}
+						return atrList;
+					}
+				});
+
+				((CCombo) cellEditor.getControl())
+						.addFocusListener(new FocusListener() {
+
+							String oldValue;
+
+							public void focusGained(FocusEvent e) {
+								oldValue = ((CCombo) cellEditor.getControl())
+										.getText();
+
+							}
+
+							public void focusLost(FocusEvent e) {
+
+								if (!oldValue.equals(((CCombo) cellEditor
+										.getControl()).getText())) {
+
+									IStructuredSelection selection = (IStructuredSelection) getViewer()
+											.getSelection();
+
+									SetAttributeObject p = (SetAttributeObject) selection
+											.getFirstElement();
+
+									AbstractAttribute atr = getBControl()
+											.getAttributes().get(
+													p.getAttribute());
+
+									p.setValue(atr.getValue());
+									tableViewer.refresh();
+
+								}
+							}
+
+						});
+
+			}
+			return cellEditor;
+		}
+
+	}
+
+}
diff --git a/de.prob.core/src/de/prob/core/command/CSPEvauateExpressionCommand.java b/de.prob.core/src/de/prob/core/command/CSPEvauateExpressionCommand.java
new file mode 100644
index 0000000000000000000000000000000000000000..1569b74459d628749d3e956f8f1ff1ccfd5597f5
--- /dev/null
+++ b/de.prob.core/src/de/prob/core/command/CSPEvauateExpressionCommand.java
@@ -0,0 +1,48 @@
+package de.prob.core.command;
+
+import de.prob.core.Animator;
+import de.prob.exceptions.ProBException;
+import de.prob.parser.ISimplifiedROMap;
+import de.prob.prolog.output.IPrologTermOutput;
+import de.prob.prolog.term.CompoundPrologTerm;
+import de.prob.prolog.term.PrologTerm;
+
+public class CSPEvauateExpressionCommand implements IComposableCommand {
+
+	private static final String EVALUATE_TERM_VARIABLE = "Res";
+
+	private String expression;
+	private String fileName;
+	private static String result;
+
+	public CSPEvauateExpressionCommand(String expression, String fileName) {
+		this.expression = expression;
+		this.fileName = fileName;
+	}
+
+	public static String evaluate(final Animator a, final String expression,
+			final String fileName) throws ProBException {
+		CSPEvauateExpressionCommand command = new CSPEvauateExpressionCommand(
+				expression, fileName);
+		a.execute(command);
+		return result;
+	}
+
+	@Override
+	public void writeCommand(IPrologTermOutput pout) throws CommandException {
+		pout.openTerm("evaluate_csp_expression_eclipse");
+		pout.printAtom(expression);
+		pout.printAtom(fileName);
+		pout.printVariable(EVALUATE_TERM_VARIABLE);
+		pout.closeTerm();
+	}
+
+	@Override
+	public void processResult(ISimplifiedROMap<String, PrologTerm> bindings)
+			throws CommandException {
+		CompoundPrologTerm prologTerm = (CompoundPrologTerm) bindings
+				.get(EVALUATE_TERM_VARIABLE);
+		result = prologTerm.toString();
+	}
+
+}
diff --git a/de.prob.core/src/de/prob/core/command/LoadCspModelCommand.java b/de.prob.core/src/de/prob/core/command/LoadCspModelCommand.java
index 6db887e7a802b2c0f78666e65959b729bc320aa9..73b5e00d70fb3e60679637e56f97b9735bdfad02 100644
--- a/de.prob.core/src/de/prob/core/command/LoadCspModelCommand.java
+++ b/de.prob.core/src/de/prob/core/command/LoadCspModelCommand.java
@@ -94,6 +94,7 @@ public final class LoadCspModelCommand {
 		final State commandResult = explore.getState();
 		animator.announceCurrentStateChanged(commandResult,
 				Operation.NULL_OPERATION);
+
 	}
 
 	private static IComposableCommand getLoadCommand(final File model,