diff --git a/build.cmd b/build.cmd
new file mode 100644
index 0000000..afd726b
--- /dev/null
+++ b/build.cmd
@@ -0,0 +1,28 @@
+set MAVEN_OPTS="-Xmx512m -XX:MaxPermSize=256m"
+set PWD=%CD:\=/%
+
+mvn clean verify -f releng/core/pom.xml ^
+    -DheliosRepository=http://updates.xored.com/helios ^
+    -DindigoRepository=http://updates.xored.com/indigo ^
+    -DkeplerRepository=http://updates.xored.com/kepler
+
+mvn clean verify -f releng/runtime/pom.xml -P runtime3x ^
+    -DheliosRepository=http://updates.xored.com/helios ^
+    -DindigoRepository=http://updates.xored.com/indigo ^
+    -DkeplerRepository=http://updates.xored.com/kepler ^
+    -DcoreRepository=file:%PWD%/repository/core/target/repository
+
+mvn clean verify -f releng/runtime/pom.xml -P runtime4x ^
+    -DheliosRepository=http://updates.xored.com/helios ^
+    -DindigoRepository=http://updates.xored.com/indigo ^
+    -DkeplerRepository=http://updates.xored.com/kepler ^
+    -DcoreRepository=file:%PWD%/repository/core/target/repository
+
+mvn clean verify -f releng/ide/pom.xml ^
+    -DheliosRepository=http://updates.xored.com/helios ^
+    -DindigoRepository=http://updates.xored.com/indigo ^
+    -DkeplerRepository=http://updates.xored.com/kepler ^
+    -DcoreRepository=file:%PWD%/repository/core/target/repository ^
+    -De3xRepository=file:%PWD%/repository/e3x/target/repository ^
+    -De4xRepository=file:%PWD%/repository/e4x/target/repository"
+
diff --git a/build.sh b/build.sh
new file mode 100755
index 0000000..a63eb72
--- /dev/null
+++ b/build.sh
@@ -0,0 +1,27 @@
+export MAVEN_OPTS="-Xmx512m -XX:MaxPermSize=256m"
+
+mvn clean verify -f releng/core/pom.xml \
+    -DheliosRepository=http://updates.xored.com/helios \
+    -DindigoRepository=http://updates.xored.com/indigo \
+    -DkeplerRepository=http://updates.xored.com/kepler
+
+mvn clean verify -f releng/runtime/pom.xml -P runtime3x \
+    -DheliosRepository=http://updates.xored.com/helios \
+    -DindigoRepository=http://updates.xored.com/indigo \
+    -DkeplerRepository=http://updates.xored.com/kepler \
+    -DcoreRepository=file:$PWD/repository/core/target/repository
+
+mvn clean verify -f releng/runtime/pom.xml -P runtime4x \
+    -DheliosRepository=http://updates.xored.com/helios \
+    -DindigoRepository=http://updates.xored.com/indigo \
+    -DkeplerRepository=http://updates.xored.com/kepler \
+    -DcoreRepository=file:$PWD/repository/core/target/repository
+
+mvn clean verify -f releng/ide/pom.xml \
+    -DheliosRepository=http://updates.xored.com/helios \
+    -DindigoRepository=http://updates.xored.com/indigo \
+    -DkeplerRepository=http://updates.xored.com/kepler \
+    -DcoreRepository=file:$PWD/repository/core/target/repository \
+    -De3xRepository=file:$PWD/repository/e3x/target/repository \
+    -De4xRepository=file:$PWD/repository/e4x/target/repository
+
diff --git a/core/contexts/org.eclipse.rcptt.ctx.filesystem/META-INF/MANIFEST.MF b/core/contexts/org.eclipse.rcptt.ctx.filesystem/META-INF/MANIFEST.MF
index e2bbbb9..d4011c3 100644
--- a/core/contexts/org.eclipse.rcptt.ctx.filesystem/META-INF/MANIFEST.MF
+++ b/core/contexts/org.eclipse.rcptt.ctx.filesystem/META-INF/MANIFEST.MF
@@ -16,6 +16,7 @@
  org.eclipse.rcptt.ecl.core;visibility:=reexport,
  org.eclipse.rcptt.core.scenario;visibility:=reexport,
  org.eclipse.rcptt.core,
- org.eclipse.rcptt.util
+ org.eclipse.rcptt.util,
+ org.eclipse.core.variables;resolution:=optional
 Bundle-ActivationPolicy: lazy
 Bundle-Activator: org.eclipse.rcptt.ctx.filesystem.FilesystemContextPlugin
diff --git a/core/contexts/org.eclipse.rcptt.ctx.filesystem/src/org/eclipse/rcptt/ctx/filesystem/FSUtils.java b/core/contexts/org.eclipse.rcptt.ctx.filesystem/src/org/eclipse/rcptt/ctx/filesystem/FSUtils.java
index 9c803d1..4b2b2fd 100644
--- a/core/contexts/org.eclipse.rcptt.ctx.filesystem/src/org/eclipse/rcptt/ctx/filesystem/FSUtils.java
+++ b/core/contexts/org.eclipse.rcptt.ctx.filesystem/src/org/eclipse/rcptt/ctx/filesystem/FSUtils.java
@@ -30,8 +30,8 @@
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
+import org.eclipse.core.variables.VariablesPlugin;
 import org.eclipse.emf.ecore.EReference;
-
 import org.eclipse.rcptt.filesystem.FSFile;
 import org.eclipse.rcptt.filesystem.FSFolder;
 import org.eclipse.rcptt.filesystem.FSResource;
@@ -49,6 +49,15 @@
 		if (path == null)
 			path = "";
 
+		// Tries to substitute variables
+		try {
+			path = VariablesPlugin
+					.getDefault()
+					.getStringVariableManager()
+					.performStringSubstitution(path, true);
+		} catch (NoClassDefFoundError e) {
+		}
+
 		if (path.equals(PrefixScheme.WORKSPACE))
 			throw new CoreException(
 					createErr("Cannot clear entire workspace. Please use workspace context for that purpose."));
diff --git a/core/org.eclipse.rcptt.core/src/org/eclipse/rcptt/core/Q7Features.java b/core/org.eclipse.rcptt.core/src/org/eclipse/rcptt/core/Q7Features.java
index c8d3613..d6a368e 100644
--- a/core/org.eclipse.rcptt.core/src/org/eclipse/rcptt/core/Q7Features.java
+++ b/core/org.eclipse.rcptt.core/src/org/eclipse/rcptt/core/Q7Features.java
@@ -70,7 +70,7 @@
 				.showIn(TeslaFeatures.ADV_OPTIONS);
 
 		option(LAUNCHING_KILL_AUT_ON_CONNECT_ERROR)
-				.name("Kill AUT on connect error.")
+				.name("Kill AUT on connect error")
 				.description(
 						"Whether to kill AUT after the startup waiting time expiration?")
 				.value("false").defaultValue("false")
diff --git a/core/org.eclipse.rcptt.core/src/org/eclipse/rcptt/internal/core/model/ModelManager.java b/core/org.eclipse.rcptt.core/src/org/eclipse/rcptt/internal/core/model/ModelManager.java
index d648952..2ac4d93 100644
--- a/core/org.eclipse.rcptt.core/src/org/eclipse/rcptt/internal/core/model/ModelManager.java
+++ b/core/org.eclipse.rcptt.core/src/org/eclipse/rcptt/internal/core/model/ModelManager.java
@@ -23,12 +23,8 @@
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.resources.IResourceChangeEvent;
-import org.eclipse.core.resources.IResourceChangeListener;
-import org.eclipse.core.resources.IResourceDelta;
-import org.eclipse.core.resources.IResourceDeltaVisitor;
 import org.eclipse.core.resources.IWorkspace;
 import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.rcptt.core.ContextType;
 import org.eclipse.rcptt.core.model.IContext;
@@ -41,7 +37,6 @@
 import org.eclipse.rcptt.core.model.ITestSuite;
 import org.eclipse.rcptt.core.model.ModelException;
 import org.eclipse.rcptt.core.model.search.ISearchScope;
-import org.eclipse.rcptt.core.nature.RcpttNature;
 import org.eclipse.rcptt.core.scenario.GroupContext;
 import org.eclipse.rcptt.core.scenario.TestSuiteItem;
 import org.eclipse.rcptt.core.workspace.RcpttCore;
@@ -55,7 +50,6 @@
 
 public class ModelManager {
 	private static ModelManager instance;
-	private ThreadLocal<Map<IQ7Element, Object>> temporaryCache = new ThreadLocal<Map<IQ7Element, Object>>();
 	public ModelCache cache;// = new ModelCache();
 
 	public DeltaProcessingState deltaState = new DeltaProcessingState();
@@ -101,31 +95,10 @@
 		workspace.removeResourceChangeListener(this.deltaState);
 	}
 
-	public Map<IQ7Element, Object> getTemporaryCache() {
-		Map<IQ7Element, Object> result = this.temporaryCache.get();
-		if (result == null) {
-			result = new HashMap<IQ7Element, Object>();
-			this.temporaryCache.set(result);
-		}
-		return result;
-	}
-
 	public synchronized Object getInfo(IQ7Element element) {
-		Map<IQ7Element, Object> tempCache = this.temporaryCache.get();
-		if (tempCache != null) {
-			Object result = tempCache.get(element);
-			if (result != null) {
-				return result;
-			}
-		}
 		return this.cache.getInfo(element);
 	}
 
-	public boolean hasTemporaryCache() {
-		// TODO Auto-generated method stub
-		return false;
-	}
-
 	protected synchronized void putInfos(IQ7Element openedElement,
 			Map<IQ7Element, Object> newElements) {
 		// remove children
@@ -169,10 +142,6 @@
 		return null;
 	}
 
-	public void resetTemporaryCache() {
-		this.temporaryCache.set(null);
-	}
-
 	public static IQ7Element create(IFile file, IQ7Project project) {
 		if (file == null) {
 			return null;
@@ -225,13 +194,6 @@
 	}
 
 	public Object peekAtInfo(IQ7Element element) {
-		Map<IQ7Element, Object> tempCache = this.temporaryCache.get();
-		if (tempCache != null) {
-			Object result = tempCache.get(element);
-			if (result != null) {
-				return result;
-			}
-		}
 		return this.cache.peekAtInfo(element);
 	}
 
diff --git a/core/org.eclipse.rcptt.core/src/org/eclipse/rcptt/internal/core/model/Q7Element.java b/core/org.eclipse.rcptt.core/src/org/eclipse/rcptt/internal/core/model/Q7Element.java
index e7fa2e6..f17dba4 100644
--- a/core/org.eclipse.rcptt.core/src/org/eclipse/rcptt/internal/core/model/Q7Element.java
+++ b/core/org.eclipse.rcptt.core/src/org/eclipse/rcptt/internal/core/model/Q7Element.java
@@ -11,6 +11,7 @@
 package org.eclipse.rcptt.internal.core.model;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -69,9 +70,8 @@
 	protected synchronized Object openWhenClosed(Object info,
 			IProgressMonitor monitor) throws ModelException {
 		ModelManager manager = ModelManager.getModelManager();
-		boolean hadTemporaryCache = manager.hasTemporaryCache();
 		try {
-			Map<IQ7Element, Object> newElements = manager.getTemporaryCache();
+			Map<IQ7Element, Object> newElements = new HashMap<IQ7Element, Object>();
 			generateInfos(info, newElements, monitor);
 			if (info == null) {
 				info = newElements.get(this);
@@ -79,16 +79,14 @@
 			if (info == null) {
 				throw newNotPresentException();
 			}
-			if (!hadTemporaryCache && !isInWorkingCopyMode()) {
+			if (!isInWorkingCopyMode()) {
 				// Do not put info if in working copy mode
 				manager.putInfos(this, newElements);
 			}
 		} finally {
-			if (!hadTemporaryCache) {
-				manager.resetTemporaryCache();
-			}
 		}
-		return info;
+		Object info2 = manager.getInfo(this);
+		return info2;
 	}
 
 	public void close() throws ModelException {
diff --git a/core/org.eclipse.rcptt.core/src/org/eclipse/rcptt/internal/core/model/cache/ElementCache.java b/core/org.eclipse.rcptt.core/src/org/eclipse/rcptt/internal/core/model/cache/ElementCache.java
index 16d60ae..0e93eaa 100644
--- a/core/org.eclipse.rcptt.core/src/org/eclipse/rcptt/internal/core/model/cache/ElementCache.java
+++ b/core/org.eclipse.rcptt.core/src/org/eclipse/rcptt/internal/core/model/cache/ElementCache.java
@@ -26,8 +26,9 @@
 	}
 
 	@Override
-	protected boolean close(LRUCacheEntry entry) {
-		Openable element = (Openable) entry._fKey;
+	protected boolean close(Object key, Object value) {
+		// System.out.println("ElementCache.close(" + key + ", " + value + ")");
+		Openable element = (Openable) key;
 		try {
 			if (!element.canBeRemovedFromCache()) {
 				return false;
@@ -64,4 +65,10 @@
 		}
 	}
 
+	@Override
+	public Object put(Object key, Object value) {
+		// System.out.println("ElementCache.put(" + key + ", " + value + ")");
+		return super.put(key, value);
+	}
+
 }
diff --git a/core/org.eclipse.rcptt.core/src/org/eclipse/rcptt/internal/core/model/cache/OverflowingLRUCache.java b/core/org.eclipse.rcptt.core/src/org/eclipse/rcptt/internal/core/model/cache/OverflowingLRUCache.java
index 64253e0..b816f00 100644
--- a/core/org.eclipse.rcptt.core/src/org/eclipse/rcptt/internal/core/model/cache/OverflowingLRUCache.java
+++ b/core/org.eclipse.rcptt.core/src/org/eclipse/rcptt/internal/core/model/cache/OverflowingLRUCache.java
@@ -41,7 +41,7 @@
 		return newCache;
 	}
 
-	protected abstract boolean close(LRUCacheEntry entry);
+	protected abstract boolean close(Object key, Object value);
 
 	@SuppressWarnings("rawtypes")
 	public Enumeration elements() {
@@ -170,7 +170,7 @@
 				fCurrentSpace -= entry._fSpace;
 				privateNotifyDeletionFromCache(entry);
 			} else {
-				if (!close(entry))
+				if (!close(entry._fKey, entry._fValue))
 					return;
 				// buffer close will recursively call #privateRemoveEntry with
 				// external==true
@@ -213,9 +213,11 @@
 
 		if (entry != null) {
 			privateRemoveEntry(entry, false, false);
+//			close(key, value);
+//			return entry._fValue;
 		}
 
-		// attempt to make new space
+		// attempt to make new spaceG
 		makeSpace(newSpace);
 
 		// add without worring about space, it will
diff --git a/core/org.eclipse.rcptt.tesla.core/src/org/eclipse/rcptt/tesla/core/TeslaFeatures.java b/core/org.eclipse.rcptt.tesla.core/src/org/eclipse/rcptt/tesla/core/TeslaFeatures.java
index 5ce1b4a..dd7836b 100644
--- a/core/org.eclipse.rcptt.tesla.core/src/org/eclipse/rcptt/tesla/core/TeslaFeatures.java
+++ b/core/org.eclipse.rcptt.tesla.core/src/org/eclipse/rcptt/tesla/core/TeslaFeatures.java
@@ -92,7 +92,7 @@
 				.defaultValue("false")
 				.values(AbstractFeatureManager.BOOLEAN_VALUES)
 				.description(
-						"Do not use OS clipboard for copy/paste operations.")
+						"Do not use OS clipboard for copy/paste operations")
 				.editable(true).showIn(ADV_OPTIONS);
 
 		option(REPORT_PASSED_TEST_DETAILS).category(CAT_REPORTING)
@@ -105,21 +105,21 @@
 				.editable(true).showIn(ADV_OPTIONS);
 
 		option(REPORT_INCLUDE_IGNORED_WAIT_DETAILS).category(CAT_REPORTING)
-				.name("Include 'ignored' timers into report files.")
+				.name("Include 'ignored' timers into report files")
 				.value("false")
 				.defaultValue("false")
 				.values(AbstractFeatureManager.BOOLEAN_VALUES)
 				.description(
-						"RCPTT widget details will contain ignored timer calls.")
+						"RCPTT widget details will contain ignored timer calls")
 				.editable(true).showIn(ADV_OPTIONS);
 
 		option(REPORT_PASSED_WAIT_DETAILS).category(CAT_REPORTING)
-				.name("Include 'wait details' into passed report entries.")
+				.name("Include 'wait details' into passed report entries")
 				.value("true")
 				.defaultValue("true")
 				.values(AbstractFeatureManager.BOOLEAN_VALUES)
 				.description(
-						"RCPTT widget wait details will be also added to passed reports as separate section.")
+						"RCPTT widget wait details will be also added to passed reports as separate section")
 				.editable(true).showIn(ADV_OPTIONS);
 
 		option(RECORD_ALL_SELECTIONS)
@@ -134,7 +134,7 @@
 		option(STATUS_DIALOG_ALLOWED)
 				.name("Allow status dialogs")
 				.description(
-						"Should the test pass, if appears the status dialog with an error ?")
+						"Should the test pass, if appears the status dialog with an error?")
 				.value("false").defaultValue("false")
 				.values(AbstractFeatureManager.BOOLEAN_VALUES).editable(true)
 				.showIn(TeslaFeatures.ADV_OPTIONS, TeslaFeatures.CP_OPTIONS);
diff --git a/core/org.eclipse.rcptt.tesla.core/src/org/eclipse/rcptt/tesla/core/TeslaLimits.java b/core/org.eclipse.rcptt.tesla.core/src/org/eclipse/rcptt/tesla/core/TeslaLimits.java
index f6a611d..ded8b74 100644
--- a/core/org.eclipse.rcptt.tesla.core/src/org/eclipse/rcptt/tesla/core/TeslaLimits.java
+++ b/core/org.eclipse.rcptt.tesla.core/src/org/eclipse/rcptt/tesla/core/TeslaLimits.java
@@ -41,59 +41,59 @@
 
 		o.addReplace(UIJOB_WAIT_FOR_DELAYED_TIMEOUT_TYPO, UIJOB_WAIT_FOR_DELAYED_TIMEOUT);
 		o.intOption(AUT_STARTUP_TIMEOUT, 10 * 60).category(TIMEOUTS)
-				.name("Time Q7 wait for AUT application to startup (seconds)")
+				.name("Time RCPTT wait for AUT application to startup (sec)")
 				.showIn(TeslaFeatures.ADV_OPTIONS);
 
 		o.intOption(CONTEXT_RUNNABLE_TIMEOUT, 3 * 60 * 1000).category(TIMEOUTS)
-				.name("Context operation runnable timeout(ms)")
+				.name("Context operation runnable timeout (ms)")
 				.showIn(TeslaFeatures.ADV_OPTIONS);
 
 		o.intOption(UIJOB_JOB_TIMEOUT, 30 * 1000)
 				.category(TIMEOUTS)
-				.name("Job Hang Skip timeout(ms)")
+				.name("Job Hang Skip timeout (ms)")
 				.description(
-						"Timeout then Q7 will deside to stop waiting for job")
+						"Timeout then RCPTT will deside to stop waiting for job")
 				.showIn(TeslaFeatures.ADV_OPTIONS).order(1);
 		o.intOption(JOB_LOGGING_TIMEOUT, 10)
 				.category(TIMEOUTS)
-				.name("Log waiting for job if exceed(seconds)")
+				.name("Log waiting for job if exceed (sec)")
 				.description(
-						"Timeout then Q7 will add information entry to Eclipse log.")
+						"Timeout then RCPTT will add information entry to Eclipse log")
 				.showIn(TeslaFeatures.ADV_OPTIONS).order(1);
 		o.intOption(AUTOBUILD_JOB_TIMEOUT, 3 * 60 * 1000)
 				.category(TIMEOUTS)
-				.name("AutoBuild Job Hang Skip timeout(ms)")
+				.name("AutoBuild Job Hang Skip timeout (ms)")
 				.description(
-						"Timeout then Q7 will deside to stop waiting for autobuild job")
+						"Timeout then RCPTT will deside to stop waiting for autobuild job")
 				.showIn(TeslaFeatures.ADV_OPTIONS).order(1);
 
 		o.intOption(JOB_STEPMODE_ENABLE_TIMEOUT, 10 * 1000)
 				.category(TIMEOUTS)
-				.name("Enable step mode for job after timeout(job in Thread.sleep,Object.wait) ")
+				.name("Enable step mode for job after timeout (job in Thread.sleep, Object.wait)")
 				.description(
-						"If job executes more then(ms). And calling Thread.sleep() or Object.wait(). Q7 will try to continue execution in step mode")
+						"If job executes more then (ms). And calling Thread.sleep() or Object.wait(). RCPTT will try to continue execution in step mode")
 				.showIn(TeslaFeatures.ADV_OPTIONS).order(2);
 		o.intOption(JOB_STEPMODE_STEP_TIME, 200)
 				.category(TIMEOUTS)
-				.name("Step mode: One Step every(ms)")
+				.name("Step mode: One Step every (ms)")
 				.description(
-						"If job executes more then(ms). And calling Thread.sleep() or Object.wait(). Q7 will try to continue execution")
+						"If job executes more then (ms). And calling Thread.sleep() or Object.wait(). RCPTT will try to continue execution")
 				.showIn(TeslaFeatures.ADV_OPTIONS).order(3);
 		o.intOption(JOB_STEPMODE_TIMEOUT, 120 * 1000).category(TIMEOUTS)
-				.name("Step mode: Stem mode timeout(ms)")
+				.name("Step mode: Step mode timeout (ms)")
 				.description("Allow step mode only for specified time")
 				.showIn(TeslaFeatures.ADV_OPTIONS).order(4);
 
 		o.intOption(UIJOB_WAIT_FOR_DELAYED_TIMEOUT, 600).category(TIMEOUTS)
-				.name("Wait for delayed jobs with delay less then(ms)")
+				.name("Wait for delayed jobs with delay less then (ms)")
 				.showIn(TeslaFeatures.ADV_OPTIONS).order(5);
 		o.intOption(CONTEXTS_WAITFORJOBS_TIMEOUT, 60 * 1000).category(TIMEOUTS)
-				.name("Wait jobs completion after context apply(ms)")
+				.name("Wait jobs completion after context apply (ms)")
 				.showIn(TeslaFeatures.ADV_OPTIONS).order(6);
 
 		o.intOption(JOB_NULIFY_IF_NOT_RESCHEDULED, 50)
 				.category(TIMEOUTS)
-				.name("Delayed jobs scheduled with delay 0, if not rescheduled more then(times)")
+				.name("Delayed jobs scheduled with delay 0, if not rescheduled more then (times)")
 				.showIn(TeslaFeatures.ADV_OPTIONS).order(7);
 
 		o.intOption(JOB_DEBUGJOB_TIMEOUT, 5 * 60 * 1000).category(TIMEOUTS)
@@ -101,19 +101,19 @@
 				.showIn(TeslaFeatures.ADV_OPTIONS).order(8);
 		o.intOption(TIMER_EXECS_WAIT, 250)
 				.category(TIMEOUTS)
-				.name("Wait for timerExecs(ms) (0 is disabled state)\n(skip org.eclipse.swt,org.eclipse.get packages)")
+				.name("Wait for timerExecs (ms) (0 is disabled state)\n(skip org.eclipse.swt, org.eclipse.get packages)")
 				.showIn(TeslaFeatures.ADV_OPTIONS).order(9);
 		o.intOption(TIMER_EXECS_SKIP, 5000)
 				.category(TIMEOUTS)
-				.name("Wait for timerExecs(ms) rescheduling for no more then time in ms")
+				.name("Wait for timerExecs (ms) rescheduling for no more then time in ms")
 				.showIn(TeslaFeatures.ADV_OPTIONS).order(9);
 		o.intOption(TIMER_EXECS_WAIT_NULLIFY, 100).category(TIMEOUTS)
-				.name("Nullify timetExec if time is less then (ms)")
+				.name("Nullify timerExec if time is less then (ms)")
 				.showIn(TeslaFeatures.ADV_OPTIONS).order(10);
 
 		o.intOption(TIMER_EXECS_TOTAL_WAIT, 30000)
 				.category(TIMEOUTS)
-				.name("Wait for timerExecs(ms) no more timeout and then do a step mode with step timeout")
+				.name("Wait for timerExecs (ms) no more timeout and then do a step mode\nwith step timeout")
 				.showIn(TeslaFeatures.ADV_OPTIONS).order(9);
 		o.intOption(TIMER_EXECS_TOTAL_WAIT_STEP, 2000)
 				.category(TIMEOUTS)
@@ -122,7 +122,7 @@
 
 		o.intOption(JFACE_RECONCILER_TIMEOUT, 10000)
 				.category(TIMEOUTS)
-				.name("JFace Viewer Reconciling Timeout(ms)")
+				.name("JFace Viewer Reconciling Timeout (ms)")
 				.showIn(TeslaFeatures.ADV_OPTIONS).order(11);
 
 	}
diff --git a/core/org.eclipse.rcptt.tesla.core/src/org/eclipse/rcptt/tesla/core/protocol/TextUIElement.java b/core/org.eclipse.rcptt.tesla.core/src/org/eclipse/rcptt/tesla/core/protocol/TextUIElement.java
index cdae5e8..20afee6 100644
--- a/core/org.eclipse.rcptt.tesla.core/src/org/eclipse/rcptt/tesla/core/protocol/TextUIElement.java
+++ b/core/org.eclipse.rcptt.tesla.core/src/org/eclipse/rcptt/tesla/core/protocol/TextUIElement.java
@@ -13,6 +13,7 @@
 import org.eclipse.rcptt.tesla.core.protocol.raw.Element;
 import org.eclipse.rcptt.tesla.core.protocol.raw.Response;
 import org.eclipse.rcptt.tesla.core.protocol.raw.ResponseStatus;
+import org.eclipse.rcptt.tesla.core.utils.Cryptography;
 
 public class TextUIElement extends ControlUIElement {
 
@@ -30,7 +31,7 @@
 	public void setText(String text, boolean select, boolean hide) {
 		SetText cmd = factory.createSetText();
 		cmd.setElement(getElement());
-		cmd.setValue(text);
+		cmd.setValue(hide ? Cryptography.INSTANCE.encrypt(text) : text);
 		cmd.setSelect(select);
 		cmd.setHidden(hide);
 		player.safeExecuteCommand(cmd);
diff --git a/core/org.eclipse.rcptt.tesla.core/src/org/eclipse/rcptt/tesla/core/protocol/diagram/DiagramFeatures.java b/core/org.eclipse.rcptt.tesla.core/src/org/eclipse/rcptt/tesla/core/protocol/diagram/DiagramFeatures.java
index 62eebeb..5f07bc9 100644
--- a/core/org.eclipse.rcptt.tesla.core/src/org/eclipse/rcptt/tesla/core/protocol/diagram/DiagramFeatures.java
+++ b/core/org.eclipse.rcptt.tesla.core/src/org/eclipse/rcptt/tesla/core/protocol/diagram/DiagramFeatures.java
@@ -86,7 +86,7 @@
 				.value("id,title")
 				.defaultValue("id,title")
 				.description(
-						"Use following feature names\n(comma separated) then generate edit part selector.")
+						"Use following feature names\n(comma separated) then generate edit part selector")
 				.showIn(TeslaFeatures.ADV_OPTIONS, TeslaFeatures.CP_OPTIONS)
 				.order(4);
 		// By Class name
diff --git a/core/org.eclipse.rcptt.tesla.core/src/org/eclipse/rcptt/tesla/core/utils/Cryptography.java b/core/org.eclipse.rcptt.tesla.core/src/org/eclipse/rcptt/tesla/core/utils/Cryptography.java
new file mode 100644
index 0000000..f2d831a
--- /dev/null
+++ b/core/org.eclipse.rcptt.tesla.core/src/org/eclipse/rcptt/tesla/core/utils/Cryptography.java
@@ -0,0 +1,82 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2014 Xored Software Inc and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Xored Software Inc - initial API and implementation and/or initial documentation
+ *******************************************************************************/
+package org.eclipse.rcptt.tesla.core.utils;
+
+import java.security.Key;
+import java.security.spec.KeySpec;
+
+import javax.crypto.Cipher;
+import javax.crypto.SecretKeyFactory;
+import javax.crypto.spec.IvParameterSpec;
+import javax.crypto.spec.PBEKeySpec;
+import javax.crypto.spec.SecretKeySpec;
+
+import org.eclipse.rcptt.util.Base64;
+import org.eclipse.rcptt.util.StringUtils;
+
+public class Cryptography {
+	private static final byte[] IV_PARAMETER_SPEC = new byte[]{1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8};
+	private static final byte[] SALT = new byte[]{0, 0, 0, 0, 0, 0, 0, 0};
+	private static final String CIPHER_MODE = "AES/CBC/PKCS5Padding";
+	private static final String PROPERTY = "org.eclipse.rcptt.cryptoKey";
+	private Key key;
+
+	public Cryptography(Key key) {
+		this.key = key;
+		if (key == null)
+			throw new NullPointerException();
+	}
+
+	public String decrypt(String input) {
+		try {
+			Cipher cipher = Cipher.getInstance(CIPHER_MODE);
+			cipher.init(Cipher.DECRYPT_MODE, key, new IvParameterSpec(IV_PARAMETER_SPEC));
+			return new String(cipher.doFinal(Base64
+					.decode(input)), "UTF-8");
+		} catch (Exception e) {
+			throw new RuntimeException(e);
+		}
+	}
+
+	public String encrypt(String input) {
+		try {
+			Cipher cipher = Cipher.getInstance(CIPHER_MODE);
+			cipher.init(Cipher.ENCRYPT_MODE, key, new IvParameterSpec(IV_PARAMETER_SPEC));
+			return Base64.encode(cipher.doFinal(input
+					.getBytes("UTF-8")));
+		} catch (Exception e) {
+			throw new RuntimeException(e);
+		}
+	}
+
+	static public final Cryptography INSTANCE = new Cryptography(
+			getConfiguredKey());
+
+	private static Key getConfiguredKey() {
+		String keyString = System.getProperty(PROPERTY);
+		if (StringUtils.isEmpty(keyString)) 
+			keyString = "gjdlm7JIO.UOLNE/EOL<FPUWX MI<KMG2TYIL";
+		try {
+			SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
+			KeySpec spec = new PBEKeySpec(keyString.toCharArray(), SALT, 256, 128);
+			byte[] encoded = factory.generateSecret(spec).getEncoded(); 
+			assert encoded.length*8 == 128;
+			Key rv = new SecretKeySpec(encoded, "AES");
+			//Testing key
+			Cipher cipher = Cipher.getInstance(CIPHER_MODE);
+			cipher.init(Cipher.DECRYPT_MODE, rv, new IvParameterSpec(IV_PARAMETER_SPEC));
+			return rv;
+		} catch (Exception e) {
+			throw new RuntimeException("Cryptography key failure.", e);
+		}
+
+	}
+}
diff --git a/core/org.eclipse.rcptt.tesla.recording.core.ecl/src/org/eclipse/rcptt/tesla/recording/core/ecl/parser/TeslaParser.java b/core/org.eclipse.rcptt.tesla.recording.core.ecl/src/org/eclipse/rcptt/tesla/recording/core/ecl/parser/TeslaParser.java
index b72f5e8..167a7f3 100644
--- a/core/org.eclipse.rcptt.tesla.recording.core.ecl/src/org/eclipse/rcptt/tesla/recording/core/ecl/parser/TeslaParser.java
+++ b/core/org.eclipse.rcptt.tesla.recording.core.ecl/src/org/eclipse/rcptt/tesla/recording/core/ecl/parser/TeslaParser.java
@@ -30,7 +30,6 @@
 import org.eclipse.rcptt.ecl.core.Sequence;
 import org.eclipse.rcptt.ecl.core.util.EclRefactoring;
 import org.eclipse.swt.dnd.DND;
-
 import org.eclipse.rcptt.util.Base64;
 import org.eclipse.rcptt.util.swt.KeysAndButtons;
 import org.eclipse.rcptt.tesla.core.protocol.ActivateCellEditor;
@@ -97,6 +96,7 @@
 import org.eclipse.rcptt.tesla.ecl.TeslaEclUtils;
 import org.eclipse.rcptt.tesla.ecl.TeslaScriptletFactory;
 import org.eclipse.rcptt.tesla.ecl.model.Button;
+import org.eclipse.rcptt.tesla.ecl.model.Decrypt;
 import org.eclipse.rcptt.tesla.ecl.model.ExecWithOptions;
 import org.eclipse.rcptt.tesla.ecl.model.FromRawKey;
 import org.eclipse.rcptt.tesla.ecl.model.GetProperty;
@@ -296,16 +296,29 @@
 	}
 
 	@TeslaCommand(packageUri = ProtocolPackage.eNS_URI, classifier = "SetText")
-	protected Command setText(SetText c) {
-		if (c.getElement().getKind().equals(ElementKind.DateTime.name())
-				|| c.getElement().getKind().equals(ElementKind.Slider.name())) {
-			return TeslaScriptletFactory.makePipe(selectorOf(c.getElement()),
-					TeslaScriptletFactory.makeSetValue(c.getValue()));
+ 	protected Command setText(SetText c) {
+ 		if (c.getElement().getKind().equals(ElementKind.DateTime.name())
+ 				|| c.getElement().getKind().equals(ElementKind.Slider.name())) {
+ 			return TeslaScriptletFactory.makePipe(selectorOf(c.getElement()),
+ 					TeslaScriptletFactory.makeSetValue(c.getValue()));
+ 		}
+		
+		org.eclipse.rcptt.tesla.ecl.model.SetText cmd = TeslaFactory.eINSTANCE.createSetText();
+		if (c.isHidden()) {
+			bind(cmd, TeslaPackage.eINSTANCE.getSetText_Text(), decrypt(c.getValue()));
+		} else {
+			cmd.setText(c.getValue());
 		}
-		return TeslaScriptletFactory.makePipe(selectorOf(c.getElement()),
-				TeslaScriptletFactory.makeSetText(c.getValue()));
+ 		return TeslaScriptletFactory.makePipe(selectorOf(c.getElement()),
+				cmd);
 	}
-
+	
+	protected Command decrypt(String rawdata) {
+		Decrypt cmd = TeslaFactory.eINSTANCE.createDecrypt();
+		cmd.setValue(rawdata);
+		return cmd;
+ 	}
+ 
 	@TeslaCommand(packageUri = ProtocolPackage.eNS_URI, classifier = "SetTextSelection")
 	protected Command setTextSelection(SetTextSelection c) {
 		if (c.getEndline() != null && c.getEndoffset() != null) {
diff --git a/ecl/plugins/org.eclipse.rcptt.ecl.core/META-INF/MANIFEST.MF b/ecl/plugins/org.eclipse.rcptt.ecl.core/META-INF/MANIFEST.MF
index 5240309..6852161 100644
--- a/ecl/plugins/org.eclipse.rcptt.ecl.core/META-INF/MANIFEST.MF
+++ b/ecl/plugins/org.eclipse.rcptt.ecl.core/META-INF/MANIFEST.MF
@@ -1,10 +1,11 @@
 Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
-Bundle-Name: ECL Core
+Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.rcptt.ecl.core;singleton:=true
 Bundle-Version: 1.5.2.qualifier
 Bundle-ClassPath: .
-Bundle-Vendor: Eclipse RCP Testing Tool Project
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
 Bundle-RequiredExecutionEnvironment: JavaSE-1.6
 Export-Package: org.eclipse.rcptt.ecl.core,
  org.eclipse.rcptt.ecl.core.impl,
diff --git a/ecl/plugins/org.eclipse.rcptt.ecl.core/model/ecl.ecore b/ecl/plugins/org.eclipse.rcptt.ecl.core/model/ecl.ecore
index 2e78493..eea77bb 100644
--- a/ecl/plugins/org.eclipse.rcptt.ecl.core/model/ecl.ecore
+++ b/ecl/plugins/org.eclipse.rcptt.ecl.core/model/ecl.ecore
@@ -318,13 +318,6 @@
       <details key="returns" value="An internal object describing the case."/>
       <details key="example" value="list 1 2 3 | get 0 | switch [case 1 {&#xD;&#xA;&#x9;log -message &quot;First item is 1&quot;&#xD;&#xA;}] [case 2 {&#xA;&#x9;log -message &quot;First item is 2&quot;&#xA;}]"/>
     </eAnnotations>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="input" lowerBound="1" eType="ecore:EClass platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EObject"
-        containment="true">
-      <eAnnotations source="http://www.eclipse.org/ecl/input"/>
-      <eAnnotations source="http://www.eclipse.org/ecl/docs">
-        <details key="description" value="The input value to compare."/>
-      </eAnnotations>
-    </eStructuralFeatures>
     <eStructuralFeatures xsi:type="ecore:EReference" name="condition" lowerBound="1"
         eType="ecore:EClass platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EObject">
       <eAnnotations source="http://www.eclipse.org/ecl/docs">
diff --git a/ecl/plugins/org.eclipse.rcptt.ecl.core/plugin.properties b/ecl/plugins/org.eclipse.rcptt.ecl.core/plugin.properties
index 69c8776..2538b5e 100644
--- a/ecl/plugins/org.eclipse.rcptt.ecl.core/plugin.properties
+++ b/ecl/plugins/org.eclipse.rcptt.ecl.core/plugin.properties
@@ -8,3 +8,5 @@
 # Contributors:
 #     Xored Software Inc - initial API and implementation and/or initial documentation
 ###############################################################################
+pluginName = Ecl Model
+providerName = www.example.org
diff --git a/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/core/Case.java b/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/core/Case.java
index 52b9a06..ba0f7ec 100644
--- a/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/core/Case.java
+++ b/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/core/Case.java
@@ -12,7 +12,6 @@
  * <p>
  * The following features are supported:
  * <ul>
- *   <li>{@link org.eclipse.rcptt.ecl.core.Case#getInput <em>Input</em>}</li>
  *   <li>{@link org.eclipse.rcptt.ecl.core.Case#getCondition <em>Condition</em>}</li>
  *   <li>{@link org.eclipse.rcptt.ecl.core.Case#getThen <em>Then</em>}</li>
  * </ul>
@@ -77,31 +76,4 @@
 	 */
 	void setThen(Command value);
 
-	/**
-	 * Returns the value of the '<em><b>Input</b></em>' containment reference.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Input</em>' containment reference isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Input</em>' containment reference.
-	 * @see #setInput(EObject)
-	 * @see org.eclipse.rcptt.ecl.core.CorePackage#getCase_Input()
-	 * @model containment="true" required="true"
-	 *        annotation="http://www.eclipse.org/ecl/docs description='The input value to compare.'"
-	 * @generated
-	 */
-	EObject getInput();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.rcptt.ecl.core.Case#getInput <em>Input</em>}' containment reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Input</em>' containment reference.
-	 * @see #getInput()
-	 * @generated
-	 */
-	void setInput(EObject value);
-
 } // Case
diff --git a/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/core/CorePackage.java b/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/core/CorePackage.java
index 09505e4..52edeae 100644
--- a/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/core/CorePackage.java
+++ b/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/core/CorePackage.java
@@ -2019,22 +2019,13 @@
 	int CASE__BINDINGS = COMMAND__BINDINGS;
 
 	/**
-	 * The feature id for the '<em><b>Input</b></em>' containment reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int CASE__INPUT = COMMAND_FEATURE_COUNT + 0;
-
-	/**
 	 * The feature id for the '<em><b>Condition</b></em>' reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int CASE__CONDITION = COMMAND_FEATURE_COUNT + 1;
+	int CASE__CONDITION = COMMAND_FEATURE_COUNT + 0;
 
 	/**
 	 * The feature id for the '<em><b>Then</b></em>' containment reference.
@@ -2043,7 +2034,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int CASE__THEN = COMMAND_FEATURE_COUNT + 2;
+	int CASE__THEN = COMMAND_FEATURE_COUNT + 1;
 
 	/**
 	 * The number of structural features of the '<em>Case</em>' class.
@@ -2052,7 +2043,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int CASE_FEATURE_COUNT = COMMAND_FEATURE_COUNT + 3;
+	int CASE_FEATURE_COUNT = COMMAND_FEATURE_COUNT + 2;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.rcptt.ecl.core.impl.SwitchImpl <em>Switch</em>}' class.
@@ -3226,17 +3217,6 @@
 	EReference getCase_Then();
 
 	/**
-	 * Returns the meta object for the containment reference '{@link org.eclipse.rcptt.ecl.core.Case#getInput <em>Input</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for the containment reference '<em>Input</em>'.
-	 * @see org.eclipse.rcptt.ecl.core.Case#getInput()
-	 * @see #getCase()
-	 * @generated
-	 */
-	EReference getCase_Input();
-
-	/**
 	 * Returns the meta object for class '{@link org.eclipse.rcptt.ecl.core.Switch <em>Switch</em>}'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -4408,14 +4388,6 @@
 		EReference CASE__THEN = eINSTANCE.getCase_Then();
 
 		/**
-		 * The meta object literal for the '<em><b>Input</b></em>' containment reference feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @generated
-		 */
-		EReference CASE__INPUT = eINSTANCE.getCase_Input();
-
-		/**
 		 * The meta object literal for the '{@link org.eclipse.rcptt.ecl.core.impl.SwitchImpl <em>Switch</em>}' class.
 		 * <!-- begin-user-doc -->
 		 * <!-- end-user-doc -->
diff --git a/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/core/Nullable.java b/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/core/Nullable.java
index 5c945ab..6255844 100644
--- a/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/core/Nullable.java
+++ b/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/core/Nullable.java
@@ -8,78 +8,78 @@
  * Contributors:
  *     Xored Software Inc - initial API and implementation and/or initial documentation
  *******************************************************************************/
-package org.eclipse.rcptt.ecl.core;
-
-import org.eclipse.emf.ecore.EObject;
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Nullable</b></em>'.
- * <!-- end-user-doc -->
- *
- * <p>
- * The following features are supported:
- * <ul>
- *   <li>{@link org.eclipse.rcptt.ecl.core.Nullable#getValue <em>Value</em>}</li>
- *   <li>{@link org.eclipse.rcptt.ecl.core.Nullable#getType <em>Type</em>}</li>
- * </ul>
- * </p>
- *
- * @see org.eclipse.rcptt.ecl.core.CorePackage#getNullable()
- * @model
- * @generated
- */
-public interface Nullable extends EObject {
-	/**
-	 * Returns the value of the '<em><b>Value</b></em>' containment reference.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Value</em>' containment reference isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Value</em>' containment reference.
-	 * @see #setValue(EObject)
-	 * @see org.eclipse.rcptt.ecl.core.CorePackage#getNullable_Value()
-	 * @model containment="true"
-	 * @generated
-	 */
-	EObject getValue();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.rcptt.ecl.core.Nullable#getValue <em>Value</em>}' containment reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Value</em>' containment reference.
-	 * @see #getValue()
-	 * @generated
-	 */
-	void setValue(EObject value);
-
-	/**
-	 * Returns the value of the '<em><b>Type</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Type</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Type</em>' attribute.
-	 * @see #setType(String)
-	 * @see org.eclipse.rcptt.ecl.core.CorePackage#getNullable_Type()
-	 * @model
-	 * @generated
-	 */
-	String getType();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.rcptt.ecl.core.Nullable#getType <em>Type</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Type</em>' attribute.
-	 * @see #getType()
-	 * @generated
-	 */
-	void setType(String value);
-
-} // Nullable
+package org.eclipse.rcptt.ecl.core;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Nullable</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.rcptt.ecl.core.Nullable#getValue <em>Value</em>}</li>
+ *   <li>{@link org.eclipse.rcptt.ecl.core.Nullable#getType <em>Type</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.rcptt.ecl.core.CorePackage#getNullable()
+ * @model
+ * @generated
+ */
+public interface Nullable extends EObject {
+	/**
+	 * Returns the value of the '<em><b>Value</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Value</em>' containment reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Value</em>' containment reference.
+	 * @see #setValue(EObject)
+	 * @see org.eclipse.rcptt.ecl.core.CorePackage#getNullable_Value()
+	 * @model containment="true"
+	 * @generated
+	 */
+	EObject getValue();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.rcptt.ecl.core.Nullable#getValue <em>Value</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Value</em>' containment reference.
+	 * @see #getValue()
+	 * @generated
+	 */
+	void setValue(EObject value);
+
+	/**
+	 * Returns the value of the '<em><b>Type</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Type</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Type</em>' attribute.
+	 * @see #setType(String)
+	 * @see org.eclipse.rcptt.ecl.core.CorePackage#getNullable_Type()
+	 * @model
+	 * @generated
+	 */
+	String getType();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.rcptt.ecl.core.Nullable#getType <em>Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Type</em>' attribute.
+	 * @see #getType()
+	 * @generated
+	 */
+	void setType(String value);
+
+} // Nullable
diff --git a/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/core/Serialized.java b/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/core/Serialized.java
index 8ba3fa9..9301c85 100644
--- a/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/core/Serialized.java
+++ b/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/core/Serialized.java
@@ -8,51 +8,51 @@
  * Contributors:
  *     Xored Software Inc - initial API and implementation and/or initial documentation
  *******************************************************************************/
-package org.eclipse.rcptt.ecl.core;
-
-import org.eclipse.emf.ecore.EObject;
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Serialized</b></em>'.
- * <!-- end-user-doc -->
- *
- * <p>
- * The following features are supported:
- * <ul>
- *   <li>{@link org.eclipse.rcptt.ecl.core.Serialized#getBytes <em>Bytes</em>}</li>
- * </ul>
- * </p>
- *
- * @see org.eclipse.rcptt.ecl.core.CorePackage#getSerialized()
- * @model
- * @generated
- */
-public interface Serialized extends EObject {
-	/**
-	 * Returns the value of the '<em><b>Bytes</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Bytes</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Bytes</em>' attribute.
-	 * @see #setBytes(byte[])
-	 * @see org.eclipse.rcptt.ecl.core.CorePackage#getSerialized_Bytes()
-	 * @model
-	 * @generated
-	 */
-	byte[] getBytes();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.rcptt.ecl.core.Serialized#getBytes <em>Bytes</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Bytes</em>' attribute.
-	 * @see #getBytes()
-	 * @generated
-	 */
-	void setBytes(byte[] value);
-
-} // Serialized
+package org.eclipse.rcptt.ecl.core;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Serialized</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.rcptt.ecl.core.Serialized#getBytes <em>Bytes</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.rcptt.ecl.core.CorePackage#getSerialized()
+ * @model
+ * @generated
+ */
+public interface Serialized extends EObject {
+	/**
+	 * Returns the value of the '<em><b>Bytes</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Bytes</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Bytes</em>' attribute.
+	 * @see #setBytes(byte[])
+	 * @see org.eclipse.rcptt.ecl.core.CorePackage#getSerialized_Bytes()
+	 * @model
+	 * @generated
+	 */
+	byte[] getBytes();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.rcptt.ecl.core.Serialized#getBytes <em>Bytes</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Bytes</em>' attribute.
+	 * @see #getBytes()
+	 * @generated
+	 */
+	void setBytes(byte[] value);
+
+} // Serialized
diff --git a/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/core/impl/CaseImpl.java b/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/core/impl/CaseImpl.java
index 5df016b..c33f152 100644
--- a/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/core/impl/CaseImpl.java
+++ b/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/core/impl/CaseImpl.java
@@ -22,7 +22,6 @@
  * <p>
  * The following features are implemented:
  * <ul>
- *   <li>{@link org.eclipse.rcptt.ecl.core.impl.CaseImpl#getInput <em>Input</em>}</li>
  *   <li>{@link org.eclipse.rcptt.ecl.core.impl.CaseImpl#getCondition <em>Condition</em>}</li>
  *   <li>{@link org.eclipse.rcptt.ecl.core.impl.CaseImpl#getThen <em>Then</em>}</li>
  * </ul>
@@ -32,16 +31,6 @@
  */
 public class CaseImpl extends CommandImpl implements Case {
 	/**
-	 * The cached value of the '{@link #getInput() <em>Input</em>}' containment reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getInput()
-	 * @generated
-	 * @ordered
-	 */
-	protected EObject input;
-
-	/**
 	 * The cached value of the '{@link #getCondition() <em>Condition</em>}' reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -166,54 +155,9 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	public EObject getInput() {
-		return input;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public NotificationChain basicSetInput(EObject newInput, NotificationChain msgs) {
-		EObject oldInput = input;
-		input = newInput;
-		if (eNotificationRequired()) {
-			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, CorePackage.CASE__INPUT, oldInput, newInput);
-			if (msgs == null) msgs = notification; else msgs.add(notification);
-		}
-		return msgs;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public void setInput(EObject newInput) {
-		if (newInput != input) {
-			NotificationChain msgs = null;
-			if (input != null)
-				msgs = ((InternalEObject)input).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - CorePackage.CASE__INPUT, null, msgs);
-			if (newInput != null)
-				msgs = ((InternalEObject)newInput).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - CorePackage.CASE__INPUT, null, msgs);
-			msgs = basicSetInput(newInput, msgs);
-			if (msgs != null) msgs.dispatch();
-		}
-		else if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, CorePackage.CASE__INPUT, newInput, newInput));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
 	@Override
 	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
 		switch (featureID) {
-			case CorePackage.CASE__INPUT:
-				return basicSetInput(null, msgs);
 			case CorePackage.CASE__THEN:
 				return basicSetThen(null, msgs);
 		}
@@ -228,8 +172,6 @@
 	@Override
 	public Object eGet(int featureID, boolean resolve, boolean coreType) {
 		switch (featureID) {
-			case CorePackage.CASE__INPUT:
-				return getInput();
 			case CorePackage.CASE__CONDITION:
 				if (resolve) return getCondition();
 				return basicGetCondition();
@@ -247,9 +189,6 @@
 	@Override
 	public void eSet(int featureID, Object newValue) {
 		switch (featureID) {
-			case CorePackage.CASE__INPUT:
-				setInput((EObject)newValue);
-				return;
 			case CorePackage.CASE__CONDITION:
 				setCondition((EObject)newValue);
 				return;
@@ -268,9 +207,6 @@
 	@Override
 	public void eUnset(int featureID) {
 		switch (featureID) {
-			case CorePackage.CASE__INPUT:
-				setInput((EObject)null);
-				return;
 			case CorePackage.CASE__CONDITION:
 				setCondition((EObject)null);
 				return;
@@ -289,8 +225,6 @@
 	@Override
 	public boolean eIsSet(int featureID) {
 		switch (featureID) {
-			case CorePackage.CASE__INPUT:
-				return input != null;
 			case CorePackage.CASE__CONDITION:
 				return condition != null;
 			case CorePackage.CASE__THEN:
diff --git a/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/core/impl/CorePackageImpl.java b/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/core/impl/CorePackageImpl.java
index a2141c6..4d3733f 100644
--- a/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/core/impl/CorePackageImpl.java
+++ b/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/core/impl/CorePackageImpl.java
@@ -1296,7 +1296,7 @@
 	 * @generated
 	 */
 	public EReference getCase_Condition() {
-		return (EReference)caseEClass.getEStructuralFeatures().get(1);
+		return (EReference)caseEClass.getEStructuralFeatures().get(0);
 	}
 
 	/**
@@ -1305,16 +1305,7 @@
 	 * @generated
 	 */
 	public EReference getCase_Then() {
-		return (EReference)caseEClass.getEStructuralFeatures().get(2);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public EReference getCase_Input() {
-		return (EReference)caseEClass.getEStructuralFeatures().get(0);
+		return (EReference)caseEClass.getEStructuralFeatures().get(1);
 	}
 
 	/**
@@ -1704,7 +1695,6 @@
 		createEReference(eclMapEntryEClass, ECL_MAP_ENTRY__VALUE);
 
 		caseEClass = createEClass(CASE);
-		createEReference(caseEClass, CASE__INPUT);
 		createEReference(caseEClass, CASE__CONDITION);
 		createEReference(caseEClass, CASE__THEN);
 
@@ -1947,7 +1937,6 @@
 		initEReference(getEclMapEntry_Value(), theEcorePackage.getEObject(), null, "value", null, 0, 1, EclMapEntry.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 
 		initEClass(caseEClass, Case.class, "Case", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
-		initEReference(getCase_Input(), theEcorePackage.getEObject(), null, "input", null, 1, 1, Case.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEReference(getCase_Condition(), theEcorePackage.getEObject(), null, "condition", null, 1, 1, Case.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEReference(getCase_Then(), this.getCommand(), null, "then", null, 0, 1, Case.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 
@@ -2018,7 +2007,7 @@
 		  (restoreStateEClass, 
 		   source, 
 		   new String[] {
-		   });															
+		   });													
 	}
 
 	/**
@@ -2037,12 +2026,7 @@
 		  (getGet_Input(), 
 		   source, 
 		   new String[] {
-		   });						
-		addAnnotation
-		  (getCase_Input(), 
-		   source, 
-		   new String[] {
-		   });						
+		   });									
 		addAnnotation
 		  (getSwitch_Input(), 
 		   source, 
@@ -2223,12 +2207,6 @@
 			 "description", "Corresponds command from <code>then</code> branch if an object from the <code>input</code> matches the <code>condition</code> object.",
 			 "returns", "An internal object describing the case.",
 			 "example", "list 1 2 3 | get 0 | switch [case 1 {\r\n\tlog -message \"First item is 1\"\r\n}] [case 2 {\n\tlog -message \"First item is 2\"\n}]"
-		   });			
-		addAnnotation
-		  (getCase_Input(), 
-		   source, 
-		   new String[] {
-			 "description", "The input value to compare."
 		   });		
 		addAnnotation
 		  (getCase_Condition(), 
diff --git a/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/core/impl/NullableImpl.java b/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/core/impl/NullableImpl.java
index e2d2ae5..00ecb1c 100644
--- a/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/core/impl/NullableImpl.java
+++ b/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/core/impl/NullableImpl.java
@@ -8,245 +8,245 @@
  * Contributors:
  *     Xored Software Inc - initial API and implementation and/or initial documentation
  *******************************************************************************/
-package org.eclipse.rcptt.ecl.core.impl;
-
-
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.common.notify.NotificationChain;
-
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.InternalEObject;
-
-import org.eclipse.emf.ecore.impl.ENotificationImpl;
-import org.eclipse.emf.ecore.impl.EObjectImpl;
+package org.eclipse.rcptt.ecl.core.impl;
+
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
 import org.eclipse.rcptt.ecl.core.CorePackage;
 import org.eclipse.rcptt.ecl.core.Nullable;
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>Nullable</b></em>'.
- * <!-- end-user-doc -->
- * <p>
- * The following features are implemented:
- * <ul>
- *   <li>{@link org.eclipse.rcptt.ecl.core.impl.NullableImpl#getValue <em>Value</em>}</li>
- *   <li>{@link org.eclipse.rcptt.ecl.core.impl.NullableImpl#getType <em>Type</em>}</li>
- * </ul>
- * </p>
- *
- * @generated
- */
-public class NullableImpl extends EObjectImpl implements Nullable {
-	/**
-	 * The cached value of the '{@link #getValue() <em>Value</em>}' containment reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getValue()
-	 * @generated
-	 * @ordered
-	 */
-	protected EObject value;
-
-	/**
-	 * The default value of the '{@link #getType() <em>Type</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getType()
-	 * @generated
-	 * @ordered
-	 */
-	protected static final String TYPE_EDEFAULT = null;
-
-	/**
-	 * The cached value of the '{@link #getType() <em>Type</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getType()
-	 * @generated
-	 * @ordered
-	 */
-	protected String type = TYPE_EDEFAULT;
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected NullableImpl() {
-		super();
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected EClass eStaticClass() {
-		return CorePackage.Literals.NULLABLE;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public EObject getValue() {
-		return value;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public NotificationChain basicSetValue(EObject newValue, NotificationChain msgs) {
-		EObject oldValue = value;
-		value = newValue;
-		if (eNotificationRequired()) {
-			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, CorePackage.NULLABLE__VALUE, oldValue, newValue);
-			if (msgs == null) msgs = notification; else msgs.add(notification);
-		}
-		return msgs;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public void setValue(EObject newValue) {
-		if (newValue != value) {
-			NotificationChain msgs = null;
-			if (value != null)
-				msgs = ((InternalEObject)value).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - CorePackage.NULLABLE__VALUE, null, msgs);
-			if (newValue != null)
-				msgs = ((InternalEObject)newValue).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - CorePackage.NULLABLE__VALUE, null, msgs);
-			msgs = basicSetValue(newValue, msgs);
-			if (msgs != null) msgs.dispatch();
-		}
-		else if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, CorePackage.NULLABLE__VALUE, newValue, newValue));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public String getType() {
-		return type;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public void setType(String newType) {
-		String oldType = type;
-		type = newType;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, CorePackage.NULLABLE__TYPE, oldType, type));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
-		switch (featureID) {
-			case CorePackage.NULLABLE__VALUE:
-				return basicSetValue(null, msgs);
-		}
-		return super.eInverseRemove(otherEnd, featureID, msgs);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Object eGet(int featureID, boolean resolve, boolean coreType) {
-		switch (featureID) {
-			case CorePackage.NULLABLE__VALUE:
-				return getValue();
-			case CorePackage.NULLABLE__TYPE:
-				return getType();
-		}
-		return super.eGet(featureID, resolve, coreType);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void eSet(int featureID, Object newValue) {
-		switch (featureID) {
-			case CorePackage.NULLABLE__VALUE:
-				setValue((EObject)newValue);
-				return;
-			case CorePackage.NULLABLE__TYPE:
-				setType((String)newValue);
-				return;
-		}
-		super.eSet(featureID, newValue);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void eUnset(int featureID) {
-		switch (featureID) {
-			case CorePackage.NULLABLE__VALUE:
-				setValue((EObject)null);
-				return;
-			case CorePackage.NULLABLE__TYPE:
-				setType(TYPE_EDEFAULT);
-				return;
-		}
-		super.eUnset(featureID);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public boolean eIsSet(int featureID) {
-		switch (featureID) {
-			case CorePackage.NULLABLE__VALUE:
-				return value != null;
-			case CorePackage.NULLABLE__TYPE:
-				return TYPE_EDEFAULT == null ? type != null : !TYPE_EDEFAULT.equals(type);
-		}
-		return super.eIsSet(featureID);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public String toString() {
-		if (eIsProxy()) return super.toString();
-
-		StringBuffer result = new StringBuffer(super.toString());
-		result.append(" (type: ");
-		result.append(type);
-		result.append(')');
-		return result.toString();
-	}
-
-} //NullableImpl
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Nullable</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.rcptt.ecl.core.impl.NullableImpl#getValue <em>Value</em>}</li>
+ *   <li>{@link org.eclipse.rcptt.ecl.core.impl.NullableImpl#getType <em>Type</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class NullableImpl extends EObjectImpl implements Nullable {
+	/**
+	 * The cached value of the '{@link #getValue() <em>Value</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected EObject value;
+
+	/**
+	 * The default value of the '{@link #getType() <em>Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getType()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String TYPE_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getType() <em>Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getType()
+	 * @generated
+	 * @ordered
+	 */
+	protected String type = TYPE_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected NullableImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return CorePackage.Literals.NULLABLE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EObject getValue() {
+		return value;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetValue(EObject newValue, NotificationChain msgs) {
+		EObject oldValue = value;
+		value = newValue;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, CorePackage.NULLABLE__VALUE, oldValue, newValue);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setValue(EObject newValue) {
+		if (newValue != value) {
+			NotificationChain msgs = null;
+			if (value != null)
+				msgs = ((InternalEObject)value).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - CorePackage.NULLABLE__VALUE, null, msgs);
+			if (newValue != null)
+				msgs = ((InternalEObject)newValue).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - CorePackage.NULLABLE__VALUE, null, msgs);
+			msgs = basicSetValue(newValue, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, CorePackage.NULLABLE__VALUE, newValue, newValue));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getType() {
+		return type;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setType(String newType) {
+		String oldType = type;
+		type = newType;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, CorePackage.NULLABLE__TYPE, oldType, type));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case CorePackage.NULLABLE__VALUE:
+				return basicSetValue(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case CorePackage.NULLABLE__VALUE:
+				return getValue();
+			case CorePackage.NULLABLE__TYPE:
+				return getType();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case CorePackage.NULLABLE__VALUE:
+				setValue((EObject)newValue);
+				return;
+			case CorePackage.NULLABLE__TYPE:
+				setType((String)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case CorePackage.NULLABLE__VALUE:
+				setValue((EObject)null);
+				return;
+			case CorePackage.NULLABLE__TYPE:
+				setType(TYPE_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case CorePackage.NULLABLE__VALUE:
+				return value != null;
+			case CorePackage.NULLABLE__TYPE:
+				return TYPE_EDEFAULT == null ? type != null : !TYPE_EDEFAULT.equals(type);
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (type: ");
+		result.append(type);
+		result.append(')');
+		return result.toString();
+	}
+
+} //NullableImpl
diff --git a/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/core/impl/SerializedImpl.java b/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/core/impl/SerializedImpl.java
index 6a4d3a6..4f776ca 100644
--- a/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/core/impl/SerializedImpl.java
+++ b/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/core/impl/SerializedImpl.java
@@ -8,164 +8,164 @@
  * Contributors:
  *     Xored Software Inc - initial API and implementation and/or initial documentation
  *******************************************************************************/
-package org.eclipse.rcptt.ecl.core.impl;
-
-
-import org.eclipse.emf.common.notify.Notification;
-
-import org.eclipse.emf.ecore.EClass;
-
-import org.eclipse.emf.ecore.impl.ENotificationImpl;
-import org.eclipse.emf.ecore.impl.EObjectImpl;
+package org.eclipse.rcptt.ecl.core.impl;
+
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
 import org.eclipse.rcptt.ecl.core.CorePackage;
 import org.eclipse.rcptt.ecl.core.Serialized;
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>Serialized</b></em>'.
- * <!-- end-user-doc -->
- * <p>
- * The following features are implemented:
- * <ul>
- *   <li>{@link org.eclipse.rcptt.ecl.core.impl.SerializedImpl#getBytes <em>Bytes</em>}</li>
- * </ul>
- * </p>
- *
- * @generated
- */
-public class SerializedImpl extends EObjectImpl implements Serialized {
-	/**
-	 * The default value of the '{@link #getBytes() <em>Bytes</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getBytes()
-	 * @generated
-	 * @ordered
-	 */
-	protected static final byte[] BYTES_EDEFAULT = null;
-
-	/**
-	 * The cached value of the '{@link #getBytes() <em>Bytes</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getBytes()
-	 * @generated
-	 * @ordered
-	 */
-	protected byte[] bytes = BYTES_EDEFAULT;
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected SerializedImpl() {
-		super();
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected EClass eStaticClass() {
-		return CorePackage.Literals.SERIALIZED;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public byte[] getBytes() {
-		return bytes;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public void setBytes(byte[] newBytes) {
-		byte[] oldBytes = bytes;
-		bytes = newBytes;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, CorePackage.SERIALIZED__BYTES, oldBytes, bytes));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Object eGet(int featureID, boolean resolve, boolean coreType) {
-		switch (featureID) {
-			case CorePackage.SERIALIZED__BYTES:
-				return getBytes();
-		}
-		return super.eGet(featureID, resolve, coreType);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void eSet(int featureID, Object newValue) {
-		switch (featureID) {
-			case CorePackage.SERIALIZED__BYTES:
-				setBytes((byte[])newValue);
-				return;
-		}
-		super.eSet(featureID, newValue);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void eUnset(int featureID) {
-		switch (featureID) {
-			case CorePackage.SERIALIZED__BYTES:
-				setBytes(BYTES_EDEFAULT);
-				return;
-		}
-		super.eUnset(featureID);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public boolean eIsSet(int featureID) {
-		switch (featureID) {
-			case CorePackage.SERIALIZED__BYTES:
-				return BYTES_EDEFAULT == null ? bytes != null : !BYTES_EDEFAULT.equals(bytes);
-		}
-		return super.eIsSet(featureID);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public String toString() {
-		if (eIsProxy()) return super.toString();
-
-		StringBuffer result = new StringBuffer(super.toString());
-		result.append(" (bytes: ");
-		result.append(bytes);
-		result.append(')');
-		return result.toString();
-	}
-
-} //SerializedImpl
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Serialized</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.rcptt.ecl.core.impl.SerializedImpl#getBytes <em>Bytes</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class SerializedImpl extends EObjectImpl implements Serialized {
+	/**
+	 * The default value of the '{@link #getBytes() <em>Bytes</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getBytes()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final byte[] BYTES_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getBytes() <em>Bytes</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getBytes()
+	 * @generated
+	 * @ordered
+	 */
+	protected byte[] bytes = BYTES_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected SerializedImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return CorePackage.Literals.SERIALIZED;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public byte[] getBytes() {
+		return bytes;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setBytes(byte[] newBytes) {
+		byte[] oldBytes = bytes;
+		bytes = newBytes;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, CorePackage.SERIALIZED__BYTES, oldBytes, bytes));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case CorePackage.SERIALIZED__BYTES:
+				return getBytes();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case CorePackage.SERIALIZED__BYTES:
+				setBytes((byte[])newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case CorePackage.SERIALIZED__BYTES:
+				setBytes(BYTES_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case CorePackage.SERIALIZED__BYTES:
+				return BYTES_EDEFAULT == null ? bytes != null : !BYTES_EDEFAULT.equals(bytes);
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (bytes: ");
+		result.append(bytes);
+		result.append(')');
+		return result.toString();
+	}
+
+} //SerializedImpl
diff --git a/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/core/util/CommandToStringConverter.java b/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/core/util/CommandToStringConverter.java
index ba030d8..c5a8a00 100644
--- a/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/core/util/CommandToStringConverter.java
+++ b/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/core/util/CommandToStringConverter.java
@@ -162,7 +162,8 @@
 				} else {
 					EReference ref = (EReference) feature;
 					EClass eclass = ref.getEReferenceType();
-					if (eclass.getClassifierID() == CorePackage.COMMAND) {
+					if (eclass.getEPackage().getName() == CorePackage.eNAME
+							&& eclass.getClassifierID() == CorePackage.COMMAND) {
 						boolean singleLine = !(val instanceof Sequence);
 						formatter.addAttrName(name, forced);
 						formatter.openGroup(singleLine);
diff --git a/rcp/org.eclipse.rcptt.ui/src/org/eclipse/rcptt/internal/ui/Messages.java b/rcp/org.eclipse.rcptt.ui/src/org/eclipse/rcptt/internal/ui/Messages.java
index d0d3c5c..2544d98 100644
--- a/rcp/org.eclipse.rcptt.ui/src/org/eclipse/rcptt/internal/ui/Messages.java
+++ b/rcp/org.eclipse.rcptt.ui/src/org/eclipse/rcptt/internal/ui/Messages.java
@@ -200,7 +200,6 @@
 	public static String ExecutionView_NoConnectionEMsg;
 	public static String FeaturesComposite_CoreFeaturesGroup;
 	public static String FeaturesComposite_RuntimeFeaturesGroup;
-	public static String FeaturesConfigurationDialog_0;
 	public static String FileSelectionDialog_Title;
 	public static String FolderSelectionDialog_NewFolderButton;
 	public static String HistoryListAction_OutOfBoundsErrorMsg;
@@ -288,7 +287,8 @@
 	public static String Q7Explorer_PasteLabel;
 	public static String Q7Explorer_RefreshJob;
 	public static String Q7Explorer_SelectAllLabel;
-	public static String Q7PreferencePage_AdvancedLinkText;
+	public static String Q7PreferencePage_AdvancedSectionLabel;
+	public static String Q7PreferencePage_AdvancedRunnerArgLink;
 	public static String Q7PreferencePage_CommandDelayLabel;
 	public static String Q7PreferencePage_IncorrectCommandDelayMsg;
 	public static String Q7PreferencePage_IncorrectLaunchTimeoutMsg;
diff --git a/rcp/org.eclipse.rcptt.ui/src/org/eclipse/rcptt/internal/ui/messages.properties b/rcp/org.eclipse.rcptt.ui/src/org/eclipse/rcptt/internal/ui/messages.properties
index dd169c1..90c3ab2 100644
--- a/rcp/org.eclipse.rcptt.ui/src/org/eclipse/rcptt/internal/ui/messages.properties
+++ b/rcp/org.eclipse.rcptt.ui/src/org/eclipse/rcptt/internal/ui/messages.properties
@@ -197,7 +197,6 @@
 ExecutionView_NoConnectionEMsg=Connection to AUT has been terminated.
 FeaturesComposite_CoreFeaturesGroup=Core Features
 FeaturesComposite_RuntimeFeaturesGroup=Runtime Features
-FeaturesConfigurationDialog_0=Advanced options configuration
 FileSelectionDialog_Title=Choose Location
 FolderSelectionDialog_NewFolderButton=New folder
 HistoryListAction_OutOfBoundsErrorMsg=Please enter a positive integer smaller than {0}.
@@ -286,7 +285,8 @@
 Q7Explorer_PasteLabel=Paste
 Q7Explorer_RefreshJob=Refresh Test Explorer
 Q7Explorer_SelectAllLabel=Select All
-Q7PreferencePage_AdvancedLinkText=<a>Advanced options</a>
+Q7PreferencePage_AdvancedSectionLabel=Advanced options
+Q7PreferencePage_AdvancedRunnerArgLink=<a>Runner arg</a>
 Q7PreferencePage_CommandDelayLabel=Commands execution delay (ms): 
 Q7PreferencePage_IncorrectCommandDelayMsg=Delay should be a positive number
 Q7PreferencePage_IncorrectLaunchTimeoutMsg=Timeout should be a positive number
diff --git a/rcp/org.eclipse.rcptt.ui/src/org/eclipse/rcptt/ui/controls/OptionsComposite.java b/rcp/org.eclipse.rcptt.ui/src/org/eclipse/rcptt/ui/controls/OptionsComposite.java
index f89a155..3a5b8b6 100644
--- a/rcp/org.eclipse.rcptt.ui/src/org/eclipse/rcptt/ui/controls/OptionsComposite.java
+++ b/rcp/org.eclipse.rcptt.ui/src/org/eclipse/rcptt/ui/controls/OptionsComposite.java
@@ -10,21 +10,17 @@
  *******************************************************************************/
 package org.eclipse.rcptt.ui.controls;
 
-import org.eclipse.jface.layout.GridDataFactory;
-import org.eclipse.jface.layout.GridLayoutFactory;
-import org.eclipse.swt.SWT;
+import org.eclipse.rcptt.internal.ui.Images;
+import org.eclipse.rcptt.internal.ui.Messages;
+import org.eclipse.rcptt.tesla.core.TeslaFeatures;
+import org.eclipse.rcptt.ui.preferences.FeaturesComposite;
 import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
 
-import org.eclipse.rcptt.internal.ui.Images;
-import org.eclipse.rcptt.internal.ui.Messages;
-import org.eclipse.rcptt.ui.preferences.FeaturesComposite;
-import org.eclipse.rcptt.tesla.core.TeslaFeatures;
-
 public class OptionsComposite extends AbstractEmbeddedComposite {
 
-	protected Composite scrolled;
+	protected Control scrolled;
 
 	public String getName() {
 		return Messages.OptionsComposite_Name;
@@ -45,10 +41,7 @@
 	public void createControl(Composite parent) {
 		super.createControl(parent);
 		features = new FeaturesComposite();
-		scrolled = new Composite(parent, SWT.NONE);
-		GridDataFactory.fillDefaults().grab(true, true).applyTo(scrolled);
-		GridLayoutFactory.fillDefaults().applyTo(scrolled);
-		features.createOptions(scrolled, TeslaFeatures.CP_OPTIONS, true,
+		scrolled = features.createOptions(parent, TeslaFeatures.CP_OPTIONS, true,
 		/* new FormToolkit(parent.getDisplay()) */null);
 	}
 
diff --git a/rcp/org.eclipse.rcptt.ui/src/org/eclipse/rcptt/ui/editors/EditorContent.java b/rcp/org.eclipse.rcptt.ui/src/org/eclipse/rcptt/ui/editors/EditorContent.java
index 165933c..9cebcbd 100644
--- a/rcp/org.eclipse.rcptt.ui/src/org/eclipse/rcptt/ui/editors/EditorContent.java
+++ b/rcp/org.eclipse.rcptt.ui/src/org/eclipse/rcptt/ui/editors/EditorContent.java
@@ -26,21 +26,6 @@
 import org.eclipse.jface.viewers.ISelectionChangedListener;
 import org.eclipse.jface.viewers.ISelectionProvider;
 import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.StyledText;
-import org.eclipse.swt.events.ModifyEvent;
-import org.eclipse.swt.events.ModifyListener;
-import org.eclipse.swt.program.Program;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Table;
-import org.eclipse.ui.IWorkbenchPartSite;
-import org.eclipse.ui.forms.events.HyperlinkEvent;
-import org.eclipse.ui.forms.events.IHyperlinkListener;
-import org.eclipse.ui.forms.widgets.FormToolkit;
-import org.eclipse.ui.forms.widgets.Hyperlink;
-import org.eclipse.ui.forms.widgets.Section;
-import org.eclipse.ui.views.properties.IPropertySource;
-
 import org.eclipse.rcptt.core.model.IQ7NamedElement;
 import org.eclipse.rcptt.core.model.ITestCase;
 import org.eclipse.rcptt.core.model.ModelException;
@@ -55,6 +40,20 @@
 import org.eclipse.rcptt.ui.controls.VerificationsTable;
 import org.eclipse.rcptt.ui.editors.NamedElementEditorActions.INamedElementActions;
 import org.eclipse.rcptt.ui.editors.ecl.EclSourceViewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.StyledText;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.program.Program;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.ui.IWorkbenchPartSite;
+import org.eclipse.ui.forms.events.HyperlinkEvent;
+import org.eclipse.ui.forms.events.IHyperlinkListener;
+import org.eclipse.ui.forms.widgets.FormToolkit;
+import org.eclipse.ui.forms.widgets.Hyperlink;
+import org.eclipse.ui.forms.widgets.Section;
+import org.eclipse.ui.views.properties.IPropertySource;
 
 public class EditorContent implements INamedElementActions {
 
@@ -71,7 +70,7 @@
 
 	private StyledText externalRefControl;
 	private boolean scenarioEditor;
-	private boolean supportRefs;
+	private final boolean supportRefs;
 
 	private VerificationsTable verificationsTable;
 	private Section verificationsSection;
@@ -465,7 +464,7 @@
 	public void doTextCommand(int fAction) {
 		if (descriptionComposite.getDescriptionControl().isFocusControl()) {
 			descriptionComposite.getDescriptionControl().invokeAction(fAction);
-		} else if (externalRefControl.isFocusControl()) {
+		} else if (externalRefControl != null && externalRefControl.isFocusControl()) {
 			externalRefControl.invokeAction(fAction);
 		}
 	}
diff --git a/rcp/org.eclipse.rcptt.ui/src/org/eclipse/rcptt/ui/preferences/FeaturesComposite.java b/rcp/org.eclipse.rcptt.ui/src/org/eclipse/rcptt/ui/preferences/FeaturesComposite.java
index e89977a..9b21441 100644
--- a/rcp/org.eclipse.rcptt.ui/src/org/eclipse/rcptt/ui/preferences/FeaturesComposite.java
+++ b/rcp/org.eclipse.rcptt.ui/src/org/eclipse/rcptt/ui/preferences/FeaturesComposite.java
@@ -20,16 +20,20 @@
 
 import org.eclipse.jface.layout.GridDataFactory;
 import org.eclipse.jface.layout.GridLayoutFactory;
+import org.eclipse.rcptt.core.Q7Features;
+import org.eclipse.rcptt.internal.core.RcpttPlugin;
+import org.eclipse.rcptt.internal.ui.Messages;
+import org.eclipse.rcptt.tesla.core.TeslaFeatures;
+import org.eclipse.rcptt.tesla.core.utils.AbstractFeatureManager;
+import org.eclipse.rcptt.tesla.core.utils.AbstractFeatureManager.Option;
+import org.eclipse.rcptt.tesla.internal.core.TeslaCore;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.custom.ScrolledComposite;
-import org.eclipse.swt.events.ControlEvent;
-import org.eclipse.swt.events.ControlListener;
 import org.eclipse.swt.events.ModifyEvent;
 import org.eclipse.swt.events.ModifyListener;
 import org.eclipse.swt.events.SelectionAdapter;
 import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.graphics.Rectangle;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Button;
@@ -42,17 +46,10 @@
 import org.eclipse.swt.widgets.Text;
 import org.eclipse.ui.forms.events.ExpansionEvent;
 import org.eclipse.ui.forms.events.IExpansionListener;
+import org.eclipse.ui.forms.widgets.ExpandableComposite;
 import org.eclipse.ui.forms.widgets.FormToolkit;
 import org.eclipse.ui.forms.widgets.Section;
 
-import org.eclipse.rcptt.core.Q7Features;
-import org.eclipse.rcptt.internal.core.RcpttPlugin;
-import org.eclipse.rcptt.internal.ui.Messages;
-import org.eclipse.rcptt.tesla.core.TeslaFeatures;
-import org.eclipse.rcptt.tesla.core.utils.AbstractFeatureManager;
-import org.eclipse.rcptt.tesla.core.utils.AbstractFeatureManager.Option;
-import org.eclipse.rcptt.tesla.internal.core.TeslaCore;
-
 public class FeaturesComposite {
 	private Map<Option, Control> optionFields = new HashMap<Option, Control>();
 
@@ -60,46 +57,82 @@
 
 	private boolean groupping = true;
 
+	private ScrolledComposite scrolledContainer;
+
 	public void setOptionChangeCallback(Runnable optionChangeCallback) {
 		this.optionChangeCallback = optionChangeCallback;
 	}
 
-	public void createOptions(final Composite content, String group,
+	public Control createOptions(final Composite content, String group,
 			boolean autoApply, FormToolkit toolkit) {
-		final ScrolledComposite sc = new ScrolledComposite(content,
-				SWT.H_SCROLL | SWT.V_SCROLL);
+		scrolledContainer = new ScrolledComposite(content, SWT.V_SCROLL);
+		scrolledContainer.setExpandHorizontal(true);
 		if (toolkit != null)
-			toolkit.adapt(sc);
-		GridLayoutFactory.swtDefaults().applyTo(sc);
-		GridDataFactory.fillDefaults().grab(true, true).hint(500, 450)
-				.applyTo(sc);
+			toolkit.adapt(scrolledContainer);
+		scrolledContainer.getVerticalBar().setIncrement(10); // Increase speed
 
-		final Composite ct = new Composite(sc, SWT.NONE);
+
+		final Composite compositeContainer = new Composite(scrolledContainer, SWT.NONE);
 		if (toolkit != null)
-			toolkit.adapt(ct);
-		GridDataFactory.fillDefaults().grab(true, true).applyTo(ct);
-		GridLayoutFactory.fillDefaults().applyTo(ct);
-		createFeatures(ct, Messages.FeaturesComposite_CoreFeaturesGroup,
+			toolkit.adapt(compositeContainer);
+		GridDataFactory.fillDefaults().grab(true, true).applyTo(compositeContainer);
+		GridLayoutFactory.fillDefaults().applyTo(compositeContainer);
+
+		scrolledContainer.setContent(compositeContainer);
+
+		// Adds features
+		createFeatures(compositeContainer, Messages.FeaturesComposite_CoreFeaturesGroup,
 				Q7Features.getInstance(), group, autoApply, toolkit);
-		createFeatures(ct, Messages.FeaturesComposite_RuntimeFeaturesGroup,
+		createFeatures(compositeContainer, Messages.FeaturesComposite_RuntimeFeaturesGroup,
 				TeslaFeatures.getInstance(), group, autoApply, toolkit);
-		content.addControlListener(new ControlListener() {
-			public void controlResized(ControlEvent e) {
-				// ct.layout();
-				Rectangle bounds = content.getBounds();
-				Point min = ct.computeSize(SWT.DEFAULT, SWT.DEFAULT);
-				ct.setSize(ct.computeSize(Math.max(min.x, bounds.width - 30),
-						SWT.DEFAULT));
+
+
+		compositeContainer.setSize(compositeContainer.computeSize(SWT.DEFAULT, SWT.DEFAULT));
+		IExpansionListener listener = new IExpansionListener() {
+			public void expansionStateChanging(ExpansionEvent e) {
 			}
 
-			public void controlMoved(ControlEvent e) {
+			public void expansionStateChanged(ExpansionEvent e) {
+				Point min = compositeContainer.computeSize(SWT.DEFAULT, SWT.DEFAULT);
+				compositeContainer.setSize(min);
 			}
-		});
-		Rectangle bounds = content.getBounds();
-		ct.setSize(ct.computeSize(bounds.width - 30, SWT.DEFAULT));
-		// sc.setMinSize(300, 200);
-		// sc.setSize(300,200);
-		sc.setContent(ct);
+		};
+		recursivelyAddListener(compositeContainer, listener);
+
+		return scrolledContainer;
+	}
+	
+	void recursivelyAddListener(Control control, IExpansionListener listener) {
+		if (control instanceof ExpandableComposite) {
+			((ExpandableComposite) control).addExpansionListener(listener);
+		}
+		if (control instanceof Composite) {
+			for (Control child : ((Composite) control).getChildren()) {
+				recursivelyAddListener(child, listener);
+			}
+		}
+	}
+
+	/**
+	 * Resets controls to default values.
+	 */
+	public void setDefaults() {
+		Control value;
+		Option option;
+		for (Map.Entry<Option, Control> opt : optionFields.entrySet()) {
+			value = opt.getValue();
+			option = opt.getKey();
+
+			if (value instanceof Button) {
+				((Button) value).setSelection("true".equals(option.getDefaultValue()));
+			} else if (value instanceof Spinner) {
+				((Spinner) value).setSelection(Integer.parseInt(option.getDefaultValue()));
+			} else if (value instanceof Combo) {
+				((Combo) value).setText(option.getDefaultValue());
+			} else if (value instanceof Text) {
+				((Text) value).setText(option.getDefaultValue());
+			}
+		}
 	}
 
 	public void apply() {
@@ -188,9 +221,6 @@
 						| (expValue ? Section.EXPANDED : 0));
 				if (toolkit != null)
 					toolkit.adapt(exp);
-				if (!expValue) {
-					exp.setExpanded(false);
-				}
 				exp.setText(entry.getKey());
 				exp.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false,
 						2, 1));
@@ -199,19 +229,6 @@
 					toolkit.adapt(g);
 				g.setLayout(new GridLayout(2, false));
 				exp.setClient(g);
-				exp.addExpansionListener(new IExpansionListener() {
-					public void expansionStateChanging(ExpansionEvent e) {
-					}
-
-					public void expansionStateChanged(ExpansionEvent e) {
-						content.layout();
-						Rectangle bounds = content.getParent().getBounds();
-						Point min = content.computeSize(SWT.DEFAULT,
-								SWT.DEFAULT);
-						content.setSize(content.computeSize(
-								Math.max(min.x, bounds.width - 30), SWT.DEFAULT));
-					}
-				});
 			} else {
 				g = parent;
 			}
@@ -220,7 +237,7 @@
 					String[] values = key.getValues();
 					if (values != null
 							&& values.equals(AbstractFeatureManager.INT_VALUES)) {
-						Label l = new Label(g, SWT.NONE);
+						Label l = new Label(g, SWT.WRAP);
 						l.setText(key.getName());
 						if (toolkit != null)
 							toolkit.adapt(l, false, false);
@@ -231,8 +248,13 @@
 						b.setSelection(Integer.parseInt(key.getValue()));
 						b.setToolTipText(key.getDescription());
 						b.setLayoutData(new GridData(SWT.FILL, SWT.DEFAULT,
-								true, false, 1, 1));
+								true, false, 2, 1));
 						optionFields.put(key, b);
+
+						if (key.getDescription() != null) {
+							l.setToolTipText(key.getDescription());
+						}
+
 						if (autoApply) {
 							b.addSelectionListener(new SelectionAdapter() {
 								@Override
diff --git a/rcp/org.eclipse.rcptt.ui/src/org/eclipse/rcptt/ui/preferences/FeaturesConfigurationDialog.java b/rcp/org.eclipse.rcptt.ui/src/org/eclipse/rcptt/ui/preferences/FeaturesConfigurationDialog.java
deleted file mode 100644
index 482a2a6..0000000
--- a/rcp/org.eclipse.rcptt.ui/src/org/eclipse/rcptt/ui/preferences/FeaturesConfigurationDialog.java
+++ /dev/null
@@ -1,180 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2014 Xored Software Inc and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Xored Software Inc - initial API and implementation and/or initial documentation
- *******************************************************************************/
-package org.eclipse.rcptt.ui.preferences;
-
-import java.util.Arrays;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-
-import org.eclipse.jface.dialogs.Dialog;
-import org.eclipse.jface.dialogs.IDialogConstants;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.dnd.Clipboard;
-import org.eclipse.swt.dnd.TextTransfer;
-import org.eclipse.swt.dnd.Transfer;
-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.rcptt.core.Q7Features;
-import org.eclipse.rcptt.internal.ui.Images;
-import org.eclipse.rcptt.internal.ui.Messages;
-import org.eclipse.rcptt.tesla.core.TeslaFeatures;
-import org.eclipse.rcptt.tesla.core.utils.AbstractFeatureManager;
-import org.eclipse.rcptt.tesla.core.utils.AbstractFeatureManager.Option;
-
-public class FeaturesConfigurationDialog extends Dialog {
-	private FeaturesComposite features = new FeaturesComposite();
-
-	protected FeaturesConfigurationDialog(Shell parentShell) {
-		super(parentShell);
-	}
-
-	@Override
-	protected void configureShell(Shell newShell) {
-		super.configureShell(newShell);
-		newShell.setText(Messages.FeaturesConfigurationDialog_0);
-		newShell.setImage(Images.getImageDescriptor(Images.CONFIG)
-				.createImage());
-	}
-
-	@Override
-	protected int getShellStyle() {
-		return super.getShellStyle() | SWT.RESIZE;
-	}
-
-	@Override
-	protected Control createDialogArea(Composite parent) {
-		Composite content = (Composite) super.createDialogArea(parent);
-		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
-		// data.widthHint = 600;
-		// data.heightHint = 300;
-		content.setLayoutData(data);
-		content.setLayout(new GridLayout(1, false));
-		features.createOptions(content, TeslaFeatures.ADV_OPTIONS, false, null);
-		return content;
-	}
-
-	private static final int RUNNER_OPTIONS_ID = IDialogConstants.CLIENT_ID + 1;
-
-	@Override
-	protected void createButtonsForButtonBar(Composite parent) {
-		createButton(parent, RUNNER_OPTIONS_ID, "Runner arg", false);
-		super.createButtonsForButtonBar(parent);
-	}
-
-	@Override
-	protected void buttonPressed(int buttonId) {
-		switch (buttonId) {
-		case RUNNER_OPTIONS_ID:
-			features.apply();
-			new MessageDialog(getShell(), "-testOptions arg for RCPTT Runner",
-					null, buildTestOptionsLine(), MessageDialog.INFORMATION,
-					new String[] { "Copy to Clipboard", "Close" }, 1) {
-				protected void buttonPressed(int buttonId) {
-					switch (buttonId) {
-					case 0:
-						Clipboard cb = new Clipboard(getShell().getDisplay());
-						cb.setContents(new Object[] { message },
-								new Transfer[] { TextTransfer.getInstance() });
-						cb.dispose();
-						break;
-					default:
-						super.buttonPressed(buttonId);
-					}
-				};
-
-			}.open();
-
-			break;
-		default:
-			super.buttonPressed(buttonId);
-		}
-	}
-
-	private static final List<String> DISABLED_OPTIONS = Arrays
-			.asList(TeslaFeatures.PROTOCOL_VERSION);
-
-	private static final String[] TRIM_PREFIXES = new String[] { "ui",
-			"org.eclipse.rcptt.tesla.protocol.", "org.eclipse.rcptt.tesla.", "com.xored." };
-
-	private String buildTestOptionsLine() {
-		AbstractFeatureManager[] managers = new AbstractFeatureManager[] {
-				TeslaFeatures.getInstance(), Q7Features.getInstance() };
-
-		Map<String, Option> nonDefaultOptions = new LinkedHashMap<String, Option>();
-		for (AbstractFeatureManager manager : managers) {
-			for (String optionKey : manager.getOptionNames()) {
-				if (DISABLED_OPTIONS.contains(optionKey)) {
-					continue;
-				}
-				Option option = manager.getOption(optionKey);
-				if ((option.getValue() == null && option.getDefaultValue() != null)
-						|| !option.getValue().equals(option.getDefaultValue())) {
-					nonDefaultOptions.put(optionKey, option);
-				}
-			}
-		}
-
-		if (nonDefaultOptions.size() == 0) {
-			return "All options are set to defaults, no need to specify -testOptions arg";
-		}
-
-		StringBuilder result = new StringBuilder();
-		result.append("-testOptions ");
-
-		for (Entry<String, Option> option : nonDefaultOptions.entrySet()) {
-			result.append(String.format("%s=%s;", optionNameToArgName(option
-					.getKey()), option.getValue().getValue()));
-		}
-		result.setLength(result.length() - 1); // trim last semicolon
-		return result.toString();
-	}
-
-	private static final String optionNameToArgName(String optionName) {
-		StringBuilder result = new StringBuilder();
-		for (String prefix : TRIM_PREFIXES) {
-			if (optionName.startsWith(prefix)) {
-				optionName = optionName.substring(prefix.length());
-				break;
-			}
-		}
-		String[] parts = optionName.split("\\.");
-
-		boolean isFirst = true;
-		for (String part : parts) {
-			if (part.length() == 0) {
-				continue;
-			}
-
-			if (isFirst) {
-				isFirst = false;
-				result.append(part);
-			} else {
-				result.append(Character.toUpperCase(part.charAt(0)));
-				result.append(part.substring(1));
-			}
-		}
-
-		return result.toString();
-	}
-
-	@Override
-	protected void okPressed() {
-		features.apply();
-		super.okPressed();
-	}
-}
diff --git a/rcp/org.eclipse.rcptt.ui/src/org/eclipse/rcptt/ui/preferences/Q7PreferencePage.java b/rcp/org.eclipse.rcptt.ui/src/org/eclipse/rcptt/ui/preferences/Q7PreferencePage.java
index d5bfe2e..fee78a3 100644
--- a/rcp/org.eclipse.rcptt.ui/src/org/eclipse/rcptt/ui/preferences/Q7PreferencePage.java
+++ b/rcp/org.eclipse.rcptt.ui/src/org/eclipse/rcptt/ui/preferences/Q7PreferencePage.java
@@ -10,8 +10,26 @@
  *******************************************************************************/
 package org.eclipse.rcptt.ui.preferences;
 
+import java.util.Arrays;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.layout.GridDataFactory;
 import org.eclipse.jface.preference.PreferencePage;
+import org.eclipse.rcptt.core.Q7;
+import org.eclipse.rcptt.core.Q7Features;
+import org.eclipse.rcptt.internal.ui.Messages;
+import org.eclipse.rcptt.launching.Q7Launcher;
+import org.eclipse.rcptt.tesla.core.TeslaFeatures;
+import org.eclipse.rcptt.tesla.core.utils.AbstractFeatureManager;
+import org.eclipse.rcptt.tesla.core.utils.AbstractFeatureManager.Option;
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.dnd.Clipboard;
+import org.eclipse.swt.dnd.TextTransfer;
+import org.eclipse.swt.dnd.Transfer;
 import org.eclipse.swt.events.ModifyEvent;
 import org.eclipse.swt.events.ModifyListener;
 import org.eclipse.swt.events.SelectionAdapter;
@@ -25,17 +43,16 @@
 import org.eclipse.swt.widgets.Text;
 import org.eclipse.ui.IWorkbench;
 import org.eclipse.ui.IWorkbenchPreferencePage;
-
-import org.eclipse.rcptt.core.Q7;
-import org.eclipse.rcptt.internal.ui.Messages;
-import org.eclipse.rcptt.launching.Q7Launcher;
+import org.eclipse.ui.forms.events.ExpansionEvent;
+import org.eclipse.ui.forms.events.IExpansionListener;
+import org.eclipse.ui.forms.widgets.Section;
 
 public class Q7PreferencePage extends PreferencePage implements
 		IWorkbenchPreferencePage {
 
 	private Text textLaunchTimeout;
 	private Text textCommandsDelay;
-	private Link advancedConfiguration;
+	private FeaturesComposite features = new FeaturesComposite();
 
 	@Override
 	protected Control createContents(Composite parent) {
@@ -50,16 +67,49 @@
 				Messages.Q7PreferencePage_CommandDelayLabel,
 				Integer.toString(Q7.INSTANCE.getCommandsExecutionDelay()));
 
-		advancedConfiguration = new Link(composite, SWT.NONE);
-		advancedConfiguration.setLayoutData(new GridData(SWT.RIGHT,
-				SWT.DEFAULT, true, false, 2, 1));
-		advancedConfiguration
-				.setText(Messages.Q7PreferencePage_AdvancedLinkText);
-		advancedConfiguration.addSelectionListener(new SelectionAdapter() {
+		// Advanced configuration
+		Section advancedExpander = new Section(composite, Section.TWISTIE);
+		advancedExpander.setText(Messages.Q7PreferencePage_AdvancedSectionLabel);
+		advancedExpander.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 2, 1));
+		Composite advancedComposite = new Composite(advancedExpander, SWT.NONE);
+
+		advancedComposite.setLayout(new GridLayout(1, false));
+		advancedExpander.setClient(advancedComposite);
+
+		Link runnerArg = new Link(advancedComposite, SWT.NONE);
+		runnerArg.setLayoutData(new GridData(SWT.RIGHT, SWT.DEFAULT, true, false, 2, 1));
+		runnerArg.setText(Messages.Q7PreferencePage_AdvancedRunnerArgLink);
+		runnerArg.addSelectionListener(new SelectionAdapter() {
 			public void widgetSelected(SelectionEvent e) {
-				FeaturesConfigurationDialog dialog = new FeaturesConfigurationDialog(
-						advancedConfiguration.getShell());
-				dialog.open();
+				new MessageDialog(getShell(), "-testOptions arg for RCPTT Runner",
+						null, buildTestOptionsLine(), MessageDialog.INFORMATION,
+						new String[] { "Copy to Clipboard", "Close" }, 1) {
+					protected void buttonPressed(int buttonId) {
+						switch (buttonId) {
+						case 0:
+							Clipboard cb = new Clipboard(getShell().getDisplay());
+							cb.setContents(new Object[] { message },
+									new Transfer[] { TextTransfer.getInstance() });
+							cb.dispose();
+							break;
+						default:
+							super.buttonPressed(buttonId);
+						}
+					};
+				}.open();
+			}
+		});
+
+		final Control control = features.createOptions(advancedComposite, TeslaFeatures.ADV_OPTIONS, false, null);
+		GridDataFactory.fillDefaults().grab(true, true).applyTo(control);
+		advancedExpander.addExpansionListener(new IExpansionListener() {
+			public void expansionStateChanging(ExpansionEvent e) {
+			}
+
+			public void expansionStateChanged(ExpansionEvent e) {
+				if (e.getState()) {
+					control.setFocus();
+				}
 			}
 		});
 
@@ -114,6 +164,9 @@
 				.getText()));
 		Q7.INSTANCE.setCommandsExecutionDelay(Integer
 				.parseInt(textCommandsDelay.getText()));
+
+		features.apply();
+
 		return super.performOk();
 	}
 
@@ -123,10 +176,84 @@
 				.toString(Q7Launcher.DEFAULT_LAUNCH_TIMEOUT));
 		textCommandsDelay.setText(Integer
 				.toString(Q7.DEFAULT_COMMANDS_EXECUTION_DELAY));
+
+		features.setDefaults();
+
 		super.performDefaults();
 	}
 
 	public void init(IWorkbench workbench) {
 	}
 
+	/**
+	 * "Runner arg" methods.
+	 */
+
+	private static final List<String> DISABLED_OPTIONS = Arrays
+			.asList(TeslaFeatures.PROTOCOL_VERSION);
+
+	private static final String[] TRIM_PREFIXES = new String[] { "ui",
+			"org.eclipse.rcptt.tesla.protocol.", "org.eclipse.rcptt.tesla.", "com.xored." };
+
+	private String buildTestOptionsLine() {
+		AbstractFeatureManager[] managers = new AbstractFeatureManager[] {
+				TeslaFeatures.getInstance(), Q7Features.getInstance() };
+
+		Map<String, Option> nonDefaultOptions = new LinkedHashMap<String, Option>();
+		for (AbstractFeatureManager manager : managers) {
+			for (String optionKey : manager.getOptionNames()) {
+				if (DISABLED_OPTIONS.contains(optionKey)) {
+					continue;
+				}
+				Option option = manager.getOption(optionKey);
+				if ((option.getValue() == null && option.getDefaultValue() != null)
+						|| !option.getValue().equals(option.getDefaultValue())) {
+					nonDefaultOptions.put(optionKey, option);
+				}
+			}
+		}
+
+		if (nonDefaultOptions.size() == 0) {
+			return "All options are set to defaults, no need to specify -testOptions arg";
+		}
+
+		StringBuilder result = new StringBuilder();
+		result.append("-testOptions ");
+
+		for (Entry<String, Option> option : nonDefaultOptions.entrySet()) {
+			result.append(String.format("%s=%s;", optionNameToArgName(option
+					.getKey()), option.getValue().getValue()));
+		}
+		result.setLength(result.length() - 1); // trim last semicolon
+		return result.toString();
+	}
+
+	private static final String optionNameToArgName(String optionName) {
+		StringBuilder result = new StringBuilder();
+		for (String prefix : TRIM_PREFIXES) {
+			if (optionName.startsWith(prefix)) {
+				optionName = optionName.substring(prefix.length());
+				break;
+			}
+		}
+		String[] parts = optionName.split("\\.");
+
+		boolean isFirst = true;
+		for (String part : parts) {
+			if (part.length() == 0) {
+				continue;
+			}
+
+			if (isFirst) {
+				isFirst = false;
+				result.append(part);
+			} else {
+				result.append(Character.toUpperCase(part.charAt(0)));
+				result.append(part.substring(1));
+			}
+		}
+
+		return result.toString();
+	}
+
 }
diff --git a/rcpttTests/ECL_IDE_module/Contexts/Ecl Script Context/Bug 442685 NullPointerException.test b/rcpttTests/ECL_IDE_module/Contexts/Ecl Script Context/Bug 442685 NullPointerException.test
new file mode 100644
index 0000000..bffa412
--- /dev/null
+++ b/rcpttTests/ECL_IDE_module/Contexts/Ecl Script Context/Bug 442685 NullPointerException.test
@@ -0,0 +1,55 @@
+--- RCPTT testcase ---
+Format-Version: 1.0
+Contexts: _ymiyse5IEeCU6db9MgIBkA,_IeEQkPSUEeCE1L2j6bYoFw
+Element-Name: Bug 442685 NullPointerException
+Element-Type: testcase
+Element-Version: 3.0
+External-Reference: https://bugs.eclipse.org/bugs/show_bug.cgi?id=442685
+Id: _NjJO0C3YEeSo8tQHjhwDDw
+Runtime-Version: 1.5.2.qualifier
+Save-Time: 8/27/14 6:23 PM
+Testcase-Type: ecl
+
+------=_.description-216f885c-d591-38ce-8ea2-e4f8cb4d6ffa
+Content-Type: text/plain
+Entry-Name: .description
+
+Copyright (c) 2009, 2014 Xored Software Inc and others.
+All rights reserved. This program and the accompanying materials
+are made available under the terms of the Eclipse Public License v1.0
+which accompanies this distribution, and is available at
+http://www.eclipse.org/legal/epl-v10.html
+
+Contributors:
+    Xored Software Inc - initial creation and/or initial documentation
+--------------------------------------------------------------------------------
+
+TEST STEPS
+
+1. Open Ecl Script context editor;
+2. Type Home/End in Name field;
+3. Make sure there are no error. 
+------=_.description-216f885c-d591-38ce-8ea2-e4f8cb4d6ffa--
+------=_.content-0a7243a0-75d3-3d5f-9791-539de0e5b7ac
+Content-Type: text/ecl
+Entry-Name: .content
+
+get-view "Test Explorer" | get-tree | select "Q7Project/EclContext" | double-click
+
+exec-with-options {
+   	get-editor EclContext | get-editbox -after [get-label "Name:"] | key-type Home
+    verify-error { get-window "Problem Occurred" }
+} -allowStatusDialog
+
+
+exec-with-options {
+    get-editor EclContext | get-editbox -after [get-label "Name:"] | key-type End
+    verify-error { get-window "Problem Occurred" }
+} -allowStatusDialog
+
+exec-with-options {
+    get-editor EclContext | get-editbox -after [get-label "Name:"] | key-type "M1+ARROW_RIGHT"
+    verify-error { get-window "Problem Occurred" }
+} -allowStatusDialog
+
+------=_.content-0a7243a0-75d3-3d5f-9791-539de0e5b7ac--
diff --git a/rcpttTests/ECL_IDE_module/Preferences/AdvancedOptions.test b/rcpttTests/ECL_IDE_module/Preferences/AdvancedOptions.test
new file mode 100644
index 0000000..498031c
--- /dev/null
+++ b/rcpttTests/ECL_IDE_module/Preferences/AdvancedOptions.test
@@ -0,0 +1,110 @@
+--- RCPTT testcase ---
+Format-Version: 1.0
+Contexts: _ymiyse5IEeCU6db9MgIBkA
+Element-Name: AdvancedOptions
+Element-Type: testcase
+Element-Version: 3.0
+External-Reference: 
+Id: _vIjJACnDEeSkIPEBgXDIwQ
+Runtime-Version: 1.5.0.201406020630
+Save-Time: 8/22/14 2:06 PM
+Testcase-Type: ecl
+
+------=_.description-216f885c-d591-38ce-8ea2-e4f8cb4d6ffa
+Content-Type: text/plain
+Entry-Name: .description
+
+Copyright (c) 2009, 2014 Xored Software Inc and others.
+All rights reserved. This program and the accompanying materials
+are made available under the terms of the Eclipse Public License v1.0
+which accompanies this distribution, and is available at
+http://www.eclipse.org/legal/epl-v10.html
+
+Contributors:
+    Xored Software Inc - initial creation and/or initial documentation
+--------------------------------------------------------------------------------
+
+TEST STEPS:
+
+1. Open Preferences/RCP Testing Tool;
+2. Select "Advanced options";
+3. Change preferences, click "Cancel";
+4. Open again and make sure that preferences aren't changed;
+5. Change preferences, click "OK";
+6. Open again and make sure that preferences are changed;
+------=_.description-216f885c-d591-38ce-8ea2-e4f8cb4d6ffa--
+------=_.content-0a7243a0-75d3-3d5f-9791-539de0e5b7ac
+Content-Type: text/ecl
+Entry-Name: .content
+
+// Changes and clicks Cancel
+get-preferences-menu | click
+get-window Preferences | get-tree | select "RCP Testing Tool"
+with [get-window Preferences] {
+    with [get-section "Advanced options"] {
+        click
+        get-group "Core Features" | get-button "Kill AUT on connect error" | check
+        with [get-group "Runtime Features"] {
+            get-button "Allow status dialogs" | check
+            get-section "Diagram mouse options" | get-combo -after [get-label "Mouse move recording mode"] 
+                | select Always
+            with [get-section "Runtime Limits"] {
+                click
+                get-editbox -after [get-label "Context operation runnable timeout (ms)"] | set-text 1800001
+            }
+        }
+    }
+    get-button Cancel | click
+}
+
+// Nothing is changed
+get-preferences-menu | click
+get-window Preferences | get-tree | select "RCP Testing Tool"
+with [get-window Preferences | get-section "Advanced options"] {
+    click
+    get-group "Core Features" | get-button "Kill AUT on connect error" | get-property selected | equals false 
+        | verify-true
+    with [get-group "Runtime Features"] {
+        get-button "Allow status dialogs" | get-property selected | equals false | verify-true
+        get-section "Diagram mouse options" | get-combo -after [get-label "Mouse move recording mode"] 
+            | get-property selection | equals Smart | verify-true
+    }
+    with [get-section "Runtime Limits"] {
+        click
+        get-editbox -after [get-label "Context operation runnable timeout (ms)"] | get-property text | equals "180000.0" | verify-true
+    }
+}
+
+// Changes and clicks Ok
+with [get-window Preferences] {
+    with [get-section "Advanced options"] {
+        get-group "Core Features" | get-button "Kill AUT on connect error" | check
+        with [get-group "Runtime Features"] {
+            get-button "Allow status dialogs" | check
+            get-section "Diagram mouse options" | get-combo -after [get-label "Mouse move recording mode"] 
+                | select Always
+            get-section "Runtime Limits" | get-editbox -after [get-label "Context operation runnable timeout (ms)"] | set-text 1800001
+        }
+    }
+    get-button OK | click
+}
+
+// Preferences are changed
+get-preferences-menu | click
+get-window Preferences | get-tree | select "RCP Testing Tool"
+with [get-window Preferences | get-section "Advanced options"] {
+    click
+    get-group "Core Features" | get-button "Kill AUT on connect error" | get-property selected | equals true 
+        | verify-true
+    with [get-group "Runtime Features"] {
+        get-button "Allow status dialogs" | get-property selected | equals true | verify-true
+        get-section "Diagram mouse options" | get-combo -after [get-label "Mouse move recording mode"] 
+            | get-property selection | equals Always | verify-true
+    }
+    with [get-section "Runtime Limits"] {
+        click
+        get-editbox -after [get-label "Context operation runnable timeout (ms)"] | get-property text | equals "1800001.0" | verify-true
+    }
+}
+
+------=_.content-0a7243a0-75d3-3d5f-9791-539de0e5b7ac--
diff --git a/rcpttTests/ECL_IDE_module/Preferences/AdvancedOptionsFocus.test b/rcpttTests/ECL_IDE_module/Preferences/AdvancedOptionsFocus.test
new file mode 100644
index 0000000..5251e1c
--- /dev/null
+++ b/rcpttTests/ECL_IDE_module/Preferences/AdvancedOptionsFocus.test
@@ -0,0 +1,44 @@
+--- RCPTT testcase ---
+Format-Version: 1.0
+Contexts: _ymiyse5IEeCU6db9MgIBkA
+Element-Name: AdvancedOptionsFocus
+Element-Type: testcase
+Element-Version: 3.0
+External-Reference: 
+Id: _WDLP8CnXEeSkIPEBgXDIwQ
+Runtime-Version: 1.5.0.201406020630
+Save-Time: 8/22/14 3:38 PM
+Testcase-Type: ecl
+
+------=_.description-216f885c-d591-38ce-8ea2-e4f8cb4d6ffa
+Content-Type: text/plain
+Entry-Name: .description
+
+Copyright (c) 2009, 2014 Xored Software Inc and others.
+All rights reserved. This program and the accompanying materials
+are made available under the terms of the Eclipse Public License v1.0
+which accompanies this distribution, and is available at
+http://www.eclipse.org/legal/epl-v10.html
+
+Contributors:
+    Xored Software Inc - initial creation and/or initial documentation
+--------------------------------------------------------------------------------
+
+TEST STEPS:
+
+1. Open Preferences/RCP Testing Tool;
+2. Select "Advanced options";
+3. Make sure that focus on the first child of the expanded control;
+
+------=_.description-216f885c-d591-38ce-8ea2-e4f8cb4d6ffa--
+------=_.content-0a7243a0-75d3-3d5f-9791-539de0e5b7ac
+Content-Type: text/ecl
+Entry-Name: .content
+
+get-preferences-menu | click
+with [get-window Preferences] {
+    get-tree | select "RCP Testing Tool"
+    get-section "Advanced options" | click
+}
+get-window Preferences | get-section "Advanced options" | get-group | get-button | get-property "isFocusControl()" | equals true | verify-true
+------=_.content-0a7243a0-75d3-3d5f-9791-539de0e5b7ac--
diff --git a/rcpttTests/ECL_IDE_module/Preferences/ControlPanel.test b/rcpttTests/ECL_IDE_module/Preferences/ControlPanel.test
new file mode 100644
index 0000000..62f3ffb
--- /dev/null
+++ b/rcpttTests/ECL_IDE_module/Preferences/ControlPanel.test
@@ -0,0 +1,71 @@
+--- RCPTT testcase ---
+Format-Version: 1.0
+Contexts: _ymiyse5IEeCU6db9MgIBkA
+Element-Name: ControlPanel
+Element-Type: testcase
+Element-Version: 3.0
+External-Reference: 
+Id: _Ec6dgCnPEeSkIPEBgXDIwQ
+Runtime-Version: 1.5.0.201406020630
+Save-Time: 8/22/14 3:33 PM
+Testcase-Type: ecl
+
+------=_.description-216f885c-d591-38ce-8ea2-e4f8cb4d6ffa
+Content-Type: text/plain
+Entry-Name: .description
+
+Copyright (c) 2009, 2014 Xored Software Inc and others.
+All rights reserved. This program and the accompanying materials
+are made available under the terms of the Eclipse Public License v1.0
+which accompanies this distribution, and is available at
+http://www.eclipse.org/legal/epl-v10.html
+
+Contributors:
+    Xored Software Inc - initial creation and/or initial documentation
+--------------------------------------------------------------------------------
+
+TEST STEPS:
+
+1. Start recording;
+2. Change preferences in options tab;
+3. Stop recording;
+4. Open Preferences/RCP Testing Tool and make sure that preferences are changed;
+
+------=_.description-216f885c-d591-38ce-8ea2-e4f8cb4d6ffa--
+------=_.content-0a7243a0-75d3-3d5f-9791-539de0e5b7ac
+Content-Type: text/ecl
+Entry-Name: .content
+
+get-button "Record a Snippet" | click
+try {
+	get-window "Select an Application Under Test" | get-button Cancel | click
+} -catch {}
+with [get-window "Control Panel"] {
+    get-tab-folder | get-tab-item Options | click
+    get-group "Core Features" | get-button "Kill AUT on connect error" | check
+    with [get-group "Runtime Features"] {
+        get-button "Allow status dialogs" | check
+        get-section "Diagram mouse options" | get-combo -after [get-label "Mouse move recording mode"] | select Always
+        get-section "Figure identity recording" | get-editbox 
+            -after [get-label "Use following EMF features for part identity"] | set-text id
+    }
+    close
+}
+get-preferences-menu | click
+with [get-window Preferences] {
+    get-tree | select "RCP Testing Tool"
+    get-section "Advanced options" | click
+}
+with [get-window Preferences | get-section "Advanced options"] {
+    get-group "Core Features" | get-button "Kill AUT on connect error" | get-property selected | equals true 
+        | verify-true
+    with [get-group "Runtime Features"] {
+        get-button "Allow status dialogs" | get-property selected | equals true | verify-true
+        get-section "Diagram mouse options" | get-combo -after [get-label "Mouse move recording mode"] 
+            | get-property selection | equals Always | verify-true
+    }
+}
+get-window Preferences | get-section "Advanced options" | get-group "Runtime Features" 
+    | get-section "Figure identity recording" | get-editbox 
+    -after [get-label "Use following EMF features for part identity"] | get-property text | equals id | verify-true
+------=_.content-0a7243a0-75d3-3d5f-9791-539de0e5b7ac--
diff --git a/rcpttTests/ECL_IDE_module/Preferences/RestoreDefaults.test b/rcpttTests/ECL_IDE_module/Preferences/RestoreDefaults.test
new file mode 100644
index 0000000..f600256
--- /dev/null
+++ b/rcpttTests/ECL_IDE_module/Preferences/RestoreDefaults.test
@@ -0,0 +1,124 @@
+--- RCPTT testcase ---
+Format-Version: 1.0
+Contexts: _ymiyse5IEeCU6db9MgIBkA
+Element-Name: RestoreDefaults
+Element-Type: testcase
+Element-Version: 3.0
+External-Reference: 
+Id: _qvG_YCnKEeSkIPEBgXDIwQ
+Runtime-Version: 1.5.0.201406020630
+Save-Time: 8/22/14 2:36 PM
+Testcase-Type: ecl
+
+------=_.description-216f885c-d591-38ce-8ea2-e4f8cb4d6ffa
+Content-Type: text/plain
+Entry-Name: .description
+
+Copyright (c) 2009, 2014 Xored Software Inc and others.
+All rights reserved. This program and the accompanying materials
+are made available under the terms of the Eclipse Public License v1.0
+which accompanies this distribution, and is available at
+http://www.eclipse.org/legal/epl-v10.html
+
+Contributors:
+    Xored Software Inc - initial creation and/or initial documentation
+--------------------------------------------------------------------------------
+
+TEST STEPS:
+
+1. Open Preferences/RCP Testing Tool;
+2. Change preferences, click "OK";
+3. Open again and make sure that preferences are changed;
+4. Click "Restore Defaults", check that preferences are reset and then click "OK";
+5. Open again and make sure that preferences are reset;
+------=_.description-216f885c-d591-38ce-8ea2-e4f8cb4d6ffa--
+------=_.content-0a7243a0-75d3-3d5f-9791-539de0e5b7ac
+Content-Type: text/ecl
+Entry-Name: .content
+
+// Changes and saves
+get-preferences-menu | click
+get-window Preferences | get-tree | select "RCP Testing Tool"
+with [get-window Preferences] {
+	get-editbox -after [get-label "Launch timeout (sec):"] | set-text 3001
+	get-editbox -after [get-label "Commands execution delay (ms):"] | set-text 12
+    with [get-section "Advanced options"] {
+        click
+        get-group "Core Features" | get-button "Kill AUT on connect error" | check
+        with [get-group "Runtime Features"] {
+            get-button "Allow status dialogs" | check
+            get-section "Diagram mouse options" | get-combo -after [get-label "Mouse move recording mode"] 
+                | select Always
+            with [get-section "Runtime Limits"] {
+                click
+                get-editbox -after [get-label "Context operation runnable timeout (ms)"] | set-text 1800001
+            }
+        }
+    }
+    get-button OK | click
+}
+
+// Preferences are changed
+get-preferences-menu | click
+get-window Preferences | get-tree | select "RCP Testing Tool"
+with [get-window Preferences] {
+	get-editbox -after [get-label "Launch timeout (sec):"] | get-property text | equals 3001 | verify-true
+	get-editbox -after [get-label "Commands execution delay (ms):"] | get-property text | equals 12 | verify-true
+    with [get-section "Advanced options"] {
+        click
+	    get-group "Core Features" | get-button "Kill AUT on connect error" | get-property selected | equals true 
+    	    | verify-true
+	    with [get-group "Runtime Features"] {
+    	    get-button "Allow status dialogs" | get-property selected | equals true | verify-true
+        	get-section "Diagram mouse options" | get-combo -after [get-label "Mouse move recording mode"] 
+            	| get-property selection | equals Always | verify-true
+	    }
+    	with [get-section "Runtime Limits"] {
+        	click
+	        get-editbox -after [get-label "Context operation runnable timeout (ms)"] | get-property text | equals "1800001.0" | verify-true
+    	}
+    }
+}
+
+// Restores and checks that preference are reset
+get-window Preferences | get-button "Restore Defaults" | click
+with [get-window Preferences] {
+    get-editbox -after [get-label "Launch timeout (sec):"] | get-property text | equals 300 | verify-true
+    get-editbox -after [get-label "Commands execution delay (ms):"] | get-property text | equals 0 | verify-true
+    with [get-section "Advanced options"] {
+		get-group "Core Features" | get-button "Kill AUT on connect error" | get-property selected | equals false | verify-true
+	    with [get-group "Runtime Features"] {
+    	    get-button "Allow status dialogs" | get-property selected | equals false | verify-true
+        	get-section "Diagram mouse options" | get-combo -after [get-label "Mouse move recording mode"] 
+            	| get-property selection | equals Smart| verify-true
+	    }
+    	with [get-section "Runtime Limits"] {
+	        get-editbox -after [get-label "Context operation runnable timeout (ms)"] | get-property text | equals "180000.0" | verify-true
+    	}
+	}    
+}
+// Saves
+get-window Preferences | get-button OK | click
+
+// Open again and checks that all preferences are default
+get-preferences-menu | click
+get-window Preferences | get-tree | select "RCP Testing Tool"
+with [get-window Preferences] {
+    get-editbox -after [get-label "Launch timeout (sec):"] | get-property text | equals 300 | verify-true
+    get-editbox -after [get-label "Commands execution delay (ms):"] | get-property text | equals 0 | verify-true
+    with [get-section "Advanced options"] {
+    	click
+		get-group "Core Features" | get-button "Kill AUT on connect error" | get-property selected | equals false | verify-true
+	    with [get-group "Runtime Features"] {
+    	    get-button "Allow status dialogs" | get-property selected | equals false | verify-true
+        	get-section "Diagram mouse options" | get-combo -after [get-label "Mouse move recording mode"] 
+            	| get-property selection | equals Smart| verify-true
+	    }
+    	with [get-section "Runtime Limits"] {
+    		click
+	        get-editbox -after [get-label "Context operation runnable timeout (ms)"] | get-property text | equals "180000.0" | verify-true
+    	}
+	}    
+}
+
+------=_.content-0a7243a0-75d3-3d5f-9791-539de0e5b7ac--
diff --git a/rcpttTests/ECL_IDE_module/Preferences/RunnerArg.test b/rcpttTests/ECL_IDE_module/Preferences/RunnerArg.test
new file mode 100644
index 0000000..3d24c78
--- /dev/null
+++ b/rcpttTests/ECL_IDE_module/Preferences/RunnerArg.test
@@ -0,0 +1,64 @@
+--- RCPTT testcase ---
+Format-Version: 1.0
+Contexts: _ymiyse5IEeCU6db9MgIBkA
+Element-Name: RunnerArg
+Element-Type: testcase
+Element-Version: 3.0
+External-Reference: 
+Id: _3xvEACnREeSkIPEBgXDIwQ
+Runtime-Version: 1.5.0.201406020630
+Save-Time: 8/22/14 3:35 PM
+Testcase-Type: ecl
+
+------=_.description-216f885c-d591-38ce-8ea2-e4f8cb4d6ffa
+Content-Type: text/plain
+Entry-Name: .description
+
+Copyright (c) 2009, 2014 Xored Software Inc and others.
+All rights reserved. This program and the accompanying materials
+are made available under the terms of the Eclipse Public License v1.0
+which accompanies this distribution, and is available at
+http://www.eclipse.org/legal/epl-v10.html
+
+Contributors:
+    Xored Software Inc - initial creation and/or initial documentation
+--------------------------------------------------------------------------------
+
+TEST STEPS:
+
+1. Open Preferences/RCP Testing Tool;
+2. Select "Advanced options";
+3. Click "Runner Arg";
+4. Make sure that dialog will be opened with message "All options are set as default ..."
+5. Change advanced prefrences and click "Runner Arg" again
+6. Make sure that opened dialog has message "-testOptions ..."
+------=_.description-216f885c-d591-38ce-8ea2-e4f8cb4d6ffa--
+------=_.content-0a7243a0-75d3-3d5f-9791-539de0e5b7ac
+Content-Type: text/ecl
+Entry-Name: .content
+
+get-preferences-menu | click
+with [get-window Preferences] {
+    get-tree | select "RCP Testing Tool"
+    with [get-section "Advanced options"] {
+        click
+        get-link "<a>Runner arg</a>" | click-link
+    }
+}
+get-window Preferences | get-window "-testOptions arg for RCPTT Runner" 
+    | get-label "All options are set to defaults, no need to specify -testOptions arg" | get-property caption 
+    | equals "All options are set to defaults, no need to specify -testOptions arg" | verify-true
+with [get-window Preferences] {
+    get-window "-testOptions arg for RCPTT Runner" | get-button Close | click
+    with [get-section "Advanced options"] {
+        get-group "Core Features" | get-button "Kill AUT on connect error" | check
+        get-group "Runtime Features" | get-button "Allow status dialogs" | check
+    }
+    get-button Apply | click
+    get-section "Advanced options" | get-link "<a>Runner arg</a>" | click-link
+}
+get-window Preferences | get-window "-testOptions arg for RCPTT Runner" 
+    | get-label "-testOptions runtimeStatusDialogAllowed=true;launchingKillAutOnConnectError=true" 
+    | get-property caption | equals "-testOptions runtimeStatusDialogAllowed=true;launchingKillAutOnConnectError=true" 
+    | verify-true
+------=_.content-0a7243a0-75d3-3d5f-9791-539de0e5b7ac--
diff --git a/rcpttTests/ECL_IDE_module/editors/ScenarioEditor/Content assist/Procedure documentation/Autocomplete.test b/rcpttTests/ECL_IDE_module/editors/ScenarioEditor/Content assist/Procedure documentation/Autocomplete.test
index c9f4f5c..073e357 100644
--- a/rcpttTests/ECL_IDE_module/editors/ScenarioEditor/Content assist/Procedure documentation/Autocomplete.test
+++ b/rcpttTests/ECL_IDE_module/editors/ScenarioEditor/Content assist/Procedure documentation/Autocomplete.test
@@ -6,8 +6,8 @@
 Element-Version: 3.0
 External-Reference: 
 Id: _RtglkCbJEeS6GLpDYENyEA
-Runtime-Version: 1.5.0.201406020630
-Save-Time: 8/18/14 7:21 PM
+Runtime-Version: 1.5.2.201408180747
+Save-Time: 8/22/14 5:03 PM
 Testcase-Type: ecl
 
 ------=_.content-0a7243a0-75d3-3d5f-9791-539de0e5b7ac
@@ -26,6 +26,6 @@
 }
 get-window -from "CompletionProposalPopup.createProposalSelector()" | get-table | select "create-java-class"
 get-window -from "CompletionProposalPopup.createProposalSelector()" | get-window -from "Information Window" 
-    | get-control Browser | get-property text | contains "Procedure <B>create-java-class</B> <BR>Description of create-java-class procedure" | verify-true
+    | get-control Browser | get-property text | contains "Description of create-java-class procedure" | verify-true
 
 ------=_.content-0a7243a0-75d3-3d5f-9791-539de0e5b7ac--
diff --git a/rcpttTests/ECL_IDE_module/editors/ScenarioEditor/Content assist/Procedure documentation/Comment 1-line.test b/rcpttTests/ECL_IDE_module/editors/ScenarioEditor/Content assist/Procedure documentation/Comment 1-line.test
index 6ac431b..851846c 100644
--- a/rcpttTests/ECL_IDE_module/editors/ScenarioEditor/Content assist/Procedure documentation/Comment 1-line.test
+++ b/rcpttTests/ECL_IDE_module/editors/ScenarioEditor/Content assist/Procedure documentation/Comment 1-line.test
@@ -6,8 +6,8 @@
 Element-Version: 3.0
 External-Reference: 
 Id: _bUx9oCbQEeSJvYFSUnsXEQ
-Runtime-Version: 1.5.0.201406020630
-Save-Time: 8/18/14 7:20 PM
+Runtime-Version: 1.5.2.201408180747
+Save-Time: 8/22/14 5:16 PM
 Testcase-Type: ecl
 
 ------=_.content-0a7243a0-75d3-3d5f-9791-539de0e5b7ac
@@ -24,6 +24,7 @@
     key-type Enter
 }
 get-editor "New Java Class Procs" | get-section Script | get-text-viewer | hover-text 36 9 -with Left
-get-window -from "Information Window" | get-control Browser | get-property text | contains "Procedure <B>create-java-class</B> <BR>Description of create-java-class procedure" | verify-true
+get-window -from "Information Window" | get-control Browser | get-property text -raw | invoke toLowerCase | 
+invoke contains "description of create-java-class procedure" | verify-true
 
 ------=_.content-0a7243a0-75d3-3d5f-9791-539de0e5b7ac--
diff --git a/rcpttTests/ECL_IDE_module/editors/ScenarioEditor/Content assist/Procedure documentation/Comment 2-lines.test b/rcpttTests/ECL_IDE_module/editors/ScenarioEditor/Content assist/Procedure documentation/Comment 2-lines.test
index 5e45477..81b730c 100644
--- a/rcpttTests/ECL_IDE_module/editors/ScenarioEditor/Content assist/Procedure documentation/Comment 2-lines.test
+++ b/rcpttTests/ECL_IDE_module/editors/ScenarioEditor/Content assist/Procedure documentation/Comment 2-lines.test
@@ -6,8 +6,8 @@
 Element-Version: 3.0
 External-Reference: 
 Id: _pLJ3kCbQEeSJvYFSUnsXEQ
-Runtime-Version: 1.5.0.201406020630
-Save-Time: 8/18/14 7:20 PM
+Runtime-Version: 1.5.2.201408180747
+Save-Time: 8/22/14 5:25 PM
 Testcase-Type: ecl
 
 ------=_.content-0a7243a0-75d3-3d5f-9791-539de0e5b7ac
@@ -26,7 +26,8 @@
     key-type Enter
 }
 get-editor "New Java Class Procs" | get-section Script | get-text-viewer | hover-text 36 9 -with Left
-get-window -from "Information Window" | get-control Browser | get-property text | contains "Procedure <B>create-java-class</B> <BR>Description of create-java-class procedure Second description line" | verify-true
+get-window -from "Information Window" | get-control Browser | get-property text -raw | invoke toLowerCase | invoke contains "procedure <b>create-java-class</b>" | verify-true
+get-window -from "Information Window" | get-control Browser | get-property text -raw | invoke toLowerCase | invoke contains "description of create-java-class procedure second description line" | verify-true
 
 // Adds linebreak
 with [get-editor "New Java Class Procs" | get-section Script | get-text-viewer] {
@@ -34,7 +35,11 @@
     key-type Enter
 }
 get-editor "New Java Class Procs" | get-section Script | get-text-viewer | hover-text 36 9 -with Left
-get-window -from "Information Window" | get-control Browser | get-property text | contains "Procedure <B>create-java-class</B> <BR>Description of create-java-class procedure Second description line" | verify-false
-get-window -from "Information Window" | get-control Browser | get-property text | contains "Procedure <B>create-java-class</B> <BR>Second description line" | verify-true
+get-window -from "Information Window" | get-control Browser | get-property text -raw | invoke toLowerCase | invoke contains "procedure <b>create-java-class</b>"
+get-window -from "Information Window" | get-control Browser | get-property text -raw | invoke toLowerCase | invoke contains "description of create-java-class procedure second description line" | verify-false
+get-window -from "Information Window" | get-control Browser | get-property text -raw | invoke toLowerCase | invoke contains "second description line" | verify-true
+
+//"Procedure <b>create-java-class</b>\\n"
+ //   + "<br /> Description of create-java-class procedure Second description line\\n"
 
 ------=_.content-0a7243a0-75d3-3d5f-9791-539de0e5b7ac--
diff --git a/rcpttTests/ECL_IDE_module/editors/ScenarioEditor/Content assist/Procedure documentation/Comment javadoc.test b/rcpttTests/ECL_IDE_module/editors/ScenarioEditor/Content assist/Procedure documentation/Comment javadoc.test
index 4bf8ba4..f731da5 100644
--- a/rcpttTests/ECL_IDE_module/editors/ScenarioEditor/Content assist/Procedure documentation/Comment javadoc.test
+++ b/rcpttTests/ECL_IDE_module/editors/ScenarioEditor/Content assist/Procedure documentation/Comment javadoc.test
@@ -6,8 +6,8 @@
 Element-Version: 3.0
 External-Reference: 
 Id: _GG-CECaOEeS4ZoAAFrP9Rg
-Runtime-Version: 1.5.0.201406020630
-Save-Time: 8/18/14 7:24 PM
+Runtime-Version: 1.5.2.201408180747
+Save-Time: 8/25/14 12:07 PM
 Testcase-Type: ecl
 
 ------=_.content-0a7243a0-75d3-3d5f-9791-539de0e5b7ac
@@ -27,6 +27,10 @@
     key-type Enter
 }
 get-editor "New Java Class Procs" | get-section Script | get-text-viewer | hover-text 36 9 -with Left
-get-window -from "Information Window" | get-control Browser | get-property text | contains "Procedure <B>open-new-class-dialog</B> <BR>Description of open-new-class-dialog" | verify-true
+get-window -from "Information Window" | get-control Browser | get-property text -raw | invoke toLowerCase | 
+invoke contains ">procedure <b>open-new-class-dialog</b>\\n"
+    + "<br />\\n"
+    + "  description of open-new-class-dialog\\n"| verify-true
+
 
 ------=_.content-0a7243a0-75d3-3d5f-9791-539de0e5b7ac--
diff --git a/rcpttTests/ECL_IDE_module/editors/ScenarioEditor/Content assist/Procedure documentation/Context.test b/rcpttTests/ECL_IDE_module/editors/ScenarioEditor/Content assist/Procedure documentation/Context.test
index 828ad2c..68a2b6a 100644
--- a/rcpttTests/ECL_IDE_module/editors/ScenarioEditor/Content assist/Procedure documentation/Context.test
+++ b/rcpttTests/ECL_IDE_module/editors/ScenarioEditor/Content assist/Procedure documentation/Context.test
@@ -6,8 +6,8 @@
 Element-Version: 3.0
 External-Reference: 
 Id: _d1NdkCbREeSJvYFSUnsXEQ
-Runtime-Version: 1.5.0.201406020630
-Save-Time: 8/18/14 7:22 PM
+Runtime-Version: 1.5.2.201408180747
+Save-Time: 8/25/14 12:10 PM
 Testcase-Type: ecl
 
 ------=_.content-0a7243a0-75d3-3d5f-9791-539de0e5b7ac
@@ -23,6 +23,9 @@
 }
 get-view "Test Explorer" | get-tree | select "MyProject/Dummy" | double-click
 get-editor Dummy | get-section Script | get-text-viewer | hover-text 1 9
-get-window -from "Information Window" | get-control Browser | get-property text | contains "Procedure <B>create-java-class</B> <BR>Description of create-java-class procedure" | verify-true
+get-window -from "Information Window" | get-control Browser | get-property text -raw | invoke toLowerCase | invoke contains 
+"procedure <b>create-java-class</b>\\n"
+    + "<br /> description of create-java-class procedure\\n" | verify-true
+
 
 ------=_.content-0a7243a0-75d3-3d5f-9791-539de0e5b7ac--
diff --git a/rcpttTests/ECL_IDE_module/selfAUTTests/SuperContext/LaunchCheck_ECL_SuperContext.test b/rcpttTests/ECL_IDE_module/selfAUTTests/SuperContext/LaunchCheck_ECL_SuperContext.test
index 85988b7..ccb81c3 100644
--- a/rcpttTests/ECL_IDE_module/selfAUTTests/SuperContext/LaunchCheck_ECL_SuperContext.test
+++ b/rcpttTests/ECL_IDE_module/selfAUTTests/SuperContext/LaunchCheck_ECL_SuperContext.test
@@ -1,14 +1,13 @@
 --- RCPTT testcase ---
 Format-Version: 1.0
-Q7-vendor: www.xored.com/q7
 Contexts: _9lhUYRkNEeOwAuU1H7YyVQ,_4zI9AWpgEeCzId1Gnkds9A,_ZQYygK2sEeCqBbDEJWufvQ
 Element-Name: LaunchCheck_ECL_SuperContext
 Element-Type: testcase
 Element-Version: 3.0
 External-Reference: 
 Id: _9u_DUBkWEeOt9MVDSr4v5A
-Q7-Runtime-Version: 1.5.0.201406131029
-Save-Time: 6/13/14 7:04 PM
+Runtime-Version: 1.5.2.201408180747
+Save-Time: 8/22/14 4:52 PM
 Tags: selfAUT
 Testcase-Type: ecl
 
@@ -32,11 +31,12 @@
 
 get-view "Test Explorer" | get-tree | select "MyProject/Test_SuperEcl" | double-click
 get-editor "Test_SuperEcl" | get-button Replay | click
-wait 7000
-with [get-view "Execution View"] {
-    get-label "2/2" | get-property caption | equals "2/2" | verify-true
-    get-label 0 | get-property caption | equals 0 | verify-true
-    get-tree | get-property itemCount | equals 2 | verify-true
+try -times 100 -delay 2000 -command {
+	with [get-view "Execution View"] {
+    	get-label "2/2" | get-property caption | equals "2/2" | verify-true
+    	get-label 0 | get-property caption | equals 0 | verify-true
+    	get-tree | get-property itemCount | equals 2 | verify-true
+	}
 }
 get-view "Execution View" | get-tree | get-item "Test_SuperEcl \\(Ecl1\\).*/Ecl1.*" 
     | get-property caption | equals "Ecl1.*" | verify-true
diff --git a/rcpttTests/ECL_IDE_module/selfAUTTests/verifications/Log/ErrLogVerification_NEGATIVE Case Denied Entry_Message Pattern.test b/rcpttTests/ECL_IDE_module/selfAUTTests/verifications/Log/ErrLogVerification_NEGATIVE Case Denied Entry_Message Pattern.test
index 39cf956..3686598 100644
--- a/rcpttTests/ECL_IDE_module/selfAUTTests/verifications/Log/ErrLogVerification_NEGATIVE Case Denied Entry_Message Pattern.test
+++ b/rcpttTests/ECL_IDE_module/selfAUTTests/verifications/Log/ErrLogVerification_NEGATIVE Case Denied Entry_Message Pattern.test
@@ -6,8 +6,8 @@
 Element-Version: 3.0
 External-Reference: 
 Id: _23J5kH0TEeO5CYdzFmGe7Q
-Runtime-Version: 1.5.0.201407012005
-Save-Time: 7/2/14 8:35 AM
+Runtime-Version: 1.5.2.201408180747
+Save-Time: 8/29/14 2:57 PM
 Tags: verification/Error Log, selfAUT
 Testcase-Type: ecl
 
@@ -36,9 +36,11 @@
         select ".\\*" -column "Plugin Pattern" | activate-cell-edit -column 4
         with [get-editbox] {
             set-text "Info Entry"
-            key-type "M1+s"
+            
+            
         }
         apply-cell-edit -deactivate
+        key-type "M1+s"
     }
 }
 get-view "Test Explorer" | get-tree | select "MyProject/TestCase" | double-click
diff --git a/rcpttTests/contexts/ProjectWithTableTests.ctx b/rcpttTests/contexts/ProjectWithTableTests.ctx
new file mode 100644
index 0000000..51f7fb5
--- /dev/null
+++ b/rcpttTests/contexts/ProjectWithTableTests.ctx
@@ -0,0 +1,125 @@
+--- RCPTT testcase ---
+Format-Version: 1.0
+Context-Type: org.eclipse.rcptt.ctx.workspace
+Element-Name: ProjectWithTableTests
+Element-Type: context
+Element-Version: 2.0
+Id: _l1e_wDGmEeSbC7GaRYibkw
+Runtime-Version: 1.5.0.201406020630
+Save-Time: 9/1/14 2:09 PM
+
+------=_contents/q7project/defaultWB.ctx-5870615a-f089-338e-916f-277f01fea96d
+Content-Type: q7/binary
+Entry-Name: contents/q7project/defaultWB.ctx
+
+UEsDBBQACAgIAAAAIQAAAAAAAAAAAAAAAAAIAAAALmNvbnRlbnSdU02TojAUvPMruFtoAiJi1RyCoiKI
+fCgily2EoIx8CQHUX7/ozFqze9x3Svq9dLrTwDAMbQo0wRUJ/ArTDMNQ87xMfcI4uKziPJvQsA8oU2Aa
+nIV5OaHbtu3f8hKH/SBPB1eBmuYZwTfCbO8FntAd+N2+Cv067oZe3X6bl5cjzoIzJSc4xRlhdD/t5kMc
++XVC9tIb/8PzOvdG33LYTo4STuhfw4cion1xkvH0oYRwkV3CSkRPqVadkTjFPy1w/XGfBZCDAEDIgzFl
++w1mtvFTAgQDdgA5Gk44QBtrimJe9fHraeGlo7ufC1kMRiJgAjwcM9wIiMyYw91WAMNwKEYQ+9HXU7wt
+XIXBMc788k7JGSnv34Z/kFLUTq5mkmSiKUIK6kox0b/1wrVUb46ZlRwzW784otY+0O4WDjh1p+Gt1yrB
+yCXpQlco05UNM2O3KbnBag/r5GoNWDXgnMST5oY3etS9YLkQYhjOdgUyyvnmKj/IBa58NLevrnbWvF7E
+OUund6nmJG4pZEMlTNp2BZDrpItdPuIw4oRDbhxaPFOAWpTqsRRUs4TsLkRb3MywtXpwUdBrVSvzL+W4
+5+2jy+OG091yxlMjQ/s8FWIoxSsl2cTx6WCprBQSIdIFu7DWI70hqlPXAdTrg2uovHGTHFEhkLcP1bqH
+xup1pi2ls1XHReIuEbWvdtVmcScnHRhWuPYUd5Hly6jQYO5mdq598keiLYdyNKsPm/R+X0eDdADYjXJu
+mqKBjxFbJ8NAM+3e4mr13DF1XkfjqhZXHi+adhsoZ65O8nYoITRrUBdQF5qEziaav8I5PfM5IyUUCn+9
+efaFVkbf+Kuov/Kc8p9Hlgfengcd0Vz6muvIZaQ/17IpfQ1+fPz3h9j9xb8BUEsHCCCsA3mbAgAA2gMA
+AFBLAQIUABQACAgIAAAAIQAgrAN5mwIAANoDAAAIAAAAAAAAAAAAAAAAAAAAAAAuY29udGVudFBLBQYA
+AAAAAQABADYAAADRAgAAAAA=
+------=_contents/q7project/defaultWB.ctx-5870615a-f089-338e-916f-277f01fea96d--
+------=_contents/q7project/.defaultWSctx/content1.test-fad4dd51-e91c-3fc7-80f7-c5de32215b57
+Content-Type: q7/binary
+Entry-Name: contents/q7project/.defaultWSctx/content1.test
+
+UEsDBBQACAgIAAAAIQAAAAAAAAAAAAAAAAAIAAAALmNvbnRlbnRtj8sKwjAQRfeC/xBmb6IWqZTGIuJC
+ULoQwZ3UdKyBJukj2vbvTcXqxt1wH2e4YdSqnDyxqqXRHGZ0CgS1MKnUGYeHvU2WEK3Go1AYRVtTYUpL
+n9YCdVJJExw/B2mVDL6UeU9xXF0HTudwt7YIGGuahhqVUVNl7HzYDZG/5G/JueztstJng0tROAmIThRy
+sFhb+G3w+u8y5XDxTnEnkmu8xY1n/Nhb7Jt4nQGxXeFqKHJgbtoLUEsHCDd6xiu1AAAAAwEAAFBLAQIU
+ABQACAgIAAAAIQA3esYrtQAAAAMBAAAIAAAAAAAAAAAAAAAAAAAAAAAuY29udGVudFBLBQYAAAAAAQAB
+ADYAAADrAAAAAAA=
+------=_contents/q7project/.defaultWSctx/content1.test-fad4dd51-e91c-3fc7-80f7-c5de32215b57--
+------=_contents/q7project/TableTest.test-78e92882-c6dd-3dcd-ad74-a7b9d6b0da7a
+Content-Type: q7/binary
+Entry-Name: contents/q7project/TableTest.test
+
+UEsDBBQACAgIAAAAIQAAAAAAAAAAAAAAAAAIAAAALmNvbnRlbnSdk01v2zAMhu/6FYLPo79dzwF2KIKs
+y7q1buKuyClQZKZzI8uuJMdpsB8/uU2y3LZVJ4GkXj58CQEAnY3zoqAGteFMIwUA8rlRNTPwA5WuGjmi
+geuTcSMN7owe0WW8n2aXD+3jBMf7aRlcyU2ps8sPy48CFvH16tbG8028uNffZHBxRyYCa5QGbliNI1qw
+lcDCdjvFi5fWxo8Ap/Cpe2S7T3YGlWQCZrhGhZLbF2RaWpguWTT312Fim5ZP+cXD1z7Z+3dk1klT1Xg+
+Q+KG7nPHRLWuUJE52yIU1YCUeYEXxDQc+RnNv5PiQHIAQy4IgdfzaenywQZL57M0jCPmQ5qUEURlsoYs
+zQJIoqxEH5NVyvibZ2cT7ow3qE2kUS8HO46ChDyigVYdx9NgTejoL8pFxTevyb6SZdPT/E+NTQ8JoxDt
+VaNAbqhzhRIVE94Nmr5RG2oppE1YF7RD/qI0LOf8DiUz7KQNquk1Bd6IrpbUmfOfWDOHwpaJDqnzpShy
+xxb3qjIIXG9hXVk5Z6DQLbM78zzvOW1V82TFPG9YeeDaOuedVLjjoivxH7Dm/8sVvnG9b/H2C/0GUEsH
+CH3WxMe3AQAAWgMAAFBLAQIUABQACAgIAAAAIQB91sTHtwEAAFoDAAAIAAAAAAAAAAAAAAAAAAAAAAAu
+Y29udGVudFBLBQYAAAAAAQABADYAAADtAQAAAAA=
+------=_contents/q7project/TableTest.test-78e92882-c6dd-3dcd-ad74-a7b9d6b0da7a--
+------=_contents/q7project/.defaultWSctx/content1.project-815ee12c-3ff3-364a-b7f0-ed0764506944
+Content-Type: q7/binary
+Entry-Name: contents/q7project/.defaultWSctx/content1.project
+
+UEsDBBQACAgIAAAAIQAAAAAAAAAAAAAAAAAIAAAALmNvbnRlbnRtkEEOwiAQRdeaeIeGvaCrusA2UeMF
+1ANUmDSYAi1Q0+MLlNrUuJv358/8AVoOssneYKzQ6oj2eIcyUExzoeojetyv2wMqi82atka/gLkLWGZE
+67zbqyuqKglFl6cuJZFDg2kpQbmCkqkKavLZCGRBz140/NYCC5Tw7EcrxaOSsvw2PGgDHHc5Zr7A0QnG
+82ms5iv8UGXqPsTbxGQpUPIblJTpEp/qegPJPcKfI7p8bIXsaImb5tnvY5cf+AFQSwcIz2bKQ70AAAB/
+AQAAUEsBAhQAFAAICAgAAAAhAM9mykO9AAAAfwEAAAgAAAAAAAAAAAAAAAAAAAAAAC5jb250ZW50UEsF
+BgAAAAABAAEANgAAAPMAAAAAAA==
+------=_contents/q7project/.defaultWSctx/content1.project-815ee12c-3ff3-364a-b7f0-ed0764506944--
+------=_contents/q7project/rcptt.properties-fd5d5747-330f-3b05-9be7-47bcf072cf18
+Content-Type: q7/binary
+Entry-Name: contents/q7project/rcptt.properties
+
+UEsDBBQACAgIAAAAIQAAAAAAAAAAAAAAAAAIAAAALmNvbnRlbnRNzk1uwjAQQOG9TzEXGMdOQEm9rajo
+gp8U2kU3yHJGKKi2gz0k7e0LqhR1/S3eQ0Roa2DK7GwmQETxEpO3jB+Uch+DAS2VaGscKXQxGZimSX7H
+RJ100RfXWqy+yFNg3FpPBvYpXsgxHIi5D+c88/FnuPPwxxti21m2s8618l577Qycluu4eH/OaUW7zzaN
+28Y9De78OHm7Be49/T+sZCNLpSutlNZL1YiDHQmP/eNIq6IsdAXalA3sN0L8AlBLBwguxza0vAAAAPUA
+AABQSwECFAAUAAgICAAAACEALsc2tLwAAAD1AAAACAAAAAAAAAAAAAAAAAAAAAAALmNvbnRlbnRQSwUG
+AAAAAAEAAQA2AAAA8gAAAAAA
+------=_contents/q7project/rcptt.properties-fd5d5747-330f-3b05-9be7-47bcf072cf18--
+------=_contents/q7project/defaultWS.ctx-f62894c1-f639-3a4d-8b93-315b441db9df
+Content-Type: q7/binary
+Entry-Name: contents/q7project/defaultWS.ctx
+
+UEsDBBQACAgIAAAAIQAAAAAAAAAAAAAAAAAIAAAALmNvbnRlbnStlMuSolgQhvc8hXvjyE1uFVELQEAU
+EVS0ZNNxwAMqN7kIwtM3VJU9NdMTE9Mdnas8yR9/JhlfJABgZHOjCpWVD0s0AgBgNgdqlJ6y4mXUNM3k
+kRXoNPGzBM85TM2KBFZgj4rykqUvI3JCYEqMEpRWwIQJehmdUADvcXXY/qj/EFO9eAtrBHaXQUkSOEXg
+JDmiXxh6ZK0w/fQy+sbH4DhdemsFyVY0PTqlkZKsjWHgPV6/+Vla9a5lP82tyK7Ir/Bh+kn1qIAvCPTJ
+E0jA0TQJaH4qAEgFENCEd4LcifchojH5wwDs2ls/RM7h3iWFRYspaVW0nz/xH00wzFHKmSTZoiyGutiH
+bov/jPe6kZi1l25iL7VnoioZUhN+fA2fMsneNoqMqaLo9FVdHmqy8tXjPeSf/D/irwab3sjRPqqKiIm2
+SA3p+lP4x5bX0/G0muTc5NMO0CcKEaxAAB9NeUCzhAB4GvVPjpiepkJAIhj8r71/Mf2dPW/NaKZaTSfa
+5yDg5bLivGOWO9F+sY7tFSZLYnhWslRdPIyVTlcPY7rF6dZ3kiBv5u6Yxk3OHfte0RWtKLiLrLmzroqc
+UIJJXGQVK2new73d24v9trmqNWaYm3Jrxhm3mpPxUSpVFlWEHaLL3m8TYX2/cVu7IImDoC/GenB0mfFq
+uspN6CadQT/wOrvv28dba0g8Y6Uif8PSLpopu83ytDzI1RQm6xROEbtXyPBNOMyRgaNizI+jQ1WO52TA
+mRa6xp1dVgphyBFvLLXcZ9L5ragjLVw3vomx+yQMumaqVbH0kB/b4Kxc19ouc5mu0+ZCzqQWaVpcceTr
+SCUHRi9Q28wgNyx2mUlPRp+IYk9Gk3NkU/dmeOQ9br/M6BNRTA+VvzP6q2B9YfJf8J58JsAnSBb5AQUI
+kuuhRh4NPAEOGcWzBGRZViB/9zY8m/wOs5sqUpR1cxHtzQlBpCOthnJxL0XKQSsVI0XTSWbbo3ghbWK8
+MmKzcO6LmmZ4nBf32bosU3RcdjabXSmk+62jPLoM9dNUbU01q/zCU7CKIB4akXHQXAVjuc7L23u+DGM1
+Zv37wlVnIRXdbC+RozxawtpwZW0jdeSUwM2jLDO7hlP84gHX27JuKEsLZ/O5z7gFJxJ2qmE8lZTMpeYd
+7S23yp330OybY+levNjdlBueo9BaWP4y0Lkb7+lvJdQTj6nS+sj4wVhUeyp8vaO8pc0Rw0nEh+sl9nuU
+xLMt9tz1Z/H9YJ7FlZC00VoYHkEzUBP+tNz3kJmrRzGEe2CI3kfFpA+dNHBnDrm1+lS+vv4xdnoMvwNQ
+SwcIC2F3Z9UDAABNBwAAUEsBAhQAFAAICAgAAAAhAAthd2fVAwAATQcAAAgAAAAAAAAAAAAAAAAAAAAA
+AC5jb250ZW50UEsFBgAAAAABAAEANgAAAAsEAAAAAA==
+------=_contents/q7project/defaultWS.ctx-f62894c1-f639-3a4d-8b93-315b441db9df--
+------=_.q7.content-3d2e0690-ce48-3609-83e0-c704d49f1eaf
+Content-Type: q7/binary
+Entry-Name: .q7.content
+
+UEsDBBQACAgIAAAAIQAAAAAAAAAAAAAAAAAIAAAALmNvbnRlbnSVUl1LwzAUfRf8DyHvJtaXSWkdOGX4
+IIgbTJ9Gm95tcWlSk1vbn2+6NRVE6fZSmuR85J6TZNqWinyBddLolEbsmhLQwhRSb1Na4+bqlk7vLi8S
+Y7cMhJKVA2ZFhcgEtqwxdu+qTEC8Cn8zoxFaJG0p40H3ptP1TtrFfj+lO8Qq5rxpGmbKLfPi/O35KUBG
+vAZ6wHT0A457HB9wlOis9OgXaz5A4EribpnlCpbg0FEii5SuVQTr5mFePsIin03m2eu7zPcN9RMTkohu
+FI2HhV9WRx3Xy35O+g3aAzxkIxWEcxaOCbQgauysU4q2Bsr/Zgy3Y+g/p/MK2GS1wtV9l9P5tMV5tGMj
+frgKLEpwI0yjCv8KQiaDZ2c5oH459LlHJyX4H3c8Qt7fLfTLQ8HH9vlP/Qk/9/l70jdQSwcIvjWahjgB
+AABbAwAAUEsBAhQAFAAICAgAAAAhAL41moY4AQAAWwMAAAgAAAAAAAAAAAAAAAAAAAAAAC5jb250ZW50
+UEsFBgAAAAABAAEANgAAAG4BAAAAAA==
+------=_.q7.content-3d2e0690-ce48-3609-83e0-c704d49f1eaf--
+------=_contents/q7project/.project-c016ecf2-017a-3eb3-b9aa-3e2860a66691
+Content-Type: q7/binary
+Entry-Name: contents/q7project/.project
+
+UEsDBBQACAgIAAAAIQAAAAAAAAAAAAAAAAAIAAAALmNvbnRlbnS1kUEOwiAQRdeaeIeme0FXdYE1UeMF
+1ANUOmkwLeBATY8vUGrTmC7dzfvzmT8Z2KFr6uQNaISS+3RLNmkCkqtSyGqf3m+X9S495Ksl06iewO0Z
+DEehrXM7dcFk0UD+ymKX0cC+wVXTgLQ5o0Pl1egzAeiEHq2oy6sG7iniyT0tZBmUmOWmkU4hlOSVEe4K
+EpyAjo99NW7hHhVYtT7eRKZTgdGfoNlohRUBXgttgCDX1v4lPyrDJVy0bRGiu4e5TULZW/wOwRomjjO+
+R59+5AdQSwcIDhq3cM8AAAAHAgAAUEsBAhQAFAAICAgAAAAhAA4at3DPAAAABwIAAAgAAAAAAAAAAAAA
+AAAAAAAAAC5jb250ZW50UEsFBgAAAAABAAEANgAAAAUBAAAAAA==
+------=_contents/q7project/.project-c016ecf2-017a-3eb3-b9aa-3e2860a66691--
diff --git a/rcpttTests/platform_tests/Contexts/Folder Context/FolderContextWithVariable.ctx b/rcpttTests/platform_tests/Contexts/Folder Context/FolderContextWithVariable.ctx
new file mode 100644
index 0000000..9030509
--- /dev/null
+++ b/rcpttTests/platform_tests/Contexts/Folder Context/FolderContextWithVariable.ctx
@@ -0,0 +1,22 @@
+--- RCPTT testcase ---
+Format-Version: 1.0
+Context-Type: org.eclipse.rcptt.ctx.filesystem
+Element-Name: FolderContextWithVariable
+Element-Type: context
+Element-Version: 2.0
+Id: _65vWgCzhEeS3Uc85AOuQ3g
+Runtime-Version: 1.5.2.201408180747
+Save-Time: 8/26/14 12:35 PM
+
+------=_.q7.content-3d2e0690-ce48-3609-83e0-c704d49f1eaf
+Content-Type: q7/binary
+Entry-Name: .q7.content
+
+UEsDBBQACAAIAAAAIQAAAAAAAAAAAAAAAAAIAAAALmNvbnRlbnSVkEtPwzAQhO9I/AdrxRW70CdRTFW1
+VOKAoOJRbpVxnMRgx5G9JSmI/04a2nJE3Earb2ZHE49ra8i78kG7gsMZ7QBRhXSJLjIOa0xPRzC+PD6K
+nc+okkaXQVEvS0QqsaapNipsAiobzQ9y6gpUNZLa6uiQfL5Nbn4VIWruHHLEMmKsqirqbEabePZ8c71H
+/vp28O+hrb8FWQOyXxBIIaziMHcmUX7XbKkxfxJeixejgOiEw2rQf19m04/8St13H+WoP7ldL7oZkFJg
+zuHks3L+LZRCqpVxMmIPKuBieOdf2RdL22gg0ijhOaTCBAXNZITE3jlsVaPbTrs2ydraDcUagSQCBYde
+b9gfzAaz4UVn1pkA+7GznT9m/1+/sX0DUEsHCKU+66keAQAA3AEAAFBLAQIUABQACAAIAAAAIQClPuup
+HgEAANwBAAAIAAAAAAAAAAAAAAAAAAAAAAAuY29udGVudFBLBQYAAAAAAQABADYAAABUAQAAAAA=
+------=_.q7.content-3d2e0690-ce48-3609-83e0-c704d49f1eaf--
diff --git a/rcpttTests/platform_tests/Contexts/Folder Context/FolderContextWithVariable.test b/rcpttTests/platform_tests/Contexts/Folder Context/FolderContextWithVariable.test
new file mode 100644
index 0000000..3f5e895
--- /dev/null
+++ b/rcpttTests/platform_tests/Contexts/Folder Context/FolderContextWithVariable.test
@@ -0,0 +1,21 @@
+--- RCPTT testcase ---
+Format-Version: 1.0
+Contexts: _tlWZcGphEeCzId1Gnkds9A,_65vWgCzhEeS3Uc85AOuQ3g
+Element-Name: FolderContextWithVariable
+Element-Type: testcase
+Element-Version: 3.0
+External-Reference: 
+Id: _4m2t4CzhEeS3Uc85AOuQ3g
+Runtime-Version: 1.5.2.201408180747
+Save-Time: 8/26/14 12:39 PM
+Testcase-Type: ecl
+
+------=_.content-0a7243a0-75d3-3d5f-9791-539de0e5b7ac
+Content-Type: text/ecl
+Entry-Name: .content
+
+with [get-view "Test Explorer" | get-tree] {
+    select TestQ7Prj | key-type F5
+    select "TestQ7Prj/folder/dummy.txt"
+}
+------=_.content-0a7243a0-75d3-3d5f-9791-539de0e5b7ac--
diff --git a/rcpttTests/platform_tests/Editing/ProjectAndFolder/Copy/CopyFolderToAnotherProject.test b/rcpttTests/platform_tests/Editing/ProjectAndFolder/Copy/CopyFolderToAnotherProject.test
index 1f25822..dea9f14 100644
--- a/rcpttTests/platform_tests/Editing/ProjectAndFolder/Copy/CopyFolderToAnotherProject.test
+++ b/rcpttTests/platform_tests/Editing/ProjectAndFolder/Copy/CopyFolderToAnotherProject.test
@@ -1,14 +1,13 @@
 --- RCPTT testcase ---
 Format-Version: 1.0
-Q7-vendor: www.xored.com/q7
-Contexts: _4zI9AWpgEeCzId1Gnkds9A,_LhMUsNH1EeCvZZdPZOPlnw
+Contexts: _LhMUsNH1EeCvZZdPZOPlnw,_4zI9AWpgEeCzId1Gnkds9A
 Element-Name: CopyFolderToAnotherProject
 Element-Type: testcase
 Element-Version: 3.0
 External-Reference: 
 Id: _nB3MsNH7EeCvZZdPZOPlnw
-Q7-Runtime-Version: 1.5.0.201406131029
-Save-Time: 6/13/14 7:04 PM
+Runtime-Version: 1.5.2.201408180747
+Save-Time: 8/25/14 12:16 PM
 Tags: Project, Folder, CopyPaste
 Testcase-Type: ecl
 
diff --git a/rcpttTests/platform_tests/Editing/TestCase/ContextList/CopyContextToTestFromNotReferencedProject.test b/rcpttTests/platform_tests/Editing/TestCase/ContextList/CopyContextToTestFromNotReferencedProject.test
index d062398..f6fae28 100644
--- a/rcpttTests/platform_tests/Editing/TestCase/ContextList/CopyContextToTestFromNotReferencedProject.test
+++ b/rcpttTests/platform_tests/Editing/TestCase/ContextList/CopyContextToTestFromNotReferencedProject.test
@@ -6,8 +6,8 @@
 Element-Version: 3.0
 External-Reference: http://jira4.xored.com/browse/QS-1135
 Id: _gusGANIdEeCSSY3GE2xBfQ
-Runtime-Version: 1.5.2.qualifier
-Save-Time: 8/19/14 5:15 PM
+Runtime-Version: 1.5.2.201408180747
+Save-Time: 8/28/14 3:06 PM
 Tags: TestCase, Context, Reference
 Testcase-Type: ecl
 
@@ -107,9 +107,6 @@
 get-editor scenario3 | get-section Contexts | get-table | get-item "Possible resolution -> context1 \\(p1\\)" 
     | get-property caption | equals "Possible resolution -> context1 (p1)" | verify-true
 
-// Dummy editor switch (see 442038):
-get-editor scenario2 | click
-get-editor scenario3 | click 
     
 get-editor scenario3 | get-section Script | get-text-viewer | key-type "M1+M2+s"
 get-view "Test Explorer" | get-tree | select p3 | get-menu Properties | click
diff --git a/rcpttTests/platform_tests/ecl/GetChildrenFromFile.test b/rcpttTests/platform_tests/ecl/GetChildrenFromFile.test
index 268f5fb..5f0c2be 100644
--- a/rcpttTests/platform_tests/ecl/GetChildrenFromFile.test
+++ b/rcpttTests/platform_tests/ecl/GetChildrenFromFile.test
@@ -1,22 +1,21 @@
---- Q7 testcase ---
+--- RCPTT testcase ---
 Format-Version: 1.0
-Q7-vendor: www.xored.com/q7
 Element-Name: GetChildrenFromFile
 Element-Type: testcase
 Element-Version: 3.0
 External-Reference: 
 Id: _AeqkweZvEeOF0oJ66JQZLA
-Q7-Runtime-Version: 1.3.12.201405281649
-Save-Time: 5/29/14 11:23 AM
+Runtime-Version: 1.5.2.201408180747
+Save-Time: 8/29/14 12:12 PM
 Testcase-Type: ecl
 
 ------=_.content-0a7243a0-75d3-3d5f-9791-539de0e5b7ac
 Content-Type: text/ecl
 Entry-Name: .content
 
-get-file "file:/c:/" | get children | assert-non-empty
+get-file [get-by-os -win "file:/c:/" -macosx "file:/Users" -linux "file:/home"] | get children | assert-non-empty
 
-get-file "file:/c:/" | get children | foreach  {
+get-file [get-by-os -win "file:/c:/" -macosx "file:/Users" -linux "file:/home"] | get children | foreach  {
 	trace [get "name"]
 }
 ------=_.content-0a7243a0-75d3-3d5f-9791-539de0e5b7ac--
diff --git a/rcpttTests/platform_tests/ecl/GetExistsFromFile.test b/rcpttTests/platform_tests/ecl/GetExistsFromFile.test
index 78a6e81..a67887e 100644
--- a/rcpttTests/platform_tests/ecl/GetExistsFromFile.test
+++ b/rcpttTests/platform_tests/ecl/GetExistsFromFile.test
@@ -1,19 +1,18 @@
---- Q7 testcase ---
+--- RCPTT testcase ---
 Format-Version: 1.0
-Q7-vendor: www.xored.com/q7
 Element-Name: GetExistsFromFile
 Element-Type: testcase
 Element-Version: 3.0
 External-Reference: 
 Id: _DzrNwOboEeOPh_ngj33FOg
-Q7-Runtime-Version: 1.3.12.201405281649
-Save-Time: 5/29/14 11:18 AM
+Runtime-Version: 1.5.2.201408180747
+Save-Time: 8/29/14 12:12 PM
 Testcase-Type: ecl
 
 ------=_.content-0a7243a0-75d3-3d5f-9791-539de0e5b7ac
 Content-Type: text/ecl
 Entry-Name: .content
 
-get-file "file:/c:/" | get exists | verify-true
+get-file [get-by-os -win "file:/c:/" -macosx "file:/Users" -linux "file:/home"] | get exists | verify-true
 get-file "file:/shurumburumc:/" | get exists | verify-false
 ------=_.content-0a7243a0-75d3-3d5f-9791-539de0e5b7ac--
diff --git a/rcpttTests/platform_tests/ecl/GetFile.test b/rcpttTests/platform_tests/ecl/GetFile.test
index 8f5eb68..4c5d34c 100644
--- a/rcpttTests/platform_tests/ecl/GetFile.test
+++ b/rcpttTests/platform_tests/ecl/GetFile.test
@@ -1,13 +1,12 @@
---- Q7 testcase ---
+--- RCPTT testcase ---
 Format-Version: 1.0
-Q7-vendor: www.xored.com/q7
 Element-Name: GetFile
 Element-Type: testcase
 Element-Version: 3.0
 External-Reference: 
 Id: _l6ADIOTVEeOShsjP9M9CMw
-Q7-Runtime-Version: 1.3.12.201405231548
-Save-Time: 5/26/14 8:00 PM
+Runtime-Version: 1.5.2.201408180747
+Save-Time: 8/27/14 12:41 PM
 Testcase-Type: ecl
 
 ------=_.content-0a7243a0-75d3-3d5f-9791-539de0e5b7ac
diff --git a/rcpttTests/platform_tests/ecl/GetIsDirectoryFromFile.test b/rcpttTests/platform_tests/ecl/GetIsDirectoryFromFile.test
index fa0276f..73ef3a7 100644
--- a/rcpttTests/platform_tests/ecl/GetIsDirectoryFromFile.test
+++ b/rcpttTests/platform_tests/ecl/GetIsDirectoryFromFile.test
@@ -1,19 +1,18 @@
---- Q7 testcase ---
+--- RCPTT testcase ---
 Format-Version: 1.0
-Q7-vendor: www.xored.com/q7
 Element-Name: GetIsDirectoryFromFile
 Element-Type: testcase
 Element-Version: 3.0
 External-Reference: 
 Id: _wyOEIObpEeOPh_ngj33FOg
-Q7-Runtime-Version: 1.3.12.201405281649
-Save-Time: 5/29/14 11:29 AM
+Runtime-Version: 1.5.2.201408180747
+Save-Time: 8/29/14 12:12 PM
 Testcase-Type: ecl
 
 ------=_.content-0a7243a0-75d3-3d5f-9791-539de0e5b7ac
 Content-Type: text/ecl
 Entry-Name: .content
 
-get-file "file:/c:/" | get isDirectory | verify-true
+get-file [get-by-os -win "file:/c:/" -macosx "file:/Users" -linux "file:/home"] | get isDirectory | verify-true
 get-file "file:/casf:/" | get isDirectory | verify-false
 ------=_.content-0a7243a0-75d3-3d5f-9791-539de0e5b7ac--
diff --git a/rcpttTests/platform_tests/ecl/Switch.test b/rcpttTests/platform_tests/ecl/Switch.test
index d00dbbd..7cf06da 100644
--- a/rcpttTests/platform_tests/ecl/Switch.test
+++ b/rcpttTests/platform_tests/ecl/Switch.test
@@ -1,19 +1,24 @@
 --- RCPTT testcase ---
 Format-Version: 1.0
-Q7-vendor: www.xored.com/q7
 Element-Name: Switch
 Element-Type: testcase
 Element-Version: 3.0
 External-Reference: 
 Id: _gKwkEPd7EeOUrIHOddLXDg
-Q7-Runtime-Version: 1.5.0.qualifier
-Save-Time: 6/19/14 1:45 PM
+Runtime-Version: 1.5.2.201408180747
+Save-Time: 8/28/14 2:24 PM
 Testcase-Type: ecl
 
 ------=_.content-0a7243a0-75d3-3d5f-9791-539de0e5b7ac
 Content-Type: text/ecl
 Entry-Name: .content
 
+
+//https://bugs.eclipse.org/bugs/show_bug.cgi?id=442016
+switch foo
+	[case foo { bool true }]
+	-default { bool false } | assert-true
+
 // Without default
 echo "right" 
 	| switch 
@@ -51,4 +56,6 @@
 	| equals "Correct" | verify-true
 
 
+
+
 ------=_.content-0a7243a0-75d3-3d5f-9791-539de0e5b7ac--
diff --git a/rcpttTests/platform_tests/ecl/UriFromPath.test b/rcpttTests/platform_tests/ecl/UriFromPath.test
index 0c7fe89..3d2805b 100644
--- a/rcpttTests/platform_tests/ecl/UriFromPath.test
+++ b/rcpttTests/platform_tests/ecl/UriFromPath.test
@@ -1,18 +1,18 @@
---- Q7 testcase ---
+--- RCPTT testcase ---
 Format-Version: 1.0
-Q7-vendor: www.xored.com/q7
 Element-Name: UriFromPath
 Element-Type: testcase
 Element-Version: 3.0
 External-Reference: 
 Id: _zG1GQOTUEeOShsjP9M9CMw
-Q7-Runtime-Version: 1.3.12.201405231548
-Save-Time: 5/26/14 7:59 PM
+Runtime-Version: 1.5.2.201408180747
+Save-Time: 8/29/14 12:13 PM
 Testcase-Type: ecl
 
 ------=_.content-0a7243a0-75d3-3d5f-9791-539de0e5b7ac
 Content-Type: text/ecl
 Entry-Name: .content
 
-uri-from-path "C:\Windows\System32" | equals "file:/C:/Windows/System32/" | verify-true
+uri-from-path [get-by-os -win "C:\Windows\System32" -macosx "Users" -linux "home"] |
+contains [get-by-os -win "file:/C:/Windows/System32/" -macosx "file:/Users/" -linux "file:/home/"] | verify-true
 ------=_.content-0a7243a0-75d3-3d5f-9791-539de0e5b7ac--
diff --git a/rcpttTests/platform_tests/selfAUTTests/442980_ClassCastExceptions.test b/rcpttTests/platform_tests/selfAUTTests/442980_ClassCastExceptions.test
new file mode 100644
index 0000000..539d9e4
--- /dev/null
+++ b/rcpttTests/platform_tests/selfAUTTests/442980_ClassCastExceptions.test
@@ -0,0 +1,50 @@
+--- RCPTT testcase ---
+Format-Version: 1.0
+Contexts: _ymiyse5IEeCU6db9MgIBkA,_ZQYygK2sEeCqBbDEJWufvQ,_l1e_wDGmEeSbC7GaRYibkw
+Element-Name: 442980_ClassCastExceptions
+Element-Type: testcase
+Element-Version: 3.0
+External-Reference: https://bugs.eclipse.org/bugs/show_bug.cgi?id=442980
+Id: _y-nOoDGlEeSbC7GaRYibkw
+Runtime-Version: 1.5.0.201406020630
+Save-Time: 9/1/14 2:22 PM
+Testcase-Type: ecl
+
+------=_.description-216f885c-d591-38ce-8ea2-e4f8cb4d6ffa
+Content-Type: text/plain
+Entry-Name: .description
+
+Copyright (c) 2009, 2014 Xored Software Inc and others.
+All rights reserved. This program and the accompanying materials
+are made available under the terms of the Eclipse Public License v1.0
+which accompanies this distribution, and is available at
+http://www.eclipse.org/legal/epl-v10.html
+
+Contributors:
+    Xored Software Inc - initial creation and/or initial documentation
+--------------------------------------------------------------------------------
+
+TEST STEPS:
+
+1. Run test with "select-rows", "exclude-rows", "write-csv-file" commands in Debug mode
+2. Make sure that test is passed
+------=_.description-216f885c-d591-38ce-8ea2-e4f8cb4d6ffa--
+------=_.content-0a7243a0-75d3-3d5f-9791-539de0e5b7ac
+Content-Type: text/ecl
+Entry-Name: .content
+
+with [get-view "Test Explorer" | get-tree] {
+    select q7project | double-click
+    select "q7project/TableTest"
+}
+get-button Debug | click
+with [get-view "Execution View"] {
+    get-control Any -after [get-label "1/1"] | get-property "getChildren().Control[2].getText()" | equals 0 
+        | verify-true
+    get-editbox -after [get-label "Message:"] | get-property text 
+        | contains "cannot be cast to org.eclipse.rcptt.ecl.core.Command" | verify-false
+    get-editbox -after [get-label "Message:"] | get-property text 
+        | equals "" | verify-true
+}
+
+------=_.content-0a7243a0-75d3-3d5f-9791-539de0e5b7ac--
diff --git a/repository/full/pom.xml b/repository/full/pom.xml
index 1e0e81d..c79f4c7 100644
--- a/repository/full/pom.xml
+++ b/repository/full/pom.xml
@@ -71,7 +71,7 @@
       <plugin>
 	<groupId>com.xored.tycho</groupId>
 	<artifactId>eclipse-ini-patcher</artifactId>
-	<version>0.0.3-SNAPSHOT</version>
+	<version>0.0.3</version>
 	<executions>
 	  <execution>
 	    <id>materialize-products</id>
@@ -126,4 +126,16 @@
       </plugin>
     </plugins>
   </build>
+
+  <pluginRepositories>
+    <!-- this repo is required for eclipse-ini-patcher plugin (see above)
+	 to improve Mac OS X product materialization
+	 (see github.com/komaz/eclipse-ini-patcher)     
+    -->
+    <pluginRepository>
+      <id>xored</id>
+      <name>Xored Maven repository</name>
+      <url>http://maven.xored.com/nexus/content/repositories/releases/</url>
+    </pluginRepository>
+  </pluginRepositories>
 </project>
diff --git a/runtime/ecl/org.eclipse.rcptt.tesla.ecl.impl/src/org/eclipse/rcptt/tesla/ecl/internal/impl/AdapterFactory.java b/runtime/ecl/org.eclipse.rcptt.tesla.ecl.impl/src/org/eclipse/rcptt/tesla/ecl/internal/impl/AdapterFactory.java
index c7645fc..4d9a111 100644
--- a/runtime/ecl/org.eclipse.rcptt.tesla.ecl.impl/src/org/eclipse/rcptt/tesla/ecl/internal/impl/AdapterFactory.java
+++ b/runtime/ecl/org.eclipse.rcptt.tesla.ecl.impl/src/org/eclipse/rcptt/tesla/ecl/internal/impl/AdapterFactory.java
@@ -11,14 +11,22 @@
 package org.eclipse.rcptt.tesla.ecl.internal.impl;
 
 import org.eclipse.core.runtime.IAdapterFactory;
+import org.eclipse.rcptt.tesla.core.utils.Cryptography;
+import org.eclipse.rcptt.tesla.ecl.model.DecryptResult;
 
 public class AdapterFactory implements IAdapterFactory {
 
-	private static final Class<?>[] adapters = new Class[]{String.class};
+	private static final Class<?>[] adapters = new Class[] { String.class };
 
 	@SuppressWarnings({ "rawtypes", "unchecked" })
-	@Override	
+	@Override
 	public Object getAdapter(Object adaptableObject, Class adapterType) {
+		if (adaptableObject instanceof DecryptResult) {
+			if (adapterType.isAssignableFrom(String.class)) {
+				return Cryptography.INSTANCE.decrypt(((DecryptResult) adaptableObject).getValue());
+			}
+		}
+
 		return null;
 	}
 
diff --git a/runtime/tesla/org.eclipse.rcptt.tesla.recording.aspects.ui.ide/.classpath b/runtime/tesla/org.eclipse.rcptt.tesla.recording.aspects.ui.ide/.classpath
deleted file mode 100644
index 121e527..0000000
--- a/runtime/tesla/org.eclipse.rcptt.tesla.recording.aspects.ui.ide/.classpath
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/runtime/tesla/org.eclipse.rcptt.tesla.recording.aspects.ui.ide/.project b/runtime/tesla/org.eclipse.rcptt.tesla.recording.aspects.ui.ide/.project
deleted file mode 100644
index 8670c12..0000000
--- a/runtime/tesla/org.eclipse.rcptt.tesla.recording.aspects.ui.ide/.project
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.rcptt.tesla.recording.aspects.ui.ide</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.ajdt.core.ajbuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.ajdt.ui.ajnature</nature>
-		<nature>org.eclipse.pde.PluginNature</nature>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-	</natures>
-</projectDescription>
diff --git a/runtime/tesla/org.eclipse.rcptt.tesla.recording.aspects.ui.ide/META-INF/MANIFEST.MF b/runtime/tesla/org.eclipse.rcptt.tesla.recording.aspects.ui.ide/META-INF/MANIFEST.MF
deleted file mode 100644
index 48c34ee..0000000
--- a/runtime/tesla/org.eclipse.rcptt.tesla.recording.aspects.ui.ide/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,19 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: Q7 Runtime Workbencg Recording Support
-Bundle-SymbolicName: org.eclipse.rcptt.tesla.recording.aspects.ui.ide;singleton:=true
-Bundle-Version: 1.5.2.qualifier
-Bundle-Vendor: Eclipse RCP Testing Tool Project
-Require-Bundle: org.aspectj.runtime;visibility:=reexport,
- org.eclipse.core.runtime,
- org.eclipse.rcptt.tesla.core.context;bundle-version="[1.5.2,1.6.0)",
- org.eclipse.rcptt.tesla.core.am;bundle-version="[1.5.2,1.6.0)",
- org.eclipse.rcptt.tesla.swt.aspects;bundle-version="[1.5.2,1.6.0)",
- org.eclipse.ui.ide
-onEnvironment: JavaSE-1.6
-Import-Package: org.osgi.framework
-Eclipse-SupplementBundle: org.eclipse.ui.ide
-Export-Package: org.eclipse.rcptt.tesla.recording.aspects
-Bundle-RequiredExecutionEnvironment: JavaSE-1.6
-Bundle-ActivationPolicy: lazy
-Bundle-Activator: org.eclipse.rcptt.tesla.recording.aspects.UIIDEWorkbenchActivator
diff --git a/runtime/tesla/org.eclipse.rcptt.tesla.recording.aspects.ui.ide/META-INF/aop.xml b/runtime/tesla/org.eclipse.rcptt.tesla.recording.aspects.ui.ide/META-INF/aop.xml
deleted file mode 100644
index e0d4fd2..0000000
--- a/runtime/tesla/org.eclipse.rcptt.tesla.recording.aspects.ui.ide/META-INF/aop.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<aspectj>
-	<aspects>
-		<aspect name="org.eclipse.rcptt.tesla.recording.aspects.UIIDERecordingAspect" />
-	</aspects>
-	<weaver options="-verbose -Xset:typeDemotion=true" />
-</aspectj>
diff --git a/runtime/tesla/org.eclipse.rcptt.tesla.recording.aspects.ui.ide/about.html b/runtime/tesla/org.eclipse.rcptt.tesla.recording.aspects.ui.ide/about.html
deleted file mode 100644
index 692eebb..0000000
--- a/runtime/tesla/org.eclipse.rcptt.tesla.recording.aspects.ui.ide/about.html
+++ /dev/null
@@ -1,28 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
-<title>About</title>
-</head>
-<body lang="EN-US">
-<h2>About This Content</h2>
- 
-<p>February 24, 2014</p>	
-<h3>License</h3>
-
-<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
-indicated below, the Content is provided to you under the terms and conditions of the
-Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
-at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
-
-<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
-being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
-apply to your use of any object code in the Content.  Check the Redistributor's license that was 
-provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
-indicated below, the terms and conditions of the EPL still apply to any source code in the Content
-and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
-
-</body>
-</html>
diff --git a/runtime/tesla/org.eclipse.rcptt.tesla.recording.aspects.ui.ide/build.properties b/runtime/tesla/org.eclipse.rcptt.tesla.recording.aspects.ui.ide/build.properties
deleted file mode 100644
index dfb6a4f..0000000
--- a/runtime/tesla/org.eclipse.rcptt.tesla.recording.aspects.ui.ide/build.properties
+++ /dev/null
@@ -1,14 +0,0 @@
-###############################################################################
-# Copyright (c) 2009, 2014 Xored Software Inc and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-#     Xored Software Inc - initial API and implementation and/or initial documentation
-###############################################################################
-source.. = src/
-output.. = bin/
-bin.includes = META-INF/,\
-               .
diff --git a/runtime/tesla/org.eclipse.rcptt.tesla.recording.aspects.ui.ide/epl-v10.html b/runtime/tesla/org.eclipse.rcptt.tesla.recording.aspects.ui.ide/epl-v10.html
deleted file mode 100644
index 84ec251..0000000
--- a/runtime/tesla/org.eclipse.rcptt.tesla.recording.aspects.ui.ide/epl-v10.html
+++ /dev/null
@@ -1,261 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
-<title>Eclipse Public License - Version 1.0</title>
-<style type="text/css">
-  body {
-    size: 8.5in 11.0in;
-    margin: 0.25in 0.5in 0.25in 0.5in;
-    tab-interval: 0.5in;
-    }
-  p {  	
-    margin-left: auto;
-    margin-top:  0.5em;
-    margin-bottom: 0.5em;
-    }
-  p.list {
-  	margin-left: 0.5in;
-    margin-top:  0.05em;
-    margin-bottom: 0.05em;
-    }
-  </style>
-
-</head>
-
-<body lang="EN-US">
-
-<p align=center><b>Eclipse Public License - v 1.0</b></p>
-
-<p>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
-PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE, REPRODUCTION OR
-DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS
-AGREEMENT.</p>
-
-<p><b>1. DEFINITIONS</b></p>
-
-<p>&quot;Contribution&quot; means:</p>
-
-<p class="list">a) in the case of the initial Contributor, the initial
-code and documentation distributed under this Agreement, and</p>
-<p class="list">b) in the case of each subsequent Contributor:</p>
-<p class="list">i) changes to the Program, and</p>
-<p class="list">ii) additions to the Program;</p>
-<p class="list">where such changes and/or additions to the Program
-originate from and are distributed by that particular Contributor. A
-Contribution 'originates' from a Contributor if it was added to the
-Program by such Contributor itself or anyone acting on such
-Contributor's behalf. Contributions do not include additions to the
-Program which: (i) are separate modules of software distributed in
-conjunction with the Program under their own license agreement, and (ii)
-are not derivative works of the Program.</p>
-
-<p>&quot;Contributor&quot; means any person or entity that distributes
-the Program.</p>
-
-<p>&quot;Licensed Patents&quot; mean patent claims licensable by a
-Contributor which are necessarily infringed by the use or sale of its
-Contribution alone or when combined with the Program.</p>
-
-<p>&quot;Program&quot; means the Contributions distributed in accordance
-with this Agreement.</p>
-
-<p>&quot;Recipient&quot; means anyone who receives the Program under
-this Agreement, including all Contributors.</p>
-
-<p><b>2. GRANT OF RIGHTS</b></p>
-
-<p class="list">a) Subject to the terms of this Agreement, each
-Contributor hereby grants Recipient a non-exclusive, worldwide,
-royalty-free copyright license to reproduce, prepare derivative works
-of, publicly display, publicly perform, distribute and sublicense the
-Contribution of such Contributor, if any, and such derivative works, in
-source code and object code form.</p>
-
-<p class="list">b) Subject to the terms of this Agreement, each
-Contributor hereby grants Recipient a non-exclusive, worldwide,
-royalty-free patent license under Licensed Patents to make, use, sell,
-offer to sell, import and otherwise transfer the Contribution of such
-Contributor, if any, in source code and object code form. This patent
-license shall apply to the combination of the Contribution and the
-Program if, at the time the Contribution is added by the Contributor,
-such addition of the Contribution causes such combination to be covered
-by the Licensed Patents. The patent license shall not apply to any other
-combinations which include the Contribution. No hardware per se is
-licensed hereunder.</p>
-
-<p class="list">c) Recipient understands that although each Contributor
-grants the licenses to its Contributions set forth herein, no assurances
-are provided by any Contributor that the Program does not infringe the
-patent or other intellectual property rights of any other entity. Each
-Contributor disclaims any liability to Recipient for claims brought by
-any other entity based on infringement of intellectual property rights
-or otherwise. As a condition to exercising the rights and licenses
-granted hereunder, each Recipient hereby assumes sole responsibility to
-secure any other intellectual property rights needed, if any. For
-example, if a third party patent license is required to allow Recipient
-to distribute the Program, it is Recipient's responsibility to acquire
-that license before distributing the Program.</p>
-
-<p class="list">d) Each Contributor represents that to its knowledge it
-has sufficient copyright rights in its Contribution, if any, to grant
-the copyright license set forth in this Agreement.</p>
-
-<p><b>3. REQUIREMENTS</b></p>
-
-<p>A Contributor may choose to distribute the Program in object code
-form under its own license agreement, provided that:</p>
-
-<p class="list">a) it complies with the terms and conditions of this
-Agreement; and</p>
-
-<p class="list">b) its license agreement:</p>
-
-<p class="list">i) effectively disclaims on behalf of all Contributors
-all warranties and conditions, express and implied, including warranties
-or conditions of title and non-infringement, and implied warranties or
-conditions of merchantability and fitness for a particular purpose;</p>
-
-<p class="list">ii) effectively excludes on behalf of all Contributors
-all liability for damages, including direct, indirect, special,
-incidental and consequential damages, such as lost profits;</p>
-
-<p class="list">iii) states that any provisions which differ from this
-Agreement are offered by that Contributor alone and not by any other
-party; and</p>
-
-<p class="list">iv) states that source code for the Program is available
-from such Contributor, and informs licensees how to obtain it in a
-reasonable manner on or through a medium customarily used for software
-exchange.</p>
-
-<p>When the Program is made available in source code form:</p>
-
-<p class="list">a) it must be made available under this Agreement; and</p>
-
-<p class="list">b) a copy of this Agreement must be included with each
-copy of the Program.</p>
-
-<p>Contributors may not remove or alter any copyright notices contained
-within the Program.</p>
-
-<p>Each Contributor must identify itself as the originator of its
-Contribution, if any, in a manner that reasonably allows subsequent
-Recipients to identify the originator of the Contribution.</p>
-
-<p><b>4. COMMERCIAL DISTRIBUTION</b></p>
-
-<p>Commercial distributors of software may accept certain
-responsibilities with respect to end users, business partners and the
-like. While this license is intended to facilitate the commercial use of
-the Program, the Contributor who includes the Program in a commercial
-product offering should do so in a manner which does not create
-potential liability for other Contributors. Therefore, if a Contributor
-includes the Program in a commercial product offering, such Contributor
-(&quot;Commercial Contributor&quot;) hereby agrees to defend and
-indemnify every other Contributor (&quot;Indemnified Contributor&quot;)
-against any losses, damages and costs (collectively &quot;Losses&quot;)
-arising from claims, lawsuits and other legal actions brought by a third
-party against the Indemnified Contributor to the extent caused by the
-acts or omissions of such Commercial Contributor in connection with its
-distribution of the Program in a commercial product offering. The
-obligations in this section do not apply to any claims or Losses
-relating to any actual or alleged intellectual property infringement. In
-order to qualify, an Indemnified Contributor must: a) promptly notify
-the Commercial Contributor in writing of such claim, and b) allow the
-Commercial Contributor to control, and cooperate with the Commercial
-Contributor in, the defense and any related settlement negotiations. The
-Indemnified Contributor may participate in any such claim at its own
-expense.</p>
-
-<p>For example, a Contributor might include the Program in a commercial
-product offering, Product X. That Contributor is then a Commercial
-Contributor. If that Commercial Contributor then makes performance
-claims, or offers warranties related to Product X, those performance
-claims and warranties are such Commercial Contributor's responsibility
-alone. Under this section, the Commercial Contributor would have to
-defend claims against the other Contributors related to those
-performance claims and warranties, and if a court requires any other
-Contributor to pay any damages as a result, the Commercial Contributor
-must pay those damages.</p>
-
-<p><b>5. NO WARRANTY</b></p>
-
-<p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS
-PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS
-OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION,
-ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY
-OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
-responsible for determining the appropriateness of using and
-distributing the Program and assumes all risks associated with its
-exercise of rights under this Agreement , including but not limited to
-the risks and costs of program errors, compliance with applicable laws,
-damage to or loss of data, programs or equipment, and unavailability or
-interruption of operations.</p>
-
-<p><b>6. DISCLAIMER OF LIABILITY</b></p>
-
-<p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT
-NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT,
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING
-WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF
-LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR
-DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED
-HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.</p>
-
-<p><b>7. GENERAL</b></p>
-
-<p>If any provision of this Agreement is invalid or unenforceable under
-applicable law, it shall not affect the validity or enforceability of
-the remainder of the terms of this Agreement, and without further action
-by the parties hereto, such provision shall be reformed to the minimum
-extent necessary to make such provision valid and enforceable.</p>
-
-<p>If Recipient institutes patent litigation against any entity
-(including a cross-claim or counterclaim in a lawsuit) alleging that the
-Program itself (excluding combinations of the Program with other
-software or hardware) infringes such Recipient's patent(s), then such
-Recipient's rights granted under Section 2(b) shall terminate as of the
-date such litigation is filed.</p>
-
-<p>All Recipient's rights under this Agreement shall terminate if it
-fails to comply with any of the material terms or conditions of this
-Agreement and does not cure such failure in a reasonable period of time
-after becoming aware of such noncompliance. If all Recipient's rights
-under this Agreement terminate, Recipient agrees to cease use and
-distribution of the Program as soon as reasonably practicable. However,
-Recipient's obligations under this Agreement and any licenses granted by
-Recipient relating to the Program shall continue and survive.</p>
-
-<p>Everyone is permitted to copy and distribute copies of this
-Agreement, but in order to avoid inconsistency the Agreement is
-copyrighted and may only be modified in the following manner. The
-Agreement Steward reserves the right to publish new versions (including
-revisions) of this Agreement from time to time. No one other than the
-Agreement Steward has the right to modify this Agreement. The Eclipse
-Foundation is the initial Agreement Steward. The Eclipse Foundation may
-assign the responsibility to serve as the Agreement Steward to a
-suitable separate entity. Each new version of the Agreement will be
-given a distinguishing version number. The Program (including
-Contributions) may always be distributed subject to the version of the
-Agreement under which it was received. In addition, after a new version
-of the Agreement is published, Contributor may elect to distribute the
-Program (including its Contributions) under the new version. Except as
-expressly stated in Sections 2(a) and 2(b) above, Recipient receives no
-rights or licenses to the intellectual property of any Contributor under
-this Agreement, whether expressly, by implication, estoppel or
-otherwise. All rights in the Program not expressly granted under this
-Agreement are reserved.</p>
-
-<p>This Agreement is governed by the laws of the State of New York and
-the intellectual property laws of the United States of America. No party
-to this Agreement will bring a legal action under this Agreement more
-than one year after the cause of action arose. Each party waives its
-rights to a jury trial in any resulting litigation.</p>
-
-</body>
-
-</html>
diff --git a/runtime/tesla/org.eclipse.rcptt.tesla.recording.aspects.ui.ide/pom.xml b/runtime/tesla/org.eclipse.rcptt.tesla.recording.aspects.ui.ide/pom.xml
deleted file mode 100644
index 5c1c5d5..0000000
--- a/runtime/tesla/org.eclipse.rcptt.tesla.recording.aspects.ui.ide/pom.xml
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <parent>
-    <artifactId>tesla</artifactId>
-    <groupId>org.eclipse.rcptt.tesla</groupId>
-    <version>1.5.2-SNAPSHOT</version>
-  </parent>
-  <groupId>org.eclipse.rcptt.tesla</groupId>
-  <artifactId>org.eclipse.rcptt.tesla.recording.aspects.ui.ide</artifactId>
-  <version>1.5.2-SNAPSHOT</version>
-  <packaging>eclipse-plugin</packaging>
-  <dependencies>
-    <dependency>
-      <groupId>org.aspectj</groupId>
-      <artifactId>aspectjrt</artifactId>
-      <version>${aspectj_dep}</version>
-    </dependency>
-  </dependencies>
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>${tycho-groupid}</groupId>
-        <artifactId>tycho-compiler-plugin</artifactId>
-        <version>${tycho-version}</version>
-        <configuration>
-          <excludeResources>
-            <exludeResource>**/*.aj</exludeResource>
-          </excludeResources>
-        </configuration>
-      </plugin>
-      <plugin>
-        <groupId>org.codehaus.mojo</groupId>
-        <artifactId>aspectj-maven-plugin</artifactId>
-        <version>${aspectj_version}</version>
-        <executions>
-          <execution>
-            <id>compile</id>
-            <configuration>
-              <source>1.5</source>
-              <target>1.5</target>
-              <aspectDirectory>src</aspectDirectory>
-              <Xlint>ignore</Xlint>
-              <Xreweavable>true</Xreweavable>
-              <deprecation>true</deprecation>
-              <!--ajdtBuildDefFile>build-1-5.ajproperties</ajdtBuildDefFile-->
-            </configuration>
-            <goals>
-              <goal>compile</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
-</project>
diff --git a/runtime/tesla/org.eclipse.rcptt.tesla.recording.aspects.ui.ide/src/org/eclipse/rcptt/tesla/recording/aspects/IUIIDEEventListener.java b/runtime/tesla/org.eclipse.rcptt.tesla.recording.aspects.ui.ide/src/org/eclipse/rcptt/tesla/recording/aspects/IUIIDEEventListener.java
deleted file mode 100644
index 53a4cd0..0000000
--- a/runtime/tesla/org.eclipse.rcptt.tesla.recording.aspects.ui.ide/src/org/eclipse/rcptt/tesla/recording/aspects/IUIIDEEventListener.java
+++ /dev/null
@@ -1,16 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2014 Xored Software Inc and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Xored Software Inc - initial API and implementation and/or initial documentation
- *******************************************************************************/
-package org.eclipse.rcptt.tesla.recording.aspects;
-
-
-public interface IUIIDEEventListener {
-	void restartEclipse();
-}
diff --git a/runtime/tesla/org.eclipse.rcptt.tesla.recording.aspects.ui.ide/src/org/eclipse/rcptt/tesla/recording/aspects/UIIDEEventManager.java b/runtime/tesla/org.eclipse.rcptt.tesla.recording.aspects.ui.ide/src/org/eclipse/rcptt/tesla/recording/aspects/UIIDEEventManager.java
deleted file mode 100644
index 36844c5..0000000
--- a/runtime/tesla/org.eclipse.rcptt.tesla.recording.aspects.ui.ide/src/org/eclipse/rcptt/tesla/recording/aspects/UIIDEEventManager.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2014 Xored Software Inc and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Xored Software Inc - initial API and implementation and/or initial documentation
- *******************************************************************************/
-package org.eclipse.rcptt.tesla.recording.aspects;
-
-import java.util.HashSet;
-import java.util.Set;
-
-public final class UIIDEEventManager {
-
-	private static Set<IUIIDEEventListener> listeners = new HashSet<IUIIDEEventListener>();
-
-	private static boolean freezeState;
-
-	private UIIDEEventManager() {
-	}
-
-	public static void addListener(IUIIDEEventListener listener) {
-		listeners.add(listener);
-	}
-
-	public static void removeListener(IUIIDEEventListener listener) {
-		listeners.remove(listener);
-	}
-
-	public static boolean getFreeze() {
-		return freezeState;
-	}
-
-	public static void setFreeze(boolean value) {
-		freezeState = value;
-	}
-
-	public static void restartEclipse() {
-		for (IUIIDEEventListener listener : listeners) {
-			listener.restartEclipse();
-		}
-	}
-}
diff --git a/runtime/tesla/org.eclipse.rcptt.tesla.recording.aspects.ui.ide/src/org/eclipse/rcptt/tesla/recording/aspects/UIIDERecordingAspect.aj b/runtime/tesla/org.eclipse.rcptt.tesla.recording.aspects.ui.ide/src/org/eclipse/rcptt/tesla/recording/aspects/UIIDERecordingAspect.aj
deleted file mode 100644
index 8a2e256..0000000
--- a/runtime/tesla/org.eclipse.rcptt.tesla.recording.aspects.ui.ide/src/org/eclipse/rcptt/tesla/recording/aspects/UIIDERecordingAspect.aj
+++ /dev/null
@@ -1,20 +0,0 @@
-package org.eclipse.rcptt.tesla.recording.aspects;
-
-import org.aspectj.lang.annotation.SuppressAjWarnings;
-
-import org.eclipse.rcptt.tesla.core.am.AspectManager;
-
-
-public privileged aspect UIIDERecordingAspect {
-
-	public UIIDERecordingAspect() {
-		AspectManager.activateAspect(UIIDEWorkbenchActivator.PLUGIN_ID, this
-				.getClass().getName());
-	}
-
-	@SuppressAjWarnings("adviceDidNotMatch")
-	before(String location):
-		execution(void org.eclipse.ui.internal.ide.actions.OpenWorkspaceAction.restart(String)) && args(location) {
-		UIIDEEventManager.restartEclipse();
-	}
-}
diff --git a/runtime/tesla/org.eclipse.rcptt.tesla.recording.aspects.ui.ide/src/org/eclipse/rcptt/tesla/recording/aspects/UIIDEWorkbenchActivator.java b/runtime/tesla/org.eclipse.rcptt.tesla.recording.aspects.ui.ide/src/org/eclipse/rcptt/tesla/recording/aspects/UIIDEWorkbenchActivator.java
deleted file mode 100644
index 87ea935..0000000
--- a/runtime/tesla/org.eclipse.rcptt.tesla.recording.aspects.ui.ide/src/org/eclipse/rcptt/tesla/recording/aspects/UIIDEWorkbenchActivator.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2014 Xored Software Inc and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Xored Software Inc - initial API and implementation and/or initial documentation
- *******************************************************************************/
-package org.eclipse.rcptt.tesla.recording.aspects;
-
-import org.eclipse.core.runtime.Plugin;
-import org.eclipse.core.runtime.Status;
-import org.osgi.framework.BundleContext;
-
-import org.eclipse.rcptt.tesla.core.am.AspectManager;
-
-/**
- * The activator class controls the plug-in life cycle
- */
-public class UIIDEWorkbenchActivator extends Plugin {
-
-	// The plug-in ID
-	public static final String PLUGIN_ID = "org.eclipse.rcptt.tesla.recording.aspects.ui.ide";
-
-	// The shared instance
-	private static UIIDEWorkbenchActivator plugin;
-
-	/**
-	 * The constructor
-	 */
-	public UIIDEWorkbenchActivator() {
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see
-	 * org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext
-	 * )
-	 */
-	public void start(BundleContext context) throws Exception {
-		super.start(context);
-		plugin = this;
-		AspectManager.activateBundle(PLUGIN_ID);
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see
-	 * org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext
-	 * )
-	 */
-	public void stop(BundleContext context) throws Exception {
-		plugin = null;
-		super.stop(context);
-	}
-
-	/**
-	 * Returns the shared instance
-	 * 
-	 * @return the shared instance
-	 */
-	public static UIIDEWorkbenchActivator getDefault() {
-		return plugin;
-	}
-
-	public static void log(Throwable t) {
-		getDefault().getLog().log(
-				new Status(Status.ERROR, PLUGIN_ID,
-						"Tesla Recording SWT ERROR", t));
-	}
-
-}
diff --git a/runtime/tesla/org.eclipse.rcptt.tesla.recording.swt/META-INF/MANIFEST.MF b/runtime/tesla/org.eclipse.rcptt.tesla.recording.swt/META-INF/MANIFEST.MF
index 84c8667..2f0b09b 100644
--- a/runtime/tesla/org.eclipse.rcptt.tesla.recording.swt/META-INF/MANIFEST.MF
+++ b/runtime/tesla/org.eclipse.rcptt.tesla.recording.swt/META-INF/MANIFEST.MF
@@ -22,7 +22,6 @@
  org.eclipse.rcptt.logging;bundle-version="1.1.0",
  org.eclipse.rcptt.util.swt;bundle-version="1.0.0",
  org.eclipse.rcptt.tesla.ecl,
- org.eclipse.rcptt.tesla.recording.aspects.ui.ide;bundle-version="1.1.0";resolution:=optional,
  org.eclipse.rcptt.util;bundle-version="1.0.0"
 Bundle-RequiredExecutionEnvironment: JavaSE-1.6
 Bundle-ActivationPolicy: lazy
diff --git a/runtime/tesla/org.eclipse.rcptt.tesla.recording.swt/plugin.xml b/runtime/tesla/org.eclipse.rcptt.tesla.recording.swt/plugin.xml
index 03be923..f9c0e6d 100644
--- a/runtime/tesla/org.eclipse.rcptt.tesla.recording.swt/plugin.xml
+++ b/runtime/tesla/org.eclipse.rcptt.tesla.recording.swt/plugin.xml
@@ -19,9 +19,6 @@
       <recorder
             class="org.eclipse.rcptt.tesla.recording.core.swt.JFaceRecordingProcessor">
       </recorder>
-      <recorder
-            class="org.eclipse.rcptt.tesla.recording.core.swt.UIIDERecordingProcessor">
-      </recorder>
    </extension>
    <extension
          point="org.eclipse.rcptt.tesla.recording.swt.describerExtensions">
diff --git a/runtime/tesla/org.eclipse.rcptt.tesla.recording.swt/src/org/eclipse/rcptt/tesla/recording/core/swt/DNDSupport.java b/runtime/tesla/org.eclipse.rcptt.tesla.recording.swt/src/org/eclipse/rcptt/tesla/recording/core/swt/DNDSupport.java
index f9572b8..b597754 100644
--- a/runtime/tesla/org.eclipse.rcptt.tesla.recording.swt/src/org/eclipse/rcptt/tesla/recording/core/swt/DNDSupport.java
+++ b/runtime/tesla/org.eclipse.rcptt.tesla.recording.swt/src/org/eclipse/rcptt/tesla/recording/core/swt/DNDSupport.java
@@ -10,6 +10,12 @@
  *******************************************************************************/
 package org.eclipse.rcptt.tesla.recording.core.swt;
 
+import org.eclipse.rcptt.tesla.core.protocol.ControlUIElement;
+import org.eclipse.rcptt.tesla.core.protocol.DragKind;
+import org.eclipse.rcptt.tesla.core.protocol.raw.Element;
+import org.eclipse.rcptt.tesla.internal.core.TeslaCore;
+import org.eclipse.rcptt.tesla.internal.ui.player.FindResult;
+import org.eclipse.rcptt.tesla.recording.core.TeslaRecorder;
 import org.eclipse.swt.dnd.DND;
 import org.eclipse.swt.dnd.DragSource;
 import org.eclipse.swt.dnd.DropTarget;
@@ -19,13 +25,6 @@
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.swt.widgets.Widget;
 
-import org.eclipse.rcptt.tesla.core.protocol.ControlUIElement;
-import org.eclipse.rcptt.tesla.core.protocol.DragKind;
-import org.eclipse.rcptt.tesla.core.protocol.raw.Element;
-import org.eclipse.rcptt.tesla.internal.core.TeslaCore;
-import org.eclipse.rcptt.tesla.internal.ui.player.FindResult;
-import org.eclipse.rcptt.tesla.recording.core.TeslaRecorder;
-
 public class DNDSupport {
 	private TeslaRecorder recorder;
 
@@ -34,9 +33,15 @@
 	public DNDSupport() {
 	}
 
+	public void setRecorder(TeslaRecorder recorder) {
+		this.recorder = recorder;
+	}
+
 	public void processUniversalDND(Event event) {
-		if (recorder == null)
-			recorder = TeslaRecorder.getInstance();
+		if (recorder == null) {
+			return;
+		}
+
 		SWTWidgetLocator locator = SWTRecordingHelper.getHelper().getLocator();
 
 		String style = "";
@@ -66,8 +71,8 @@
 		} else if (event.widget instanceof DropTarget) {
 			DropTarget target = (DropTarget) event.widget;
 			Control widget = target.getControl();
-			
-			if( widget instanceof Shell) {
+
+			if (widget instanceof Shell) {
 				return;
 			}
 
@@ -102,7 +107,7 @@
 
 	public void processDND(Event event) {
 		if (recorder == null) {
-			recorder = TeslaRecorder.getInstance();
+			return;
 		}
 		Control realWidget = null;
 		if (event.widget instanceof DropTarget) {
diff --git a/runtime/tesla/org.eclipse.rcptt.tesla.recording.swt/src/org/eclipse/rcptt/tesla/recording/core/swt/SWTEventRecorder.java b/runtime/tesla/org.eclipse.rcptt.tesla.recording.swt/src/org/eclipse/rcptt/tesla/recording/core/swt/SWTEventRecorder.java
index c0fc002..bec6b61 100644
--- a/runtime/tesla/org.eclipse.rcptt.tesla.recording.swt/src/org/eclipse/rcptt/tesla/recording/core/swt/SWTEventRecorder.java
+++ b/runtime/tesla/org.eclipse.rcptt.tesla.recording.swt/src/org/eclipse/rcptt/tesla/recording/core/swt/SWTEventRecorder.java
@@ -36,6 +36,55 @@
 import org.eclipse.jface.viewers.Viewer;
 import org.eclipse.jface.viewers.ViewerCell;
 import org.eclipse.jface.wizard.WizardDialog;
+import org.eclipse.rcptt.tesla.core.am.RecordingModeFeature;
+import org.eclipse.rcptt.tesla.core.context.ContextManagement;
+import org.eclipse.rcptt.tesla.core.context.ContextManagement.Context;
+import org.eclipse.rcptt.tesla.core.protocol.Click;
+import org.eclipse.rcptt.tesla.core.protocol.CompositeUIElement;
+import org.eclipse.rcptt.tesla.core.protocol.ControlUIElement;
+import org.eclipse.rcptt.tesla.core.protocol.ElementKind;
+import org.eclipse.rcptt.tesla.core.protocol.LinkUIElement;
+import org.eclipse.rcptt.tesla.core.protocol.MouseEvent;
+import org.eclipse.rcptt.tesla.core.protocol.MouseEventKind;
+import org.eclipse.rcptt.tesla.core.protocol.PartUIElement;
+import org.eclipse.rcptt.tesla.core.protocol.ProtocolFactory;
+import org.eclipse.rcptt.tesla.core.protocol.SWTDialogKind;
+import org.eclipse.rcptt.tesla.core.protocol.SelectCommand;
+import org.eclipse.rcptt.tesla.core.protocol.SelectData;
+import org.eclipse.rcptt.tesla.core.protocol.SetSWTDialogInfo;
+import org.eclipse.rcptt.tesla.core.protocol.SetSelection;
+import org.eclipse.rcptt.tesla.core.protocol.SetTextOffset;
+import org.eclipse.rcptt.tesla.core.protocol.SetTextSelection;
+import org.eclipse.rcptt.tesla.core.protocol.TextUIElement;
+import org.eclipse.rcptt.tesla.core.protocol.Type;
+import org.eclipse.rcptt.tesla.core.protocol.ViewerUIElement;
+import org.eclipse.rcptt.tesla.core.protocol.raw.Command;
+import org.eclipse.rcptt.tesla.core.protocol.raw.RawEvent;
+import org.eclipse.rcptt.tesla.core.protocol.raw.RawFactory;
+import org.eclipse.rcptt.tesla.core.protocol.raw.SetMode;
+import org.eclipse.rcptt.tesla.core.utils.TeslaUtils;
+import org.eclipse.rcptt.tesla.internal.core.TeslaCore;
+import org.eclipse.rcptt.tesla.internal.ui.player.FindResult;
+import org.eclipse.rcptt.tesla.internal.ui.player.ISWTModelMapperExtension;
+import org.eclipse.rcptt.tesla.internal.ui.player.PlayerTextUtils;
+import org.eclipse.rcptt.tesla.internal.ui.player.SWTModelMapper;
+import org.eclipse.rcptt.tesla.internal.ui.player.SWTUIElement;
+import org.eclipse.rcptt.tesla.internal.ui.player.SWTUIPlayer;
+import org.eclipse.rcptt.tesla.internal.ui.player.TeslaSWTAccess;
+import org.eclipse.rcptt.tesla.internal.ui.player.viewers.Viewers;
+import org.eclipse.rcptt.tesla.recording.aspects.IExtendedSWTEventListener;
+import org.eclipse.rcptt.tesla.recording.aspects.SWTEventManager;
+import org.eclipse.rcptt.tesla.recording.core.IRecordingHelper;
+import org.eclipse.rcptt.tesla.recording.core.IRecordingModeListener;
+import org.eclipse.rcptt.tesla.recording.core.IRecordingProcessor;
+import org.eclipse.rcptt.tesla.recording.core.IRecordingProcessorExtension;
+import org.eclipse.rcptt.tesla.recording.core.TeslaRecorder;
+import org.eclipse.rcptt.tesla.recording.core.swt.peg.CommandPostProcessor;
+import org.eclipse.rcptt.tesla.recording.core.swt.util.LastEvents;
+import org.eclipse.rcptt.tesla.recording.core.swt.util.RecordedEvent;
+import org.eclipse.rcptt.tesla.swt.workbench.EclipseWorkbenchProvider;
+import org.eclipse.rcptt.util.swt.StringLines;
+import org.eclipse.rcptt.util.swt.TableTreeUtil;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.browser.Browser;
 import org.eclipse.swt.custom.CCombo;
@@ -97,56 +146,6 @@
 import org.eclipse.ui.keys.IBindingService;
 import org.osgi.framework.Bundle;
 
-import org.eclipse.rcptt.util.swt.StringLines;
-import org.eclipse.rcptt.util.swt.TableTreeUtil;
-import org.eclipse.rcptt.tesla.core.am.RecordingModeFeature;
-import org.eclipse.rcptt.tesla.core.context.ContextManagement;
-import org.eclipse.rcptt.tesla.core.context.ContextManagement.Context;
-import org.eclipse.rcptt.tesla.core.protocol.Click;
-import org.eclipse.rcptt.tesla.core.protocol.CompositeUIElement;
-import org.eclipse.rcptt.tesla.core.protocol.ControlUIElement;
-import org.eclipse.rcptt.tesla.core.protocol.ElementKind;
-import org.eclipse.rcptt.tesla.core.protocol.LinkUIElement;
-import org.eclipse.rcptt.tesla.core.protocol.MouseEvent;
-import org.eclipse.rcptt.tesla.core.protocol.MouseEventKind;
-import org.eclipse.rcptt.tesla.core.protocol.PartUIElement;
-import org.eclipse.rcptt.tesla.core.protocol.ProtocolFactory;
-import org.eclipse.rcptt.tesla.core.protocol.SWTDialogKind;
-import org.eclipse.rcptt.tesla.core.protocol.SelectCommand;
-import org.eclipse.rcptt.tesla.core.protocol.SelectData;
-import org.eclipse.rcptt.tesla.core.protocol.SetSWTDialogInfo;
-import org.eclipse.rcptt.tesla.core.protocol.SetSelection;
-import org.eclipse.rcptt.tesla.core.protocol.SetTextOffset;
-import org.eclipse.rcptt.tesla.core.protocol.SetTextSelection;
-import org.eclipse.rcptt.tesla.core.protocol.TextUIElement;
-import org.eclipse.rcptt.tesla.core.protocol.Type;
-import org.eclipse.rcptt.tesla.core.protocol.ViewerUIElement;
-import org.eclipse.rcptt.tesla.core.protocol.raw.Command;
-import org.eclipse.rcptt.tesla.core.protocol.raw.RawEvent;
-import org.eclipse.rcptt.tesla.core.protocol.raw.RawFactory;
-import org.eclipse.rcptt.tesla.core.protocol.raw.SetMode;
-import org.eclipse.rcptt.tesla.core.utils.TeslaUtils;
-import org.eclipse.rcptt.tesla.internal.core.TeslaCore;
-import org.eclipse.rcptt.tesla.internal.ui.player.FindResult;
-import org.eclipse.rcptt.tesla.internal.ui.player.ISWTModelMapperExtension;
-import org.eclipse.rcptt.tesla.internal.ui.player.PlayerTextUtils;
-import org.eclipse.rcptt.tesla.internal.ui.player.SWTModelMapper;
-import org.eclipse.rcptt.tesla.internal.ui.player.SWTUIElement;
-import org.eclipse.rcptt.tesla.internal.ui.player.SWTUIPlayer;
-import org.eclipse.rcptt.tesla.internal.ui.player.TeslaSWTAccess;
-import org.eclipse.rcptt.tesla.internal.ui.player.viewers.Viewers;
-import org.eclipse.rcptt.tesla.recording.aspects.IExtendedSWTEventListener;
-import org.eclipse.rcptt.tesla.recording.aspects.SWTEventManager;
-import org.eclipse.rcptt.tesla.recording.core.IRecordingHelper;
-import org.eclipse.rcptt.tesla.recording.core.IRecordingModeListener;
-import org.eclipse.rcptt.tesla.recording.core.IRecordingProcessor;
-import org.eclipse.rcptt.tesla.recording.core.IRecordingProcessorExtension;
-import org.eclipse.rcptt.tesla.recording.core.TeslaRecorder;
-import org.eclipse.rcptt.tesla.recording.core.swt.peg.CommandPostProcessor;
-import org.eclipse.rcptt.tesla.recording.core.swt.util.LastEvents;
-import org.eclipse.rcptt.tesla.recording.core.swt.util.RecordedEvent;
-import org.eclipse.rcptt.tesla.swt.workbench.EclipseWorkbenchProvider;
-
 /**
  * Simple event collector Each used widget will be added as variable.
  * 
@@ -288,7 +287,7 @@
 	}
 
 	public TeslaRecorder getRecorder() {
-		return TeslaRecorder.getInstance();
+		return recorder;
 	}
 
 	public SWTEventRecorder() {
@@ -1551,7 +1550,7 @@
 						|| !beforeTextState.equals(currentText)) {
 					if (widget != JFaceRecordingProcessor.lastCellEditorControl) {
 						if (!(widget instanceof Combo)) {
-							e.setText(currentText, false, (widget.getStyle() & SWT.PASSWORD ) != 0);
+							e.setText(currentText, false, isPasswordField(widget));
 						} else {
 							processComboSelection(e,
 									((Combo) widget).getItems(), currentText);
@@ -1582,6 +1581,15 @@
 		}
 	}
 
+	private static boolean isPasswordField(Widget widget) {
+		if ((widget.getStyle() & SWT.PASSWORD) != 0)
+			return true;
+		if (widget instanceof Text) {
+			return ((Text) widget).getEchoChar() != '\0';
+		}
+		return false;
+	}
+
 	private void processMenuShow(Widget widget, RecordedEvent toRecording) {
 		Object menuSource = null;
 
@@ -1760,19 +1768,17 @@
 
 		// detecting assert/record mode shortcuts
 		if (event.detail == SWT.TRAVERSE_MNEMONIC) {
-			String[] assertShortcuts = TeslaRecorder.getInstance()
-					.getAssertModeShortcuts();
-			String[] recordShortcuts = TeslaRecorder.getInstance()
-					.getRecordModeShortcuts();
-			String[] startRecordShortcuts = TeslaRecorder.getInstance()
-					.getStartRecordShortcuts();
-			String[] stopRecordShortcuts = TeslaRecorder.getInstance()
-					.getStopRecordShortcuts();
-			String[] replayShortcuts = TeslaRecorder.getInstance()
-					.getReplayShortcuts();
+			TeslaRecorder recorder = getRecorder();
+			if (recorder == null) {
+				return;
+			}
+			String[] assertShortcuts = recorder.getAssertModeShortcuts();
+			String[] recordShortcuts = recorder.getRecordModeShortcuts();
+			String[] startRecordShortcuts = recorder.getStartRecordShortcuts();
+			String[] stopRecordShortcuts = recorder.getStopRecordShortcuts();
+			String[] replayShortcuts = recorder.getReplayShortcuts();
 
-			SWTAssertManager assertManager = TeslaRecorder.getInstance()
-					.getProcessor(SWTAssertManager.class);
+			SWTAssertManager assertManager = recorder.getProcessor(SWTAssertManager.class);
 
 			if (assertManager != null) {
 				boolean assertRequest = assertManager.isShortcutRequest(event,
@@ -2593,7 +2599,7 @@
 				int offsetAtLine = text.getOffsetAtLine(lineAtOffset);
 				if (!(last instanceof SetTextSelection && EcoreUtil.equals(
 						((SetTextSelection) last).getElement(),
-								element.element))) {
+						element.element))) {
 					// Ignore after setSelection
 					textCtrl.setTextOffset(lineAtOffset, offset
 							- offsetAtLine);
@@ -2611,7 +2617,11 @@
 		inStyledTextAction = true;
 	}
 
+	private TeslaRecorder recorder = null;
+
 	public void initialize(final TeslaRecorder teslaRecorder) {
+		this.recorder = teslaRecorder;
+		this.dragSupport.setRecorder(teslaRecorder);
 		// getLocator();// .initialize(teslaRecorder);
 		teslaRecorder.addListener(this);
 		final CommandPostProcessor pp = new CommandPostProcessor(teslaRecorder);
diff --git a/runtime/tesla/org.eclipse.rcptt.tesla.recording.swt/src/org/eclipse/rcptt/tesla/recording/core/swt/UIIDERecordingProcessor.java b/runtime/tesla/org.eclipse.rcptt.tesla.recording.swt/src/org/eclipse/rcptt/tesla/recording/core/swt/UIIDERecordingProcessor.java
deleted file mode 100644
index 1336ecf..0000000
--- a/runtime/tesla/org.eclipse.rcptt.tesla.recording.swt/src/org/eclipse/rcptt/tesla/recording/core/swt/UIIDERecordingProcessor.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2014 Xored Software Inc and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Xored Software Inc - initial API and implementation and/or initial documentation
- *******************************************************************************/
-package org.eclipse.rcptt.tesla.recording.core.swt;
-
-import org.eclipse.rcptt.tesla.core.protocol.raw.SetMode;
-import org.eclipse.rcptt.tesla.recording.aspects.IUIIDEEventListener;
-import org.eclipse.rcptt.tesla.recording.aspects.UIIDEEventManager;
-import org.eclipse.rcptt.tesla.recording.core.IRecordingHelper;
-import org.eclipse.rcptt.tesla.recording.core.IRecordingProcessor;
-import org.eclipse.rcptt.tesla.recording.core.TeslaRecorder;
-
-public class UIIDERecordingProcessor implements IRecordingProcessor,
-		IUIIDEEventListener {
-	private TeslaRecorder recorder;
-
-	public UIIDERecordingProcessor() {
-		UIIDEEventManager.addListener(this);
-	}
-
-	@SuppressWarnings("unused")
-	private SWTEventRecorder getSWTProcessor() {
-		return recorder.getProcessor(SWTEventRecorder.class);
-	}
-
-	public void restartEclipse() {
-		// WaitForRestart command is created by
-		// WorkbenchRecordingProcessor.restartEclipse()
-		// it must not be added here
-
-		// getSWTProcessor().getRecorder().safeExecuteCommand(
-		// ProtocolFactory.eINSTANCE.createWaitForRestart());
-	}
-
-	public void initialize(TeslaRecorder teslaRecorder) {
-		this.recorder = teslaRecorder;
-	}
-
-	public int getInitLevel() {
-		return 1000;
-	};
-
-	public void clear() {
-
-	}
-
-	public void setFreeze(boolean value, SetMode command) {
-	}
-
-	public void resetAssertSelection() {
-	}
-
-	public IRecordingHelper<?> getHelper() {
-		return null;
-	}
-}
diff --git a/runtime/tesla/org.eclipse.rcptt.tesla.runtime-feature/feature.xml b/runtime/tesla/org.eclipse.rcptt.tesla.runtime-feature/feature.xml
index a816bc5..921419d 100644
--- a/runtime/tesla/org.eclipse.rcptt.tesla.runtime-feature/feature.xml
+++ b/runtime/tesla/org.eclipse.rcptt.tesla.runtime-feature/feature.xml
@@ -306,13 +306,6 @@
          unpack="false"/>
 
    <plugin
-         id="org.eclipse.rcptt.tesla.recording.aspects.ui.ide"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
          id="org.eclipse.rcptt.tesla.variables"
          download-size="0"
          install-size="0"
diff --git a/runtime/tesla/org.eclipse.rcptt.tesla.runtime.e4x-feature/feature.xml b/runtime/tesla/org.eclipse.rcptt.tesla.runtime.e4x-feature/feature.xml
index 52dcf9c..ed5f23c 100644
--- a/runtime/tesla/org.eclipse.rcptt.tesla.runtime.e4x-feature/feature.xml
+++ b/runtime/tesla/org.eclipse.rcptt.tesla.runtime.e4x-feature/feature.xml
@@ -306,13 +306,6 @@
          unpack="false"/>
 
    <plugin
-         id="org.eclipse.rcptt.tesla.recording.aspects.ui.ide"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
          id="org.eclipse.rcptt.tesla.variables"
          download-size="0"
          install-size="0"
diff --git a/runtime/tesla/org.eclipse.rcptt.tesla.swt.aspects/src/org/eclipse/rcptt/tesla/swt/events/TeslaEventManager.java b/runtime/tesla/org.eclipse.rcptt.tesla.swt.aspects/src/org/eclipse/rcptt/tesla/swt/events/TeslaEventManager.java
index 94e3f7e..5eb7834 100644
--- a/runtime/tesla/org.eclipse.rcptt.tesla.swt.aspects/src/org/eclipse/rcptt/tesla/swt/events/TeslaEventManager.java
+++ b/runtime/tesla/org.eclipse.rcptt.tesla.swt.aspects/src/org/eclipse/rcptt/tesla/swt/events/TeslaEventManager.java
@@ -245,16 +245,6 @@
 	}
 
 	public static void updateActiveShell() {
-		if (Platform.getOS().equals(Platform.OS_LINUX) && activeShell != null
-				&& !activeShell.isDisposed()) {
-			try {
-				Field field = Display.class.getDeclaredField("activeShell");
-				field.setAccessible(true);
-				field.set(activeShell.getDisplay(), activeShell);
-			} catch (Throwable e) {
-				SWTAspectActivator.log(e);
-			}
-		}
 	}
 
 	public static Shell getActiveShell() {
diff --git a/runtime/tesla/org.eclipse.rcptt.tesla.swt/src/org/eclipse/rcptt/tesla/internal/ui/player/UIJobCollector.java b/runtime/tesla/org.eclipse.rcptt.tesla.swt/src/org/eclipse/rcptt/tesla/internal/ui/player/UIJobCollector.java
index 109cd9e..3b5bab4 100644
--- a/runtime/tesla/org.eclipse.rcptt.tesla.swt/src/org/eclipse/rcptt/tesla/internal/ui/player/UIJobCollector.java
+++ b/runtime/tesla/org.eclipse.rcptt.tesla.swt/src/org/eclipse/rcptt/tesla/internal/ui/player/UIJobCollector.java
@@ -16,6 +16,7 @@
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashSet;
+import java.util.IdentityHashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -42,7 +43,6 @@
 import org.eclipse.rcptt.tesla.ui.IJobCollector;
 import org.eclipse.rcptt.tesla.ui.IJobCollector.JobStatus;
 import org.eclipse.rcptt.tesla.ui.SWTTeslaActivator;
-import org.eclipse.rcptt.util.WeakIdentityHashMap;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.ui.PlatformUI;
@@ -132,7 +132,8 @@
 		
 		
     }
-    private final Map<Job, JobInfo> jobs = Collections.synchronizedMap(new WeakIdentityHashMap<Job, JobInfo>());
+
+	private final Map<Job, JobInfo> jobs = Collections.synchronizedMap(new IdentityHashMap<Job, JobInfo>());
 	private boolean state;
 	private boolean needDisable = false;
 	private long stepModeNext = 0;
@@ -166,13 +167,16 @@
 	}
 
 	public void done(IJobChangeEvent event) {
+		JobsManager.getInstance().removeCanceled(event.getJob());
 		synchronized (jobs) {
-			getOrCreateJobInfo(event.getJob()).done(TeslaSWTAccess.getJobEventReSchedule(event) && state);
+			boolean reschedule = TeslaSWTAccess.getJobEventReSchedule(event) && state;
+			getOrCreateJobInfo(event.getJob()).done(reschedule);
 			if (needDisable && isJoinEmpty()) {
 				disable();
 			}
+			if (!reschedule)
+				jobs.remove(event.getJob());
 		}
-		JobsManager.getInstance().removeCanceled(event.getJob());
 	}
 
 	public void running(IJobChangeEvent event) {
@@ -486,7 +490,7 @@
 										if (!jobInfo.jobInStepMode) {
 											// Print step information
 											SWTTeslaActivator
-													.log("---->>> Begin step mode for Job: "
+													.logToReport("---->>> Begin step mode for Job: "
 															+ getCurrentReportNodeName()
 															+ " <<---\n(skipping)"
 															+ getJobMessage(jobInfo));
diff --git a/runtime/tesla/pom.xml b/runtime/tesla/pom.xml
index 5ab815c..93cdcd2 100644
--- a/runtime/tesla/pom.xml
+++ b/runtime/tesla/pom.xml
@@ -36,7 +36,6 @@
     <module>org.eclipse.rcptt.tesla.recording.aspects.jface.text</module>
     <module>org.eclipse.rcptt.tesla.recording.aspects.swt</module>
     <module>org.eclipse.rcptt.tesla.recording.aspects.workbench</module>
-    <module>org.eclipse.rcptt.tesla.recording.aspects.ui.ide</module>
     <module>org.eclipse.rcptt.tesla.recording.aspects.workbench.texteditor</module>
     <module>org.eclipse.rcptt.tesla.recording.draw2d</module>
     <module>org.eclipse.rcptt.tesla.recording.gef</module>
