From 088f6fbcc6796ef5e9fcfe4e601e5930327ed61c Mon Sep 17 00:00:00 2001
From: Lukas Ladenberger <lukas.ladenberger@googlemail.com>
Date: Tue, 5 Feb 2013 11:35:10 +0100
Subject: [PATCH] reverted some commits

---
 de.bmotionstudio.gef.editor/plugin.xml        | 522 +++++++++---------
 ...tionstudio.gef.editor.includeObserver.exsd |   8 +-
 .../gef/editor/BMSContextMenuProvider.java    |  94 +++-
 .../gef/editor/BMotionAbstractWizard.java     |  70 +--
 .../gef/editor/EditorImageRegistry.java       |  13 +-
 .../action/BMotionAbstractWizardDialog.java   | 107 ++++
 .../action/BMotionObserverWizardDialog.java   |  35 ++
 .../BMotionSchedulerEventWizardDialog.java    |  43 ++
 .../gef/editor/action/OpenObserverAction.java | 111 +++-
 .../action/OpenSchedulerEventAction.java      |  86 ++-
 .../gef/editor/model/BControl.java            |  34 +-
 .../gef/editor/observer/ColumnObserver.java   |   6 +-
 .../observer/ExternalObserverScript.java      |  77 +++
 .../observer/ListenOperationByPredicate.java  |   7 +-
 .../gef/editor/observer/Observer.java         |   3 +-
 .../editor/observer/ObserverEvalObject.java   |  29 +-
 .../gef/editor/observer/ObserverWizard.java   |  23 +-
 .../gef/editor/observer/SetAttribute.java     |  30 +-
 .../editor/observer/SetAttributeObject.java   |   4 +-
 .../editor/observer/SimpleValueDisplay.java   |   6 +-
 .../observer/SwitchChildCoordinates.java      |   6 +-
 .../editor/observer/SwitchCoordinates.java    |   6 +-
 .../gef/editor/observer/SwitchImage.java      |   5 +-
 .../gef/editor/observer/TableObserver.java    |  59 +-
 .../observer/ToggleObjectCoordinates.java     |   8 +-
 .../editor/observer/ToggleObjectImage.java    |   4 +-
 .../gef/editor/observer/view/HelpAction.java  |  34 --
 .../editor/observer/view/ObserverPage.java    | 212 -------
 .../editor/observer/view/ObserverView.java    |  68 ---
 .../wizard/AbstractObserverWizardPage.java    |  30 +
 .../observer/wizard/WizardColumnObserver.java | 125 +++--
 .../WizardObserverCSwitchCoordinates.java     | 310 +++++++----
 .../WizardObserverExternalObserverScript.java | 111 ++++
 ...ardObserverListenOperationByPredicate.java | 483 +++++++++-------
 .../wizard/WizardObserverSetAttribute.java    | 477 +++++++++-------
 .../WizardObserverSimpleValueDisplay.java     | 159 +++---
 .../WizardObserverSwitchCoordinates.java      | 283 +++++++---
 .../wizard/WizardObserverSwitchImage.java     | 258 +++++----
 .../observer/wizard/WizardTableObserver.java  | 246 +++++----
 .../scheduler/ExecuteAnimationScript.java     |   6 +-
 .../ExecuteOperationByPredicate.java          |   6 +-
 .../ExecuteOperationByPredicateMulti.java     |   6 +-
 .../gef/editor/scheduler/SchedulerEvent.java  |   3 +-
 .../gef/editor/scheduler/SchedulerWizard.java |  21 +-
 .../wizard/SchedulerObjectDialog.java         |   2 +-
 .../WizardExecuteOperationByPredicate.java    | 422 +++++++-------
 ...izardExecuteOperationByPredicateMulti.java | 328 ++++-------
 .../wizard/WizardExecuteScheduler.java        | 203 +++----
 48 files changed, 2899 insertions(+), 2290 deletions(-)
 create mode 100644 de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/action/BMotionAbstractWizardDialog.java
 create mode 100644 de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/action/BMotionObserverWizardDialog.java
 create mode 100644 de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/action/BMotionSchedulerEventWizardDialog.java
 create mode 100644 de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/ExternalObserverScript.java
 delete mode 100644 de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/view/HelpAction.java
 delete mode 100644 de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/view/ObserverPage.java
 delete mode 100644 de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/view/ObserverView.java
 create mode 100644 de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/wizard/AbstractObserverWizardPage.java
 create mode 100644 de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/wizard/WizardObserverExternalObserverScript.java

diff --git a/de.bmotionstudio.gef.editor/plugin.xml b/de.bmotionstudio.gef.editor/plugin.xml
index f7e7118b..e910bbd0 100644
--- a/de.bmotionstudio.gef.editor/plugin.xml
+++ b/de.bmotionstudio.gef.editor/plugin.xml
@@ -52,15 +52,6 @@
             name="Library"
             restorable="true">
       </view>
-      <view
-            allowMultiple="false"
-            category="de.bmotionstudio.views"
-            class="de.bmotionstudio.gef.editor.observer.view.ObserverView"
-            icon="icons/icon_observer.gif"
-            id="de.bmotionstudio.gef.editor.ObserverView"
-            name="Observer"
-            restorable="true">
-      </view>
    </extension>
    <extension
          point="org.eclipse.ui.menus">
@@ -402,255 +393,270 @@
          point="de.bmotionstudio.gef.editor.includeObserver">
       <include
             language="EventB">
-         <control
-               id="de.bmotionstudio.gef.editor.image">
-            <observer
-                  id="de.bmotionstudio.gef.editor.observer.ListenOperationByPredicate">
-            </observer>
-            <observer
-                  id="de.bmotionstudio.gef.editor.observer.SwitchImage">
-            </observer>
-            <observer
-                  id="de.bmotionstudio.gef.editor.observer.SetAttribute">
-            </observer>
-            <observer
-                  id="de.bmotionstudio.gef.editor.observer.SwitchCoordinates">
-            </observer>
-         </control>
-         <control
-               id="de.bmotionstudio.gef.editor.button">
-            <observer
-                  id="de.bmotionstudio.gef.editor.observer.SimpleValueDisplay">
-            </observer>
-            <observer
-                  id="de.bmotionstudio.gef.editor.observer.ListenOperationByPredicate">
-            </observer>
-            <observer
-                  id="de.bmotionstudio.gef.editor.observer.SetAttribute">
-            </observer>
-            <observer
-                  id="de.bmotionstudio.gef.editor.observer.SwitchCoordinates">
-            </observer>
-         </control>
-         <control
-               id="de.bmotionstudio.gef.editor.checkbox">
-            <observer
-                  id="de.bmotionstudio.gef.editor.observer.SimpleValueDisplay">
-            </observer>
-            <observer
-                  id="de.bmotionstudio.gef.editor.observer.ListenOperationByPredicate">
-            </observer>
-            <observer
-                  id="de.bmotionstudio.gef.editor.observer.SetAttribute">
-            </observer>
-            <observer
-                  id="de.bmotionstudio.gef.editor.observer.SwitchCoordinates">
-            </observer>
-         </control>
-         <control
-               id="de.bmotionstudio.gef.editor.radiobutton">
-            <observer
-                  id="de.bmotionstudio.gef.editor.observer.SimpleValueDisplay">
-            </observer>
-            <observer
-                  id="de.bmotionstudio.gef.editor.observer.ListenOperationByPredicate">
-            </observer>
-            <observer
-                  id="de.bmotionstudio.gef.editor.observer.SetAttribute">
-            </observer>
-            <observer
-                  id="de.bmotionstudio.gef.editor.observer.SwitchCoordinates">
-            </observer>
-         </control>
-         <control
-               id="de.bmotionstudio.gef.editor.textfield">
-            <observer
-                  id="de.bmotionstudio.gef.editor.observer.SimpleValueDisplay">
-            </observer>
-            <observer
-                  id="de.bmotionstudio.gef.editor.observer.ListenOperationByPredicate">
-            </observer>
-            <observer
-                  id="de.bmotionstudio.gef.editor.observer.SetAttribute">
-            </observer>
-            <observer
-                  id="de.bmotionstudio.gef.editor.observer.SwitchCoordinates">
-            </observer>
-         </control>
-         <control
-               id="de.bmotionstudio.gef.editor.composite">
-            <observer
-                  id="de.bmotionstudio.gef.editor.observer.SwitchImage">
-            </observer>
-            <observer
-                  id="de.bmotionstudio.gef.editor.observer.ListenOperationByPredicate">
-            </observer>
-            <observer
-                  id="de.bmotionstudio.gef.editor.observer.SetAttribute">
-            </observer>
-            <observer
-                  id="de.bmotionstudio.gef.editor.observer.SwitchCoordinates">
-            </observer>
-            <observer
-                  id="de.bmotionstudio.gef.editor.observer.SwitchChildCoordinates">
-            </observer>
-         </control>
-         <control
-               id="de.bmotionstudio.gef.editor.text">
-            <observer
-                  id="de.bmotionstudio.gef.editor.observer.SimpleValueDisplay">
-            </observer>
-            <observer
-                  id="de.bmotionstudio.gef.editor.observer.ListenOperationByPredicate">
-            </observer>
-            <observer
-                  id="de.bmotionstudio.gef.editor.observer.SetAttribute">
-            </observer>
-            <observer
-                  id="de.bmotionstudio.gef.editor.observer.SwitchCoordinates">
-            </observer>
-         </control>
-         <control
-               id="de.bmotionstudio.gef.editor.rectangle">
-            <observer
-                  id="de.bmotionstudio.gef.editor.observer.ListenOperationByPredicate">
-            </observer>
-            <observer
-                  id="de.bmotionstudio.gef.editor.observer.SwitchImage">
-            </observer>
-            <observer
-                  id="de.bmotionstudio.gef.editor.observer.SetAttribute">
-            </observer>
-            <observer
-                  id="de.bmotionstudio.gef.editor.observer.SwitchCoordinates">
-            </observer>
-         </control>
-         <control
-               id="de.bmotionstudio.gef.editor.connection">
-            <observer
-                  id="de.bmotionstudio.gef.editor.observer.ListenOperationByPredicate">
-            </observer>
-            <observer
-                  id="de.bmotionstudio.gef.editor.observer.SetAttribute">
-            </observer>
-         </control>
-         <control
-               id="de.bmotionstudio.gef.editor.ellipse">
-            <observer
-                  id="de.bmotionstudio.gef.editor.observer.ListenOperationByPredicate">
-            </observer>
-            <observer
-                  id="de.bmotionstudio.gef.editor.observer.SwitchImage">
-            </observer>
-            <observer
-                  id="de.bmotionstudio.gef.editor.observer.SetAttribute">
-            </observer>
-            <observer
-                  id="de.bmotionstudio.gef.editor.observer.SwitchCoordinates">
-            </observer>
-         </control>
-         <control
-               id="de.bmotionstudio.gef.editor.table">
-            <observer
-                  id="de.bmotionstudio.gef.editor.observer.TableObserver">
-            </observer>
-            <observer
-                  id="de.bmotionstudio.gef.editor.observer.ListenOperationByPredicate">
-            </observer>
-            <observer
-                  id="de.bmotionstudio.gef.editor.observer.SetAttribute">
-            </observer>
-            <observer
-                  id="de.bmotionstudio.gef.editor.observer.SwitchCoordinates">
-            </observer>
-         </control>
-         <control
-               id="de.bmotionstudio.gef.editor.tablecolumn">
-            <observer
-                  id="de.bmotionstudio.gef.editor.observer.ColumnObserver">
-            </observer>
-            <observer
-                  id="de.bmotionstudio.gef.editor.observer.ListenOperationByPredicate">
-            </observer>
-            <observer
-                  id="de.bmotionstudio.gef.editor.observer.SetAttribute">
-            </observer>
-         </control>
-         <control
-               id="de.bmotionstudio.gef.editor.tablecell">
-            <observer
-                  id="de.bmotionstudio.gef.editor.observer.ListenOperationByPredicate">
-            </observer>
-            <observer
-                  id="de.bmotionstudio.gef.editor.observer.SetAttribute">
-            </observer>
-         </control>
-         <control
-               id="de.bmotionstudio.gef.editor.signal">
-            <observer
-                  id="de.bmotionstudio.gef.editor.observer.ListenOperationByPredicate">
-            </observer>
-            <observer
-                  id="de.bmotionstudio.gef.editor.observer.SetAttribute">
-            </observer>
-            <observer
-                  id="de.bmotionstudio.gef.editor.observer.SwitchCoordinates">
-            </observer>
-         </control>
-         <control
-               id="de.bmotionstudio.gef.editor.light">
-            <observer
-                  id="de.bmotionstudio.gef.editor.observer.ListenOperationByPredicate">
-            </observer>
-            <observer
-                  id="de.bmotionstudio.gef.editor.observer.SetAttribute">
-            </observer>
-         </control>
-         <control
-               id="de.bmotionstudio.gef.editor.tank">
-            <observer
-                  id="de.bmotionstudio.gef.editor.observer.ListenOperationByPredicate">
-            </observer>
-            <observer
-                  id="de.bmotionstudio.gef.editor.observer.SetAttribute">
-            </observer>
-            <observer
-                  id="de.bmotionstudio.gef.editor.observer.SwitchCoordinates">
-            </observer>
-         </control>
-         <control
-               id="de.bmotionstudio.gef.editor.tracknode">
-            <observer
-                  id="de.bmotionstudio.gef.editor.observer.ListenOperationByPredicate">
-            </observer>
-            <observer
-                  id="de.bmotionstudio.gef.editor.observer.SetAttribute">
-            </observer>
-            <observer
-                  id="de.bmotionstudio.gef.editor.observer.SwitchCoordinates">
-            </observer>
-         </control>
-         <control
-               id="de.bmotionstudio.gef.editor.track">
-            <observer
-                  id="de.bmotionstudio.gef.editor.observer.ListenOperationByPredicate">
-            </observer>
-            <observer
-                  id="de.bmotionstudio.gef.editor.observer.SetAttribute">
-            </observer>
-         </control>
-         <control
-               id="de.bmotionstudio.gef.editor.switch">
-            <observer
-                  id="de.bmotionstudio.gef.editor.observer.ListenOperationByPredicate">
-            </observer>
-            <observer
-                  id="de.bmotionstudio.gef.editor.observer.SetAttribute">
-            </observer>
-            <observer
-                  id="de.bmotionstudio.gef.editor.observer.SwitchCoordinates">
-            </observer>
-         </control>
+         <observer
+               id="de.bmotionstudio.gef.editor.observer.ListenOperationByPredicate">
+            <control
+                  id="de.bmotionstudio.gef.editor.image">
+            </control>
+            <control
+                  id="de.bmotionstudio.gef.editor.button">
+            </control>
+            <control
+                  id="de.bmotionstudio.gef.editor.composite">
+            </control>
+            <control
+                  id="de.bmotionstudio.gef.editor.text">
+            </control>
+            <control
+                  id="de.bmotionstudio.gef.editor.ellipse">
+            </control>
+            <control
+                  id="de.bmotionstudio.gef.editor.rectangle">
+            </control>
+            <control
+                  id="de.bmotionstudio.gef.editor.radiobutton">
+            </control>
+            <control
+                  id="de.bmotionstudio.gef.editor.checkbox">
+            </control>
+            <control
+                  id="de.bmotionstudio.gef.editor.connection">
+            </control>
+            <control
+                  id="de.bmotionstudio.gef.editor.tablecell">
+            </control>
+            <control
+                  id="de.bmotionstudio.gef.editor.table">
+            </control>
+            <control
+                  id="de.bmotionstudio.gef.editor.tablecolumn">
+            </control>
+            <control
+                  id="de.bmotionstudio.gef.editor.signal">
+            </control>
+            <control
+                  id="de.bmotionstudio.gef.editor.tank">
+            </control>
+            <control
+                  id="de.bmotionstudio.gef.editor.switch">
+            </control>
+            <control
+                  id="de.bmotionstudio.gef.editor.track">
+            </control>
+            <control
+                  id="de.bmotionstudio.gef.editor.light">
+            </control>            
+         </observer>
+         <observer
+               id="de.bmotionstudio.gef.editor.observer.SwitchCoordinates">
+            <control
+                  id="de.bmotionstudio.gef.editor.image">
+            </control>
+            <control
+                  id="de.bmotionstudio.gef.editor.button">
+            </control>
+            <control
+                  id="de.bmotionstudio.gef.editor.composite">
+            </control>
+            <control
+                  id="de.bmotionstudio.gef.editor.text">
+            </control>
+            <control
+                  id="de.bmotionstudio.gef.editor.rectangle">
+            </control>
+            <control
+                  id="de.bmotionstudio.gef.editor.radiobutton">
+            </control>
+            <control
+                  id="de.bmotionstudio.gef.editor.textfield">
+            </control>
+            <control
+                  id="de.bmotionstudio.gef.editor.checkbox">
+            </control>
+            <control
+                  id="de.bmotionstudio.gef.editor.ellipse">
+            </control>
+            <control
+                  id="de.bmotionstudio.gef.editor.table">
+            </control>
+            <control
+                  id="de.bmotionstudio.gef.editor.signal">
+            </control>
+            <control
+                  id="de.bmotionstudio.gef.editor.tank">
+            </control>
+            <control
+                  id="de.bmotionstudio.gef.editor.switch">
+            </control>            
+         </observer>
+         <observer
+               id="de.bmotionstudio.gef.editor.observer.SimpleValueDisplay">
+            <control
+                  id="de.bmotionstudio.gef.editor.text">
+            </control>
+            <control
+                  id="de.bmotionstudio.gef.editor.radiobutton">
+            </control>
+            <control
+                  id="de.bmotionstudio.gef.editor.textfield">
+            </control>
+            <control
+                  id="de.bmotionstudio.gef.editor.button">
+            </control>
+            <control
+                  id="de.bmotionstudio.gef.editor.tablecell">
+            </control>
+         </observer>
+         <observer
+               id="de.bmotionstudio.gef.editor.observer.SetAttribute">
+            <control
+                  id="de.bmotionstudio.gef.editor.image">
+            </control>
+            <control
+                  id="de.bmotionstudio.gef.editor.button">
+            </control>
+            <control
+                  id="de.bmotionstudio.gef.editor.composite">
+            </control>
+            <control
+                  id="de.bmotionstudio.gef.editor.text">
+            </control>
+            <control
+                  id="de.bmotionstudio.gef.editor.rectangle">
+            </control>
+            <control
+                  id="de.bmotionstudio.gef.editor.radiobutton">
+            </control>
+            <control
+                  id="de.bmotionstudio.gef.editor.checkbox">
+            </control>
+            <control
+                  id="de.bmotionstudio.gef.editor.connection">
+            </control>
+            <control
+                  id="de.bmotionstudio.gef.editor.ellipse">
+            </control>
+            <control
+                  id="de.bmotionstudio.gef.editor.textfield">
+            </control>
+            <control
+                  id="de.bmotionstudio.gef.editor.tablecell">
+            </control>
+            <control
+                  id="de.bmotionstudio.gef.editor.table">
+            </control>
+            <control
+                  id="de.bmotionstudio.gef.editor.tablecolumn">
+            </control>
+          <control
+                  id="de.bmotionstudio.gef.editor.signal">
+            </control>
+            <control
+                  id="de.bmotionstudio.gef.editor.tank">
+            </control>
+            <control
+                  id="de.bmotionstudio.gef.editor.switch">
+            </control>
+            <control
+                  id="de.bmotionstudio.gef.editor.track">
+            </control>
+            <control
+                  id="de.bmotionstudio.gef.editor.light">
+            </control>                
+         </observer>
+         <observer
+               id="de.bmotionstudio.gef.editor.observer.SwitchChildCoordinates">
+            <control
+                  id="de.bmotionstudio.gef.editor.composite">
+            </control>
+            <control
+                  id="de.bmotionstudio.gef.editor.visualization">
+            </control>
+         </observer>
+         <observer
+               id="de.bmotionstudio.gef.editor.observer.ExternalObserverScript">
+            <control
+                  id="de.bmotionstudio.gef.editor.image">
+            </control>
+            <control
+                  id="de.bmotionstudio.gef.editor.button">
+            </control>
+            <control
+                  id="de.bmotionstudio.gef.editor.composite">
+            </control>
+            <control
+                  id="de.bmotionstudio.gef.editor.text">
+            </control>
+            <control
+                  id="de.bmotionstudio.gef.editor.rectangle">
+            </control>
+            <control
+                  id="de.bmotionstudio.gef.editor.radiobutton">
+            </control>
+            <control
+                  id="de.bmotionstudio.gef.editor.checkbox">
+            </control>
+            <control
+                  id="de.bmotionstudio.gef.editor.connection">
+            </control>
+            <control
+                  id="de.bmotionstudio.gef.editor.ellipse">
+            </control>
+            <control
+                  id="de.bmotionstudio.gef.editor.textfield">
+            </control>
+            <control
+                  id="de.bmotionstudio.gef.editor.tablecell">
+            </control>
+            <control
+                  id="de.bmotionstudio.gef.editor.table">
+            </control>
+            <control
+                  id="de.bmotionstudio.gef.editor.tablecolumn">
+            </control>
+            <control
+                  id="de.bmotionstudio.gef.editor.light">
+            </control>    
+            <control
+                  id="de.bmotionstudio.gef.editor.signal">
+            </control>
+            <control
+                  id="de.bmotionstudio.gef.editor.switch">
+            </control>
+            <control
+                  id="de.bmotionstudio.gef.editor.track">
+            </control>
+            <control
+                  id="de.bmotionstudio.gef.editor.tracknode">
+            </control>                            
+         </observer>
+         <observer
+               id="de.bmotionstudio.gef.editor.observer.SwitchImage">
+            <control
+                  id="de.bmotionstudio.gef.editor.image">
+            </control>
+            <control
+                  id="de.bmotionstudio.gef.editor.composite">
+            </control>
+            <control
+                  id="de.bmotionstudio.gef.editor.rectangle">
+            </control>
+            <control
+                  id="de.bmotionstudio.gef.editor.ellipse">
+            </control>
+         </observer>
+         <observer
+               id="de.bmotionstudio.gef.editor.observer.ColumnObserver">
+            <control
+                  id="de.bmotionstudio.gef.editor.tablecolumn">
+            </control>
+         </observer>
+         <observer
+               id="de.bmotionstudio.gef.editor.observer.TableObserver">
+            <control
+                  id="de.bmotionstudio.gef.editor.table">
+            </control>
+         </observer>
       </include>   
    </extension>   
 </plugin>
diff --git a/de.bmotionstudio.gef.editor/schema/de.bmotionstudio.gef.editor.includeObserver.exsd b/de.bmotionstudio.gef.editor/schema/de.bmotionstudio.gef.editor.includeObserver.exsd
index 9a9fd6bf..42a20dc1 100644
--- a/de.bmotionstudio.gef.editor/schema/de.bmotionstudio.gef.editor.includeObserver.exsd
+++ b/de.bmotionstudio.gef.editor/schema/de.bmotionstudio.gef.editor.includeObserver.exsd
@@ -54,9 +54,6 @@
          </appInfo>
       </annotation>
       <complexType>
-         <sequence minOccurs="1" maxOccurs="unbounded">
-            <element ref="observer"/>
-         </sequence>
          <attribute name="id" type="string" use="required">
             <annotation>
                <documentation>
@@ -74,6 +71,9 @@
          </appInfo>
       </annotation>
       <complexType>
+         <sequence minOccurs="1" maxOccurs="unbounded">
+            <element ref="control"/>
+         </sequence>
          <attribute name="id" type="string" use="required">
             <annotation>
                <documentation>
@@ -87,7 +87,7 @@
    <element name="include">
       <complexType>
          <sequence minOccurs="1" maxOccurs="unbounded">
-            <element ref="control"/>
+            <element ref="observer"/>
          </sequence>
          <attribute name="language" type="string" use="required">
             <annotation>
diff --git a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/BMSContextMenuProvider.java b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/BMSContextMenuProvider.java
index 58faadce..2dab8b07 100644
--- a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/BMSContextMenuProvider.java
+++ b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/BMSContextMenuProvider.java
@@ -128,9 +128,51 @@ public class BMSContextMenuProvider extends ContextMenuProvider {
 						"icons/icon_observer.gif"), "observerMenu");
 		menu.appendToGroup(GEFActionConstants.GROUP_ADD, handleObserverMenu);
 
-		IExtensionPoint extensionPoint = Platform.getExtensionRegistry()
-				.getExtensionPoint(
-						"de.bmotionstudio.gef.editor.includeObserver");
+		IExtensionPoint extensionPoint = registry
+				.getExtensionPoint("de.bmotionstudio.gef.editor.observer");
+		for (IExtension extension : extensionPoint.getExtensions()) {
+			for (IConfigurationElement configurationElement : extension
+					.getConfigurationElements()) {
+
+				if ("observer".equals(configurationElement.getName())) {
+
+					final String observerClassName = configurationElement
+							.getAttribute("class");
+					final String observerName = configurationElement
+							.getAttribute("name");
+
+					if (checkIncludeObserver(observerClassName, bcontrol)) {
+
+						IAction action = getActionRegistry().getAction(
+								"de.bmotionstudio.gef.editor.observerAction."
+										+ observerClassName);
+						action.setText(observerName);
+						action.setToolTipText(observerName);
+
+						if (bcontrol.hasObserver(observerClassName)) {
+							action.setImageDescriptor(BMotionStudioImage
+									.getImageDescriptor(
+											BMotionEditorPlugin.PLUGIN_ID,
+											"icons/icon_chop.gif"));
+						} else {
+							action.setImageDescriptor(null);
+						}
+						handleObserverMenu.add(action);
+
+					}
+
+				}
+
+			}
+
+		}
+
+	}
+
+	private boolean checkIncludeObserver(String observerID, BControl control) {
+
+		IExtensionPoint extensionPoint = registry
+				.getExtensionPoint("de.bmotionstudio.gef.editor.includeObserver");
 
 		for (IExtension extension : extensionPoint.getExtensions()) {
 			for (IConfigurationElement configurationElement : extension
@@ -142,35 +184,25 @@ public class BMSContextMenuProvider extends ContextMenuProvider {
 							.getAttribute("language");
 
 					if (langID != null
-							&& langID.equals(bcontrol.getVisualization().getLanguage())) {
-
-						for (IConfigurationElement configC : configurationElement
-								.getChildren("control")) {
-
-							String cID = configC.getAttribute("id");
+							&& langID.equals(control.getVisualization()
+									.getLanguage())) {
 
-							if (bcontrol.getType().equals(cID)) {
+						for (IConfigurationElement cObserver : configurationElement
+								.getChildren("observer")) {
 
-								for (IConfigurationElement configO : configC
-										.getChildren("observer")) {
+							String oID = cObserver.getAttribute("id");
 
-									String oID = configO.getAttribute("id");
-									IAction action = getActionRegistry()
-											.getAction(
-													"de.bmotionstudio.gef.editor.observerAction."
-															+ oID);
+							if (observerID.equals(oID)) {
 
-									String name = oID;
+								for (IConfigurationElement configBControl : cObserver
+										.getChildren("control")) {
 
-									IConfigurationElement observerExtension = BMotionEditorPlugin
-											.getObserverExtension(oID);
-									if (observerExtension != null)
-										name = observerExtension
-												.getAttribute("name");
+									String bID = configBControl
+											.getAttribute("id");
 
-									action.setText(name);
-
-									handleObserverMenu.add(action);
+									if (control.getType().equals(bID)) {
+										return true;
+									}
 
 								}
 
@@ -185,6 +217,8 @@ public class BMSContextMenuProvider extends ContextMenuProvider {
 			}
 		}
 
+		return false;
+
 	}
 
 	private void buildEventMenu(IMenuManager menu, AbstractEditPart editPart) {
@@ -245,6 +279,14 @@ public class BMSContextMenuProvider extends ContextMenuProvider {
 								action.setText(configSchedulerElement
 										.getAttribute("name"));
 
+								// if (bcontrol.hasEvent(eventIDs[0])) {
+								// action
+								// .setImageDescriptor(BMotionStudioImage
+								// .getImageDescriptor(
+								// BMotionEditorPlugin.PLUGIN_ID,
+								// "icons/icon_chop.gif"));
+								// } else {
+
 								action.setImageDescriptor(null);
 
 								// }
diff --git a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/BMotionAbstractWizard.java b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/BMotionAbstractWizard.java
index fa865249..b4524f4a 100644
--- a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/BMotionAbstractWizard.java
+++ b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/BMotionAbstractWizard.java
@@ -6,79 +6,29 @@
 
 package de.bmotionstudio.gef.editor;
 
-import org.eclipse.jface.dialogs.IDialogConstants;
-import org.eclipse.jface.dialogs.TrayDialog;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Shell;
+import org.eclipse.jface.wizard.Wizard;
 
 import de.bmotionstudio.gef.editor.model.BControl;
 
-public abstract class BMotionAbstractWizard extends TrayDialog {
+public abstract class BMotionAbstractWizard extends Wizard {
 
 	private BControl control;
 	
-	public static final int CLOSE = 2;
-
-	public BMotionAbstractWizard(Shell shell, BControl control) {
-		super(shell);
+	public BMotionAbstractWizard(BControl control) {
 		this.control = control;
 	}
 
-	public BControl getBControl() {
-		return this.control;
-	}
-
 	@Override
-	protected void configureShell(Shell newShell) {
-		super.configureShell(newShell);
+	public boolean performFinish() {
+		return prepareToFinish();
 	}
-
-	public abstract String getName();
 	
-	@Override
-	protected int getShellStyle() {
-		return SWT.SHELL_TRIM;
-	}
-
-	@Override
-	protected Control createDialogArea(Composite parent) {
-
-		GridLayout layout = new GridLayout();
-		layout.marginHeight = 0;
-		layout.marginWidth = 0;
-		layout.verticalSpacing = 0;
-
-		Composite container = new Composite(parent, SWT.NONE);
-		container.setLayout(layout);
-		container.setLayoutData(new GridData(GridData.FILL_BOTH));
-
-		createWizardContent(container);
-
-		return container;
-
-	}
-
-	@Override
-	protected void createButtonsForButtonBar(Composite parent) {
-		createButton(parent, IDialogConstants.CLOSE_ID,
-				IDialogConstants.CLOSE_LABEL, true);
-	}
-
-	@Override
-	protected void buttonPressed(int buttonId) {
-		if (IDialogConstants.CLOSE_ID == buttonId)
-			closePressed();
-	}
-
-	protected void closePressed() {
-		setReturnCode(CLOSE);
-		close();
+	public BControl getBControl() {
+		return this.control;
 	}
 
-	public abstract Control createWizardContent(Composite parent);
+	public abstract String getName();
 
+	protected abstract Boolean prepareToFinish();
+	
 }
diff --git a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/EditorImageRegistry.java b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/EditorImageRegistry.java
index 72511e5f..56b16757 100644
--- a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/EditorImageRegistry.java
+++ b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/EditorImageRegistry.java
@@ -8,7 +8,7 @@ package de.bmotionstudio.gef.editor;
 
 public class EditorImageRegistry implements IBMotionStudioImageRegistry {
 
-	// public static final String IMG_ICON_ADD = "icon_add";
+	public static final String IMG_ICON_ADD = "icon_add";
 	public static final String IMG_ICON_CHOP = "icon_chop";
 	public static final String IMG_ICON_DELETE = "icon_delete";
 	public static final String IMG_ICON_DELETE21 = "icon_delete21";
@@ -18,6 +18,7 @@ public class EditorImageRegistry implements IBMotionStudioImageRegistry {
 	public static final String IMG_ICON_OBSERVER = "icon_observer";
 	public static final String IMG_ICON_LOADING = "icon_loading";
 	public static final String IMG_ICON_LIBRARY = "icon_library";
+	public static final String IMG_ICON_ASCRIPT = "icon_ascript";
 	public static final String IMG_ICON_UP = "icon_up";
 	public static final String IMG_ICON_DOWN = "icon_down";
 	public static final String IMG_ICON_CONNECTION16 = "icon_connection16";
@@ -27,7 +28,6 @@ public class EditorImageRegistry implements IBMotionStudioImageRegistry {
 	public static final String IMG_ICON_TR_UP = "icon_tr_up";
 	public static final String IMG_ICON_TR_LEFT = "icon_tr_left";
 	public static final String IMG_ICON_CONTROL_HIDDEN = "icon_control_hidden";
-	public static final String IMG_ICON_HELP = "icon_help";
 
 	public static final String IMG_ICON_JPG = "icon_jpg";
 	public static final String IMG_ICON_GIF = "icon_gif";
@@ -36,8 +36,8 @@ public class EditorImageRegistry implements IBMotionStudioImageRegistry {
 
 	public void registerImages() {
 
-		// BMotionStudioImage.registerImage(IMG_ICON_ADD,
-		// BMotionEditorPlugin.PLUGIN_ID, "icons/icon_add.gif");
+		BMotionStudioImage.registerImage(IMG_ICON_ADD,
+				BMotionEditorPlugin.PLUGIN_ID, "icons/icon_add.gif");
 		BMotionStudioImage.registerImage(IMG_ICON_CHOP,
 				BMotionEditorPlugin.PLUGIN_ID, "icons/icon_chop.gif");
 		BMotionStudioImage.registerImage(IMG_ICON_DELETE,
@@ -54,6 +54,8 @@ public class EditorImageRegistry implements IBMotionStudioImageRegistry {
 				BMotionEditorPlugin.PLUGIN_ID, "icons/icon_loading.gif");
 		BMotionStudioImage.registerImage(IMG_ICON_LIBRARY,
 				BMotionEditorPlugin.PLUGIN_ID, "icons/icon_library.gif");
+		BMotionStudioImage.registerImage(IMG_ICON_ASCRIPT,
+				BMotionEditorPlugin.PLUGIN_ID, "icons/icon_ascript.png");
 		BMotionStudioImage.registerImage(IMG_ICON_UP,
 				BMotionEditorPlugin.PLUGIN_ID, "icons/icon_up.gif");
 		BMotionStudioImage.registerImage(IMG_ICON_DOWN,
@@ -70,9 +72,6 @@ public class EditorImageRegistry implements IBMotionStudioImageRegistry {
 				"org.eclipse.ui", "$nl$/icons/full/etool16/delete_edit.gif");
 		BMotionStudioImage.registerImage(IMG_ICON_DELETE_EDIT,
 				"org.eclipse.ui", "$nl$/icons/full/etool16/delete_edit.gif");
-		BMotionStudioImage.registerImage(IMG_ICON_HELP,
-				BMotionEditorPlugin.PLUGIN_ID,
-				"icons/eclipse16/linkto_help.gif");
 		BMotionStudioImage
 				.registerImage(IMG_ICON_TR_UP, BMotionEditorPlugin.PLUGIN_ID,
 						"icons/eclipse16/updated_co.gif");
diff --git a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/action/BMotionAbstractWizardDialog.java b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/action/BMotionAbstractWizardDialog.java
new file mode 100644
index 00000000..d9a3d5c3
--- /dev/null
+++ b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/action/BMotionAbstractWizardDialog.java
@@ -0,0 +1,107 @@
+/** 
+ * (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.action;
+
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.wizard.IWizard;
+import org.eclipse.jface.wizard.WizardDialog;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Cursor;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.ToolBar;
+import org.eclipse.swt.widgets.ToolItem;
+import org.eclipse.ui.IWorkbenchPart;
+
+import de.bmotionstudio.gef.editor.BMotionStudioImage;
+import de.bmotionstudio.gef.editor.EditorImageRegistry;
+
+public abstract class BMotionAbstractWizardDialog extends WizardDialog {
+
+	public static final int DELETE = 3;
+
+	private IWorkbenchPart workbenchPart;
+
+	private String deleteToolTip;
+
+	public BMotionAbstractWizardDialog(IWorkbenchPart workbenchPart, IWizard newWizard) {
+		super(workbenchPart.getSite().getShell(), newWizard);
+		this.workbenchPart = workbenchPart;
+	}
+
+	@Override
+	protected Control createButtonBar(Composite parent) {
+		Composite composite = new Composite(parent, SWT.NONE);
+		GridLayout layout = new GridLayout();
+		layout.marginWidth = 0;
+		layout.marginHeight = 0;
+		layout.horizontalSpacing = 0;
+		composite.setLayout(layout);
+		composite
+				.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false));
+		composite.setFont(parent.getFont());
+
+		// create help control if needed
+		if (isHelpAvailable()) {
+			Control helpControl = createHelpControl(composite);
+			((GridData) helpControl.getLayoutData()).horizontalIndent = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN);
+		}
+
+		Control deleteControl = createDeleteControl(composite);
+		((GridData) deleteControl.getLayoutData()).horizontalIndent = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN);
+		setHelpAvailable(false);
+		Control buttonSection = super.createButtonBar(composite);
+		((GridData) buttonSection.getLayoutData()).grabExcessHorizontalSpace = true;
+		return composite;
+	}
+
+	private Control createDeleteControl(Composite parent) {
+		return createDeleteImageButton(parent,
+				BMotionStudioImage
+						.getImage(EditorImageRegistry.IMG_ICON_DELETE21));
+	}
+
+	private ToolBar createDeleteImageButton(Composite parent, Image image) {
+		ToolBar toolBar = new ToolBar(parent, SWT.FLAT | SWT.NO_FOCUS);
+		((GridLayout) parent.getLayout()).numColumns++;
+		toolBar.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_CENTER));
+		final Cursor cursor = new Cursor(parent.getDisplay(), SWT.CURSOR_HAND);
+		toolBar.setCursor(cursor);
+		toolBar.addDisposeListener(new DisposeListener() {
+			public void widgetDisposed(DisposeEvent e) {
+				cursor.dispose();
+			}
+		});
+		ToolItem deleteToolItem = new ToolItem(toolBar, SWT.NONE);
+		deleteToolItem.setImage(image);
+		deleteToolItem.setToolTipText(deleteToolTip);
+		deleteToolItem.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				deletePressed();
+			}
+		});
+		return toolBar;
+	}
+
+	protected abstract void deletePressed();
+
+	public IWorkbenchPart getWorkbenchPart() {
+		return workbenchPart;
+	}
+
+	protected void setDeleteToolTip(String msg) {
+		this.deleteToolTip = msg;
+	}
+
+}
diff --git a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/action/BMotionObserverWizardDialog.java b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/action/BMotionObserverWizardDialog.java
new file mode 100644
index 00000000..b5ccee62
--- /dev/null
+++ b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/action/BMotionObserverWizardDialog.java
@@ -0,0 +1,35 @@
+/** 
+ * (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.action;
+
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.wizard.IWizard;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.IWorkbenchPart;
+
+public class BMotionObserverWizardDialog extends BMotionAbstractWizardDialog {
+
+	public BMotionObserverWizardDialog(IWorkbenchPart workbenchPart, IWizard newWizard) {
+		super(workbenchPart, newWizard);
+		setShellStyle(SWT.CLOSE | SWT.RESIZE);
+		setDeleteToolTip("Delete Observer");
+	}
+
+	@Override
+	protected void deletePressed() {
+
+		if (MessageDialog.openConfirm(Display.getDefault().getActiveShell(),
+				"Do you really want to delete this Observer?",
+				"Do you really want to delete this Observer?")) {
+			setReturnCode(DELETE);
+			close();
+		}
+
+	}
+
+}
diff --git a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/action/BMotionSchedulerEventWizardDialog.java b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/action/BMotionSchedulerEventWizardDialog.java
new file mode 100644
index 00000000..f14aa16a
--- /dev/null
+++ b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/action/BMotionSchedulerEventWizardDialog.java
@@ -0,0 +1,43 @@
+/** 
+ * (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.action;
+
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.wizard.IWizard;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.IWorkbenchPart;
+
+import de.bmotionstudio.gef.editor.scheduler.SchedulerWizard;
+
+public class BMotionSchedulerEventWizardDialog extends BMotionAbstractWizardDialog {
+
+	public BMotionSchedulerEventWizardDialog(IWorkbenchPart workbenchPart,
+			IWizard newWizard) {
+		super(workbenchPart, newWizard);
+		setShellStyle(SWT.CLOSE);
+		setDeleteToolTip("Delete Event");
+	}
+
+	@Override
+	protected void deletePressed() {
+
+		if (MessageDialog.openConfirm(Display.getDefault().getActiveShell(),
+				"Do you really want to delete this Event?",
+				"Do you really want to delete this Event?")) {
+			RemoveSchedulerEventAction action = new RemoveSchedulerEventAction(
+					getWorkbenchPart());
+			action.setControl(((SchedulerWizard) getWizard()).getBControl());
+			action.setSchedulerEvent(((SchedulerWizard) getWizard())
+					.getScheduler());
+			action.run();
+			setReturnCode(DELETE);
+			close();
+		}
+
+	}
+}
diff --git a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/action/OpenObserverAction.java b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/action/OpenObserverAction.java
index d8ff6ba3..352e07a9 100644
--- a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/action/OpenObserverAction.java
+++ b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/action/OpenObserverAction.java
@@ -8,11 +8,16 @@ package de.bmotionstudio.gef.editor.action;
 
 import java.util.List;
 
+import org.eclipse.core.runtime.CoreException;
 import org.eclipse.gef.EditPart;
 import org.eclipse.gef.ui.actions.SelectionAction;
-import org.eclipse.swt.widgets.Display;
+import org.eclipse.jface.wizard.WizardDialog;
 import org.eclipse.ui.IWorkbenchPart;
 
+import de.bmotionstudio.gef.editor.BMotionEditorPlugin;
+import de.bmotionstudio.gef.editor.BMotionStudioImage;
+import de.bmotionstudio.gef.editor.command.RemoveObserverCommand;
+import de.bmotionstudio.gef.editor.command.SetObserverCommand;
 import de.bmotionstudio.gef.editor.model.BControl;
 import de.bmotionstudio.gef.editor.observer.Observer;
 import de.bmotionstudio.gef.editor.observer.ObserverWizard;
@@ -44,23 +49,79 @@ public class OpenObserverAction extends SelectionAction {
 
 		if (actionControl != null) {
 
+			Observer oldObserver = null;
 			Observer observer = getControl().getObserver(getClassName());
 
-			ObserverWizard wizard = observer.getWizard(Display.getDefault()
-					.getActiveShell(), actionControl);
+			// If an observer does not exist, add one
+			if (observer == null) {
+
+				try {
+					observer = (Observer) BMotionEditorPlugin
+							.getObserverExtension(getClassName())
+							.createExecutableExtension("class");
+				} catch (CoreException e) {
+				}
+
+			} else { // else edit the current observer
+
+				// therefore, clone the current observer, if the user aborts
+				// editing the current observer
+				try {
+					oldObserver = observer.clone();
+				} catch (CloneNotSupportedException e) {
+				}
+
+			}
+
+			ObserverWizard wizard = observer.getWizard(actionControl);
 
 			if (wizard != null) {
-				wizard.create();
-				wizard.getShell().setSize(wizard.getSize());
-				String title = "Observer: " + observer.getName() + " Control: "
-						+ getControl().getID();
-				wizard.getShell().setText(title);
-				// wizard.setWindowTitle("BMotion Studio Observer Wizard");
-				// wizard.setTitle(title);
-				// wizard.setMessage(observer.getDescription());
-				// wizard.setTitleImage(BMotionStudioImage
-				// .getImage(BMotionStudioImage.IMG_LOGO_BMOTION64));
-				wizard.open();
+
+				BMotionObserverWizardDialog dialog = new BMotionObserverWizardDialog(
+						getWorkbenchPart(), wizard);
+				dialog.create();
+				dialog.getShell().setSize(wizard.getSize());
+				String title = "Observer: " + observer.getName()
+						+ " Control: " + getControl().getID();
+				wizard.setWindowTitle("BMotion Studio Observer Wizard");
+				dialog.setTitle(title);
+				dialog.setMessage(observer.getDescription());
+				dialog.setTitleImage(BMotionStudioImage
+						.getImage(BMotionStudioImage.IMG_LOGO_BMOTION64));
+				int status = dialog.open();
+
+				// The user clicked on the "OK" button in order to confirm his
+				// changes on the observer
+				if (status == WizardDialog.OK) {
+
+					// If the observer delete flag is set to true, delete the
+					// observer anyway
+					if (wizard.isObserverDelete()) {
+						RemoveObserverCommand cmd = createRemoveObserverCommand(
+								observer, actionControl);
+						execute(cmd);
+					} else {
+						SetObserverCommand cmd = createObserverSetCommand(
+								actionControl, observer, oldObserver);
+						execute(cmd);
+					}
+
+					// else the user canceled his changes on the observer
+				} else if (status == WizardDialog.CANCEL) {
+
+					// Reset observer without using a command!
+					if (oldObserver != null)
+						actionControl.getObservers().put(oldObserver.getID(),
+								oldObserver);
+
+					// else the user clicked on the delete button in order to
+					// delete the observer
+				} else if (status == BMotionObserverWizardDialog.DELETE) {
+					RemoveObserverCommand cmd = createRemoveObserverCommand(
+							observer, actionControl);
+					execute(cmd);
+				}
+
 			} else {
 				Logger.notifyUserWithoutBugreport("The Observer \""
 						+ observer.getName()
@@ -70,6 +131,28 @@ public class OpenObserverAction extends SelectionAction {
 
 	}
 
+	private RemoveObserverCommand createRemoveObserverCommand(
+			Observer observer, BControl control) {
+		RemoveObserverCommand cmd = new RemoveObserverCommand();
+		cmd.setControl(control);
+		cmd.setObserver(observer);
+		return cmd;
+	}
+
+	public SetObserverCommand createObserverSetCommand(BControl control,
+			Observer newObserver, Observer oldObserver) {
+		SetObserverCommand cmd = new SetObserverCommand();
+		cmd.setNewObserver(newObserver);
+		cmd.setOldObserver(oldObserver);
+		cmd.setControl(control);
+		return cmd;
+	}
+
+	public SetObserverCommand createObserverSetCommand(BControl control,
+			Observer newObserver) {
+		return createObserverSetCommand(control, newObserver, null);
+	}
+
 	public void setClassName(String className) {
 		this.className = className;
 	}
diff --git a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/action/OpenSchedulerEventAction.java b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/action/OpenSchedulerEventAction.java
index f35094ca..dff15928 100644
--- a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/action/OpenSchedulerEventAction.java
+++ b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/action/OpenSchedulerEventAction.java
@@ -8,12 +8,16 @@ package de.bmotionstudio.gef.editor.action;
 
 import java.util.List;
 
+import org.eclipse.core.runtime.CoreException;
 import org.eclipse.gef.EditPart;
 import org.eclipse.gef.ui.actions.SelectionAction;
-import org.eclipse.swt.widgets.Display;
+import org.eclipse.jface.wizard.WizardDialog;
 import org.eclipse.ui.IWorkbenchPart;
 
 import de.bmotionstudio.gef.editor.AttributeConstants;
+import de.bmotionstudio.gef.editor.BMotionEditorPlugin;
+import de.bmotionstudio.gef.editor.BMotionStudioImage;
+import de.bmotionstudio.gef.editor.command.SchedulerEventCommand;
 import de.bmotionstudio.gef.editor.model.BControl;
 import de.bmotionstudio.gef.editor.scheduler.SchedulerEvent;
 import de.bmotionstudio.gef.editor.scheduler.SchedulerWizard;
@@ -23,6 +27,7 @@ public class OpenSchedulerEventAction extends SelectionAction {
 
 	private String className;
 	private String eventID;
+	private SchedulerEvent clonedSchedulerEvent;
 
 	public OpenSchedulerEventAction(IWorkbenchPart part) {
 		super(part);
@@ -41,33 +46,82 @@ public class OpenSchedulerEventAction extends SelectionAction {
 	public void run() {
 
 		BControl bcontrol = getControl();
+		clonedSchedulerEvent = null;
 
 		if (bcontrol != null) {
 
 			SchedulerEvent newSchedulerEvent = bcontrol.getEvent(getEventID());
 
+			// Add Scheduler Event
+			if (newSchedulerEvent == null) {
+
+				try {
+					newSchedulerEvent = (SchedulerEvent) BMotionEditorPlugin
+							.getSchedulerExtension(getClassName())
+							.createExecutableExtension("class");
+				} catch (CoreException e) {
+				}
+
+			} else { // Edit Scheduler Event
+
+				// Clone Scheduler Event
+				try {
+					clonedSchedulerEvent = newSchedulerEvent.clone();
+				} catch (CloneNotSupportedException e) {
+				}
+
+			}
+
 			if (newSchedulerEvent != null) {
 
 				newSchedulerEvent.setEventID(getEventID());
-				SchedulerWizard wizard = newSchedulerEvent.getWizard(Display
-						.getDefault().getActiveShell(), bcontrol);
+				SchedulerWizard wizard = newSchedulerEvent.getWizard(bcontrol);
 
 				if (wizard != null) {
 
-					wizard.create();
-					wizard.getShell().setSize(wizard.getSize());
+					BMotionSchedulerEventWizardDialog dialog = new BMotionSchedulerEventWizardDialog(
+							getWorkbenchPart(), wizard);
+					dialog.create();
+					dialog.getShell().setSize(wizard.getSize());
 					String title = "Scheduler Event: "
 							+ newSchedulerEvent.getName()
 							+ " Control: "
 							+ bcontrol
 									.getAttributeValue(AttributeConstants.ATTRIBUTE_ID);
-					wizard.getShell().setText(title);
-					// wizard.setWindowTitle("BMotion Studio Scheduler Event Wizard");
-					// wizard.setTitle(title);
-					// wizard.setMessage(newSchedulerEvent.getDescription());
-					// wizard.setTitleImage(BMotionStudioImage
-					// .getImage(BMotionStudioImage.IMG_LOGO_BMOTION64));
-					wizard.open();
+					wizard.setWindowTitle("BMotion Studio Scheduler Event Wizard");
+					dialog.setTitle(title);
+					dialog.setMessage(newSchedulerEvent.getDescription());
+					dialog.setTitleImage(BMotionStudioImage
+							.getImage(BMotionStudioImage.IMG_LOGO_BMOTION64));
+					int status = dialog.open();
+
+					if (status == WizardDialog.OK) {
+
+						SchedulerEventCommand schedulerEventCommand = createSchedulerEventCommand();
+						schedulerEventCommand
+								.setNewSchedulerEvent(newSchedulerEvent);
+
+						if (wizard.isEventDelete()) {
+
+							RemoveSchedulerEventAction action = new RemoveSchedulerEventAction(
+									getWorkbenchPart());
+							action.setControl(getControl());
+							action.setSchedulerEvent(clonedSchedulerEvent);
+							action.run();
+
+						} else {
+							if (clonedSchedulerEvent != null) {
+								schedulerEventCommand
+										.setClonedSchedulerEvent(clonedSchedulerEvent);
+							}
+							execute(schedulerEventCommand);
+						}
+
+					} else if (status == WizardDialog.CANCEL) {
+						if (clonedSchedulerEvent != null)
+							bcontrol.addEvent(getEventID(),
+									clonedSchedulerEvent);
+					}
 
 				} else {
 					Logger.notifyUserWithoutBugreport("The Scheduler Event \""
@@ -83,6 +137,14 @@ public class OpenSchedulerEventAction extends SelectionAction {
 
 	}
 
+	public SchedulerEventCommand createSchedulerEventCommand() {
+		SchedulerEventCommand command = new SchedulerEventCommand();
+		command.setClassName(getClassName());
+		command.setEventID(getEventID());
+		command.setControl(getControl());
+		return command;
+	}
+
 	public void setClassName(String className) {
 		this.className = className;
 	}
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 8d153eff..1d93f734 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
@@ -165,8 +165,7 @@ public abstract class BControl implements IAdaptable, Cloneable {
 		initStandardAttributes();
 		// Init custom control attributes
 		initAttributes();
-		// Init observer
-		initObserver();
+
 	}
 
 	private List<String> getSupportedObserverList() {
@@ -220,37 +219,6 @@ public abstract class BControl implements IAdaptable, Cloneable {
 
 	}
 
-	private void initObserver() {
-
-		List<String> supportedObserverList = getSupportedObserverList();
-		for (String oID : supportedObserverList) {
-
-			// 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();
-					}
-				}
-
-			}
-
-		}
-
-	}
-
 	private void initStandardAttributes() {
 
 		// Init unique ID
diff --git a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/ColumnObserver.java b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/ColumnObserver.java
index d7c41fb8..04309d36 100644
--- a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/ColumnObserver.java
+++ b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/ColumnObserver.java
@@ -3,8 +3,6 @@ package de.bmotionstudio.gef.editor.observer;
 import java.util.LinkedList;
 import java.util.List;
 
-import org.eclipse.swt.widgets.Shell;
-
 import de.bmotionstudio.gef.editor.Animation;
 import de.bmotionstudio.gef.editor.AttributeConstants;
 import de.bmotionstudio.gef.editor.attribute.AbstractAttribute;
@@ -94,8 +92,8 @@ public class ColumnObserver extends Observer {
 	}
 
 	@Override
-	public ObserverWizard getWizard(Shell shell, BControl control) {
-		return new WizardColumnObserver(shell, control, this);
+	public ObserverWizard getWizard(BControl control) {
+		return new WizardColumnObserver(control, this);
 	}
 
 }
\ No newline at end of file
diff --git a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/ExternalObserverScript.java b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/ExternalObserverScript.java
new file mode 100644
index 00000000..66140364
--- /dev/null
+++ b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/ExternalObserverScript.java
@@ -0,0 +1,77 @@
+/** 
+ * (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;
+
+import groovy.lang.GroovyClassLoader;
+import groovy.lang.GroovyObject;
+
+import java.io.File;
+import java.io.IOException;
+
+import org.codehaus.groovy.control.CompilationFailedException;
+import org.eclipse.core.resources.IFile;
+
+import de.bmotionstudio.gef.editor.Animation;
+import de.bmotionstudio.gef.editor.model.BControl;
+import de.bmotionstudio.gef.editor.observer.wizard.WizardObserverExternalObserverScript;
+
+public class ExternalObserverScript extends Observer {
+
+	public static String ID = "de.bmotionstudio.gef.editor.observer.ExternalObserverScript";
+
+	private transient GroovyObject groovyObject;
+
+	private String scriptPath;
+
+	// private String language;
+
+	@Override
+	public void check(Animation animation, BControl control) {
+
+		try {
+
+			if (groovyObject == null) {
+				IFile pFile = control.getVisualization().getProjectFile();
+				String myPath = (pFile.getProject().getLocation() + "/" + scriptPath)
+						.replace("file:", "");
+				ClassLoader parent = getClass().getClassLoader();
+				GroovyClassLoader loader = new GroovyClassLoader(parent);
+				Class<?> groovyClass;
+				groovyClass = loader.parseClass(new File(myPath));
+				// let's call some method on an instance
+				groovyObject = (GroovyObject) groovyClass.newInstance();
+			}
+
+			Object[] args = { animation, control };
+			groovyObject.invokeMethod("check", args);
+
+		} catch (CompilationFailedException e) {
+			e.printStackTrace();
+		} catch (IOException e) {
+			e.printStackTrace();
+		} catch (InstantiationException e) {
+			e.printStackTrace();
+		} catch (IllegalAccessException e) {
+			e.printStackTrace();
+		}
+
+	}
+
+	@Override
+	public ObserverWizard getWizard(BControl control) {
+		return new WizardObserverExternalObserverScript(control, this);
+	}
+
+	public String getScriptPath() {
+		return scriptPath;
+	}
+
+	public void setScriptPath(String scriptPath) {
+		this.scriptPath = scriptPath;
+	}
+
+}
diff --git a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/ListenOperationByPredicate.java b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/ListenOperationByPredicate.java
index d061b875..59584f2b 100644
--- a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/ListenOperationByPredicate.java
+++ b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/ListenOperationByPredicate.java
@@ -9,8 +9,6 @@ package de.bmotionstudio.gef.editor.observer;
 import java.util.ArrayList;
 import java.util.List;
 
-import org.eclipse.swt.widgets.Shell;
-
 import de.be4.classicalb.core.parser.exceptions.BException;
 import de.bmotionstudio.gef.editor.Animation;
 import de.bmotionstudio.gef.editor.AttributeConstants;
@@ -156,9 +154,8 @@ public class ListenOperationByPredicate extends Observer {
 	}
 
 	@Override
-	public ObserverWizard getWizard(Shell shell, BControl control) {
-		return new WizardObserverListenOperationByPredicate(shell, control,
-				this);
+	public ObserverWizard getWizard(BControl control) {
+		return new WizardObserverListenOperationByPredicate(control, this);
 	}
 
 	public void setList(ArrayList<PredicateOperation> list) {
diff --git a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/Observer.java b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/Observer.java
index 2df22ada..d503290e 100644
--- a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/Observer.java
+++ b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/Observer.java
@@ -8,7 +8,6 @@ package de.bmotionstudio.gef.editor.observer;
 
 import org.eclipse.core.runtime.IConfigurationElement;
 import org.eclipse.draw2d.IFigure;
-import org.eclipse.swt.widgets.Shell;
 
 import de.bmotionstudio.gef.editor.AbstractExpressionControl;
 import de.bmotionstudio.gef.editor.BMotionEditorPlugin;
@@ -69,7 +68,7 @@ public abstract class Observer extends AbstractExpressionControl implements
 	 *            The corresponding control
 	 * @return the corresponding wizard
 	 */
-	public abstract ObserverWizard getWizard(Shell shell, BControl control);
+	public abstract ObserverWizard getWizard(BControl control);
 
 	public IFigure getToolTip(BControl control) {
 		return null;
diff --git a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/ObserverEvalObject.java b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/ObserverEvalObject.java
index 678bb63c..f03260e6 100644
--- a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/ObserverEvalObject.java
+++ b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/ObserverEvalObject.java
@@ -10,12 +10,20 @@ import de.bmotionstudio.gef.editor.BindingObject;
 
 public class ObserverEvalObject extends BindingObject implements Cloneable {
 
-	private String eval;
+	private String type; // unused
 
-	private String attribute;
+	private String eval; // Predicate
 
 	private Object value;
 
+	private String attribute;
+
+	/**
+	 * If true, value attribute is an ExpressionValueElement otherwise value
+	 * attribute is an simple value object (e.g. background image)
+	 * 
+	 * @see ExpressionValueElement
+	 */
 	private Boolean isExpressionMode;
 
 	private transient Boolean hasError;
@@ -24,13 +32,24 @@ public class ObserverEvalObject extends BindingObject implements Cloneable {
 		this.isExpressionMode = false;
 	}
 
-	public ObserverEvalObject(String eval, Boolean isExpressionMode) {
+	public ObserverEvalObject(String type, String eval, Boolean isExpressionMode) {
+		this.type = type;
 		this.eval = eval;
 		this.isExpressionMode = isExpressionMode;
 	}
 
-	public ObserverEvalObject(String eval) {
-		this(eval, false);
+	public ObserverEvalObject(String type, String eval) {
+		this(type, eval, false);
+	}
+
+	public void setType(String type) {
+		Object oldValue = this.type;
+		this.type = type;
+		firePropertyChange("type", oldValue, this.type);
+	}
+
+	public String getType() {
+		return type;
 	}
 
 	public void setEval(String eval) {
diff --git a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/ObserverWizard.java b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/ObserverWizard.java
index a281190d..252a7b62 100644
--- a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/ObserverWizard.java
+++ b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/ObserverWizard.java
@@ -7,8 +7,6 @@
 package de.bmotionstudio.gef.editor.observer;
 
 import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.ui.PlatformUI;
 
 import de.bmotionstudio.gef.editor.BMotionAbstractWizard;
 import de.bmotionstudio.gef.editor.model.BControl;
@@ -26,8 +24,10 @@ public abstract class ObserverWizard extends BMotionAbstractWizard {
 
 	private Observer observer;
 
-	public ObserverWizard(Shell shell, BControl control, Observer observer) {
-		super(shell, control);
+	protected Boolean observerDelete = false;
+
+	public ObserverWizard(BControl control, Observer observer) {
+		super(control);
 		this.observer = observer;
 	}
 
@@ -35,6 +35,14 @@ public abstract class ObserverWizard extends BMotionAbstractWizard {
 		return this.observer;
 	}
 
+	protected void setObserverDelete(Boolean b) {
+		this.observerDelete = b;
+	}
+
+	public Boolean isObserverDelete() {
+		return this.observerDelete;
+	}
+
 	public abstract Point getSize();
 	
 	@Override
@@ -42,11 +50,4 @@ public abstract class ObserverWizard extends BMotionAbstractWizard {
 		return observer.getName();
 	}
 
-	@Override
-	protected void configureShell(Shell newShell) {
-		super.configureShell(newShell);
-		PlatformUI.getWorkbench().getHelpSystem()
-				.setHelp(newShell, observer.getID());
-	}
-
 }
diff --git a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/SetAttribute.java b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/SetAttribute.java
index 3fdd5cbb..02773321 100644
--- a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/SetAttribute.java
+++ b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/SetAttribute.java
@@ -10,7 +10,6 @@ import java.util.ArrayList;
 import java.util.List;
 
 import org.eclipse.draw2d.IFigure;
-import org.eclipse.swt.widgets.Shell;
 
 import de.bmotionstudio.gef.editor.Animation;
 import de.bmotionstudio.gef.editor.attribute.AbstractAttribute;
@@ -65,6 +64,14 @@ public class SetAttribute extends Observer {
 							attributeVal.toString(), control, animation);
 					String er = attributeObj.validateValue(strAtrVal, null);
 					if (er != null) {
+						// addError(
+						// control,
+						// animation,
+						// "You selected "
+						// + attributeObj.getName()
+						// +
+						// " as attribute. There is a problem with your value: "
+						// + strAtrVal + " - Reason: " + er);
 						obj.setHasError(true);
 					} else {
 						attributeVal = attributeObj.unmarshal(strAtrVal);
@@ -101,8 +108,8 @@ public class SetAttribute extends Observer {
 	}
 
 	@Override
-	public ObserverWizard getWizard(Shell shell, BControl control) {
-		return new WizardObserverSetAttribute(shell, control, this);
+	public ObserverWizard getWizard(BControl control) {
+		return new WizardObserverSetAttribute(control, this);
 	}
 
 	public void setSetAttributeObjects(
@@ -126,6 +133,23 @@ public class SetAttribute extends Observer {
 
 	@Override
 	public IFigure getToolTip(BControl control) {
+		// // TODO: This method need rework!!!
+		// StringBuilder builder = new StringBuilder();
+		// builder.append("Set Attribute Observer:\n\n");
+		// for (SetAttributeObject obj : getSetAttributeObjects()) {
+		// if (obj.getEval() != null) {
+		// builder.append("[Predicate: " + obj.getEval());
+		// }
+		// if (obj.getAttribute() != null) {
+		// builder.append(" | Attribute: "
+		// + control.getAttribute(obj.getAttribute()).getName());
+		// }
+		// if (obj.getValue() != null) {
+		// builder.append(" | Value: " + obj.getValue() + "]");
+		// }
+		// builder.append("\n");
+		// }
+		// Label lb = new Label(builder.toString());
 		return null;
 	}
 
diff --git a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/SetAttributeObject.java b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/SetAttributeObject.java
index cdacd822..d73f0c5a 100644
--- a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/SetAttributeObject.java
+++ b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/SetAttributeObject.java
@@ -13,8 +13,8 @@ public class SetAttributeObject extends ObserverEvalObject implements Cloneable
 		super();
 	}
 
-	public SetAttributeObject(String eval) {
-		super(eval);
+	public SetAttributeObject(String type, String eval) {
+		super(type, eval);
 	}
 
 	public SetAttributeObject clone() throws CloneNotSupportedException {
diff --git a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/SimpleValueDisplay.java b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/SimpleValueDisplay.java
index 303d92f0..9886b318 100644
--- a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/SimpleValueDisplay.java
+++ b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/SimpleValueDisplay.java
@@ -6,8 +6,6 @@
 
 package de.bmotionstudio.gef.editor.observer;
 
-import org.eclipse.swt.widgets.Shell;
-
 import de.bmotionstudio.gef.editor.Animation;
 import de.bmotionstudio.gef.editor.AttributeConstants;
 import de.bmotionstudio.gef.editor.model.BControl;
@@ -58,8 +56,8 @@ public class SimpleValueDisplay extends Observer {
 
 	}
 
-	public ObserverWizard getWizard(Shell shell, final BControl bcontrol) {
-		return new WizardObserverSimpleValueDisplay(shell, bcontrol, this);
+	public ObserverWizard getWizard(final BControl bcontrol) {
+		return new WizardObserverSimpleValueDisplay(bcontrol, this);
 	}
 
 	public String getType() {
diff --git a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/SwitchChildCoordinates.java b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/SwitchChildCoordinates.java
index eaa05892..b078e128 100644
--- a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/SwitchChildCoordinates.java
+++ b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/SwitchChildCoordinates.java
@@ -9,8 +9,6 @@ package de.bmotionstudio.gef.editor.observer;
 import java.util.ArrayList;
 import java.util.List;
 
-import org.eclipse.swt.widgets.Shell;
-
 import de.bmotionstudio.gef.editor.Animation;
 import de.bmotionstudio.gef.editor.AttributeConstants;
 import de.bmotionstudio.gef.editor.model.BControl;
@@ -101,8 +99,8 @@ public class SwitchChildCoordinates extends Observer {
 
 	}
 
-	public ObserverWizard getWizard(Shell shell, final BControl bcontrol) {
-		return new WizardObserverCSwitchCoordinates(shell, bcontrol, this);
+	public ObserverWizard getWizard(final BControl bcontrol) {
+		return new WizardObserverCSwitchCoordinates(bcontrol, this);
 	}
 
 	public List<ToggleObjectCoordinates> getToggleObjects() {
diff --git a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/SwitchCoordinates.java b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/SwitchCoordinates.java
index 1c60cda3..0f7733a3 100644
--- a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/SwitchCoordinates.java
+++ b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/SwitchCoordinates.java
@@ -9,8 +9,6 @@ package de.bmotionstudio.gef.editor.observer;
 import java.util.ArrayList;
 import java.util.List;
 
-import org.eclipse.swt.widgets.Shell;
-
 import de.bmotionstudio.gef.editor.Animation;
 import de.bmotionstudio.gef.editor.AttributeConstants;
 import de.bmotionstudio.gef.editor.model.BControl;
@@ -111,8 +109,8 @@ public class SwitchCoordinates extends Observer {
 
 	}
 
-	public ObserverWizard getWizard(Shell shell, final BControl bcontrol) {
-		return new WizardObserverSwitchCoordinates(shell, bcontrol, this);
+	public ObserverWizard getWizard(final BControl bcontrol) {
+		return new WizardObserverSwitchCoordinates(bcontrol, this);
 	}
 
 	public List<ToggleObjectCoordinates> getToggleObjects() {
diff --git a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/SwitchImage.java b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/SwitchImage.java
index f4488770..4422c618 100644
--- a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/SwitchImage.java
+++ b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/SwitchImage.java
@@ -11,7 +11,6 @@ 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.AttributeConstants;
@@ -80,8 +79,8 @@ public class SwitchImage extends Observer {
 
 	}
 
-	public ObserverWizard getWizard(Shell shell, final BControl bcontrol) {
-		return new WizardObserverSwitchImage(shell, bcontrol, this);
+	public ObserverWizard getWizard(final BControl bcontrol) {
+		return new WizardObserverSwitchImage(bcontrol, this);
 	}
 
 	public List<ToggleObjectImage> getToggleObjects() {
diff --git a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/TableObserver.java b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/TableObserver.java
index 889da54b..9ad72ca8 100644
--- a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/TableObserver.java
+++ b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/TableObserver.java
@@ -3,8 +3,6 @@ package de.bmotionstudio.gef.editor.observer;
 import java.util.LinkedList;
 import java.util.List;
 
-import org.eclipse.swt.widgets.Shell;
-
 import de.bmotionstudio.gef.editor.Animation;
 import de.bmotionstudio.gef.editor.AttributeConstants;
 import de.bmotionstudio.gef.editor.attribute.AbstractAttribute;
@@ -101,33 +99,34 @@ public class TableObserver extends Observer {
 
 				String content = rows.get(i - numberOfOldRows);
 
-				if (content != null && content.length() > 0) {
+				if (content != null && content.length() > 0)
 					content = UnicodeTranslator.toAscii(content);
-					content = content.replaceAll("^\\(", "");
-					content = content.replaceAll("\\)$", "");
-					List<String> columns = split2(content, '#');
-					int numberOfNewColumns = columns.size();
-
-					// Set only one time the number of columns!
-					if (!setColumns) {
-						int ncolumns = numberOfNewColumns;
-						if (numberOfOldColumns > numberOfNewColumns)
-							ncolumns = numberOfOldColumns;
-						control.setAttributeValue(
-								AttributeConstants.ATTRIBUTE_COLUMNS, ncolumns,
-								true, false);
-						setColumns = true;
-					}
-
-					for (int z = 0; z < numberOfNewColumns; z++) {
-						String val = columns.get(z);
-						BControl column = control.getChildrenArray().get(z);
-						BControl cell = column.getChildrenArray().get(i);
-						if (val != null && val.length() > 0)
-							val = UnicodeTranslator.toUnicode(val);
-						cell.setAttributeValue(
-								AttributeConstants.ATTRIBUTE_TEXT, val);
-					}
+
+				content = content.replaceAll("^\\(", "");
+				content = content.replaceAll("\\)$", "");
+
+				List<String> columns = split2(content, '#');
+				int numberOfNewColumns = columns.size();
+
+				// Set only one time the number of columns!
+				if (!setColumns) {
+					int ncolumns = numberOfNewColumns;
+					if (numberOfOldColumns > numberOfNewColumns)
+						ncolumns = numberOfOldColumns;
+					control.setAttributeValue(
+							AttributeConstants.ATTRIBUTE_COLUMNS, ncolumns,
+							true, false);
+					setColumns = true;
+				}
+
+				for (int z = 0; z < numberOfNewColumns; z++) {
+					String val = columns.get(z);
+					BControl column = control.getChildrenArray().get(z);
+					BControl cell = column.getChildrenArray().get(i);
+					if (val != null && val.length() > 0)
+						val = UnicodeTranslator.toUnicode(val);
+					cell.setAttributeValue(AttributeConstants.ATTRIBUTE_TEXT,
+							val);
 				}
 
 			}
@@ -153,8 +152,8 @@ public class TableObserver extends Observer {
 	}
 
 	@Override
-	public ObserverWizard getWizard(Shell shell, BControl control) {
-		return new WizardTableObserver(shell, control, this);
+	public ObserverWizard getWizard(BControl control) {
+		return new WizardTableObserver(control, this);
 	}
 
 	public boolean isOverrideCells() {
diff --git a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/ToggleObjectCoordinates.java b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/ToggleObjectCoordinates.java
index a2c4ac9c..0ebd9af4 100644
--- a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/ToggleObjectCoordinates.java
+++ b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/ToggleObjectCoordinates.java
@@ -22,18 +22,18 @@ public class ToggleObjectCoordinates extends ObserverEvalObject implements
 		// this.animate = false;
 	}
 
-	public ToggleObjectCoordinates(String bcontrol, String x,
+	public ToggleObjectCoordinates(String type, String bcontrol, String x,
 			String y, String eval) {
-		super(eval);
+		super(type, eval);
 		this.bcontrol = bcontrol;
 		this.x = x;
 		this.y = y;
 		// this.animate = animate;
 	}
 
-	public ToggleObjectCoordinates(String x, String y,
+	public ToggleObjectCoordinates(String type, String x, String y,
  String eval) {
-		this(null, x, y, eval);
+		this(type, null, x, y, eval);
 	}
 
 	public String getBcontrol() {
diff --git a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/ToggleObjectImage.java b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/ToggleObjectImage.java
index 6f173c31..dcd32162 100644
--- a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/ToggleObjectImage.java
+++ b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/ToggleObjectImage.java
@@ -14,8 +14,8 @@ public class ToggleObjectImage extends ObserverEvalObject implements Cloneable {
 	public ToggleObjectImage() {
 	}
 
-	public ToggleObjectImage(String image, String eval) {
-		super(eval);
+	public ToggleObjectImage(String type, String image, String eval) {
+		super(type, eval);
 		this.image = image;
 	}
 
diff --git a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/view/HelpAction.java b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/view/HelpAction.java
deleted file mode 100644
index 37ac250c..00000000
--- a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/view/HelpAction.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/** 
- * (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.view;
-
-import org.eclipse.jface.action.Action;
-import org.eclipse.ui.PlatformUI;
-
-import de.bmotionstudio.gef.editor.BMotionStudioImage;
-
-public class HelpAction extends Action {
-
-	private String observerID;
-
-	public HelpAction() {
-		setText("Show help...");
-		setImageDescriptor(BMotionStudioImage
-				.getImageDescriptor("icons/eclipse16/linkto_help.gif"));
-		setEnabled(false);
-	}
-
-	@Override
-	public void run() {
-		PlatformUI.getWorkbench().getHelpSystem().displayHelp(observerID);
-	}
-
-	public void setObserverID(String observerID) {
-		this.observerID = observerID;
-	}
-
-}
diff --git a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/view/ObserverPage.java b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/view/ObserverPage.java
deleted file mode 100644
index 6652afca..00000000
--- a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/view/ObserverPage.java
+++ /dev/null
@@ -1,212 +0,0 @@
-/** 
- * (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.view;
-
-import java.util.Collection;
-
-import org.eclipse.jface.viewers.ILabelProvider;
-import org.eclipse.jface.viewers.ILabelProviderListener;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.IStructuredContentProvider;
-import org.eclipse.jface.viewers.ListViewer;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
-import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.layout.FillLayout;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.ui.ISelectionListener;
-import org.eclipse.ui.IWorkbenchPart;
-import org.eclipse.ui.part.IPageSite;
-import org.eclipse.ui.part.Page;
-
-import de.bmotionstudio.gef.editor.BMotionStudioImage;
-import de.bmotionstudio.gef.editor.EditorImageRegistry;
-import de.bmotionstudio.gef.editor.model.BControl;
-import de.bmotionstudio.gef.editor.observer.Observer;
-import de.bmotionstudio.gef.editor.observer.ObserverWizard;
-import de.bmotionstudio.gef.editor.part.BMSAbstractEditPart;
-
-public class ObserverPage extends Page implements ISelectionListener {
-
-	private Composite container;
-
-	private BControl selectedControl;
-
-	private ListViewer listViewer;
-
-	private Composite rightContainer;
-
-	private HelpAction helpAction;
-
-	@Override
-	public void createControl(Composite parent) {
-		container = new Composite(parent, SWT.NONE);
-		GridLayout layout = new GridLayout(2, false);
-		// layout.horizontalSpacing = 0;
-		// layout.verticalSpacing = 0;
-		container.setLayout(layout);
-		listViewer = new ListViewer(container);
-		listViewer.setContentProvider(new IStructuredContentProvider() {
-
-			@Override
-			public void dispose() {
-			}
-
-			@Override
-			public void inputChanged(Viewer viewer, Object oldInput,
-					Object newInput) {
-			}
-
-			@Override
-			public Object[] getElements(Object inputElement) {
-				Collection<?> observerList = (Collection<?>) inputElement;
-				return observerList.toArray();
-			}
-
-		});
-		listViewer.setLabelProvider(new ILabelProvider() {
-
-			@Override
-			public void removeListener(ILabelProviderListener listener) {
-				// TODO Auto-generated method stub
-
-			}
-
-			@Override
-			public boolean isLabelProperty(Object element, String property) {
-				// TODO Auto-generated method stub
-				return false;
-			}
-
-			@Override
-			public void dispose() {
-				// TODO Auto-generated method stub
-
-			}
-
-			@Override
-			public void addListener(ILabelProviderListener listener) {
-				// TODO Auto-generated method stub
-
-			}
-
-			@Override
-			public String getText(Object element) {
-				Observer o = (Observer) element;
-				return o.getName();
-			}
-
-			@Override
-			public Image getImage(Object element) {
-				return BMotionStudioImage
-						.getImage(EditorImageRegistry.IMG_ICON_OBSERVER);
-			}
-		});
-
-		GridData layoutData = new GridData(GridData.FILL_VERTICAL);
-		layoutData.widthHint = 120;
-		listViewer.getControl().setLayoutData(layoutData);
-		listViewer.addSelectionChangedListener(new ISelectionChangedListener() {
-
-			@Override
-			public void selectionChanged(SelectionChangedEvent event) {
-				restoreHelpButton();
-				if (rightContainer != null)
-					rightContainer.dispose();
-				if (event.getSelection() != null
-						&& event.getSelection() instanceof StructuredSelection) {
-					Object firstElement = ((StructuredSelection) event
-							.getSelection())
-							.getFirstElement();
-					if (firstElement instanceof Observer) {
-						Observer o = (Observer) firstElement;
-						ObserverWizard wizard = o
-								.getWizard(Display.getDefault()
-										.getActiveShell(), selectedControl);
-						// IWizardPage page = wizard.getPages()[0];
-						rightContainer = new Composite(container, SWT.NONE);
-						rightContainer.setLayoutData(new GridData(
-								GridData.FILL_BOTH));
-						rightContainer.setLayout(new FillLayout());
-						wizard.createWizardContent(rightContainer);
-						helpAction.setEnabled(true);
-						helpAction.setObserverID(o.getID());
-					}
-				}
-				container.layout();
-			}
-		});
-		
-		getSite().getPage().addPostSelectionListener(this);
-		createActions();
-		createMenu(getSite());
-
-	}
-
-	private void createActions() {
-		helpAction = new HelpAction();
-	}
-
-	private void createMenu(final IPageSite pageSite) {
-		pageSite.getActionBars().getToolBarManager().add(helpAction);
-	}
-
-	@Override
-	public Control getControl() {
-		return container;
-	}
-
-	@Override
-	public void setFocus() {
-		// TODO Auto-generated method stub
-
-	}
-
-	@Override
-	public void selectionChanged(IWorkbenchPart part, ISelection selection) {
-		if (selection != null && selection instanceof StructuredSelection) {
-			Object firstElement = ((StructuredSelection) selection)
-					.getFirstElement();
-			if (firstElement instanceof BMSAbstractEditPart) {
-				selectedControl = (BControl) ((BMSAbstractEditPart) firstElement)
-						.getModel();
-				if (!listViewer.getControl().isDisposed()) {
-					Collection<Observer> values = selectedControl
-							.getObservers().values();
-					listViewer.setInput(values);
-					if (values.size() > 0) {
-						Observer firstObserver = values.iterator().next();
-						listViewer.setSelection(new StructuredSelection(
-								firstObserver));
-					} else {
-						restoreHelpButton();
-						if (rightContainer != null)
-							rightContainer.dispose();
-					}
-				}
-			}
-		}
-	}
-
-	@Override
-	public void dispose() {
-		getSite().getPage().addPostSelectionListener(this);
-		super.dispose();
-	}
-
-	private void restoreHelpButton() {
-		helpAction.setEnabled(false);
-	}
-
-}
diff --git a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/view/ObserverView.java b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/view/ObserverView.java
deleted file mode 100644
index 11140584..00000000
--- a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/view/ObserverView.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/** 
- * (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.view;
-
-import org.eclipse.ui.IEditorPart;
-import org.eclipse.ui.IWorkbenchPage;
-import org.eclipse.ui.IWorkbenchPart;
-import org.eclipse.ui.part.IPage;
-import org.eclipse.ui.part.MessagePage;
-import org.eclipse.ui.part.PageBook;
-import org.eclipse.ui.part.PageBookView;
-
-import de.bmotionstudio.gef.editor.BMotionStudioEditor;
-
-public class ObserverView extends PageBookView {
-
-	public static String ID = "de.bmotionstudio.gef.editor.ObserverView";
-
-	private String defaultText = "The observer view is not available.";
-
-	private ObserverPage page;
-
-	@Override
-	protected IPage createDefaultPage(PageBook book) {
-		MessagePage page = new MessagePage();
-		initPage(page);
-		page.createControl(book);
-		page.setMessage(defaultText);
-		return page;
-	}
-
-	@Override
-	protected PageRec doCreatePage(IWorkbenchPart part) {
-		if (part instanceof BMotionStudioEditor) {
-			page = new ObserverPage();
-			initPage(page);
-			page.createControl(getPageBook());
-			return new PageRec(part, page);
-		}
-		return null;
-	}
-
-	@Override
-	protected void doDestroyPage(IWorkbenchPart part, PageRec rec) {
-		ObserverPage page = (ObserverPage) rec.page;
-		page.dispose();
-		rec.dispose();
-	}
-
-	@Override
-	protected IWorkbenchPart getBootstrapPart() {
-		IWorkbenchPage page = getSite().getPage();
-		if (page != null) {
-			return page.getActiveEditor();
-		}
-		return null;
-	}
-
-	@Override
-	protected boolean isImportant(IWorkbenchPart part) {
-		return (part instanceof IEditorPart);
-	}
-
-}
diff --git a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/wizard/AbstractObserverWizardPage.java b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/wizard/AbstractObserverWizardPage.java
new file mode 100644
index 00000000..2450ad1a
--- /dev/null
+++ b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/wizard/AbstractObserverWizardPage.java
@@ -0,0 +1,30 @@
+/** 
+ * (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 org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.PlatformUI;
+
+import de.bmotionstudio.gef.editor.observer.Observer;
+
+public class AbstractObserverWizardPage extends WizardPage {
+
+	private Observer observer;
+
+	protected AbstractObserverWizardPage(String pageName, Observer observer) {
+		super(pageName);
+		this.observer = observer;
+	}
+
+	@Override
+	public void createControl(Composite parent) {
+		PlatformUI.getWorkbench().getHelpSystem()
+				.setHelp(parent, observer.getClass().getName());
+	}
+
+}
diff --git a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/wizard/WizardColumnObserver.java b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/wizard/WizardColumnObserver.java
index dc48f9c0..04c3a5cd 100644
--- a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/wizard/WizardColumnObserver.java
+++ b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/wizard/WizardColumnObserver.java
@@ -9,6 +9,8 @@ package de.bmotionstudio.gef.editor.observer.wizard;
 import org.eclipse.core.databinding.DataBindingContext;
 import org.eclipse.core.databinding.beans.BeansObservables;
 import org.eclipse.jface.databinding.swt.SWTObservables;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.wizard.WizardPage;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.graphics.Font;
 import org.eclipse.swt.graphics.FontData;
@@ -16,10 +18,8 @@ import org.eclipse.swt.graphics.Point;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Shell;
 import org.eclipse.swt.widgets.Text;
 
 import de.bmotionstudio.gef.editor.model.BControl;
@@ -29,80 +29,93 @@ import de.bmotionstudio.gef.editor.observer.ObserverWizard;
 
 public class WizardColumnObserver extends ObserverWizard {
 
-	private Text txtExpression;
-	private Text txtPredicate;
+	private class ColumnObserverPage extends WizardPage {
 
-	@Override
-	public Control createWizardContent(Composite parent) {
+		private Text txtExpression;
+		private Text txtPredicate;
 
-		final DataBindingContext dbc = new DataBindingContext();
+		public Text getTxtExpression() {
+			return txtExpression;
+		}
 
-		Composite container = new Composite(parent, SWT.NONE);
+		protected ColumnObserverPage(final String pageName) {
+			super(pageName);
+		}
 
-		container.setLayout(new GridLayout(2, false));
+		public void createControl(final Composite parent) {
 
-		Label lb = new Label(container, SWT.NONE);
-		lb.setText("Predicate:");
+			final DataBindingContext dbc = new DataBindingContext();
 
-		txtPredicate = new Text(container, SWT.BORDER);
-		txtPredicate.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-		txtPredicate.setFont(new Font(Display.getDefault(), new FontData(
-				"Arial", 10, SWT.NONE)));
+			Composite container = new Composite(parent, SWT.NONE);
 
-		lb = new Label(container, SWT.NONE);
-		lb.setText("Expression:");
-		lb.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_BEGINNING));
+			container.setLayoutData(new GridData(GridData.FILL_BOTH));
+			container.setLayout(new GridLayout(2, false));
 
-		txtExpression = new Text(container, SWT.BORDER | SWT.MULTI | SWT.WRAP);
-		txtExpression.setLayoutData(new GridData(GridData.FILL_BOTH));
+			Label lb = new Label(container, SWT.NONE);
+			lb.setText("Predicate:");
 
-		initBindings(dbc);
+			txtPredicate = new Text(container, SWT.BORDER);
+			txtPredicate.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+			txtPredicate.setFont(new Font(Display.getDefault(), new FontData(
+					"Arial", 10, SWT.NONE)));
 
-		return container;
+			lb = new Label(container, SWT.NONE);
+			lb.setText("Expression:");
+			lb.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_BEGINNING));
 
-	}
+			txtExpression = new Text(container, SWT.BORDER | SWT.MULTI
+					| SWT.WRAP);
+			txtExpression.setLayoutData(new GridData(GridData.FILL_BOTH));
 
-	private void initBindings(DataBindingContext dbc) {
+			initBindings(dbc);
 
-		dbc.bindValue(SWTObservables.observeText(txtPredicate, SWT.Modify),
-				BeansObservables.observeValue((ColumnObserver) getObserver(),
-						"predicate"));
+			setControl(container);
 
-		dbc.bindValue(SWTObservables.observeText(txtExpression, SWT.Modify),
-				BeansObservables.observeValue((ColumnObserver) getObserver(),
-						"expression"));
+		}
 
-	}
+		private void initBindings(DataBindingContext dbc) {
+
+			dbc.bindValue(SWTObservables.observeText(txtPredicate, SWT.Modify),
+					BeansObservables.observeValue(
+							(ColumnObserver) getObserver(), "predicate"));
 
+			dbc.bindValue(
+					SWTObservables.observeText(txtExpression, SWT.Modify),
+					BeansObservables.observeValue(
+							(ColumnObserver) getObserver(), "expression"));
 
-	public WizardColumnObserver(Shell shell, BControl bcontrol,
+		}
+
+	}
+
+	public WizardColumnObserver(BControl bcontrol,
 			Observer bobserver) {
-		super(shell, bcontrol, bobserver);
+		super(bcontrol, bobserver);
+		addPage(new ColumnObserverPage("ColumnObserverPage"));
 	}
 
-	// @Override
-	// protected Boolean prepareToFinish() {
-	//
-	// ColumnObserverPage page = (ColumnObserverPage)
-	// getPage("ColumnObserverPage");
-	//
-	// String errorStr = "";
-	//
-	// if (page.getTxtExpression().getText().length() == 0)
-	// errorStr += "Please enter an expression.\n";
-	//
-	// if (page.getErrorMessage() != null)
-	// errorStr += "Please check the syntax/parser error.\n";
-	//
-	// if (errorStr.length() > 0) {
-	// MessageDialog.openError(Display.getDefault().getActiveShell(),
-	// "An Error occured", errorStr);
-	// return false;
-	// }
-	//
-	// return true;
-	//
-	// }
+	@Override
+	protected Boolean prepareToFinish() {
+
+		ColumnObserverPage page = (ColumnObserverPage) getPage("ColumnObserverPage");
+
+		String errorStr = "";
+
+		if (page.getTxtExpression().getText().length() == 0)
+			errorStr += "Please enter an expression.\n";
+
+		if (page.getErrorMessage() != null)
+			errorStr += "Please check the syntax/parser error.\n";
+
+		if (errorStr.length() > 0) {
+			MessageDialog.openError(Display.getDefault().getActiveShell(),
+					"An Error occured", errorStr);
+			return false;
+		}
+
+		return true;
+
+	}
 
 	@Override
 	public Point getSize() {
diff --git a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/wizard/WizardObserverCSwitchCoordinates.java b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/wizard/WizardObserverCSwitchCoordinates.java
index c76bf57e..d03fa3f9 100644
--- a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/wizard/WizardObserverCSwitchCoordinates.java
+++ b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/wizard/WizardObserverCSwitchCoordinates.java
@@ -12,6 +12,7 @@ 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.IStructuredSelection;
 import org.eclipse.jface.viewers.ITableColorProvider;
 import org.eclipse.jface.viewers.ITableFontProvider;
@@ -30,10 +31,10 @@ 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.be4.classicalb.core.parser.BParser;
+import de.bmotionstudio.gef.editor.BMotionAbstractWizard;
 import de.bmotionstudio.gef.editor.BMotionStudioImage;
 import de.bmotionstudio.gef.editor.EditorImageRegistry;
 import de.bmotionstudio.gef.editor.edit.PredicateEditingSupport;
@@ -47,121 +48,202 @@ import de.bmotionstudio.gef.editor.util.BMotionWizardUtil;
 
 public class WizardObserverCSwitchCoordinates extends ObserverWizard {
 
-	private TableViewer tableViewer;
+	// private String lastChangedControlID;
 
-	@Override
-	public Control createWizardContent(Composite parent) {
-
-		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, ToggleObjectCoordinates.class, getName());
-
-		TableViewerColumn column = new TableViewerColumn(tableViewer, SWT.NONE);
-		column.getColumn().setText("Predicate");
-		column.getColumn().setWidth(100);
-		column.setEditingSupport(new PredicateEditingSupport(tableViewer, dbc,
-				"eval", getBControl().getVisualization(), getShell()));
-
-		column = new TableViewerColumn(tableViewer, SWT.NONE);
-		column.getColumn().setText("Control");
-		column.getColumn().setWidth(175);
-		column.setEditingSupport(new TextEditingSupport(tableViewer, dbc,
-				"bcontrol"));
-
-		column = new TableViewerColumn(tableViewer, SWT.NONE);
-		column.getColumn().setText("X");
-		column.getColumn().setWidth(125);
-		column.setEditingSupport(new TextEditingSupport(tableViewer, dbc, "x"));
-
-		column = new TableViewerColumn(tableViewer, SWT.NONE);
-		column.getColumn().setText("Y");
-		column.getColumn().setWidth(125);
-		column.setEditingSupport(new TextEditingSupport(tableViewer, dbc, "y"));
-
-		ObservableListContentProvider contentProvider = new ObservableListContentProvider();
-		tableViewer.setContentProvider(contentProvider);
-		tableViewer.setLabelProvider(new ObserverLabelProvider(BeansObservables
-				.observeMaps(contentProvider.getKnownElements(), new String[] {
-						"eval", "bcontrol", "x", "y", "animate" })));
-
-		final WritableList input = new WritableList(
-				((SwitchChildCoordinates) getObserver()).getToggleObjects(),
-				ToggleObjectCoordinates.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()) {
-					return;
+	private class ObserverCSwitchCoordinatesPage extends
+			AbstractObserverWizardPage {
+
+		private TableViewer tableViewer;
+
+		protected ObserverCSwitchCoordinatesPage(final String pageName) {
+			super(pageName, getObserver());
+		}
+
+		public void createControl(Composite parent) {
+
+			super.createControl(parent);
+
+			DataBindingContext dbc = new DataBindingContext();
+
+			Composite container = new Composite(parent, SWT.NONE);
+			container.setLayout(new GridLayout(1, true));
+
+			tableViewer = BMotionWizardUtil.createBMotionWizardTableViewer(
+					container, ToggleObjectCoordinates.class,
+					((BMotionAbstractWizard) getWizard()).getName());
+			// tableViewer
+			// .addSelectionChangedListener(new ISelectionChangedListener() {
+			//
+			// @Override
+			// public void selectionChanged(SelectionChangedEvent event) {
+			// IStructuredSelection selection = (IStructuredSelection) event
+			// .getSelection();
+			// Object firstElement = selection.getFirstElement();
+			// if (firstElement instanceof ObserverEvalObject) {
+			// restorePreview();
+			// ObserverEvalObject observerEvalObject = (ObserverEvalObject)
+			// firstElement;
+			// if (!observerEvalObject.isExpressionMode()) {
+			// BControl control = getBControl();
+			// ToggleObjectCoordinates toggleObjectCoordinates =
+			// (ToggleObjectCoordinates) observerEvalObject;
+			// String attributeX = AttributeConstants.ATTRIBUTE_X;
+			// String attributeY = AttributeConstants.ATTRIBUTE_Y;
+			// String x = toggleObjectCoordinates.getX();
+			// String y = toggleObjectCoordinates.getY();
+			// String controlID = toggleObjectCoordinates
+			// .getBcontrol();
+			// BControl bControl = control
+			// .getChild(controlID);
+			// if (bControl != null) {
+			// bControl.setAttributeValue(attributeX,
+			// x, true, false);
+			// bControl.setAttributeValue(attributeY,
+			// y, true, false);
+			// }
+			// lastChangedControlID = controlID;
+			// }
+			// }
+			// }
+			//
+			// });
+
+			TableViewerColumn column = new TableViewerColumn(tableViewer,
+					SWT.NONE);
+			column.getColumn().setText("Predicate");
+			column.getColumn().setWidth(100);
+			column.setEditingSupport(new PredicateEditingSupport(tableViewer,
+					dbc, "eval", getBControl().getVisualization(), getShell()));
+
+			column = new TableViewerColumn(tableViewer, SWT.NONE);
+			column.getColumn().setText("Control");
+			column.getColumn().setWidth(175);
+			column.setEditingSupport(new TextEditingSupport(tableViewer, dbc,
+					"bcontrol"));
+
+			column = new TableViewerColumn(tableViewer, SWT.NONE);
+			column.getColumn().setText("X");
+			column.getColumn().setWidth(125);
+			column.setEditingSupport(new TextEditingSupport(tableViewer, dbc,
+					"x"));
+
+			column = new TableViewerColumn(tableViewer, SWT.NONE);
+			column.getColumn().setText("Y");
+			column.getColumn().setWidth(125);
+			column.setEditingSupport(new TextEditingSupport(tableViewer, dbc,
+					"y"));
+
+			// column = new TableViewerColumn(tableViewer, SWT.NONE);
+			// column.getColumn().setText("Animate?");
+			// column.getColumn().setWidth(75);
+			// column.setEditingSupport(new EditingSupport(tableViewer) {
+			//
+			// private CellEditor cellEditor = new CheckboxCellEditor(
+			// (Composite) tableViewer.getControl());
+			//
+			// @Override
+			// protected void setValue(Object element, Object value) {
+			// ((ToggleObjectCoordinates) element).setAnimate(Boolean
+			// .valueOf(String.valueOf(value)));
+			// }
+			//
+			// @Override
+			// protected Object getValue(Object element) {
+			// Boolean b = ((ToggleObjectCoordinates) element)
+			// .getAnimate();
+			// return b != null ? b : false;
+			// }
+			//
+			// @Override
+			// protected CellEditor getCellEditor(Object element) {
+			// return cellEditor;
+			// }
+			//
+			// @Override
+			// protected boolean canEdit(Object element) {
+			// return true;
+			// }
+			//
+			// });
+
+			ObservableListContentProvider contentProvider = new ObservableListContentProvider();
+			tableViewer.setContentProvider(contentProvider);
+			tableViewer
+					.setLabelProvider(new ObserverLabelProvider(
+							BeansObservables.observeMaps(
+									contentProvider.getKnownElements(),
+									new String[] { "eval", "bcontrol", "x",
+											"y", "animate" })));
+
+			final WritableList input = new WritableList(
+					((SwitchChildCoordinates) getObserver()).getToggleObjects(),
+					ToggleObjectCoordinates.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()) {
+						return;
+					}
+					ToggleObjectCoordinates toggleObj = (ToggleObjectCoordinates) ((IStructuredSelection) tableViewer
+							.getSelection()).getFirstElement();
+					input.remove(toggleObj);
 				}
-				ToggleObjectCoordinates toggleObj = (ToggleObjectCoordinates) ((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) {
-				ToggleObjectCoordinates toggleObj = new ToggleObjectCoordinates(
-						"", "", "", "");
-				input.add(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) {
+					ToggleObjectCoordinates toggleObj = new ToggleObjectCoordinates(
+							BParser.PREDICATE_PREFIX, "", "", "", "");
+					input.add(toggleObj);
+				}
+			});
 
-		return container;
+			setControl(container);
 
+		}
 	}
 
-	public WizardObserverCSwitchCoordinates(Shell shell, BControl bcontrol,
-			Observer bobserver) {
-		super(shell, bcontrol, bobserver);
+	public WizardObserverCSwitchCoordinates(final BControl bcontrol,
+			final Observer bobserver) {
+		super(bcontrol, bobserver);
+		addPage(new ObserverCSwitchCoordinatesPage(
+				"ObserverCToggleCoordinatesPage"));
 	}
 
-	// @Override
-	// protected Boolean prepareToFinish() {
-	// // restorePreview();
-	// if (((SwitchChildCoordinates) getObserver()).getToggleObjects().size() ==
-	// 0) {
-	// setObserverDelete(true);
-	// } else {
-	// for (ToggleObjectCoordinates obj : ((SwitchChildCoordinates)
-	// getObserver())
-	// .getToggleObjects()) {
-	// if (obj.getX().isEmpty() || obj.getY().isEmpty()
-	// || obj.getBcontrol().isEmpty()) {
-	// MessageDialog
-	// .openError(getShell(), "Please check your entries",
-	// "Please check your entries. The x , y and control fields must not be empty.");
-	// return false;
-	// }
-	// }
-	// }
-	// return true;
-	// }
+	@Override
+	protected Boolean prepareToFinish() {
+		// restorePreview();
+		if (((SwitchChildCoordinates) getObserver()).getToggleObjects().size() == 0) {
+			setObserverDelete(true);
+		} else {
+			for (ToggleObjectCoordinates obj : ((SwitchChildCoordinates) getObserver())
+					.getToggleObjects()) {
+				if (obj.getX().isEmpty() || obj.getY().isEmpty()
+						|| obj.getBcontrol().isEmpty()) {
+					MessageDialog
+							.openError(getShell(), "Please check your entries",
+									"Please check your entries. The x , y and control fields must not be empty.");
+					return false;
+				}
+			}
+		}
+		return true;
+	}
 
 	// private void restorePreview() {
 	// if (lastChangedControlID != null) {
@@ -173,11 +255,11 @@ public class WizardObserverCSwitchCoordinates extends ObserverWizard {
 	// }
 	// }
 
-	// @Override
-	// public boolean performCancel() {
-	// // restorePreview();
-	// return super.performCancel();
-	// }
+	@Override
+	public boolean performCancel() {
+		// restorePreview();
+		return super.performCancel();
+	}
 
 	@Override
 	public Point getSize() {
diff --git a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/wizard/WizardObserverExternalObserverScript.java b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/wizard/WizardObserverExternalObserverScript.java
new file mode 100644
index 00000000..9e4c0d4e
--- /dev/null
+++ b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/wizard/WizardObserverExternalObserverScript.java
@@ -0,0 +1,111 @@
+/** 
+ * (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 org.eclipse.core.databinding.DataBindingContext;
+import org.eclipse.core.databinding.beans.BeansObservables;
+import org.eclipse.jface.databinding.swt.SWTObservables;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.FontData;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+
+import de.bmotionstudio.gef.editor.model.BControl;
+import de.bmotionstudio.gef.editor.observer.ExternalObserverScript;
+import de.bmotionstudio.gef.editor.observer.Observer;
+import de.bmotionstudio.gef.editor.observer.ObserverWizard;
+
+public class WizardObserverExternalObserverScript extends ObserverWizard {
+
+	private class ObserverExternalObserverScriptPage extends WizardPage {
+
+		private Text txtScriptPath;
+
+		protected ObserverExternalObserverScriptPage(final String pageName) {
+			super(pageName);
+		}
+
+		public Text getTxtScriptPath() {
+			return txtScriptPath;
+		}
+
+		public void createControl(final Composite parent) {
+
+			final DataBindingContext dbc = new DataBindingContext();
+
+			Composite container = new Composite(parent, SWT.NONE);
+			container.setLayoutData(new GridData(GridData.FILL_BOTH));
+			container.setLayout(new GridLayout(2, false));
+
+			Label lb = new Label(container, SWT.NONE);
+			lb.setText("Script File:");
+
+			txtScriptPath = new Text(container, SWT.BORDER);
+			txtScriptPath.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+			txtScriptPath.setFont(new Font(Display.getDefault(), new FontData(
+					"Arial", 10, SWT.NONE)));
+
+			initBindings(dbc);
+
+			setControl(container);
+
+		}
+
+		private void initBindings(DataBindingContext dbc) {
+
+			dbc.bindValue(
+					SWTObservables.observeText(txtScriptPath, SWT.Modify),
+					BeansObservables.observeValue(
+							(ExternalObserverScript) getObserver(),
+							"scriptPath"));
+
+		}
+
+
+	}
+
+	public WizardObserverExternalObserverScript(BControl bcontrol,
+			Observer bobserver) {
+		super(bcontrol, bobserver);
+		addPage(new ObserverExternalObserverScriptPage(
+				"ObserverExternalObserverScriptPage"));
+	}
+
+	@Override
+	protected Boolean prepareToFinish() {
+
+		ObserverExternalObserverScriptPage page = (ObserverExternalObserverScriptPage) getPage("ObserverExternalObserverScriptPage");
+
+		String errorStr = "";
+
+		if (page.getTxtScriptPath().getText().length() == 0)
+			errorStr += "Please enter a path for a script file.\n";
+
+		if (errorStr.length() > 0) {
+			MessageDialog.openError(Display.getDefault().getActiveShell(),
+					"An Error occured", errorStr);
+			return false;
+		}
+
+		return true;
+
+	}
+
+	@Override
+	public Point getSize() {
+		return new Point(600, 500);
+	}
+
+}
diff --git a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/wizard/WizardObserverListenOperationByPredicate.java b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/wizard/WizardObserverListenOperationByPredicate.java
index 83adaee4..5369bc5c 100644
--- a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/wizard/WizardObserverListenOperationByPredicate.java
+++ b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/wizard/WizardObserverListenOperationByPredicate.java
@@ -16,6 +16,7 @@ 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;
@@ -37,15 +38,13 @@ 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.Shell;
 
+import de.bmotionstudio.gef.editor.BMotionAbstractWizard;
 import de.bmotionstudio.gef.editor.BMotionStudioImage;
 import de.bmotionstudio.gef.editor.EditorImageRegistry;
 import de.bmotionstudio.gef.editor.attribute.AbstractAttribute;
@@ -63,232 +62,326 @@ import de.bmotionstudio.gef.editor.util.BMotionWizardUtil;
 
 public class WizardObserverListenOperationByPredicate extends ObserverWizard {
 
-	private TableViewer tableViewer;
+	// private String lastChangedAttributeID;
 
-	@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, PredicateOperation.class, getName());
-
-		TableViewerColumn column = new TableViewerColumn(tableViewer, SWT.NONE);
-		column.getColumn().setText("Operation");
-		column.getColumn().setWidth(150);
-		column.setEditingSupport(new OperationValueEditingSupport(tableViewer,
-				getBControl()));
-
-		column = new TableViewerColumn(tableViewer, SWT.NONE);
-		column.getColumn().setText("Predicate");
-		column.getColumn().setWidth(150);
-		column.setEditingSupport(new PredicateEditingSupport(tableViewer, dbc,
-				"predicate", getBControl().getVisualization(), getShell()));
-
-		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[] {
-						"operationName", "predicate", "attribute", "value",
-						"isExpressionMode" })));
-		final WritableList input = new WritableList(
-				((ListenOperationByPredicate) getObserver()).getList(),
-				PredicateOperation.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()) {
-					return;
-				}
-				PredicateOperation obj = (PredicateOperation) ((IStructuredSelection) tableViewer
-						.getSelection()).getFirstElement();
-				input.remove(obj);
-			}
-		});
+	private class ObserverListenOperationByPredicatePage extends
+			AbstractObserverWizardPage {
 
-		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) {
-				PredicateOperation obj = new PredicateOperation();
-				input.add(obj);
-				tableViewer.setSelection(new StructuredSelection(obj));
-			}
-		});
+		private TableViewer tableViewer;
 
-		return container;
+		protected ObserverListenOperationByPredicatePage(final String pageName) {
+			super(pageName, getObserver());
+		}
 
-	}
+		public void createControl(final Composite parent) {
+
+			super.createControl(parent);
+
+			DataBindingContext dbc = new DataBindingContext();
+
+			Composite container = new Composite(parent, SWT.NONE);
+			container.setLayout(new GridLayout(1, true));
+
+			setControl(container);
+
+			tableViewer = BMotionWizardUtil.createBMotionWizardTableViewer(
+					container, PredicateOperation.class,
+					((BMotionAbstractWizard) getWizard()).getName());
+			// tableViewer
+			// .addSelectionChangedListener(new ISelectionChangedListener() {
+			//
+			// @Override
+			// public void selectionChanged(SelectionChangedEvent event) {
+			// IStructuredSelection selection = (IStructuredSelection) event
+			// .getSelection();
+			// Object firstElement = selection.getFirstElement();
+			// if (firstElement instanceof ObserverEvalObject) {
+			//
+			// ObserverEvalObject observerEvalObject = (ObserverEvalObject)
+			// firstElement;
+			// BControl control = getBControl();
+			//
+			// if (lastChangedAttributeID != null)
+			// control.restoreDefaultValue(lastChangedAttributeID);
+			//
+			// PredicateOperation obj = (PredicateOperation) observerEvalObject;
+			//
+			// if (!obj.isExpressionMode()) {
+			//
+			// String attribute = obj.getAttribute();
+			// Object value = obj.getValue();
+			// control.setAttributeValue(attribute, value,
+			// true, false);
+			//
+			// lastChangedAttributeID = attribute;
+			//
+			// }
+			//
+			// }
+			// }
+			//
+			// });
+
+			TableViewerColumn column = new TableViewerColumn(tableViewer,
+					SWT.NONE);
+			column.getColumn().setText("Operation");
+			column.getColumn().setWidth(150);
+			column.setEditingSupport(new OperationValueEditingSupport(
+					tableViewer, getBControl()));
+
+			column = new TableViewerColumn(tableViewer, SWT.NONE);
+			column.getColumn().setText("Predicate");
+			column.getColumn().setWidth(150);
+			column.setEditingSupport(new PredicateEditingSupport(tableViewer,
+					dbc, "predicate", getBControl().getVisualization(),
+					getShell()));
+
+			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()));
+
+			// MathTableViewerColumn columnEval = new MathTableViewerColumn(
+			// tableViewer, column, dbc, "predicate");
+			// columnEval.addErrorMessageListener(new IMessageListener() {
+			// public void setMsg(final String errorMsg) {
+			// if (errorMsg != null) {
+			// setErrorMessage(errorMsg);
+			// } else {
+			// setErrorMessage(null);
+			// setMessage(getObserver().getDescription());
+			// }
+			// }
+			// });
+
+			ObservableListContentProvider contentProvider = new ObservableListContentProvider();
+			tableViewer.setContentProvider(contentProvider);
+			tableViewer.setLabelProvider(new ObserverLabelProvider(
+					BeansObservables.observeMaps(
+							contentProvider.getKnownElements(), new String[] {
+									"operationName", "predicate", "attribute",
+									"value", "isExpressionMode" })));
+			final WritableList input = new WritableList(
+					((ListenOperationByPredicate) getObserver()).getList(),
+					PredicateOperation.class);
+			tableViewer.setInput(input);
+
+			// ColumnViewerEditorActivationStrategy activationSupport = new
+			// ColumnViewerEditorActivationStrategy(
+			// tableViewer) {
+			// protected boolean isEditorActivationEvent(
+			// ColumnViewerEditorActivationEvent event) {
+			// return event.eventType ==
+			// ColumnViewerEditorActivationEvent.TRAVERSAL
+			// || event.eventType ==
+			// ColumnViewerEditorActivationEvent.MOUSE_DOUBLE_CLICK_SELECTION
+			// || event.eventType ==
+			// ColumnViewerEditorActivationEvent.PROGRAMMATIC
+			// || (event.eventType ==
+			// ColumnViewerEditorActivationEvent.KEY_PRESSED && event.keyCode ==
+			// KeyLookupFactory
+			// .getDefault().formalKeyLookup(
+			// IKeyLookup.ENTER_NAME));
+			// }
+			// };
+			// activationSupport.setEnableEditorActivationWithKeyboard(true);
+
+			/*
+			 * Without focus highlighter, keyboard events will not be delivered
+			 * to
+			 * ColumnViewerEditorActivationStragety#isEditorActivationEvent(...)
+			 * (see above)
+			 */
+			// FocusCellHighlighter focusCellHighlighter = new
+			// FocusCellOwnerDrawHighlighter(
+			// tableViewer);
+			// TableViewerFocusCellManager focusCellManager = new
+			// TableViewerFocusCellManager(
+			// tableViewer, focusCellHighlighter);
+
+			// TableViewerEditor.create(tableViewer, focusCellManager,
+			// activationSupport, ColumnViewerEditor.TABBING_VERTICAL
+			// | ColumnViewerEditor.KEYBOARD_ACTIVATION);
+
+			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()) {
+						return;
+					}
+					PredicateOperation obj = (PredicateOperation) ((IStructuredSelection) tableViewer
+							.getSelection()).getFirstElement();
+					input.remove(obj);
+				}
+			});
+
+			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) {
+					PredicateOperation obj = new PredicateOperation();
+					input.add(obj);
+					tableViewer.setSelection(new StructuredSelection(obj));
+				}
+			});
 
-	private class AttributeObserverValueEditing extends EditingSupport {
+		}
 
-		private ComboBoxViewerCellEditor cellEditor = null;
+		private class AttributeObserverValueEditing extends EditingSupport {
 
-		public AttributeObserverValueEditing(TableViewer cv) {
-			super(cv);
-		}
+			private ComboBoxViewerCellEditor cellEditor = null;
 
-		@Override
-		protected boolean canEdit(Object element) {
-			return BMotionWizardUtil.isEditElement(getViewer());
-		}
+			public AttributeObserverValueEditing(TableViewer cv) {
+				super(cv);
+			}
 
-		@Override
-		protected Object getValue(Object element) {
-			return ((PredicateOperation) element).getAttribute();
-		}
+			@Override
+			protected boolean canEdit(Object element) {
+				return BMotionWizardUtil.isEditElement(getViewer());
+			}
 
-		@Override
-		protected void setValue(Object element, Object value) {
-			if (value != null) {
-				PredicateOperation obj = (PredicateOperation) element;
-				obj.setAttribute(value.toString());
-				obj.setIsExpressionMode(false);
+			@Override
+			protected Object getValue(Object element) {
+				return ((PredicateOperation) element).getAttribute();
 			}
-		}
 
-		@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());
+			@Override
+			protected void setValue(Object element, Object value) {
+				if (value != null) {
+					PredicateOperation obj = (PredicateOperation) 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();
 						}
-						return atrList;
-					}
-				});
+					});
+					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() {
+					((CCombo) cellEditor.getControl())
+							.addFocusListener(new FocusListener() {
 
-							String oldValue;
+								String oldValue;
 
-							public void focusGained(FocusEvent e) {
-								oldValue = ((CCombo) cellEditor.getControl())
-										.getText();
+								public void focusGained(FocusEvent e) {
+									oldValue = ((CCombo) cellEditor
+											.getControl()).getText();
 
-							}
+								}
 
-							public void focusLost(FocusEvent e) {
+								public void focusLost(FocusEvent e) {
 
-								if (!oldValue.equals(((CCombo) cellEditor
-										.getControl()).getText())) {
+									if (!oldValue.equals(((CCombo) cellEditor
+											.getControl()).getText())) {
 
-									IStructuredSelection selection = (IStructuredSelection) getViewer()
-											.getSelection();
+										IStructuredSelection selection = (IStructuredSelection) getViewer()
+												.getSelection();
 
-									PredicateOperation p = (PredicateOperation) selection
-											.getFirstElement();
+										PredicateOperation p = (PredicateOperation) selection
+												.getFirstElement();
 
-									AbstractAttribute atr = getBControl()
-											.getAttributes().get(
-													p.getAttribute());
+										AbstractAttribute atr = getBControl()
+												.getAttributes().get(
+														p.getAttribute());
 
-									p.setValue(atr.getValue());
-									tableViewer.refresh();
+										p.setValue(atr.getValue());
+										tableViewer.refresh();
 
+									}
 								}
-							}
 
-						});
+							});
 
+				}
+				return cellEditor;
 			}
-			return cellEditor;
+
 		}
 
 	}
 
-	public WizardObserverListenOperationByPredicate(Shell shell,
-			BControl bcontrol, Observer bobserver) {
-		super(shell, bcontrol, bobserver);
+	public WizardObserverListenOperationByPredicate(final BControl bcontrol,
+			final Observer bobserver) {
+		super(bcontrol, bobserver);
+		addPage(new ObserverListenOperationByPredicatePage(
+				"ObserverListenOperationByPredicatePage"));
+	}
+
+	@Override
+	public boolean performCancel() {
+		// getBControl().restoreDefaultValue(lastChangedAttributeID);
+		return super.performCancel();
 	}
 
-	// @Override
-	// public boolean performCancel() {
-	// // getBControl().restoreDefaultValue(lastChangedAttributeID);
-	// return super.performCancel();
-	// }
-
-	// @Override
-	// protected Boolean prepareToFinish() {
-	// // getBControl().restoreDefaultValue(lastChangedAttributeID);
-	// if (((ListenOperationByPredicate) getObserver()).getList().size() == 0) {
-	// setObserverDelete(true);
-	// } else {
-	// for (PredicateOperation obj : ((ListenOperationByPredicate)
-	// getObserver())
-	// .getList()) {
-	// if (obj.getOperationName().isEmpty()) {
-	// MessageDialog
-	// .openError(getShell(), "Please check your entries",
-	// "Please check your entries. The operation field must not be empty.");
-	// return false;
-	// } else if (obj.getAttribute() == null) {
-	// MessageDialog
-	// .openError(getShell(), "Please check your entries",
-	// "Please check your entries. The attribute field must not be empty.");
-	// return false;
-	// }
-	// }
-	// }
-	// return true;
-	// }
+	@Override
+	protected Boolean prepareToFinish() {
+		// getBControl().restoreDefaultValue(lastChangedAttributeID);
+		if (((ListenOperationByPredicate) getObserver()).getList().size() == 0) {
+			setObserverDelete(true);
+		} else {
+			for (PredicateOperation obj : ((ListenOperationByPredicate) getObserver())
+					.getList()) {
+				if (obj.getOperationName().isEmpty()) {
+					MessageDialog
+							.openError(getShell(), "Please check your entries",
+									"Please check your entries. The operation field must not be empty.");
+					return false;
+				} else if (obj.getAttribute() == null) {
+					MessageDialog
+							.openError(getShell(), "Please check your entries",
+									"Please check your entries. The attribute field must not be empty.");
+					return false;
+				}
+			}
+		}
+		return true;
+	}
 
 	@Override
 	public Point getSize() {
diff --git a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/wizard/WizardObserverSetAttribute.java b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/wizard/WizardObserverSetAttribute.java
index 9a6d6dbc..be616218 100644
--- a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/wizard/WizardObserverSetAttribute.java
+++ b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/wizard/WizardObserverSetAttribute.java
@@ -37,16 +37,15 @@ 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.be4.classicalb.core.parser.BParser;
+import de.bmotionstudio.gef.editor.BMotionAbstractWizard;
 import de.bmotionstudio.gef.editor.BMotionStudioImage;
 import de.bmotionstudio.gef.editor.EditorImageRegistry;
 import de.bmotionstudio.gef.editor.attribute.AbstractAttribute;
@@ -63,109 +62,255 @@ import de.bmotionstudio.gef.editor.util.BMotionWizardUtil;
 
 public class WizardObserverSetAttribute extends ObserverWizard {
 
-	private WritableList input;
+	// private String lastChangedAttributeID;
 
-	private TableViewer tableViewer;
+	private class WizardSetAttributePage extends AbstractObserverWizardPage {
+
+		private WritableList input;
+
+		private TableViewer tableViewer;
+
+		protected WizardSetAttributePage(final String pageName) {
+			super(pageName, getObserver());
+		}
+
+		public void createControl(Composite parent) {
+
+			super.createControl(parent);
+
+			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,
+					((BMotionAbstractWizard) getWizard()).getName());
+
+			// tableViewer
+			// .addSelectionChangedListener(new ISelectionChangedListener() {
+			//
+			// @Override
+			// public void selectionChanged(SelectionChangedEvent event) {
+			// IStructuredSelection selection = (IStructuredSelection) event
+			// .getSelection();
+			// Object firstElement = selection.getFirstElement();
+			// if (firstElement instanceof ObserverEvalObject) {
+			//
+			// ObserverEvalObject observerEvalObject = (ObserverEvalObject)
+			// firstElement;
+			// BControl control = getBControl();
+			//
+			// if (lastChangedAttributeID != null)
+			// control.restoreDefaultValue(lastChangedAttributeID);
+			//
+			// SetAttributeObject setAttributeObj = (SetAttributeObject)
+			// observerEvalObject;
+			//
+			// if (!setAttributeObj.isExpressionMode()) {
+			//
+			// String attribute = setAttributeObj
+			// .getAttribute();
+			// Object value = setAttributeObj.getValue();
+			// control.setAttributeValue(attribute, value,
+			// true, false);
+			//
+			// lastChangedAttributeID = attribute;
+			//
+			// }
+			//
+			// }
+			// }
+			//
+			// });
+
+			TableViewerColumn column = new TableViewerColumn(tableViewer,
+					SWT.NONE);
+			column.getColumn().setText("Predicate");
+			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(
+					((SetAttribute) 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(
+							BParser.PREDICATE_PREFIX, "");
+					input.add(toggleObj);
+					tableViewer
+							.setSelection(new StructuredSelection(toggleObj));
+				}
+			});
+
+			setControl(container);
+
+		}
+
+		private class AttributeObserverValueEditing extends EditingSupport {
+
+			private ComboBoxViewerCellEditor cellEditor = null;
+
+			public AttributeObserverValueEditing(TableViewer cv) {
+				super(cv);
+			}
 
-	@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("Predicate");
-		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(
-				((SetAttribute) 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;
+			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);
 				}
-				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));
+			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;
 			}
-		});
 
-		return container;
+		}
 
 	}
 
-	public WizardObserverSetAttribute(Shell shell, BControl control,
-			Observer observer) {
-		super(shell, control, observer);
+	public WizardObserverSetAttribute(BControl control, Observer observer) {
+		super(control, observer);
+		addPage(new WizardSetAttributePage("WizardSetAttributePage"));
 	}
 
 	@Override
@@ -173,31 +318,30 @@ public class WizardObserverSetAttribute extends ObserverWizard {
 		return new Point(800, 500);
 	}
 
-	// @Override
-	// protected Boolean prepareToFinish() {
-	// // getBControl().restoreDefaultValue(lastChangedAttributeID);
-	// if (((SetAttribute) getObserver()).getSetAttributeObjects().size() == 0)
-	// {
-	// setObserverDelete(true);
-	// } else {
-	// for (SetAttributeObject obj : ((SetAttribute) getObserver())
-	// .getSetAttributeObjects()) {
-	// if (obj.getAttribute() == null) {
-	// MessageDialog
-	// .openError(getShell(), "Please check your entries",
-	// "Please check your entries. The attribute field must not be empty.");
-	// return false;
-	// }
-	// }
-	// }
-	// return true;
-	// }
-
-	// @Override
-	// public boolean performCancel() {
-	// // getBControl().restoreDefaultValue(lastChangedAttributeID);
-	// return super.performCancel();
-	// }
+	@Override
+	protected Boolean prepareToFinish() {
+		// getBControl().restoreDefaultValue(lastChangedAttributeID);
+		if (((SetAttribute) getObserver()).getSetAttributeObjects().size() == 0) {
+			setObserverDelete(true);
+		} else {
+			for (SetAttributeObject obj : ((SetAttribute) getObserver())
+					.getSetAttributeObjects()) {
+				if (obj.getAttribute() == null) {
+					MessageDialog
+							.openError(getShell(), "Please check your entries",
+									"Please check your entries. The attribute field must not be empty.");
+					return false;
+				}
+			}
+		}
+		return true;
+	}
+
+	@Override
+	public boolean performCancel() {
+		// getBControl().restoreDefaultValue(lastChangedAttributeID);
+		return super.performCancel();
+	}
 
 	private class ObserverLabelProvider extends ObservableMapLabelProvider
 			implements ITableLabelProvider, ITableColorProvider,
@@ -269,102 +413,11 @@ public class WizardObserverSetAttribute extends ObserverWizard {
 		}
 
 		public Font getFont(final Object element, final int column) {
+			// return JFaceResources.getFontRegistry().get(
+			// BMotionStudioConstants.RODIN_FONT_KEY);
 			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.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/wizard/WizardObserverSimpleValueDisplay.java b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/wizard/WizardObserverSimpleValueDisplay.java
index 5d63d4cf..1f9a6b76 100644
--- a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/wizard/WizardObserverSimpleValueDisplay.java
+++ b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/wizard/WizardObserverSimpleValueDisplay.java
@@ -9,18 +9,16 @@ package de.bmotionstudio.gef.editor.observer.wizard;
 import org.eclipse.core.databinding.DataBindingContext;
 import org.eclipse.core.databinding.beans.BeansObservables;
 import org.eclipse.jface.databinding.swt.SWTObservables;
+import org.eclipse.jface.dialogs.MessageDialog;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.graphics.Font;
 import org.eclipse.swt.graphics.FontData;
 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.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Shell;
 import org.eclipse.swt.widgets.Text;
 
 import de.bmotionstudio.gef.editor.model.BControl;
@@ -30,102 +28,113 @@ import de.bmotionstudio.gef.editor.observer.SimpleValueDisplay;
 
 public class WizardObserverSimpleValueDisplay extends ObserverWizard {
 
-	private Text txtReplacementString;
-	private Text txtExpression;
-	private Text txtPredicate;
+	private class ObserverSimpleValueDisplayPage extends
+			AbstractObserverWizardPage {
 
-	@Override
-	public Control createWizardContent(Composite parent) {
+		private Text txtReplacementString;
+		private Text txtExpression;
+		private Text txtPredicate;
 
-		parent.setLayout(new FillLayout());
+		public Text getTxtExpression() {
+			return txtExpression;
+		}
 
-		final DataBindingContext dbc = new DataBindingContext();
+		protected ObserverSimpleValueDisplayPage(final String pageName) {
+			super(pageName, getObserver());
+		}
 
-		Composite container = new Composite(parent, SWT.NONE);
+		public void createControl(final Composite parent) {
 
-		container.setLayout(new GridLayout(2, false));
+			super.createControl(parent);
 
-		GridData gd = new GridData(GridData.VERTICAL_ALIGN_BEGINNING);
-		gd.widthHint = 120;
-		
-		Label lb = new Label(container, SWT.NONE);
-		lb.setText("Predicate:");
-		lb.setLayoutData(gd);
+			final DataBindingContext dbc = new DataBindingContext();
 
-		txtPredicate = new Text(container, SWT.BORDER);
-		txtPredicate.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-		txtPredicate.setFont(new Font(Display.getDefault(), new FontData(
-				"Arial", 10, SWT.NONE)));
+			Composite container = new Composite(parent, SWT.NONE);
 
-		lb = new Label(container, SWT.NONE);
-		lb.setText("Expression:");
-		lb.setLayoutData(gd);
+			container.setLayoutData(new GridData(GridData.FILL_BOTH));
+			container.setLayout(new GridLayout(2, false));
 
-		txtExpression = new Text(container, SWT.BORDER | SWT.MULTI | SWT.WRAP);
-		txtExpression.setLayoutData(new GridData(GridData.FILL_BOTH));
-		// txtExpression.setFont(JFaceResources.getFontRegistry().get(
-		// BMotionStudioConstants.RODIN_FONT_KEY));
+			Label lb = new Label(container, SWT.NONE);
+			lb.setText("Predicate:");
 
-		lb = new Label(container, SWT.NONE);
-		lb.setText("Replacement String:");
-		lb.setLayoutData(gd);
+			txtPredicate = new Text(container, SWT.BORDER);
+			txtPredicate.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+			txtPredicate.setFont(new Font(Display.getDefault(), new FontData(
+					"Arial", 10, SWT.NONE)));
 
-		txtReplacementString = new Text(container, SWT.BORDER);
-		txtReplacementString.setLayoutData(new GridData(
-				GridData.FILL_HORIZONTAL));
-		txtReplacementString.setFont(new Font(Display.getDefault(),
-				new FontData("Arial", 10, SWT.NONE)));
+			lb = new Label(container, SWT.NONE);
+			lb.setText("Expression:");
+			lb.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_BEGINNING));
 
-		initBindings(dbc);
+			txtExpression = new Text(container, SWT.BORDER | SWT.MULTI
+					| SWT.WRAP);
+			txtExpression.setLayoutData(new GridData(GridData.FILL_BOTH));
+			// txtExpression.setFont(JFaceResources.getFontRegistry().get(
+			// BMotionStudioConstants.RODIN_FONT_KEY));
 
-		return container;
+			lb = new Label(container, SWT.NONE);
+			lb.setText("Replacement String:");
 
-	}
+			txtReplacementString = new Text(container, SWT.BORDER);
+			txtReplacementString.setLayoutData(new GridData(
+					GridData.FILL_HORIZONTAL));
+			txtReplacementString.setFont(new Font(Display.getDefault(),
+					new FontData("Arial", 10, SWT.NONE)));
+
+			initBindings(dbc);
+
+			setControl(container);
 
-	private void initBindings(DataBindingContext dbc) {
+		}
 
-		dbc.bindValue(SWTObservables.observeText(txtPredicate, SWT.Modify),
-				BeansObservables.observeValue(
-						(SimpleValueDisplay) getObserver(), "predicate"));
+		private void initBindings(DataBindingContext dbc) {
 
-		dbc.bindValue(SWTObservables.observeText(txtExpression, SWT.Modify),
-				BeansObservables.observeValue(
-						(SimpleValueDisplay) getObserver(), "eval"));
+			dbc.bindValue(SWTObservables.observeText(txtPredicate, SWT.Modify),
+					BeansObservables.observeValue(
+							(SimpleValueDisplay) getObserver(), "predicate"));
 
-		dbc.bindValue(SWTObservables.observeText(txtReplacementString,
-				SWT.Modify), BeansObservables.observeValue(
-				(SimpleValueDisplay) getObserver(), "replacementString"));
+			dbc.bindValue(
+					SWTObservables.observeText(txtExpression, SWT.Modify),
+					BeansObservables.observeValue(
+							(SimpleValueDisplay) getObserver(), "eval"));
+
+			dbc.bindValue(SWTObservables.observeText(txtReplacementString,
+					SWT.Modify), BeansObservables.observeValue(
+					(SimpleValueDisplay) getObserver(), "replacementString"));
+
+		}
 
 	}
 
-	public WizardObserverSimpleValueDisplay(Shell shell, BControl bcontrol,
+	public WizardObserverSimpleValueDisplay(BControl bcontrol,
 			Observer bobserver) {
-		super(shell, bcontrol, bobserver);
+		super(bcontrol, bobserver);
+		addPage(new ObserverSimpleValueDisplayPage(
+				"ObserverSimpleValueDisplayPage"));
 	}
 
-	// @Override
-	// protected Boolean prepareToFinish() {
-	//
-	// ObserverSimpleValueDisplayPage page = (ObserverSimpleValueDisplayPage)
-	// getPage("ObserverSimpleValueDisplayPage");
-	//
-	// String errorStr = "";
-	//
-	// if (page.getTxtExpression().getText().length() == 0)
-	// errorStr += "Please enter an expression.\n";
-	//
-	// if (page.getErrorMessage() != null)
-	// errorStr += "Please check the syntax/parser error.\n";
-	//
-	// if (errorStr.length() > 0) {
-	// MessageDialog.openError(Display.getDefault().getActiveShell(),
-	// "An Error occured", errorStr);
-	// return false;
-	// }
-	//
-	// return true;
-	//
-	// }
+	@Override
+	protected Boolean prepareToFinish() {
+
+		ObserverSimpleValueDisplayPage page = (ObserverSimpleValueDisplayPage) getPage("ObserverSimpleValueDisplayPage");
+
+		String errorStr = "";
+
+		if (page.getTxtExpression().getText().length() == 0)
+			errorStr += "Please enter an expression.\n";
+
+		if (page.getErrorMessage() != null)
+			errorStr += "Please check the syntax/parser error.\n";
+
+		if (errorStr.length() > 0) {
+			MessageDialog.openError(Display.getDefault().getActiveShell(),
+					"An Error occured", errorStr);
+			return false;
+		}
+
+		return true;
+
+	}
 
 	@Override
 	public Point getSize() {
diff --git a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/wizard/WizardObserverSwitchCoordinates.java b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/wizard/WizardObserverSwitchCoordinates.java
index 8e502a6f..88248dcb 100644
--- a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/wizard/WizardObserverSwitchCoordinates.java
+++ b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/wizard/WizardObserverSwitchCoordinates.java
@@ -12,6 +12,7 @@ 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.IStructuredSelection;
 import org.eclipse.jface.viewers.ITableColorProvider;
 import org.eclipse.jface.viewers.ITableFontProvider;
@@ -26,16 +27,15 @@ 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.be4.classicalb.core.parser.BParser;
+import de.bmotionstudio.gef.editor.BMotionAbstractWizard;
 import de.bmotionstudio.gef.editor.BMotionStudioImage;
 import de.bmotionstudio.gef.editor.EditorImageRegistry;
 import de.bmotionstudio.gef.editor.edit.PredicateEditingSupport;
@@ -49,96 +49,195 @@ import de.bmotionstudio.gef.editor.util.BMotionWizardUtil;
 
 public class WizardObserverSwitchCoordinates extends ObserverWizard {
 
-	private TableViewer tableViewer;
+	private class ObserverToggleCoordinatesPage extends
+			AbstractObserverWizardPage {
 
-	@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, ToggleObjectCoordinates.class, getName());
-
-		TableViewerColumn column = new TableViewerColumn(tableViewer, SWT.NONE);
-		column.getColumn().setText("Predicate");
-		column.getColumn().setWidth(200);
-		column.setEditingSupport(new PredicateEditingSupport(tableViewer, dbc,
-				"eval", getBControl().getVisualization(), getShell()));
-
-		column = new TableViewerColumn(tableViewer, SWT.NONE);
-		column.getColumn().setText("X");
-		column.getColumn().setWidth(150);
-		column.setEditingSupport(new TextEditingSupport(tableViewer, dbc, "x"));
-
-		column = new TableViewerColumn(tableViewer, SWT.NONE);
-		column.getColumn().setText("Y");
-		column.getColumn().setWidth(150);
-		column.setEditingSupport(new TextEditingSupport(tableViewer, dbc, "y"));
-
-		ObservableListContentProvider contentProvider = new ObservableListContentProvider();
-		tableViewer.setContentProvider(contentProvider);
-		tableViewer.setLabelProvider(new ObserverLabelProvider(BeansObservables
-				.observeMaps(contentProvider.getKnownElements(), new String[] {
-						"eval", "x", "y" })));
-
-		final WritableList input = new WritableList(
-				((SwitchCoordinates) getObserver()).getToggleObjects(),
-				ToggleObjectCoordinates.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()) {
-					return;
+		private TableViewer tableViewer;
+
+		protected ObserverToggleCoordinatesPage(final String pageName) {
+			super(pageName, getObserver());
+		}
+
+		public void createControl(Composite parent) {
+
+			super.createControl(parent);
+
+			DataBindingContext dbc = new DataBindingContext();
+
+			Composite container = new Composite(parent, SWT.NONE);
+			container.setLayout(new GridLayout(1, true));
+
+			tableViewer = BMotionWizardUtil.createBMotionWizardTableViewer(
+					container, ToggleObjectCoordinates.class,
+					((BMotionAbstractWizard) getWizard()).getName());
+
+			// tableViewer
+			// .addSelectionChangedListener(new ISelectionChangedListener() {
+			//
+			// @Override
+			// public void selectionChanged(SelectionChangedEvent event) {
+			// IStructuredSelection selection = (IStructuredSelection) event
+			// .getSelection();
+			// Object firstElement = selection.getFirstElement();
+			// if (firstElement instanceof ObserverEvalObject) {
+			// ObserverEvalObject observerEvalObject = (ObserverEvalObject)
+			// firstElement;
+			// if (!observerEvalObject.isExpressionMode()) {
+			// BControl control = getBControl();
+			// ToggleObjectCoordinates toggleObjectCoordinates =
+			// (ToggleObjectCoordinates) observerEvalObject;
+			// String attributeX = AttributeConstants.ATTRIBUTE_X;
+			// String attributeY = AttributeConstants.ATTRIBUTE_Y;
+			// String x = toggleObjectCoordinates.getX();
+			// String y = toggleObjectCoordinates.getY();
+			// control.setAttributeValue(attributeX, x,
+			// true, false);
+			// control.setAttributeValue(attributeY, y,
+			// true, false);
+			// }
+			// }
+			// }
+			//
+			// });
+
+			TableViewerColumn column = new TableViewerColumn(tableViewer,
+					SWT.NONE);
+			column.getColumn().setText("Predicate");
+			column.getColumn().setWidth(200);
+			column.setEditingSupport(new PredicateEditingSupport(tableViewer,
+					dbc, "eval", getBControl().getVisualization(), getShell()));
+
+			column = new TableViewerColumn(tableViewer, SWT.NONE);
+			column.getColumn().setText("X");
+			column.getColumn().setWidth(150);
+			column.setEditingSupport(new TextEditingSupport(tableViewer, dbc,
+					"x"));
+
+			column = new TableViewerColumn(tableViewer, SWT.NONE);
+			column.getColumn().setText("Y");
+			column.getColumn().setWidth(150);
+			column.setEditingSupport(new TextEditingSupport(tableViewer, dbc,
+					"y"));
+
+			// column = new TableViewerColumn(tableViewer, SWT.NONE);
+			// column.getColumn().setText("Animate?");
+			// column.getColumn().setWidth(75);
+			// column.setEditingSupport(new EditingSupport(tableViewer) {
+			//
+			// private CellEditor cellEditor = new CheckboxCellEditor(
+			// (Composite) tableViewer.getControl());
+			//
+			// @Override
+			// protected void setValue(Object element, Object value) {
+			// ((ToggleObjectCoordinates) element).setAnimate(Boolean
+			// .valueOf(String.valueOf(value)));
+			// }
+			//
+			// @Override
+			// protected Object getValue(Object element) {
+			// Boolean b = ((ToggleObjectCoordinates) element)
+			// .getAnimate();
+			// return b != null ? b : false;
+			// }
+			//
+			// @Override
+			// protected CellEditor getCellEditor(Object element) {
+			// return cellEditor;
+			// }
+			//
+			// @Override
+			// protected boolean canEdit(Object element) {
+			// return true;
+			// }
+			//
+			// });
+
+			ObservableListContentProvider contentProvider = new ObservableListContentProvider();
+			tableViewer.setContentProvider(contentProvider);
+			tableViewer.setLabelProvider(new ObserverLabelProvider(
+					BeansObservables.observeMaps(
+							contentProvider.getKnownElements(), new String[] {
+									"eval", "x", "y" })));
+
+			final WritableList input = new WritableList(
+					((SwitchCoordinates) getObserver()).getToggleObjects(),
+					ToggleObjectCoordinates.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()) {
+						return;
+					}
+					ToggleObjectCoordinates toggleObj = (ToggleObjectCoordinates) ((IStructuredSelection) tableViewer
+							.getSelection()).getFirstElement();
+					input.remove(toggleObj);
 				}
-				ToggleObjectCoordinates toggleObj = (ToggleObjectCoordinates) ((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) {
-				ToggleObjectCoordinates toggleObj = new ToggleObjectCoordinates(
-						"", String.valueOf(getBControl().getLayout().x), String
-								.valueOf(getBControl().getLayout().y), "");
-				input.add(toggleObj);
-				tableViewer.setSelection(new StructuredSelection(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) {
+					ToggleObjectCoordinates toggleObj = new ToggleObjectCoordinates(
+							BParser.PREDICATE_PREFIX, "", String
+									.valueOf(getBControl().getLayout().x),
+							String.valueOf(getBControl().getLayout().y), "");
+					input.add(toggleObj);
+					tableViewer
+							.setSelection(new StructuredSelection(toggleObj));
+				}
+			});
+
+			setControl(container);
+
+		}
+	}
 
-		return container;
+	public WizardObserverSwitchCoordinates(final BControl bcontrol,
+			final Observer bobserver) {
+		super(bcontrol, bobserver);
+		addPage(new ObserverToggleCoordinatesPage(
+				"ObserverToggleCoordinatesPage"));
 	}
 
+	@Override
+	protected Boolean prepareToFinish() {
+		// getBControl().restoreDefaultValue(AttributeConstants.ATTRIBUTE_X);
+		// getBControl().restoreDefaultValue(AttributeConstants.ATTRIBUTE_Y);
+		if (((SwitchCoordinates) getObserver()).getToggleObjects().size() == 0) {
+			setObserverDelete(true);
+		} else {
+			for (ToggleObjectCoordinates obj : ((SwitchCoordinates) getObserver())
+					.getToggleObjects()) {
+				if (obj.getX().isEmpty() || obj.getY().isEmpty()) {
+					MessageDialog
+							.openError(getShell(), "Please check your entries",
+									"Please check your entries. The x and y fields must not be empty.");
+					return false;
+				}
+			}
+		}
+		return true;
+	}
 
-	public WizardObserverSwitchCoordinates(Shell shell, BControl bcontrol,
-			Observer bobserver) {
-		super(shell, bcontrol, bobserver);
+	@Override
+	public boolean performCancel() {
+		// getBControl().restoreDefaultValue(AttributeConstants.ATTRIBUTE_X);
+		// getBControl().restoreDefaultValue(AttributeConstants.ATTRIBUTE_Y);
+		return super.performCancel();
 	}
 
 	@Override
@@ -157,6 +256,9 @@ public class WizardObserverSwitchCoordinates extends ObserverWizard {
 		private final Color errorColor = Display.getDefault().getSystemColor(
 				SWT.COLOR_INFO_BACKGROUND);
 
+		// final Font bold = JFaceResources.getFontRegistry().getBold(
+		// JFaceResources.BANNER_FONT);
+
 		@Override
 		public String getColumnText(Object element, int columnIndex) {
 			if (columnIndex == 3) {
@@ -167,6 +269,11 @@ public class WizardObserverSwitchCoordinates extends ObserverWizard {
 
 		@Override
 		public Image getColumnImage(Object element, int columnIndex) {
+			// if (columnIndex == 3) {
+			// return CheckboxCellEditorHelper
+			// .getCellEditorImage(((ToggleObjectCoordinates) element)
+			// .getAnimate());
+			// }
 			return null;
 		}
 
@@ -182,6 +289,8 @@ public class WizardObserverSwitchCoordinates extends ObserverWizard {
 		}
 
 		public Font getFont(final Object element, final int column) {
+			// return JFaceResources.getFontRegistry().get(
+			// BMotionStudioConstants.RODIN_FONT_KEY);
 			return null;
 		}
 
diff --git a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/wizard/WizardObserverSwitchImage.java b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/wizard/WizardObserverSwitchImage.java
index ff5d09ea..9c15caea 100644
--- a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/wizard/WizardObserverSwitchImage.java
+++ b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/wizard/WizardObserverSwitchImage.java
@@ -12,6 +12,7 @@ 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.IStructuredSelection;
 import org.eclipse.jface.viewers.ITableColorProvider;
 import org.eclipse.jface.viewers.ITableFontProvider;
@@ -26,17 +27,16 @@ 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.be4.classicalb.core.parser.BParser;
 import de.bmotionstudio.gef.editor.AttributeConstants;
+import de.bmotionstudio.gef.editor.BMotionAbstractWizard;
 import de.bmotionstudio.gef.editor.BMotionStudioImage;
 import de.bmotionstudio.gef.editor.EditorImageRegistry;
 import de.bmotionstudio.gef.editor.edit.AttributeExpressionEdittingSupport;
@@ -52,119 +52,177 @@ import de.bmotionstudio.gef.editor.util.BMotionWizardUtil;
 
 public class WizardObserverSwitchImage extends ObserverWizard {
 
-	private TableViewer tableViewer;
+	private class ObserverSwitchImagePage extends AbstractObserverWizardPage {
 
-	@Override
-	public Control createWizardContent(Composite parent) {
-
-		parent.setLayout(new FillLayout());
+		private TableViewer tableViewer;
 
-		DataBindingContext dbc = new DataBindingContext();
+		protected ObserverSwitchImagePage(final String pageName) {
+			super(pageName, getObserver());
+		}
 
-		GridLayout gl = new GridLayout(1, true);
-		gl.horizontalSpacing = 0;
-		gl.verticalSpacing = 0;
-		gl.marginHeight = 0;
-		gl.marginWidth = 0;
+		public void createControl(final Composite parent) {
+
+			super.createControl(parent);
+
+			DataBindingContext dbc = new DataBindingContext();
+
+			Composite container = new Composite(parent, SWT.NONE);
+			container.setLayout(new GridLayout(1, true));
+
+			tableViewer = BMotionWizardUtil.createBMotionWizardTableViewer(
+					container, ToggleObjectImage.class,
+					((BMotionAbstractWizard) getWizard()).getName());
+			// tableViewer
+			// .addSelectionChangedListener(new ISelectionChangedListener() {
+			//
+			// @Override
+			// public void selectionChanged(SelectionChangedEvent event) {
+			// IStructuredSelection selection = (IStructuredSelection) event
+			// .getSelection();
+			// Object firstElement = selection.getFirstElement();
+			// if (firstElement instanceof ObserverEvalObject) {
+			// ObserverEvalObject observerEvalObject = (ObserverEvalObject)
+			// firstElement;
+			// if (!observerEvalObject.isExpressionMode()) {
+			// BControl control = getBControl();
+			// ToggleObjectImage toggleObjImage = (ToggleObjectImage)
+			// observerEvalObject;
+			// String attribute = AttributeConstants.ATTRIBUTE_IMAGE;
+			// String image = toggleObjImage.getImage();
+			// control.setAttributeValue(attribute, image,
+			// true, false);
+			// }
+			// }
+			// }
+			//
+			// });
+
+			TableViewerColumn column = new TableViewerColumn(tableViewer,
+					SWT.NONE);
+			column.getColumn().setText("Predicate");
+			column.getColumn().setWidth(300);
+			column.setEditingSupport(new PredicateEditingSupport(tableViewer,
+					dbc, "eval", getBControl().getVisualization(), getShell()));
+
+			column = new TableViewerColumn(tableViewer, SWT.NONE);
+			column.getColumn().setText("Image");
+			column.getColumn().setWidth(180);
+			column.setEditingSupport(new AttributeExpressionEdittingSupport(
+					tableViewer, getBControl(),
+					AttributeConstants.ATTRIBUTE_IMAGE) {
+
+				@Override
+				protected Object getValue(final Object element) {
+					ToggleObjectImage evalObject = (ToggleObjectImage) element;
+					return evalObject.getImage();
+				}
 
-		Composite container = new Composite(parent, SWT.NONE);
-		container.setLayout(gl);
+				@Override
+				protected void setValue(final Object element, final Object value) {
+					if (value == null)
+						return;
+					((ToggleObjectImage) element).setImage(value.toString());
+				}
 
-		tableViewer = BMotionWizardUtil.createBMotionWizardTableViewer(
-				container, ToggleObjectImage.class, getName());
+			});
 
-		TableViewerColumn column = new TableViewerColumn(tableViewer, SWT.NONE);
-		column.getColumn().setText("Predicate");
-		column.getColumn().setWidth(300);
-		column.setEditingSupport(new PredicateEditingSupport(tableViewer, dbc,
-				"eval", getBControl().getVisualization(), getShell()));
+			column = new TableViewerColumn(tableViewer, SWT.NONE);
+			column.getColumn().setText("Expression?");
+			column.getColumn().setWidth(100);
+			column.setEditingSupport(new IsExpressionModeEditingSupport(
+					tableViewer, getBControl()) {
 
-		column = new TableViewerColumn(tableViewer, SWT.NONE);
-		column.getColumn().setText("Image");
-		column.getColumn().setWidth(180);
-		column.setEditingSupport(new AttributeExpressionEdittingSupport(
-				tableViewer, getBControl(), AttributeConstants.ATTRIBUTE_IMAGE) {
+				@Override
+				protected void setValue(final Object element, final Object value) {
+					Boolean bol = Boolean.valueOf(String.valueOf(value));
+					ToggleObjectImage obj = (ToggleObjectImage) element;
+					obj.setIsExpressionMode(bol);
+				}
 
-			@Override
-			protected Object getValue(final Object element) {
-				ToggleObjectImage evalObject = (ToggleObjectImage) element;
-				return evalObject.getImage();
-			}
+			});
+
+			ObservableListContentProvider contentProvider = new ObservableListContentProvider();
+			tableViewer.setContentProvider(contentProvider);
+
+			tableViewer.setLabelProvider(new ObserverLabelProvider(
+					BeansObservables.observeMaps(
+							contentProvider.getKnownElements(), new String[] {
+									"eval", "image", "isExpressionMode" })));
+			final WritableList input = new WritableList(
+					((SwitchImage) getObserver()).getToggleObjects(),
+					ToggleObjectImage.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(final SelectionEvent e) {
+					if (tableViewer.getSelection().isEmpty()) {
+						return;
+					}
+					ToggleObjectImage toggleObj = (ToggleObjectImage) ((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(final SelectionEvent e) {
+					ToggleObjectImage toggleObj = new ToggleObjectImage(
+							BParser.PREDICATE_PREFIX, "", "");
+					input.add(toggleObj);
+					tableViewer
+							.setSelection(new StructuredSelection(toggleObj));
+				}
+			});
 
-			@Override
-			protected void setValue(final Object element, final Object value) {
-				if (value == null)
-					return;
-				((ToggleObjectImage) element).setImage(value.toString());
-			}
+			setControl(container);
 
-		});
+		}
 
-		column = new TableViewerColumn(tableViewer, SWT.NONE);
-		column.getColumn().setText("Expression?");
-		column.getColumn().setWidth(100);
-		column.setEditingSupport(new IsExpressionModeEditingSupport(
-				tableViewer, getBControl()) {
+	}
 
-			@Override
-			protected void setValue(final Object element, final Object value) {
-				Boolean bol = Boolean.valueOf(String.valueOf(value));
-				ToggleObjectImage obj = (ToggleObjectImage) element;
-				obj.setIsExpressionMode(bol);
-			}
+	public WizardObserverSwitchImage(final BControl bcontrol,
+			final Observer bobserver) {
+		super(bcontrol, bobserver);
+		addPage(new ObserverSwitchImagePage("ObserverToggleImagePage"));
+	}
 
-		});
-
-		ObservableListContentProvider contentProvider = new ObservableListContentProvider();
-		tableViewer.setContentProvider(contentProvider);
-
-		tableViewer.setLabelProvider(new ObserverLabelProvider(BeansObservables
-				.observeMaps(contentProvider.getKnownElements(), new String[] {
-						"eval", "image", "isExpressionMode" })));
-		final WritableList input = new WritableList(
-				((SwitchImage) getObserver()).getToggleObjects(),
-				ToggleObjectImage.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(final SelectionEvent e) {
-				if (tableViewer.getSelection().isEmpty()) {
-					return;
+	@Override
+	protected Boolean prepareToFinish() {
+		// getBControl().restoreDefaultValue(AttributeConstants.ATTRIBUTE_IMAGE);
+		if (((SwitchImage) getObserver()).getToggleObjects().size() == 0) {
+			setObserverDelete(true);
+		} else {
+			for (ToggleObjectImage obj : ((SwitchImage) getObserver())
+					.getToggleObjects()) {
+				if (obj.getImage().isEmpty()) {
+					MessageDialog
+							.openError(getShell(), "Please check your entries",
+									"Please check your entries. The image field must not be empty.");
+					return false;
 				}
-				ToggleObjectImage toggleObj = (ToggleObjectImage) ((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(final SelectionEvent e) {
-				ToggleObjectImage toggleObj = new ToggleObjectImage("", "");
-				input.add(toggleObj);
-				tableViewer.setSelection(new StructuredSelection(toggleObj));
-			}
-		});
-
-		return container;
+		}
+		return true;
 	}
 
-	public WizardObserverSwitchImage(Shell shell, BControl bcontrol,
-			Observer bobserver) {
-		super(shell, bcontrol, bobserver);
+	@Override
+	public boolean performCancel() {
+		// getBControl().restoreDefaultValue(AttributeConstants.ATTRIBUTE_IMAGE);
+		return super.performCancel();
 	}
 
 	@Override
@@ -218,6 +276,8 @@ public class WizardObserverSwitchImage extends ObserverWizard {
 		}
 
 		public Font getFont(final Object element, final int column) {
+			// return JFaceResources.getFontRegistry().get(
+			// BMotionStudioConstants.RODIN_FONT_KEY);
 			return null;
 		}
 
diff --git a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/wizard/WizardTableObserver.java b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/wizard/WizardTableObserver.java
index d38110cd..e816e1d3 100644
--- a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/wizard/WizardTableObserver.java
+++ b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/wizard/WizardTableObserver.java
@@ -11,6 +11,8 @@ import java.util.ArrayList;
 import org.eclipse.core.databinding.DataBindingContext;
 import org.eclipse.core.databinding.beans.BeansObservables;
 import org.eclipse.jface.databinding.swt.SWTObservables;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.wizard.WizardPage;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.MouseAdapter;
 import org.eclipse.swt.events.MouseEvent;
@@ -22,12 +24,10 @@ 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.Group;
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.List;
-import org.eclipse.swt.widgets.Shell;
 import org.eclipse.swt.widgets.Text;
 import org.eventb.core.ast.PowerSetType;
 
@@ -40,151 +40,167 @@ import de.bmotionstudio.gef.editor.observer.TableObserver;
 
 public class WizardTableObserver extends ObserverWizard {
 
-	private Text txtExpression;
-	private Text txtPredicate;
-	private Button cbOverrideCells;
-	private Button cbKeepHeader;
+	private class TableObserverPage extends WizardPage {
 
-	private void initBindings(DataBindingContext dbc) {
+		private Text txtExpression;
+		private Text txtPredicate;
+		private Button cbOverrideCells;
+		private Button cbKeepHeader;
 
-		dbc.bindValue(SWTObservables.observeText(txtPredicate, SWT.Modify),
-				BeansObservables.observeValue((TableObserver) getObserver(),
-						"predicate"));
+		public Text getTxtExpression() {
+			return txtExpression;
+		}
 
-		dbc.bindValue(SWTObservables.observeText(txtExpression, SWT.Modify),
-				BeansObservables.observeValue((TableObserver) getObserver(),
-						"expression"));
+		protected TableObserverPage(final String pageName) {
+			super(pageName);
+		}
 
-		dbc.bindValue(SWTObservables.observeSelection(cbOverrideCells),
-				BeansObservables.observeValue((TableObserver) getObserver(),
-						"overrideCells"));
+		public void createControl(final Composite parent) {
 
-		dbc.bindValue(SWTObservables.observeSelection(cbKeepHeader),
-				BeansObservables.observeValue((TableObserver) getObserver(),
-						"keepHeader"));
+			final DataBindingContext dbc = new DataBindingContext();
 
-	}
+			parent.setLayout(new GridLayout(1, true));
 
-	@Override
-	public Control createWizardContent(Composite parent) {
-		final DataBindingContext dbc = new DataBindingContext();
+			Group group = new Group(parent, SWT.None);
+			group.setText("General settings");
+			RowLayout rowLayout = new RowLayout();
+			rowLayout.marginLeft = 10;
+			rowLayout.marginTop = 10;
+			rowLayout.marginBottom = 10;
+			group.setLayout(rowLayout);
+			group.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
 
-		parent.setLayout(new GridLayout(1, true));
+			cbOverrideCells = new Button(group, SWT.CHECK);
+			cbOverrideCells.setText("Override cells");
 
-		Group group = new Group(parent, SWT.None);
-		group.setText("General settings");
-		RowLayout rowLayout = new RowLayout();
-		rowLayout.marginLeft = 10;
-		rowLayout.marginTop = 10;
-		rowLayout.marginBottom = 10;
-		group.setLayout(rowLayout);
-		group.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+			cbKeepHeader = new Button(group, SWT.CHECK);
+			cbKeepHeader.setText("Keep header");
 
-		cbOverrideCells = new Button(group, SWT.CHECK);
-		cbOverrideCells.setText("Override cells");
+			Group container = new Group(parent, SWT.None);
+			container.setText("Formal model");
+			container.setLayout(new GridLayout(2, false));
+			container.setLayoutData(new GridData(GridData.FILL_BOTH));
 
-		cbKeepHeader = new Button(group, SWT.CHECK);
-		cbKeepHeader.setText("Keep header");
+			Composite conLeft = new Composite(container, SWT.NONE);
+			conLeft.setLayoutData(new GridData(GridData.FILL_BOTH));
+			conLeft.setLayout(new GridLayout(2, false));
 
-		Group container = new Group(parent, SWT.None);
-		container.setText("Formal model");
-		container.setLayout(new GridLayout(2, false));
-		container.setLayoutData(new GridData(GridData.FILL_BOTH));
+			Label lb = new Label(conLeft, SWT.NONE);
+			lb.setText("Predicate:");
 
-		Composite conLeft = new Composite(container, SWT.NONE);
-		conLeft.setLayoutData(new GridData(GridData.FILL_BOTH));
-		conLeft.setLayout(new GridLayout(2, false));
+			txtPredicate = new Text(conLeft, SWT.BORDER);
+			txtPredicate.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+			txtPredicate.setFont(new Font(Display.getDefault(), new FontData(
+					"Arial", 10, SWT.NONE)));
 
-		Label lb = new Label(conLeft, SWT.NONE);
-		lb.setText("Predicate:");
+			lb = new Label(conLeft, SWT.NONE);
+			lb.setText("Expression:");
+			lb.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_BEGINNING));
 
-		txtPredicate = new Text(conLeft, SWT.BORDER);
-		txtPredicate.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-		txtPredicate.setFont(new Font(Display.getDefault(), new FontData(
-				"Arial", 10, SWT.NONE)));
+			txtExpression = new Text(conLeft, SWT.BORDER | SWT.MULTI
+					| SWT.WRAP);
+			txtExpression.setLayoutData(new GridData(GridData.FILL_BOTH));
 
-		lb = new Label(conLeft, SWT.NONE);
-		lb.setText("Expression:");
-		lb.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_BEGINNING));
+			Composite conRight = new Composite(container, SWT.NONE);
 
-		txtExpression = new Text(conLeft, SWT.BORDER | SWT.MULTI | SWT.WRAP);
-		txtExpression.setLayoutData(new GridData(GridData.FILL_BOTH));
+			GridData gData = new GridData(GridData.FILL_VERTICAL);
+			gData.widthHint = 125;
 
-		Composite conRight = new Composite(container, SWT.NONE);
+			conRight.setLayoutData(gData);
+			conRight.setLayout(new GridLayout(1, false));
 
-		GridData gData = new GridData(GridData.FILL_VERTICAL);
-		gData.widthHint = 125;
+			lb = new Label(conRight, SWT.WRAP);
+			lb.setText("Power sets:");
+			lb.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_BEGINNING));
 
-		conRight.setLayoutData(gData);
-		conRight.setLayout(new GridLayout(1, false));
+			ArrayList<String> relationList = new ArrayList<String>();
+			
+			java.util.List<MachineContentObject> constants = EventBHelper
+					.getConstants(getBControl().getVisualization());
+			for (MachineContentObject mobj : constants) {
+				if (mobj.getType() instanceof PowerSetType) {
+					relationList.add(mobj.getLabel());
+				}
+			}
 
-		lb = new Label(conRight, SWT.WRAP);
-		lb.setText("Power sets:");
-		lb.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_BEGINNING));
+			java.util.List<MachineContentObject> variables = EventBHelper
+					.getVariables(getBControl().getVisualization());
+			for (MachineContentObject mobj : variables) {
+				if (mobj.getType() instanceof PowerSetType) {
+					relationList.add(mobj.getLabel());
+				}
+			}
 
-		ArrayList<String> relationList = new ArrayList<String>();
+			final List list = new List(conRight, SWT.SINGLE | SWT.BORDER
+					| SWT.V_SCROLL);
+			list.setLayoutData(new GridData(GridData.FILL_BOTH));
+			list.setItems(relationList.toArray(new String[relationList.size()]));
+
+			list.addMouseListener(new MouseAdapter() {
+				public void mouseDoubleClick(MouseEvent e) {
+					String[] selection = list.getSelection();
+					if (selection.length > 0)
+						txtExpression.setText(txtExpression.getText() + " "
+								+ selection[0]);
+				}
+			});
+			initBindings(dbc);
+
+			setControl(conLeft);
 
-		java.util.List<MachineContentObject> constants = EventBHelper
-				.getConstants(getBControl().getVisualization());
-		for (MachineContentObject mobj : constants) {
-			if (mobj.getType() instanceof PowerSetType) {
-				relationList.add(mobj.getLabel());
-			}
 		}
 
-		java.util.List<MachineContentObject> variables = EventBHelper
-				.getVariables(getBControl().getVisualization());
-		for (MachineContentObject mobj : variables) {
-			if (mobj.getType() instanceof PowerSetType) {
-				relationList.add(mobj.getLabel());
-			}
+		private void initBindings(DataBindingContext dbc) {
+
+			dbc.bindValue(SWTObservables.observeText(txtPredicate, SWT.Modify),
+					BeansObservables.observeValue(
+							(TableObserver) getObserver(), "predicate"));
+
+			dbc.bindValue(
+					SWTObservables.observeText(txtExpression, SWT.Modify),
+					BeansObservables.observeValue(
+							(TableObserver) getObserver(), "expression"));
+
+			dbc.bindValue(SWTObservables.observeSelection(cbOverrideCells),
+					BeansObservables.observeValue(
+							(TableObserver) getObserver(), "overrideCells"));
+
+			dbc.bindValue(SWTObservables.observeSelection(cbKeepHeader),
+					BeansObservables.observeValue(
+							(TableObserver) getObserver(), "keepHeader"));
+
 		}
 
-		final List list = new List(conRight, SWT.SINGLE | SWT.BORDER
-				| SWT.V_SCROLL);
-		list.setLayoutData(new GridData(GridData.FILL_BOTH));
-		list.setItems(relationList.toArray(new String[relationList.size()]));
-
-		list.addMouseListener(new MouseAdapter() {
-			public void mouseDoubleClick(MouseEvent e) {
-				String[] selection = list.getSelection();
-				if (selection.length > 0)
-					txtExpression.setText(txtExpression.getText() + " "
-							+ selection[0]);
-			}
-		});
-		initBindings(dbc);
-		return conLeft;
 	}
 
-	public WizardTableObserver(Shell shell, BControl bcontrol,
+	public WizardTableObserver(BControl bcontrol,
 			Observer bobserver) {
-		super(shell, bcontrol, bobserver);
+		super(bcontrol, bobserver);
+		addPage(new TableObserverPage("TableObserverPage"));
 	}
 
-	// @Override
-	// protected Boolean prepareToFinish() {
-	//
-	// TableObserverPage page = (TableObserverPage)
-	// getPage("TableObserverPage");
-	//
-	// String errorStr = "";
-	//
-	// if (page.getTxtExpression().getText().length() == 0)
-	// errorStr += "Please enter an expression.\n";
-	//
-	// if (page.getErrorMessage() != null)
-	// errorStr += "Please check the syntax/parser error.\n";
-	//
-	// if (errorStr.length() > 0) {
-	// MessageDialog.openError(Display.getDefault().getActiveShell(),
-	// "An Error occured", errorStr);
-	// return false;
-	// }
-	//
-	// return true;
-	//
-	// }
+	@Override
+	protected Boolean prepareToFinish() {
+
+		TableObserverPage page = (TableObserverPage) getPage("TableObserverPage");
+
+		String errorStr = "";
+
+		if (page.getTxtExpression().getText().length() == 0)
+			errorStr += "Please enter an expression.\n";
+
+		if (page.getErrorMessage() != null)
+			errorStr += "Please check the syntax/parser error.\n";
+
+		if (errorStr.length() > 0) {
+			MessageDialog.openError(Display.getDefault().getActiveShell(),
+					"An Error occured", errorStr);
+			return false;
+		}
+
+		return true;
+
+	}
 
 	@Override
 	public Point getSize() {
diff --git a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/scheduler/ExecuteAnimationScript.java b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/scheduler/ExecuteAnimationScript.java
index cd9d5ccc..20a3c505 100644
--- a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/scheduler/ExecuteAnimationScript.java
+++ b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/scheduler/ExecuteAnimationScript.java
@@ -10,8 +10,6 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Random;
 
-import org.eclipse.swt.widgets.Shell;
-
 import de.bmotionstudio.gef.editor.Animation;
 import de.bmotionstudio.gef.editor.model.BControl;
 import de.bmotionstudio.gef.editor.scheduler.wizard.WizardExecuteScheduler;
@@ -99,8 +97,8 @@ public class ExecuteAnimationScript extends SchedulerEvent {
 	}
 
 	@Override
-	public SchedulerWizard getWizard(Shell shell, BControl bcontrol) {
-		return new WizardExecuteScheduler(shell, bcontrol, this);
+	public SchedulerWizard getWizard(final BControl bcontrol) {
+		return new WizardExecuteScheduler(bcontrol, this);
 	}
 
 	public ExecuteAnimationScript clone() throws CloneNotSupportedException {
diff --git a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/scheduler/ExecuteOperationByPredicate.java b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/scheduler/ExecuteOperationByPredicate.java
index c3b062ed..c9114041 100644
--- a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/scheduler/ExecuteOperationByPredicate.java
+++ b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/scheduler/ExecuteOperationByPredicate.java
@@ -9,8 +9,6 @@ package de.bmotionstudio.gef.editor.scheduler;
 import java.util.List;
 import java.util.Random;
 
-import org.eclipse.swt.widgets.Shell;
-
 import de.bmotionstudio.gef.editor.Animation;
 import de.bmotionstudio.gef.editor.model.BControl;
 import de.bmotionstudio.gef.editor.scheduler.wizard.WizardExecuteOperationByPredicate;
@@ -77,8 +75,8 @@ public class ExecuteOperationByPredicate extends SchedulerEvent {
 	}
 
 	@Override
-	public SchedulerWizard getWizard(Shell shell, BControl bcontrol) {
-		return new WizardExecuteOperationByPredicate(shell, bcontrol, this);
+	public SchedulerWizard getWizard(BControl bcontrol) {
+		return new WizardExecuteOperationByPredicate(bcontrol, this);
 	}
 
 	public void setPredicateOperation(PredicateOperation predicateOperation) {
diff --git a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/scheduler/ExecuteOperationByPredicateMulti.java b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/scheduler/ExecuteOperationByPredicateMulti.java
index e93d23d7..6f9b9044 100644
--- a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/scheduler/ExecuteOperationByPredicateMulti.java
+++ b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/scheduler/ExecuteOperationByPredicateMulti.java
@@ -2,8 +2,6 @@ package de.bmotionstudio.gef.editor.scheduler;
 
 import java.util.ArrayList;
 
-import org.eclipse.swt.widgets.Shell;
-
 import de.bmotionstudio.gef.editor.Animation;
 import de.bmotionstudio.gef.editor.BindingObject;
 import de.bmotionstudio.gef.editor.model.BControl;
@@ -51,8 +49,8 @@ public class ExecuteOperationByPredicateMulti extends SchedulerEvent {
 	}
 
 	@Override
-	public SchedulerWizard getWizard(Shell shell, BControl bcontrol) {
-		return new WizardExecuteOperationByPredicateMulti(shell, bcontrol, this);
+	public SchedulerWizard getWizard(BControl bcontrol) {
+		return new WizardExecuteOperationByPredicateMulti(bcontrol, this);
 	}
 
 	public void setOperationList(ArrayList<BindingObject> operationList) {
diff --git a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/scheduler/SchedulerEvent.java b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/scheduler/SchedulerEvent.java
index 2b9cee66..acc22a77 100644
--- a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/scheduler/SchedulerEvent.java
+++ b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/scheduler/SchedulerEvent.java
@@ -7,7 +7,6 @@
 package de.bmotionstudio.gef.editor.scheduler;
 
 import org.eclipse.core.runtime.IConfigurationElement;
-import org.eclipse.swt.widgets.Shell;
 
 import de.bmotionstudio.gef.editor.AbstractExpressionControl;
 import de.bmotionstudio.gef.editor.Animation;
@@ -77,7 +76,7 @@ public abstract class SchedulerEvent extends AbstractExpressionControl
 	 *            The corresponding control
 	 * @return the corresponding wizard
 	 */
-	public abstract SchedulerWizard getWizard(Shell shell, BControl bcontrol);
+	public abstract SchedulerWizard getWizard(BControl bcontrol);
 
 	/**
 	 * Makes a copy of the scheduler event
diff --git a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/scheduler/SchedulerWizard.java b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/scheduler/SchedulerWizard.java
index a9698cc8..11cdbb43 100644
--- a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/scheduler/SchedulerWizard.java
+++ b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/scheduler/SchedulerWizard.java
@@ -7,7 +7,6 @@
 package de.bmotionstudio.gef.editor.scheduler;
 
 import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.widgets.Shell;
 
 import de.bmotionstudio.gef.editor.BMotionAbstractWizard;
 import de.bmotionstudio.gef.editor.model.BControl;
@@ -27,9 +26,8 @@ public abstract class SchedulerWizard extends BMotionAbstractWizard {
 
 	protected Boolean eventDelete = false;
 
-	public SchedulerWizard(Shell shell, BControl control,
-			SchedulerEvent scheduler) {
-		super(shell, control);
+	public SchedulerWizard(BControl control, SchedulerEvent scheduler) {
+		super(control);
 		this.event = scheduler;
 	}
 
@@ -37,6 +35,21 @@ public abstract class SchedulerWizard extends BMotionAbstractWizard {
 		return this.event;
 	}
 
+	protected abstract Boolean prepareToFinish();
+
+	@Override
+	public boolean performFinish() {
+		return prepareToFinish();
+	}
+
+	protected void setEventDelete(Boolean b) {
+		this.eventDelete = b;
+	}
+
+	public Boolean isEventDelete() {
+		return this.eventDelete;
+	}
+
 	public abstract Point getSize();
 
 	@Override
diff --git a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/scheduler/wizard/SchedulerObjectDialog.java b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/scheduler/wizard/SchedulerObjectDialog.java
index 5542930b..58f0627c 100644
--- a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/scheduler/wizard/SchedulerObjectDialog.java
+++ b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/scheduler/wizard/SchedulerObjectDialog.java
@@ -141,7 +141,7 @@ public class SchedulerObjectDialog extends Dialog {
 		Button btAdd = new Button(comp, SWT.PUSH);
 		btAdd.setText("Add");
 		btAdd.setImage(BMotionStudioImage
-				.getImage(EditorImageRegistry.IMG_ICON_NEW_WIZ));
+				.getImage(EditorImageRegistry.IMG_ICON_ADD));
 		btAdd.addSelectionListener(new SelectionAdapter() {
 			@Override
 			public void widgetSelected(final SelectionEvent e) {
diff --git a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/scheduler/wizard/WizardExecuteOperationByPredicate.java b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/scheduler/wizard/WizardExecuteOperationByPredicate.java
index f763a9a8..384a7fe5 100644
--- a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/scheduler/wizard/WizardExecuteOperationByPredicate.java
+++ b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/scheduler/wizard/WizardExecuteOperationByPredicate.java
@@ -18,9 +18,11 @@ import org.eclipse.jface.databinding.swt.SWTObservables;
 import org.eclipse.jface.databinding.viewers.ObservableListContentProvider;
 import org.eclipse.jface.databinding.viewers.ObservableMapLabelProvider;
 import org.eclipse.jface.databinding.viewers.ViewersObservables;
+import org.eclipse.jface.dialogs.MessageDialog;
 import org.eclipse.jface.resource.JFaceResources;
 import org.eclipse.jface.viewers.ComboViewer;
 import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.wizard.WizardPage;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.custom.ScrolledComposite;
 import org.eclipse.swt.events.SelectionEvent;
@@ -34,10 +36,8 @@ import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
 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.Label;
-import org.eclipse.swt.widgets.Shell;
 import org.eclipse.swt.widgets.Text;
 
 import de.bmotionstudio.gef.editor.BMotionStudioSWTConstants;
@@ -51,250 +51,266 @@ import de.bmotionstudio.gef.editor.scheduler.SchedulerWizard;
 
 public class WizardExecuteOperationByPredicate extends SchedulerWizard {
 
-	private ComboViewer cbOperation;
+	private class SchedulerExecuteOperationByPredicatePage extends WizardPage {
 
-	private Text txtPredicate;
+		private ComboViewer cbOperation;
 
-	private Text txtMaxRandomOperations;
+		private Text txtPredicate;
 
-	private Label lbMaxRandomOperations;
+		private Text txtMaxRandomOperations;
 
-	private Composite container;
+		private Label lbMaxRandomOperations;
 
-	private Label renderedOpLabel;
+		private Composite container;
 
-	private Button checkboxRandomMode;
+		private Label renderedOpLabel;
 
-	private ScrolledComposite c1;
+		private Button checkboxRandomMode;
 
-	@Override
-	public Control createWizardContent(Composite parent) {
+		private ScrolledComposite c1;
 
-		final DataBindingContext dbc = new DataBindingContext();
+		public ComboViewer getCbOperation() {
+			return cbOperation;
+		}
 
-		container = new Composite(parent, SWT.NONE);
-		GridLayout gl = new GridLayout(2, false);
-		container.setLayout(gl);
+		public Text getTxtMaxRandomOperations() {
+			return txtMaxRandomOperations;
+		}
 
-		Label lb = new Label(container, SWT.NONE);
-		lb.setText("Select an operation: ");
+		protected SchedulerExecuteOperationByPredicatePage(String pageName) {
+			super(pageName);
+		}
 
-		GridData gd = new GridData(GridData.FILL_HORIZONTAL);
-		gd.heightHint = 50;
+		public void createControl(final Composite parent) {
 
-		cbOperation = new ComboViewer(container, SWT.NONE);
-		cbOperation.getCombo().setLayoutData(new GridData(300, 50));
+			final DataBindingContext dbc = new DataBindingContext();
 
-		lb = new Label(container, SWT.NONE);
-		lb.setText("Predicate: ");
-		lb.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_BEGINNING));
-		txtPredicate = new Text(container, SWT.BORDER | SWT.WRAP | SWT.V_SCROLL);
-		txtPredicate.setLayoutData(gd);
+			container = new Composite(parent, SWT.NONE);
+			GridLayout gl = new GridLayout(2, false);
+			container.setLayout(gl);
 
-		lb = new Label(container, SWT.NONE);
-		lb.setText("Random mode: ");
-		lb.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_BEGINNING));
-		checkboxRandomMode = new Button(container, SWT.CHECK);
-		checkboxRandomMode.addSelectionListener(new SelectionListener() {
-			@Override
-			public void widgetSelected(SelectionEvent e) {
-				setRandomVisibility(checkboxRandomMode.getSelection());
-			}
+			Label lb = new Label(container, SWT.NONE);
+			lb.setText("Select an operation: ");
 
-			@Override
-			public void widgetDefaultSelected(SelectionEvent e) {
-			}
-		});
-
-		lbMaxRandomOperations = new Label(container, SWT.NONE);
-		lbMaxRandomOperations.setText("Max Random Operations: ");
-		lbMaxRandomOperations.setLayoutData(new GridData(
-				GridData.VERTICAL_ALIGN_BEGINNING));
-		txtMaxRandomOperations = new Text(container, SWT.BORDER);
-		txtMaxRandomOperations.setLayoutData(new GridData(
-				GridData.FILL_HORIZONTAL));
-		txtMaxRandomOperations.addVerifyListener(new VerifyListener() {
-			@Override
-			public void verifyText(VerifyEvent e) {
-				String string = e.text;
-				char[] chars = new char[string.length()];
-				string.getChars(0, chars.length, chars, 0);
-				for (int i = 0; i < chars.length; i++) {
-					if (!('0' <= chars[i] && chars[i] <= '9')) {
-						e.doit = false;
-						return;
+			GridData gd = new GridData(GridData.FILL_HORIZONTAL);
+			gd.heightHint = 50;
+
+			cbOperation = new ComboViewer(container, SWT.NONE);
+			cbOperation.getCombo().setLayoutData(new GridData(300, 50));
+
+			lb = new Label(container, SWT.NONE);
+			lb.setText("Predicate: ");
+			lb.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_BEGINNING));
+			txtPredicate = new Text(container, SWT.BORDER | SWT.WRAP
+					| SWT.V_SCROLL);
+			txtPredicate.setLayoutData(gd);
+
+			lb = new Label(container, SWT.NONE);
+			lb.setText("Random mode: ");
+			lb.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_BEGINNING));
+			checkboxRandomMode = new Button(container, SWT.CHECK);
+			checkboxRandomMode.addSelectionListener(new SelectionListener() {
+				@Override
+				public void widgetSelected(SelectionEvent e) {
+					setRandomVisibility(checkboxRandomMode.getSelection());
+				}
+
+				@Override
+				public void widgetDefaultSelected(SelectionEvent e) {
+				}
+			});
+
+			lbMaxRandomOperations = new Label(container, SWT.NONE);
+			lbMaxRandomOperations.setText("Max Random Operations: ");
+			lbMaxRandomOperations.setLayoutData(new GridData(
+					GridData.VERTICAL_ALIGN_BEGINNING));
+			txtMaxRandomOperations = new Text(container, SWT.BORDER);
+			txtMaxRandomOperations.setLayoutData(new GridData(
+					GridData.FILL_HORIZONTAL));
+			txtMaxRandomOperations.addVerifyListener(new VerifyListener() {
+				@Override
+				public void verifyText(VerifyEvent e) {
+					String string = e.text;
+					char[] chars = new char[string.length()];
+					string.getChars(0, chars.length, chars, 0);
+					for (int i = 0; i < chars.length; i++) {
+						if (!('0' <= chars[i] && chars[i] <= '9')) {
+							e.doit = false;
+							return;
+						}
 					}
 				}
-			}
-		});
-		setRandomVisibility(((ExecuteOperationByPredicate) getScheduler())
-				.getPredicateOperation().isRandom());
+			});
+			setRandomVisibility(((ExecuteOperationByPredicate) getScheduler())
+					.getPredicateOperation().isRandom());
 
-		initBindings(dbc);
+			initBindings(dbc);
 
-		IStructuredSelection structuredSelection = (IStructuredSelection) cbOperation
-				.getSelection();
+			IStructuredSelection structuredSelection = (IStructuredSelection) cbOperation
+					.getSelection();
 
-		if (!structuredSelection.isEmpty()) {
-			createRenderedOperationContainer((MachineOperation) structuredSelection
-					.getFirstElement());
-		}
+			if (!structuredSelection.isEmpty()) {
+				createRenderedOperationContainer((MachineOperation) structuredSelection
+						.getFirstElement());
+			}
 
-		return container;
+			setControl(container);
 
-	}
+		}
 
-	private void setRandomVisibility(boolean b) {
-		if (lbMaxRandomOperations == null || txtMaxRandomOperations == null)
-			return;
-		lbMaxRandomOperations.setVisible(b);
-		txtMaxRandomOperations.setVisible(b);
-	}
+		private void setRandomVisibility(boolean b) {
+			if (lbMaxRandomOperations == null || txtMaxRandomOperations == null)
+				return;
+			lbMaxRandomOperations.setVisible(b);
+			txtMaxRandomOperations.setVisible(b);
+		}
 
-	private void initBindings(DataBindingContext dbc) {
-
-		// MachineContentList operationList = BMotionEditorPlugin
-		// .getActiveEditor().getVisualization().getOperationList();
-		// operationList.getMap().remove("INITIALISATION");
-
-		ObservableListContentProvider cbOpContentProvider = new ObservableListContentProvider();
-		cbOperation.setContentProvider(cbOpContentProvider);
-		IObservableMap[] attributeMaps = BeansObservables.observeMaps(
-				cbOpContentProvider.getKnownElements(),
-				MachineContentObject.class, new String[] { "label" });
-		cbOperation.setLabelProvider(new ObservableMapLabelProvider(
-				attributeMaps));
-		cbOperation.setInput(new WritableList(EventBHelper
-				.getOperations(getBControl().getVisualization()),
-				MachineOperation.class));
-		cbOperation.getCombo().setFont(
-				new Font(Display.getDefault(), new FontData("Arial", 10,
-						SWT.NONE)));
-
-		final IObservableValue observeSelection = ViewersObservables
-				.observeSingleSelection(cbOperation);
-
-		dbc.bindValue(SWTObservables.observeSelection(cbOperation.getCombo()),
-				BeansObservables.observeValue(
-						((ExecuteOperationByPredicate) getScheduler())
-								.getPredicateOperation(), "operationName"),
-				null, null);
-
-		dbc.bindValue(SWTObservables.observeText(txtPredicate, SWT.Modify),
-				BeansObservables.observeValue(
-						((ExecuteOperationByPredicate) getScheduler())
-								.getPredicateOperation(), "predicate"));
-
-		observeSelection.addValueChangeListener(new IValueChangeListener() {
-			public void handleValueChange(ValueChangeEvent event) {
-				Object sel = event.getObservableValue().getValue();
-				createRenderedOperationContainer((MachineOperation) sel);
-			}
-		});
+		private void initBindings(DataBindingContext dbc) {
+
+			// MachineContentList operationList = BMotionEditorPlugin
+			// .getActiveEditor().getVisualization().getOperationList();
+			// operationList.getMap().remove("INITIALISATION");
+
+			ObservableListContentProvider cbOpContentProvider = new ObservableListContentProvider();
+			cbOperation.setContentProvider(cbOpContentProvider);
+			IObservableMap[] attributeMaps = BeansObservables.observeMaps(
+					cbOpContentProvider.getKnownElements(),
+					MachineContentObject.class, new String[] { "label" });
+			cbOperation.setLabelProvider(new ObservableMapLabelProvider(
+					attributeMaps));
+			cbOperation.setInput(new WritableList(EventBHelper
+					.getOperations(getBControl().getVisualization()),
+					MachineOperation.class));
+			cbOperation.getCombo().setFont(
+					new Font(Display.getDefault(), new FontData("Arial", 10,
+							SWT.NONE)));
+
+			final IObservableValue observeSelection = ViewersObservables
+					.observeSingleSelection(cbOperation);
+
+			dbc.bindValue(SWTObservables.observeSelection(cbOperation
+					.getCombo()), BeansObservables.observeValue(
+					((ExecuteOperationByPredicate) getScheduler())
+							.getPredicateOperation(), "operationName"), null,
+					null);
+
+			dbc.bindValue(SWTObservables.observeText(txtPredicate, SWT.Modify),
+					BeansObservables.observeValue(
+							((ExecuteOperationByPredicate) getScheduler())
+									.getPredicateOperation(), "predicate"));
+
+			observeSelection.addValueChangeListener(new IValueChangeListener() {
+				public void handleValueChange(ValueChangeEvent event) {
+					Object sel = event.getObservableValue().getValue();
+					createRenderedOperationContainer((MachineOperation) sel);
+				}
+			});
 
-		dbc.bindValue(SWTObservables.observeSelection(checkboxRandomMode),
-				BeansObservables.observeValue(
-						((ExecuteOperationByPredicate) getScheduler())
-								.getPredicateOperation(), "random"));
+			dbc.bindValue(SWTObservables.observeSelection(checkboxRandomMode),
+					BeansObservables.observeValue(
+							((ExecuteOperationByPredicate) getScheduler())
+									.getPredicateOperation(), "random"));
 
-		dbc.bindValue(SWTObservables.observeText(txtMaxRandomOperations,
-				SWT.Modify), BeansObservables.observeValue(
-				((ExecuteOperationByPredicate) getScheduler())
-						.getPredicateOperation(), "maxrandom"));
+			dbc.bindValue(SWTObservables.observeText(txtMaxRandomOperations,
+					SWT.Modify), BeansObservables.observeValue(
+					((ExecuteOperationByPredicate) getScheduler())
+							.getPredicateOperation(), "maxrandom"));
 
-	}
+		}
 
-	private void createRenderedOperationContainer(MachineOperation op) {
+		private void createRenderedOperationContainer(MachineOperation op) {
 
-		if (c1 != null)
-			c1.dispose();
+			if (c1 != null)
+				c1.dispose();
 
-		GridLayout gl = new GridLayout(1, true);
-		gl.marginLeft = 5;
-		gl.marginTop = 5;
+			GridLayout gl = new GridLayout(1, true);
+			gl.marginLeft = 5;
+			gl.marginTop = 5;
 
-		GridData gd = new GridData(GridData.FILL_BOTH);
-		gd.horizontalSpan = 2;
+			GridData gd = new GridData(GridData.FILL_BOTH);
+			gd.horizontalSpan = 2;
+			
+			c1 = new ScrolledComposite(container, SWT.BORDER | SWT.H_SCROLL
+					| SWT.V_SCROLL);
+			c1.setBackground(ColorConstants.red);
+			c1.setLayoutData(gd);
 
-		c1 = new ScrolledComposite(container, SWT.BORDER | SWT.H_SCROLL
-				| SWT.V_SCROLL);
-		c1.setBackground(ColorConstants.red);
-		c1.setLayoutData(gd);
+			Composite cp = new Composite(c1, SWT.NONE);
+			cp.setLayout(gl);
 
-		Composite cp = new Composite(c1, SWT.NONE);
-		cp.setLayout(gl);
+			renderedOpLabel = new Label(cp, SWT.NONE);
+			renderedOpLabel.setLayoutData(gd);
+			renderedOpLabel.setText(op.getRenderedOperation());
+			renderedOpLabel.setFont(JFaceResources.getFontRegistry().get(
+					BMotionStudioSWTConstants.RODIN_FONT_KEY));
 
-		renderedOpLabel = new Label(cp, SWT.NONE);
-		renderedOpLabel.setLayoutData(gd);
-		renderedOpLabel.setText(op.getRenderedOperation());
-		renderedOpLabel.setFont(JFaceResources.getFontRegistry().get(
-				BMotionStudioSWTConstants.RODIN_FONT_KEY));
+			c1.setContent(cp);
+			c1.setExpandHorizontal(true);
+			c1.setExpandVertical(true);
+			c1.setMinSize(cp.computeSize(SWT.DEFAULT, SWT.DEFAULT));
 
-		c1.setContent(cp);
-		c1.setExpandHorizontal(true);
-		c1.setExpandVertical(true);
-		c1.setMinSize(cp.computeSize(SWT.DEFAULT, SWT.DEFAULT));
+			container.layout();
 
-		container.layout();
+		}
 
 	}
 
-	public WizardExecuteOperationByPredicate(Shell shell, BControl bcontrol,
+	public WizardExecuteOperationByPredicate(BControl bcontrol,
 			SchedulerEvent scheduler) {
-		super(shell, bcontrol, scheduler);
+		super(bcontrol, scheduler);
+		addPage(new SchedulerExecuteOperationByPredicatePage(
+				"SchedulerExecuteOperationByPredicatePage"));
 	}
 
-	// @Override
-	// protected Boolean prepareToFinish() {
-	//
-	// SchedulerExecuteOperationByPredicatePage page =
-	// (SchedulerExecuteOperationByPredicatePage)
-	// getPage("SchedulerExecuteOperationByPredicatePage");
-	//
-	// String errorStr = "";
-	//
-	// if (((ExecuteOperationByPredicate) getScheduler())
-	// .getPredicateOperation().isRandom()
-	// && !(Integer
-	// .valueOf(page.getTxtMaxRandomOperations().getText()) > 0))
-	// errorStr += "Max Random Operations must be greater than 0.\n";
-	//
-	// if (page.getCbOperation().getCombo().getSelectionIndex() == -1)
-	// errorStr += "Please select an operation.\n";
-	//
-	// if (errorStr.length() > 0) {
-	// MessageDialog.openError(Display.getDefault().getActiveShell(),
-	// "An Error occured", errorStr);
-	// return false;
-	// }
-	//
-	// // PredicateOperation predicateOperation =
-	// // ((ExecuteOperationByPredicate) getScheduler())
-	// // .getPredicateOperation();
-	// //
-	// // Observer observer = getBControl().getObserver(
-	// // ListenOperationByPredicate.ID);
-	// // ListenOperationByPredicate listenObserver;
-	// //
-	// // if (observer != null) {
-	// // listenObserver = (ListenOperationByPredicate) observer;
-	// // listenObserver
-	// // .removePredicateOperationByUniqueID(predicateOperation
-	// // .getUniqueID());
-	// // } else {
-	// // listenObserver = new ListenOperationByPredicate();
-	// // getBControl().addObserver(listenObserver);
-	// // }
-	// //
-	// // try {
-	// // listenObserver.addPredicateOperation(predicateOperation.clone());
-	// // } catch (CloneNotSupportedException e) {
-	// // e.printStackTrace();
-	// // }
-	//
-	// return true;
-	//
-	// }
+	@Override
+	protected Boolean prepareToFinish() {
+
+		SchedulerExecuteOperationByPredicatePage page = (SchedulerExecuteOperationByPredicatePage) getPage("SchedulerExecuteOperationByPredicatePage");
+
+		String errorStr = "";
+
+		if (((ExecuteOperationByPredicate) getScheduler())
+				.getPredicateOperation().isRandom()
+				&& !(Integer
+						.valueOf(page.getTxtMaxRandomOperations().getText()) > 0))
+			errorStr += "Max Random Operations must be greater than 0.\n";
+
+		if (page.getCbOperation().getCombo().getSelectionIndex() == -1)
+			errorStr += "Please select an operation.\n";
+
+		if (errorStr.length() > 0) {
+			MessageDialog.openError(Display.getDefault().getActiveShell(),
+					"An Error occured", errorStr);
+			return false;
+		}
+
+		// PredicateOperation predicateOperation =
+		// ((ExecuteOperationByPredicate) getScheduler())
+		// .getPredicateOperation();
+		//
+		// Observer observer = getBControl().getObserver(
+		// ListenOperationByPredicate.ID);
+		// ListenOperationByPredicate listenObserver;
+		//
+		// if (observer != null) {
+		// listenObserver = (ListenOperationByPredicate) observer;
+		// listenObserver
+		// .removePredicateOperationByUniqueID(predicateOperation
+		// .getUniqueID());
+		// } else {
+		// listenObserver = new ListenOperationByPredicate();
+		// getBControl().addObserver(listenObserver);
+		// }
+		//
+		// try {
+		// listenObserver.addPredicateOperation(predicateOperation.clone());
+		// } catch (CloneNotSupportedException e) {
+		// e.printStackTrace();
+		// }
+
+		return true;
+
+	}
 
 	@Override
 	public Point getSize() {
diff --git a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/scheduler/wizard/WizardExecuteOperationByPredicateMulti.java b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/scheduler/wizard/WizardExecuteOperationByPredicateMulti.java
index 4b9e029a..ef33b42a 100644
--- a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/scheduler/wizard/WizardExecuteOperationByPredicateMulti.java
+++ b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/scheduler/wizard/WizardExecuteOperationByPredicateMulti.java
@@ -10,12 +10,14 @@ import org.eclipse.core.databinding.beans.BeansObservables;
 import org.eclipse.core.databinding.observable.list.WritableList;
 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.ColumnViewer;
 import org.eclipse.jface.viewers.EditingSupport;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.TableViewer;
 import org.eclipse.jface.viewers.TableViewerColumn;
+import org.eclipse.jface.wizard.WizardPage;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.SelectionAdapter;
 import org.eclipse.swt.events.SelectionEvent;
@@ -25,10 +27,10 @@ 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.Shell;
 
+import de.bmotionstudio.gef.editor.BMotionAbstractWizard;
 import de.bmotionstudio.gef.editor.BMotionStudioImage;
+import de.bmotionstudio.gef.editor.BindingObject;
 import de.bmotionstudio.gef.editor.EditorImageRegistry;
 import de.bmotionstudio.gef.editor.edit.OperationValueEditingSupport;
 import de.bmotionstudio.gef.editor.edit.PredicateEditingSupport;
@@ -46,222 +48,134 @@ import de.bmotionstudio.gef.editor.util.BMotionWizardUtil;
  */
 public class WizardExecuteOperationByPredicateMulti extends SchedulerWizard {
 
-	private TableViewer tableViewer;
+	private class MultiPage extends WizardPage {
 
-	@Override
-	public Control createWizardContent(Composite parent) {
-		DataBindingContext dbc = new DataBindingContext();
-
-		Composite container = new Composite(parent, SWT.NONE);
-		container.setLayout(new GridLayout(1, true));
-
-		tableViewer = BMotionWizardUtil.createBMotionWizardTableViewer(
-				container, PredicateOperation.class, getName());
-
-		TableViewerColumn column = new TableViewerColumn(tableViewer, SWT.NONE);
-		column.getColumn().setText("Execute Rule");
-		column.getColumn().setWidth(190);
-		column.setEditingSupport(new PredicateEditingSupport(tableViewer, dbc,
-				"executePredicate", getBControl().getVisualization(),
-				getShell()));
-
-		column = new TableViewerColumn(tableViewer, SWT.NONE);
-		column.getColumn().setText("Operation");
-		column.getColumn().setWidth(150);
-		column.setEditingSupport(new OperationValueEditingSupport(tableViewer,
-				getBControl()));
-
-		column = new TableViewerColumn(tableViewer, SWT.NONE);
-		column.getColumn().setText("Parameter");
-		column.getColumn().setWidth(190);
-		column.setEditingSupport(new PredicateEditingSupport(tableViewer, dbc,
-				"predicate", getBControl().getVisualization(), getShell()));
-
-		column = new TableViewerColumn(tableViewer, SWT.NONE);
-		column.getColumn().setText("Random Ops");
-		column.getColumn().setWidth(100);
-		column.setEditingSupport(new RandomModeEditingSupport(tableViewer));
-
-		ObservableListContentProvider contentProvider = new ObservableListContentProvider();
-		tableViewer.setContentProvider(contentProvider);
-
-		tableViewer.setLabelProvider(new ObservableMapLabelProvider(
-				BeansObservables.observeMaps(
-						contentProvider.getKnownElements(), new String[] {
-								"executePredicate", "operationName",
-								"predicate", "maxrandom" })));
-		final WritableList input = new WritableList(
-				((ExecuteOperationByPredicateMulti) getScheduler())
-						.getOperationList(),
-				PredicateOperation.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));
-		btRemove.addSelectionListener(new SelectionAdapter() {
-			@Override
-			public void widgetSelected(SelectionEvent e) {
-				if (tableViewer.getSelection().isEmpty()) {
-					return;
-				}
-				PredicateOperation obj = (PredicateOperation) ((IStructuredSelection) tableViewer
-						.getSelection()).getFirstElement();
-				input.remove(obj);
-			}
-		});
-
-		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) {
-				PredicateOperation obj = new PredicateOperation();
-				input.add(obj);
-			}
-		});
+		private TableViewer tableViewer;
 
-		return container;
+		protected MultiPage(String pageName) {
+			super(pageName);
+		}
 
-	}
+		public void createControl(final Composite parent) {
+
+			DataBindingContext dbc = new DataBindingContext();
+
+			Composite container = new Composite(parent, SWT.NONE);
+			container.setLayout(new GridLayout(1, true));
+
+			setControl(container);
+
+			tableViewer = BMotionWizardUtil.createBMotionWizardTableViewer(
+					container, PredicateOperation.class,
+					((BMotionAbstractWizard) getWizard()).getName());
+			
+			TableViewerColumn column = new TableViewerColumn(tableViewer,
+					SWT.NONE);
+			column.getColumn().setText("Execute Rule");
+			column.getColumn().setWidth(190);
+			column.setEditingSupport(new PredicateEditingSupport(tableViewer,
+					dbc, "executePredicate", getBControl().getVisualization(),
+					getShell()));
+
+			column = new TableViewerColumn(tableViewer, SWT.NONE);
+			column.getColumn().setText("Operation");
+			column.getColumn().setWidth(150);
+			column.setEditingSupport(new OperationValueEditingSupport(
+					tableViewer, getBControl()));
+
+			column = new TableViewerColumn(tableViewer, SWT.NONE);
+			column.getColumn().setText("Parameter");
+			column.getColumn().setWidth(190);
+			column.setEditingSupport(new PredicateEditingSupport(tableViewer,
+					dbc, "predicate", getBControl().getVisualization(),
+					getShell()));
+
+			column = new TableViewerColumn(tableViewer, SWT.NONE);
+			column.getColumn().setText("Random Ops");
+			column.getColumn().setWidth(100);
+			column.setEditingSupport(new RandomModeEditingSupport(tableViewer));
+
+			ObservableListContentProvider contentProvider = new ObservableListContentProvider();
+			tableViewer.setContentProvider(contentProvider);
+
+			tableViewer.setLabelProvider(new ObservableMapLabelProvider(
+					BeansObservables.observeMaps(
+							contentProvider.getKnownElements(), new String[] {
+									"executePredicate", "operationName",
+									"predicate", "maxrandom" })));
+			final WritableList input = new WritableList(
+					((ExecuteOperationByPredicateMulti) getScheduler())
+							.getOperationList(),
+					PredicateOperation.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));
+			btRemove.addSelectionListener(new SelectionAdapter() {
+				@Override
+				public void widgetSelected(SelectionEvent e) {
+					if (tableViewer.getSelection().isEmpty()) {
+						return;
+					}
+					PredicateOperation obj = (PredicateOperation) ((IStructuredSelection) tableViewer
+							.getSelection()).getFirstElement();
+					input.remove(obj);
+				}
+			});
+
+			Button btAdd = new Button(comp, SWT.PUSH);
+			btAdd.setText("Add");
+			btAdd.setImage(BMotionStudioImage
+					.getImage(EditorImageRegistry.IMG_ICON_ADD));
+			btAdd.addSelectionListener(new SelectionAdapter() {
+				@Override
+				public void widgetSelected(SelectionEvent e) {
+					PredicateOperation obj = new PredicateOperation();
+					input.add(obj);
+				}
+			});
 
-	// private class MultiPage extends WizardPage {
-	//
-	// private TableViewer tableViewer;
-	//
-	// protected MultiPage(String pageName) {
-	// super(pageName);
-	// }
-	//
-	// public void createControl(final Composite parent) {
-	//
-	// DataBindingContext dbc = new DataBindingContext();
-	//
-	// Composite container = new Composite(parent, SWT.NONE);
-	// container.setLayout(new GridLayout(1, true));
-	//
-	// setControl(container);
-	//
-	// tableViewer = BMotionWizardUtil.createBMotionWizardTableViewer(
-	// container, PredicateOperation.class,
-	// ((BMotionAbstractWizard) getWizard()).getName());
-	//
-	// TableViewerColumn column = new TableViewerColumn(tableViewer,
-	// SWT.NONE);
-	// column.getColumn().setText("Execute Rule");
-	// column.getColumn().setWidth(190);
-	// column.setEditingSupport(new PredicateEditingSupport(tableViewer,
-	// dbc, "executePredicate", getBControl().getVisualization(),
-	// getShell()));
-	//
-	// column = new TableViewerColumn(tableViewer, SWT.NONE);
-	// column.getColumn().setText("Operation");
-	// column.getColumn().setWidth(150);
-	// column.setEditingSupport(new OperationValueEditingSupport(
-	// tableViewer, getBControl()));
-	//
-	// column = new TableViewerColumn(tableViewer, SWT.NONE);
-	// column.getColumn().setText("Parameter");
-	// column.getColumn().setWidth(190);
-	// column.setEditingSupport(new PredicateEditingSupport(tableViewer,
-	// dbc, "predicate", getBControl().getVisualization(),
-	// getShell()));
-	//
-	// column = new TableViewerColumn(tableViewer, SWT.NONE);
-	// column.getColumn().setText("Random Ops");
-	// column.getColumn().setWidth(100);
-	// column.setEditingSupport(new RandomModeEditingSupport(tableViewer));
-	//
-	// ObservableListContentProvider contentProvider = new
-	// ObservableListContentProvider();
-	// tableViewer.setContentProvider(contentProvider);
-	//
-	// tableViewer.setLabelProvider(new ObservableMapLabelProvider(
-	// BeansObservables.observeMaps(
-	// contentProvider.getKnownElements(), new String[] {
-	// "executePredicate", "operationName",
-	// "predicate", "maxrandom" })));
-	// final WritableList input = new WritableList(
-	// ((ExecuteOperationByPredicateMulti) getScheduler())
-	// .getOperationList(),
-	// PredicateOperation.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));
-	// btRemove.addSelectionListener(new SelectionAdapter() {
-	// @Override
-	// public void widgetSelected(SelectionEvent e) {
-	// if (tableViewer.getSelection().isEmpty()) {
-	// return;
-	// }
-	// PredicateOperation obj = (PredicateOperation) ((IStructuredSelection)
-	// tableViewer
-	// .getSelection()).getFirstElement();
-	// input.remove(obj);
-	// }
-	// });
-	//
-	// Button btAdd = new Button(comp, SWT.PUSH);
-	// btAdd.setText("Add");
-	// btAdd.setImage(BMotionStudioImage
-	// .getImage(EditorImageRegistry.IMG_ICON_ADD));
-	// btAdd.addSelectionListener(new SelectionAdapter() {
-	// @Override
-	// public void widgetSelected(SelectionEvent e) {
-	// PredicateOperation obj = new PredicateOperation();
-	// input.add(obj);
-	// }
-	// });
-	//
-	// }
-	// }
+		}
+	}
 
-	public WizardExecuteOperationByPredicateMulti(Shell shell,
-			BControl bcontrol,
+	public WizardExecuteOperationByPredicateMulti(BControl bcontrol,
 			SchedulerEvent scheduler) {
-		super(shell, bcontrol, scheduler);
+		super(bcontrol, scheduler);
+		addPage(new MultiPage("MultiPage"));
 	}
 
 	/*
-	 * // * (non-Javadoc) // * // * @see // *
+	 * (non-Javadoc)
+	 * 
+	 * @see
 	 * de.bmotionstudio.gef.editor.scheduler.SchedulerWizard#prepareToFinish()
-	 * //
 	 */
-	// @Override
-	// protected Boolean prepareToFinish() {
-	// if (((ExecuteOperationByPredicateMulti) getScheduler())
-	// .getOperationList().size() == 0) {
-	// setEventDelete(true);
-	// } else {
-	// for (BindingObject obj : ((ExecuteOperationByPredicateMulti)
-	// getScheduler())
-	// .getOperationList()) {
-	// if (((PredicateOperation) obj).getOperationName() == null
-	// || ((PredicateOperation) obj).getOperationName()
-	// .isEmpty()) {
-	// MessageDialog
-	// .openError(getShell(), "Please check your entries",
-	// "Please check your entries. The operation field must not be empty.");
-	// return false;
-	// }
-	// }
-	// }
-	// return true;
-	// }
+	@Override
+	protected Boolean prepareToFinish() {
+		if (((ExecuteOperationByPredicateMulti) getScheduler())
+				.getOperationList().size() == 0) {
+			setEventDelete(true);
+		} else {
+			for (BindingObject obj : ((ExecuteOperationByPredicateMulti) getScheduler())
+					.getOperationList()) {
+				if (((PredicateOperation) obj).getOperationName() == null
+						|| ((PredicateOperation) obj).getOperationName()
+								.isEmpty()) {
+					MessageDialog
+							.openError(getShell(), "Please check your entries",
+									"Please check your entries. The operation field must not be empty.");
+					return false;
+				}
+			}
+		}
+		return true;
+	}
 
 	/*
 	 * (non-Javadoc)
diff --git a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/scheduler/wizard/WizardExecuteScheduler.java b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/scheduler/wizard/WizardExecuteScheduler.java
index 504d38d3..81680ee3 100644
--- a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/scheduler/wizard/WizardExecuteScheduler.java
+++ b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/scheduler/wizard/WizardExecuteScheduler.java
@@ -19,6 +19,7 @@ import org.eclipse.jface.viewers.EditingSupport;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.TableViewer;
 import org.eclipse.jface.viewers.TableViewerColumn;
+import org.eclipse.jface.wizard.WizardPage;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.SelectionAdapter;
 import org.eclipse.swt.events.SelectionEvent;
@@ -30,9 +31,9 @@ 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.Shell;
 import org.eclipse.ui.PlatformUI;
 
+import de.bmotionstudio.gef.editor.BMotionAbstractWizard;
 import de.bmotionstudio.gef.editor.BMotionStudioImage;
 import de.bmotionstudio.gef.editor.EditorImageRegistry;
 import de.bmotionstudio.gef.editor.edit.PredicateEditingSupport;
@@ -45,111 +46,119 @@ import de.bmotionstudio.gef.editor.util.BMotionWizardUtil;
 
 public class WizardExecuteScheduler extends SchedulerWizard {
 
-	private TableViewer tableViewer;
-	
-	@Override
-	public Control createWizardContent(Composite parent) {
-		
-		DataBindingContext dbc = new DataBindingContext();
-
-		Composite container = new Composite(parent, SWT.NONE);
-		container.setLayout(new GridLayout(1, true));
-
-		tableViewer = BMotionWizardUtil.createBMotionWizardTableViewer(
-				container, AnimationScriptObject.class, getName());
-
-		TableViewerColumn column = new TableViewerColumn(tableViewer,
-				SWT.NONE);
-		column.getColumn().setText("Predicate");
-		column.getColumn().setWidth(225);
-		column.setEditingSupport(new PredicateEditingSupport(tableViewer,
-				dbc, "predicate", getBControl().getVisualization(),
-				getShell()));
-
-		column = new TableViewerColumn(tableViewer, SWT.NONE);
-		column.getColumn().setText("Edit");
-		column.getColumn().setWidth(225);
-		column.setEditingSupport(new AnimationScriptEditingSupport(
-				tableViewer));
-
-		ObservableListContentProvider contentProvider = new ObservableListContentProvider();
-		tableViewer.setContentProvider(contentProvider);
-
-		tableViewer.setLabelProvider(new ObservableMapLabelProvider(
-				BeansObservables.observeMaps(
-						contentProvider.getKnownElements(),
-						new String[] { "predicate" })) {
-
-			@Override
-			public String getColumnText(Object element, int columnIndex) {
-				if (columnIndex == 1) {
-					return "Edit Scheduler";
-				}
-				return super.getColumnText(element, columnIndex);
-			}
+	private class SchedulerPage extends WizardPage {
 
-			@Override
-			public Image getColumnImage(Object element, int columnIndex) {
-				return null;
-			}
+		private TableViewer tableViewer;
+
+		protected SchedulerPage(String pageName) {
+			super(pageName);
+		}
+
+		public void createControl(final Composite parent) {
+
+			DataBindingContext dbc = new DataBindingContext();
+
+			Composite container = new Composite(parent, SWT.NONE);
+			container.setLayout(new GridLayout(1, true));
+
+			setControl(container);
+
+			tableViewer = BMotionWizardUtil.createBMotionWizardTableViewer(
+					container, AnimationScriptObject.class,
+					((BMotionAbstractWizard) getWizard()).getName());
+
+			TableViewerColumn column = new TableViewerColumn(tableViewer,
+					SWT.NONE);
+			column.getColumn().setText("Predicate");
+			column.getColumn().setWidth(225);
+			column.setEditingSupport(new PredicateEditingSupport(tableViewer,
+					dbc, "predicate", getBControl().getVisualization(),
+					getShell()));
+
+			column = new TableViewerColumn(tableViewer, SWT.NONE);
+			column.getColumn().setText("Edit");
+			column.getColumn().setWidth(225);
+			column.setEditingSupport(new AnimationScriptEditingSupport(
+					tableViewer));
+
+			ObservableListContentProvider contentProvider = new ObservableListContentProvider();
+			tableViewer.setContentProvider(contentProvider);
 
-		});
-
-		final WritableList input = new WritableList(
-				((ExecuteAnimationScript) getScheduler()).getList(),
-				AnimationScriptObject.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));
-		btRemove.addSelectionListener(new SelectionAdapter() {
-			@Override
-			public void widgetSelected(SelectionEvent e) {
-				if (tableViewer.getSelection().isEmpty()) {
-					return;
+			tableViewer.setLabelProvider(new ObservableMapLabelProvider(
+					BeansObservables.observeMaps(
+							contentProvider.getKnownElements(),
+							new String[] { "predicate" })) {
+
+				@Override
+				public String getColumnText(Object element, int columnIndex) {
+					if (columnIndex == 1) {
+						return "Edit Scheduler";
+					}
+					return super.getColumnText(element, columnIndex);
 				}
-				AnimationScriptObject obj = (AnimationScriptObject) ((IStructuredSelection) tableViewer
-						.getSelection()).getFirstElement();
-				input.remove(obj);
-			}
-		});
-
-		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) {
-				AnimationScriptObject obj = new AnimationScriptObject("");
-				input.add(obj);
-			}
-		});
 
-		return container;
+				@Override
+				public Image getColumnImage(Object element, int columnIndex) {
+					return null;
+				}
+
+			});
+
+			final WritableList input = new WritableList(
+					((ExecuteAnimationScript) getScheduler()).getList(),
+					AnimationScriptObject.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));
+			btRemove.addSelectionListener(new SelectionAdapter() {
+				@Override
+				public void widgetSelected(SelectionEvent e) {
+					if (tableViewer.getSelection().isEmpty()) {
+						return;
+					}
+					AnimationScriptObject obj = (AnimationScriptObject) ((IStructuredSelection) tableViewer
+							.getSelection()).getFirstElement();
+					input.remove(obj);
+				}
+			});
+
+			Button btAdd = new Button(comp, SWT.PUSH);
+			btAdd.setText("Add");
+			btAdd.setImage(BMotionStudioImage
+					.getImage(EditorImageRegistry.IMG_ICON_ADD));
+			btAdd.addSelectionListener(new SelectionAdapter() {
+				@Override
+				public void widgetSelected(SelectionEvent e) {
+					AnimationScriptObject obj = new AnimationScriptObject("");
+					input.add(obj);
+				}
+			});
 
+		}
 	}
-		
-	public WizardExecuteScheduler(Shell shell, BControl bcontrol,
+
+	public WizardExecuteScheduler(BControl bcontrol,
 			SchedulerEvent scheduler) {
-		super(shell, bcontrol, scheduler);
+		super(bcontrol, scheduler);
+		addPage(new SchedulerPage("SchedulerPage"));
 	}
 
-	// @Override
-	// protected Boolean prepareToFinish() {
-	// return true;
-	// }
-	//
-	// @Override
-	// public boolean performCancel() {
-	// return true;
-	// }
+	@Override
+	protected Boolean prepareToFinish() {
+		return true;
+	}
+
+	@Override
+	public boolean performCancel() {
+		return true;
+	}
 
 	@Override
 	public Point getSize() {
-- 
GitLab