diff --git a/execution/org.eclipse.efm.execution.configuration.common.ui/src/org/eclipse/efm/execution/configuration/common/ui/api/AbstractConfigurationPage.java b/execution/org.eclipse.efm.execution.configuration.common.ui/src/org/eclipse/efm/execution/configuration/common/ui/api/AbstractConfigurationPage.java
index a45c87f..33a912d 100644
--- a/execution/org.eclipse.efm.execution.configuration.common.ui/src/org/eclipse/efm/execution/configuration/common/ui/api/AbstractConfigurationPage.java
+++ b/execution/org.eclipse.efm.execution.configuration.common.ui/src/org/eclipse/efm/execution/configuration/common/ui/api/AbstractConfigurationPage.java
@@ -28,7 +28,6 @@
 import org.eclipse.jface.action.Action;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
 
 public abstract class AbstractConfigurationPage
 		implements IWorkflowConfigurationConstants, IWorkflowPreferenceConstants {
@@ -113,7 +112,20 @@
 		return fControl;
 	}
 
+	
+	///////////////////////////////////////////////////////////////////////////
+	// Model Analysis Profile changed
+	//
+	public void handleModelAnalysisProfileSelectionChanged(String analysisProfile) {
+		//!! Nothing 
+	}
 
+	
+	public AbstractConfigurationPage[] getConfigurationPages() {
+		return masterGUIelement.getConfigurationPages();
+	}
+
+	
 	// ======================================================================================
 	//                              Fields Validation
 	// ======================================================================================
@@ -176,17 +188,12 @@
 		masterGUIelement.updateGUI();
 	}
 
-	public void propagateVisibility(Control aControl, boolean visible) {
-		aControl.setVisible(visible);
+	public void setVisibleAndEnabled(Composite aComposite, boolean visible) {
+		getWidgetToolkit().setVisibleAndEnabled(aComposite, visible);
+	}
 
-		Object gd = aControl.getLayoutData();
-		if (gd instanceof GridData) {
-			GridData data = (GridData) gd;
-			data.exclude = (! visible);
-			aControl.getShell().layout(false);
-		} else {
-			//
-		}
+	public void propagateVisibility(Composite aComposite, boolean visible) {
+		getWidgetToolkit().propagateVisibility(aComposite, visible);
 	}
 
 	public void propagateUpdateJobScheduling() {
diff --git a/execution/org.eclipse.efm.execution.configuration.common.ui/src/org/eclipse/efm/execution/configuration/common/ui/api/AbstractConfigurationSection.java b/execution/org.eclipse.efm.execution.configuration.common.ui/src/org/eclipse/efm/execution/configuration/common/ui/api/AbstractConfigurationSection.java
index 1c7ab7c..3dd07fd 100644
--- a/execution/org.eclipse.efm.execution.configuration.common.ui/src/org/eclipse/efm/execution/configuration/common/ui/api/AbstractConfigurationSection.java
+++ b/execution/org.eclipse.efm.execution.configuration.common.ui/src/org/eclipse/efm/execution/configuration/common/ui/api/AbstractConfigurationSection.java
@@ -16,7 +16,6 @@
 import org.eclipse.efm.execution.configuration.common.ui.editors.FieldEditor;
 import org.eclipse.efm.execution.core.IWorkflowConfigurationConstants;
 import org.eclipse.jface.action.IToolBarManager;
-import org.eclipse.jface.action.ToolBarManager;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.ui.forms.widgets.Section;
 
@@ -25,26 +24,27 @@
 
 	protected AbstractConfigurationPage fConfigurationPage;
 
-	public AbstractConfigurationSection(AbstractConfigurationPage configurationPage,
-			Composite parent, ToolBarManager toolBarManager)
+	public AbstractConfigurationSection(AbstractConfigurationPage configurationPage)
 	{
 		this.fConfigurationPage = configurationPage;
-
-		this.initialize(parent, toolBarManager);
 	}
 
 	public AbstractConfigurationPage getConfigurationPage() {
 		return fConfigurationPage;
 	}
 
-	public void initialize(Composite parent, IToolBarManager toolBarManager) {
-		IWidgetToolkit toolkit = fConfigurationPage.getWidgetToolkit();
-		
-		toolkit.createSectionPart(this, parent,
+	public AbstractConfigurationPage[] getConfigurationPages() {
+		return fConfigurationPage.getConfigurationPages();
+	}
+
+	public void createControl(Composite parent,
+			IToolBarManager toolBarManager, IWidgetToolkit widgetToolkit)
+	{
+		widgetToolkit.createSectionPart(this, parent,
 				Section.TITLE_BAR | Section.DESCRIPTION |
 				Section.EXPANDED  | Section.TWISTIE, toolBarManager);
 		
-		createContent(getSectionClient(), fConfigurationPage.getWidgetToolkit());
+		createContent(getSectionClient(), widgetToolkit);
 	}
 
 
diff --git a/execution/org.eclipse.efm.execution.configuration.common.ui/src/org/eclipse/efm/execution/configuration/common/ui/api/ILaunchConfigurationGUIelement.java b/execution/org.eclipse.efm.execution.configuration.common.ui/src/org/eclipse/efm/execution/configuration/common/ui/api/ILaunchConfigurationGUIelement.java
index cd58ec3..ff0db23 100644
--- a/execution/org.eclipse.efm.execution.configuration.common.ui/src/org/eclipse/efm/execution/configuration/common/ui/api/ILaunchConfigurationGUIelement.java
+++ b/execution/org.eclipse.efm.execution.configuration.common.ui/src/org/eclipse/efm/execution/configuration/common/ui/api/ILaunchConfigurationGUIelement.java
@@ -11,19 +11,15 @@
 
 package org.eclipse.efm.execution.configuration.common.ui.api;
 
-import org.eclipse.ui.forms.widgets.FormToolkit;
-
-
-
 public interface ILaunchConfigurationGUIelement {
 
 	///////////////////////////////////////////////////////////////////////////
-	// Form / Widget Toolkit
+	// Widget Toolkit
 	///////////////////////////////////////////////////////////////////////////
 
-	public FormToolkit getFormToolkit();
-
 	public IWidgetToolkit getWidgetToolkit();
+	
+	public AbstractConfigurationPage[] getConfigurationPages();
 
 
 	///////////////////////////////////////////////////////////////////////////
diff --git a/execution/org.eclipse.efm.execution.configuration.common.ui/src/org/eclipse/efm/execution/configuration/common/ui/api/IWidgetToolkit.java b/execution/org.eclipse.efm.execution.configuration.common.ui/src/org/eclipse/efm/execution/configuration/common/ui/api/IWidgetToolkit.java
index 31f8382..d21bfb1 100644
--- a/execution/org.eclipse.efm.execution.configuration.common.ui/src/org/eclipse/efm/execution/configuration/common/ui/api/IWidgetToolkit.java
+++ b/execution/org.eclipse.efm.execution.configuration.common.ui/src/org/eclipse/efm/execution/configuration/common/ui/api/IWidgetToolkit.java
@@ -26,7 +26,6 @@
 import org.eclipse.swt.widgets.Button;
 import org.eclipse.swt.widgets.Combo;
 import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Group;
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Text;
@@ -43,7 +42,20 @@
 	 * @param control the receiver
 	 * @param visible visible the new visibility state
 	 */
-	abstract public void setVisibleAndEnabled(Control control, boolean visible);
+	abstract public void setVisibleAndEnabled(Composite aComposite, boolean visible);
+	
+	public default void propagateVisibility(Composite aComposite, boolean visible) { 
+		aComposite.setVisible(visible);
+
+		Object gd = aComposite.getLayoutData();
+		if (gd instanceof GridData) {
+			GridData data = (GridData) gd;
+			data.exclude = (! visible);
+			aComposite.requestLayout();
+		} else {
+			//
+		}
+	}
 	
 
 	/**
diff --git a/execution/org.eclipse.efm.execution.configuration.common.ui/src/org/eclipse/efm/execution/configuration/common/ui/page/expert/ExpertBehaviorSelectionConfigurationProfile.java b/execution/org.eclipse.efm.execution.configuration.common.ui/src/org/eclipse/efm/execution/configuration/common/ui/page/expert/ExpertBehaviorSelectionConfigurationProfile.java
index 7730eb7..5c091f6 100644
--- a/execution/org.eclipse.efm.execution.configuration.common.ui/src/org/eclipse/efm/execution/configuration/common/ui/page/expert/ExpertBehaviorSelectionConfigurationProfile.java
+++ b/execution/org.eclipse.efm.execution.configuration.common.ui/src/org/eclipse/efm/execution/configuration/common/ui/page/expert/ExpertBehaviorSelectionConfigurationProfile.java
@@ -12,7 +12,6 @@
  *******************************************************************************/
 package org.eclipse.efm.execution.configuration.common.ui.page.expert;
 
-import org.eclipse.core.runtime.CoreException;
 import org.eclipse.debug.core.ILaunchConfiguration;
 import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
 import org.eclipse.efm.execution.configuration.common.ui.api.AbstractConfigurationPage;
@@ -199,20 +198,6 @@
 	}
 
 
-	private void setEnableGroupHOJPage(ILaunchConfiguration configuration) {
-		try {
-			String modelAnalysisProfile = configuration.getAttribute(
-					ATTR_SPECIFICATION_MODEL_ANALYSIS_PROFILE, "");
-
-			setVisibleAndEnabled( modelAnalysisProfile.equals(
-					ANALYSIS_PROFILE_MODEL_COVERAGE_BEHAVIOR) );
-		}
-		catch (CoreException e) {
-			e.printStackTrace();
-		}
-	}
-
-
 	@Override
 	public void setDefaults(ILaunchConfigurationWorkingCopy configuration) {
 //		fHoJBeginStep.setDefaults(configuration);
@@ -270,8 +255,6 @@
 
 	@Override
 	public void initializeFrom(ILaunchConfiguration configuration) {
-		setEnableGroupHOJPage(configuration);
-
 		fHoJBeginStep.initializeFrom(configuration);
 		fHoJHeuristic.initializeFrom(configuration);
 		fHoJStop.initializeFrom(configuration);
@@ -295,8 +278,6 @@
 
 	@Override
 	public void performApply(ILaunchConfigurationWorkingCopy configuration) {
-		setEnableGroupHOJPage(configuration);
-
 		fHoJBeginStep.performApply(configuration);
 		fHoJHeuristic.performApply(configuration);
 		fHoJStop.performApply(configuration);
diff --git a/execution/org.eclipse.efm.execution.configuration.common.ui/src/org/eclipse/efm/execution/configuration/common/ui/page/expert/ExpertConfigurationPage.java b/execution/org.eclipse.efm.execution.configuration.common.ui/src/org/eclipse/efm/execution/configuration/common/ui/page/expert/ExpertConfigurationPage.java
index 574fdac..7178da6 100644
--- a/execution/org.eclipse.efm.execution.configuration.common.ui/src/org/eclipse/efm/execution/configuration/common/ui/page/expert/ExpertConfigurationPage.java
+++ b/execution/org.eclipse.efm.execution.configuration.common.ui/src/org/eclipse/efm/execution/configuration/common/ui/page/expert/ExpertConfigurationPage.java
@@ -93,8 +93,8 @@
 		fCompositeStack.layout();
 	}
 
-	public void setVisibleProfilePage(String profile) {
-		switch ( profile ) {
+	public void setVisibleProfilePage(String analysisProfile) {
+		switch ( analysisProfile ) {
 		case ANALYSIS_PROFILE_MODEL_COVERAGE_TRANSITION:
 			setVisibleProfilePage( fTransitionCoveragePage );
 			break;
@@ -149,16 +149,9 @@
 		fTransitionCoveragePage.initializeFrom(configuration);
 	}
 
-	public void performApplyExploration(
-			ILaunchConfigurationWorkingCopy configuration) {
-		setEnableGroupExplorationPage(configuration);
-	}
-
 
 	@Override
 	public void applyUpdatesOnFieldValuesFrom(ILaunchConfigurationWorkingCopy configuration) {
-		performApplyExploration(configuration);
-
 		// BEHAVIOR SELECTION : HIT OR JUMP
 		fBehaviorSelectionPage.performApply(configuration);
 
@@ -183,4 +176,14 @@
 		return new FieldValidationReturn(true, null);
 	}
 
+	
+	///////////////////////////////////////////////////////////////////////////
+	// Model Analysis Profile changed
+	//
+	@Override
+	public void handleModelAnalysisProfileSelectionChanged(String analysisProfile) {
+		setVisibleProfilePage(analysisProfile);
+	}
+
+
 }
diff --git a/execution/org.eclipse.efm.execution.configuration.common.ui/src/org/eclipse/efm/execution/configuration/common/ui/page/expert/ExpertTransitionCoverageConfigurationProfile.java b/execution/org.eclipse.efm.execution.configuration.common.ui/src/org/eclipse/efm/execution/configuration/common/ui/page/expert/ExpertTransitionCoverageConfigurationProfile.java
index 7778d93..26325cd 100644
--- a/execution/org.eclipse.efm.execution.configuration.common.ui/src/org/eclipse/efm/execution/configuration/common/ui/page/expert/ExpertTransitionCoverageConfigurationProfile.java
+++ b/execution/org.eclipse.efm.execution.configuration.common.ui/src/org/eclipse/efm/execution/configuration/common/ui/page/expert/ExpertTransitionCoverageConfigurationProfile.java
@@ -368,20 +368,6 @@
 	}
 
 
-	private void setEnableGroupTCPage(ILaunchConfiguration configuration) {
-		try {
-			String modelAnalysisProfile = configuration.getAttribute(
-					ATTR_SPECIFICATION_MODEL_ANALYSIS_PROFILE, "");
-
-			setVisibleAndEnabled( modelAnalysisProfile.equals(
-					ANALYSIS_PROFILE_MODEL_COVERAGE_TRANSITION) );
-		}
-		catch (CoreException e) {
-			e.printStackTrace();
-		}
-	}
-
-
 	@Override
 	public void setDefaults(ILaunchConfigurationWorkingCopy configuration) {
 //		fTCBeginStep.setDefaults(configuration);
@@ -462,8 +448,6 @@
 
 	@Override
 	public void initializeFrom(ILaunchConfiguration configuration) {
-		setEnableGroupTCPage(configuration);
-
 		fTCBeginStep.initializeFrom(configuration);
 		fTCStop.initializeFrom(configuration);
 		fTCMinimize.initializeFrom(configuration);
@@ -527,7 +511,6 @@
 					ATTR_TRANSITION_COVERAGE_DIRECTIVE_TRACE_HEURISTIC,
 					DIRECTIVE_TRACE_HEURISTIC_COMBO_ITEM_SMART);
 		} catch (CoreException e) {
-			// TODO Auto-generated catch block
 			e.printStackTrace();
 		}
 
@@ -563,8 +546,6 @@
 
 	@Override
 	public void performApply(ILaunchConfigurationWorkingCopy configuration) {
-		setEnableGroupTCPage(configuration);
-
 		fTCBeginStep.performApply(configuration);
 		fTCStop.performApply(configuration);
 		fTCMinimize.performApply(configuration);
diff --git a/execution/org.eclipse.efm.execution.configuration.common.ui/src/org/eclipse/efm/execution/configuration/common/ui/page/overview/OverviewAnalysisProfileSection.java b/execution/org.eclipse.efm.execution.configuration.common.ui/src/org/eclipse/efm/execution/configuration/common/ui/page/overview/OverviewAnalysisProfileSection.java
index 6ebce80..0995df4 100644
--- a/execution/org.eclipse.efm.execution.configuration.common.ui/src/org/eclipse/efm/execution/configuration/common/ui/page/overview/OverviewAnalysisProfileSection.java
+++ b/execution/org.eclipse.efm.execution.configuration.common.ui/src/org/eclipse/efm/execution/configuration/common/ui/page/overview/OverviewAnalysisProfileSection.java
@@ -21,7 +21,6 @@
 import org.eclipse.efm.execution.configuration.common.ui.api.AbstractConfigurationSection;
 import org.eclipse.efm.execution.configuration.common.ui.api.IWidgetToolkit;
 import org.eclipse.efm.execution.configuration.common.ui.editors.FieldEditor;
-import org.eclipse.jface.action.ToolBarManager;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.custom.CTabFolder;
 import org.eclipse.swt.custom.CTabItem;
@@ -33,11 +32,9 @@
 
 public class OverviewAnalysisProfileSection extends AbstractConfigurationSection {
 
-	public OverviewAnalysisProfileSection(
-			AbstractConfigurationPage configurationPage,
-			Composite parent, ToolBarManager toolBarManager)
+	public OverviewAnalysisProfileSection(AbstractConfigurationPage configurationPage)
 	{
-		super(configurationPage, parent, toolBarManager);
+		super(configurationPage);
 	}
 
 	private FieldEditor[] contentFieldEdit;
@@ -242,6 +239,10 @@
 		CTabItem selectionTabItem = fTabFolder.getItem( fTabFolder.getSelectionIndex() );
 		fModelAnalysisProfile = selectionTabItem.getText();
 
+		for( AbstractConfigurationPage confPage : getConfigurationPages() ) {
+			confPage.handleModelAnalysisProfileSelectionChanged(fModelAnalysisProfile);
+		}
+		
 //		getConfigurationPage().propagateGUIupdate();
 	}
 
diff --git a/execution/org.eclipse.efm.execution.configuration.common.ui/src/org/eclipse/efm/execution/configuration/common/ui/page/overview/OverviewConfigurationPage.java b/execution/org.eclipse.efm.execution.configuration.common.ui/src/org/eclipse/efm/execution/configuration/common/ui/page/overview/OverviewConfigurationPage.java
index 7cd9590..b9d38a4 100644
--- a/execution/org.eclipse.efm.execution.configuration.common.ui/src/org/eclipse/efm/execution/configuration/common/ui/page/overview/OverviewConfigurationPage.java
+++ b/execution/org.eclipse.efm.execution.configuration.common.ui/src/org/eclipse/efm/execution/configuration/common/ui/page/overview/OverviewConfigurationPage.java
@@ -77,6 +77,8 @@
 
 	public OverviewConfigurationPage(ILaunchConfigurationGUIelement masterGUIelement) {
 		super(masterGUIelement);
+		
+		fAnalysisProfileSection = new OverviewAnalysisProfileSection(this);
 	}
 
 
@@ -215,8 +217,9 @@
 		Action[] toputinbar = getActionsByStringKey(new String[]{"action_apply_changes"});
 		GenericCompositeCreator.fillToolBar(toolBarManager, toputinbar);
 
-		OverviewWorkspaceDataSection wfnsc =
-				new OverviewWorkspaceDataSection(this, parent, toolBarManager);
+		OverviewWorkspaceDataSection wfnsc = new OverviewWorkspaceDataSection(this);
+		wfnsc.createControl(parent, toolBarManager, widgetToolkit);
+		
 		FieldEditor[] editors = wfnsc.getFieldEditors();
 		fWorkspaceRootLocationStringField = (StringFieldEditor) editors[0];
 		fWorkspaceOuputFolderNameStringField = (StringFieldEditor) editors[1];
@@ -228,7 +231,8 @@
 		ToolBarManager toolBarManager = new ToolBarManager(SWT.FLAT);
 		Action[] toputinbar = getActionsByStringKey(new String[]{"action_apply_changes"});
 		GenericCompositeCreator.fillToolBar(toolBarManager, toputinbar);
-		fAnalysisProfileSection = new OverviewAnalysisProfileSection(this, parent, toolBarManager);
+		
+		fAnalysisProfileSection.createControl(parent, toolBarManager, widgetToolkit);
 	}
 
 
@@ -353,4 +357,5 @@
 		return new FieldValidationReturn(isValid, messageToSend);
 	}
 
+
 }
diff --git a/execution/org.eclipse.efm.execution.configuration.common.ui/src/org/eclipse/efm/execution/configuration/common/ui/page/overview/OverviewTestOfflineConfigurationProfile.java b/execution/org.eclipse.efm.execution.configuration.common.ui/src/org/eclipse/efm/execution/configuration/common/ui/page/overview/OverviewTestOfflineConfigurationProfile.java
index d7f6789..ab3023d 100644
--- a/execution/org.eclipse.efm.execution.configuration.common.ui/src/org/eclipse/efm/execution/configuration/common/ui/page/overview/OverviewTestOfflineConfigurationProfile.java
+++ b/execution/org.eclipse.efm.execution.configuration.common.ui/src/org/eclipse/efm/execution/configuration/common/ui/page/overview/OverviewTestOfflineConfigurationProfile.java
@@ -221,6 +221,14 @@
 						"&Enable Observable / Controllable Configuration",
 						comp, false);
 
+		fEnabledTraceConfigurationBooleanField.addSelectionListener(
+				new SelectionAdapter() {
+					@Override
+					public void widgetSelected(SelectionEvent e) {
+						handleEnablingTraceConfiguration();
+					}
+				});
+
 
 		fGroupObservable  = widgetToolkit.createGroup(parent,
 				"&Observable", 1, 1, GridData.FILL_HORIZONTAL);
@@ -248,7 +256,7 @@
 	}
 
 
-	private void updateEnablingTraceConfiguration() {
+	private void handleEnablingTraceConfiguration() {
 		boolean enabled =
 				fEnabledTraceConfigurationBooleanField.getBooleanValue();
 
@@ -309,7 +317,7 @@
 		fObservableStringField.initializeFrom(configuration);
 		fControllableStringField.initializeFrom(configuration);
 
-		updateEnablingTraceConfiguration();
+		handleEnablingTraceConfiguration();
 	}
 
 	@Override
@@ -327,8 +335,6 @@
 
 		fObservableStringField.performApply(configuration);
 		fControllableStringField.performApply(configuration);
-
-		updateEnablingTraceConfiguration();
 	}
 
 
diff --git a/execution/org.eclipse.efm.execution.configuration.common.ui/src/org/eclipse/efm/execution/configuration/common/ui/page/overview/OverviewTransitionCoverageConfigurationProfile.java b/execution/org.eclipse.efm.execution.configuration.common.ui/src/org/eclipse/efm/execution/configuration/common/ui/page/overview/OverviewTransitionCoverageConfigurationProfile.java
index 3d71cf1..1204119 100644
--- a/execution/org.eclipse.efm.execution.configuration.common.ui/src/org/eclipse/efm/execution/configuration/common/ui/page/overview/OverviewTransitionCoverageConfigurationProfile.java
+++ b/execution/org.eclipse.efm.execution.configuration.common.ui/src/org/eclipse/efm/execution/configuration/common/ui/page/overview/OverviewTransitionCoverageConfigurationProfile.java
@@ -92,8 +92,7 @@
 			new SelectionAdapter() {
 				@Override
 				public void widgetSelected(SelectionEvent e) {
-					fConfigurationPage.propagateVisibility(fCompDetailedSelection,
-							fEnabledDetailedSelectionBooleanField.getBooleanValue());
+					handleEnablingDetailedSelection();
 				}
 			});
 
@@ -271,20 +270,11 @@
 	}
 
 
-//	@Override
-//	public void setVisible(boolean visible) {
-//		fConfigurationPage.propagateVisibility(parent,visible);
-//
-//		if( visible ) {
-//			if( fEnabledDetailedSelectionBooleanField.getBooleanValue() )
-//			{
-//				fConfigurationPage.propagateVisibility(fCompDetailedSelection, true);
-//			}
-//			else {
-//				fConfigurationPage.propagateVisibility(fCompDetailedSelection, false);
-//			}
-//		}
-//	}
+	private void handleEnablingDetailedSelection() {
+		fConfigurationPage.propagateVisibility(fCompDetailedSelection,
+				fEnabledDetailedSelectionBooleanField.getBooleanValue());
+	}
+
 
 	private void initTransitionTable() {
 		loadTransitionListToBeSelected();
@@ -467,8 +457,7 @@
 
 		fEnabledDetailedSelectionBooleanField.initializeFrom(configuration);
 
-		fConfigurationPage.propagateVisibility(fCompDetailedSelection,
-				fEnabledDetailedSelectionBooleanField.getBooleanValue());
+		handleEnablingDetailedSelection();
 
 		try {
 			fSelectedTransitionsList = new ArrayList<String>();
@@ -493,9 +482,6 @@
 	{
 		fEnabledDetailedSelectionBooleanField.performApply(configuration);
 
-//		fConfigurationPage.propagateVisibility(fCompDetailedSelection,
-//				fEnabledDetailedSelectionBooleanField.getBooleanValue());
-
 		configuration.setAttribute(
 				ATTR_TRANSITION_COVERAGE_SELECTION, fSelectedTransitionsList);
 	}
diff --git a/execution/org.eclipse.efm.execution.configuration.common.ui/src/org/eclipse/efm/execution/configuration/common/ui/page/overview/OverviewWorkspaceDataSection.java b/execution/org.eclipse.efm.execution.configuration.common.ui/src/org/eclipse/efm/execution/configuration/common/ui/page/overview/OverviewWorkspaceDataSection.java
index a106369..bf26fea 100644
--- a/execution/org.eclipse.efm.execution.configuration.common.ui/src/org/eclipse/efm/execution/configuration/common/ui/page/overview/OverviewWorkspaceDataSection.java
+++ b/execution/org.eclipse.efm.execution.configuration.common.ui/src/org/eclipse/efm/execution/configuration/common/ui/page/overview/OverviewWorkspaceDataSection.java
@@ -18,16 +18,13 @@
 import org.eclipse.efm.execution.configuration.common.ui.api.IWidgetToolkit;
 import org.eclipse.efm.execution.configuration.common.ui.editors.FieldEditor;
 import org.eclipse.efm.execution.configuration.common.ui.editors.StringFieldEditor;
-import org.eclipse.jface.action.ToolBarManager;
 import org.eclipse.swt.widgets.Composite;
 
 public class OverviewWorkspaceDataSection extends AbstractConfigurationSection {
 
-	public OverviewWorkspaceDataSection(
-			AbstractConfigurationPage configurationPage,
-			Composite parent, ToolBarManager toolBarManager)
+	public OverviewWorkspaceDataSection(AbstractConfigurationPage configurationPage)
 	{
-		super(configurationPage, parent, toolBarManager);
+		super(configurationPage);
 	}
 
 
diff --git a/execution/org.eclipse.efm.execution.configuration.common.ui/src/org/eclipse/efm/execution/configuration/common/ui/page/supervisor/SupervisorConfigurationPage.java b/execution/org.eclipse.efm.execution.configuration.common.ui/src/org/eclipse/efm/execution/configuration/common/ui/page/supervisor/SupervisorConfigurationPage.java
index 25a46f7..9a0b237 100644
--- a/execution/org.eclipse.efm.execution.configuration.common.ui/src/org/eclipse/efm/execution/configuration/common/ui/page/supervisor/SupervisorConfigurationPage.java
+++ b/execution/org.eclipse.efm.execution.configuration.common.ui/src/org/eclipse/efm/execution/configuration/common/ui/page/supervisor/SupervisorConfigurationPage.java
@@ -330,23 +330,10 @@
 
 
 			if ( ! modelAnalysisProfile.equals(ANALYSIS_PROFILE_MODEL_EXPLORATION) ) {
-//				fBFSButton.setEnabled(false);
-//				fDFSButton.setEnabled(false);
-//				fRFSButton.setEnabled(false);
-
-//				groupAnalyzeStrategy.setVisible(false);
 				propagateVisibility(groupAnalyzeStrategy,false);
 				propagateVisibility(groupInclusionCriterion,false);
-
-				fBFSButton.setSelection(false);
-				fDFSButton.setSelection(false);
-				fRFSButton.setSelection(false);
 			}
 			else {
-//				fBFSButton.setEnabled(true);
-//				fDFSButton.setEnabled(true);
-//				fRFSButton.setEnabled(true);
-				groupAnalyzeStrategy.setVisible(true);
 				propagateVisibility(groupAnalyzeStrategy,true);
 				propagateVisibility(groupInclusionCriterion,true);
 
@@ -369,7 +356,6 @@
 			}
 
 		} catch (CoreException e) {
-			// TODO Auto-generated catch block
 			e.printStackTrace();
 		}
 	}
@@ -398,7 +384,6 @@
 //			}
 //
 //		} catch (CoreException e) {
-//			// TODO Auto-generated catch block
 //			e.printStackTrace();
 //		}
 //	}
@@ -445,4 +430,28 @@
 //		}
 		return new FieldValidationReturn(true, null);
 	}
+
+
+	///////////////////////////////////////////////////////////////////////////
+	// Model Analysis Profile changed
+	//
+	@Override
+	public void handleModelAnalysisProfileSelectionChanged(String analysisProfile) {
+		switch ( analysisProfile ) {
+		case ANALYSIS_PROFILE_MODEL_COVERAGE_TRANSITION:
+		case ANALYSIS_PROFILE_MODEL_COVERAGE_BEHAVIOR:
+		case ANALYSIS_PROFILE_MODEL_TEST_OFFLINE:
+			propagateVisibility(groupAnalyzeStrategy   , false);
+			propagateVisibility(groupInclusionCriterion, false);
+			
+			break;
+			
+		case ANALYSIS_PROFILE_MODEL_EXPLORATION:
+		default:
+			propagateVisibility(groupAnalyzeStrategy   , true);
+			propagateVisibility(groupInclusionCriterion, true);
+			break;
+		}
+	}
+
 }
diff --git a/execution/org.eclipse.efm.execution.configuration.common.ui/src/org/eclipse/efm/execution/configuration/common/ui/page/testgen/TestGenerationBasicTraceConfigurationProfile.java b/execution/org.eclipse.efm.execution.configuration.common.ui/src/org/eclipse/efm/execution/configuration/common/ui/page/testgen/TestGenerationBasicTraceConfigurationProfile.java
index c5ee8a4..a2c7870 100644
--- a/execution/org.eclipse.efm.execution.configuration.common.ui/src/org/eclipse/efm/execution/configuration/common/ui/page/testgen/TestGenerationBasicTraceConfigurationProfile.java
+++ b/execution/org.eclipse.efm.execution.configuration.common.ui/src/org/eclipse/efm/execution/configuration/common/ui/page/testgen/TestGenerationBasicTraceConfigurationProfile.java
@@ -12,16 +12,16 @@
  *******************************************************************************/
 package org.eclipse.efm.execution.configuration.common.ui.page.testgen;
 
-import org.eclipse.core.runtime.CoreException;
 import org.eclipse.debug.core.ILaunchConfiguration;
 import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
+import org.eclipse.efm.execution.configuration.common.ui.api.AbstractConfigurationPage;
 import org.eclipse.efm.execution.configuration.common.ui.api.AbstractConfigurationProfile;
 import org.eclipse.efm.execution.configuration.common.ui.api.IWidgetToolkit;
-import org.eclipse.efm.execution.configuration.common.ui.api.AbstractConfigurationPage;
 import org.eclipse.efm.execution.configuration.common.ui.editors.BooleanFieldEditor;
 import org.eclipse.efm.execution.configuration.common.ui.editors.StringFieldEditor;
-import org.eclipse.efm.execution.configuration.common.ui.util.GenericCompositeCreator;
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Group;
@@ -84,11 +84,28 @@
 						ATTR_BASIC_TRACE_ENABLED_GENERATION,
 						"&Enabled Generation", comp, false);
 
+		fBasicTraceEnabledGenerationBooleanField.addSelectionListener(
+				new SelectionAdapter() {
+					@Override
+					public void widgetSelected(SelectionEvent e) {
+						handleEnablingGeneration();
+					}
+				});
+
 		createBasicConfigurationComponent(parent, widgetToolkit);
 
 		createObservableSelectionComponent(parent, widgetToolkit);
 	}
 
+	private void handleEnablingGeneration() {
+		fConfigurationPage.propagateVisibility(groupBasicConfiguration,
+				fBasicTraceEnabledGenerationBooleanField.getBooleanValue() );
+		
+		fConfigurationPage.propagateVisibility(groupBasicObservable,
+				fBasicTraceEnabledGenerationBooleanField.getBooleanValue() );
+	}
+
+
 	private void createBasicConfigurationComponent(Composite parent, IWidgetToolkit widgetToolkit) {
 		groupBasicConfiguration = widgetToolkit.createGroup(parent,
 				"&Configuration", 2, 1, GridData.FILL_HORIZONTAL);
@@ -331,76 +348,30 @@
 				DEFAULT_BASIC_TRACE_FORMAT_ELEMENT_LIST);
 	}
 
-	private String getAnalysisProfile(ILaunchConfiguration configuration) {
-		String modelAnalysisProfile;
-		try {
-			modelAnalysisProfile = configuration.getAttribute(
-					ATTR_SPECIFICATION_MODEL_ANALYSIS_PROFILE, "");
-		}
-		catch (CoreException e) {
-			e.printStackTrace();
-			modelAnalysisProfile = "";
-		}
-		return modelAnalysisProfile;
-	}
-
-	private boolean getBasicTraceEnableGeneration(ILaunchConfiguration configuration) {
-		boolean basicTraceEnableGeneration;
-		try {
-			basicTraceEnableGeneration = configuration.getAttribute(ATTR_BASIC_TRACE_ENABLED_GENERATION, false);
-		} catch (CoreException e) {
-			e.printStackTrace();
-			basicTraceEnableGeneration = false;
-		}
-		return basicTraceEnableGeneration;
-	}
-
-	private void updateGreyedOutAreas(String modelAnalysisProfile, boolean basicTraceEnableGeneration) {
-		if ( modelAnalysisProfile.equals(ANALYSIS_PROFILE_MODEL_TEST_OFFLINE ) ) {
-			fBasicTraceEnabledGenerationBooleanField.setEnabled(false);
-			GenericCompositeCreator.recursiveSetEnabled(groupBasicConfiguration, false);
-			GenericCompositeCreator.recursiveSetEnabled(groupBasicObservable, false);
-		}
-		else {
-			fBasicTraceEnabledGenerationBooleanField.setEnabled(true);
-			if (basicTraceEnableGeneration) {
-				GenericCompositeCreator.recursiveSetEnabled(groupBasicConfiguration, true);
-				GenericCompositeCreator.recursiveSetEnabled(groupBasicObservable, true);
-			} else {
-				GenericCompositeCreator.recursiveSetEnabled(groupBasicConfiguration, false);
-				GenericCompositeCreator.recursiveSetEnabled(groupBasicObservable, false);
-			}
-			fBasicTraceNormalizationBooleanField.setEnabled(true);
-			fBasicTraceShowInitializationBooleanField.setEnabled(true);
-		}
-	}
 
 	@Override
 	public void initializeFrom(ILaunchConfiguration configuration) {
-		String analysisProfile = getAnalysisProfile(configuration);
-		boolean basicTraceEnableGeneration = getBasicTraceEnableGeneration(configuration);
-		updateGreyedOutAreas(analysisProfile, basicTraceEnableGeneration);
+		fBasicTraceEnabledGenerationBooleanField.initializeFrom(configuration);	
+		
+		handleEnablingGeneration();
 
-		if ( ! analysisProfile.equals(ANALYSIS_PROFILE_MODEL_TEST_OFFLINE ) ) {
-			fBasicTraceEnabledGenerationBooleanField.initializeFrom(configuration);
-			fBasicTraceFolderNameStringField.initializeFrom(configuration);
-			fBasicTraceFileNameStringField.initializeFrom(configuration);
-			fBasicTraceNormalizationBooleanField.initializeFrom(configuration);
-			fBasicTraceShowInitializationBooleanField.initializeFrom(configuration);
+		fBasicTraceFolderNameStringField.initializeFrom(configuration);
+		fBasicTraceFileNameStringField.initializeFrom(configuration);
+		fBasicTraceNormalizationBooleanField.initializeFrom(configuration);
+		fBasicTraceShowInitializationBooleanField.initializeFrom(configuration);
 
-			fBasicTraceAllExternalInputComBooleanField.initializeFrom(configuration);
-			fBasicTraceAllExternalOutputComBooleanField.initializeFrom(configuration);
-			fBasicTraceAllInternalInputComBooleanField.initializeFrom(configuration);
-			fBasicTraceAllInternalOutputComBooleanField.initializeFrom(configuration);
+		fBasicTraceAllExternalInputComBooleanField.initializeFrom(configuration);
+		fBasicTraceAllExternalOutputComBooleanField.initializeFrom(configuration);
+		fBasicTraceAllInternalInputComBooleanField.initializeFrom(configuration);
+		fBasicTraceAllInternalOutputComBooleanField.initializeFrom(configuration);
 
-			fBasicTraceTimeBooleanField.initializeFrom(configuration);
-			fBasicTraceAllVariableBooleanField.initializeFrom(configuration);
-			fBasicTraceAllTransitionBooleanField.initializeFrom(configuration);
-			fBasicTraceAllStateBooleanField.initializeFrom(configuration);
+		fBasicTraceTimeBooleanField.initializeFrom(configuration);
+		fBasicTraceAllVariableBooleanField.initializeFrom(configuration);
+		fBasicTraceAllTransitionBooleanField.initializeFrom(configuration);
+		fBasicTraceAllStateBooleanField.initializeFrom(configuration);
 
-			fBasicTraceObservableTraceDetailsStringField.initializeFrom(configuration);
-			fBasicTraceObservableFormatStringField.initializeFrom(configuration);
-		}
+		fBasicTraceObservableTraceDetailsStringField.initializeFrom(configuration);
+		fBasicTraceObservableFormatStringField.initializeFrom(configuration);
 	}
 
 	@Override
@@ -425,9 +396,6 @@
 
 		fBasicTraceObservableTraceDetailsStringField.performApply(configuration);
 		fBasicTraceObservableFormatStringField.performApply(configuration);
-
-		updateGreyedOutAreas(getAnalysisProfile(configuration),
-				getBasicTraceEnableGeneration(configuration));
 	}
 
 	@Override
diff --git a/execution/org.eclipse.efm.execution.configuration.common.ui/src/org/eclipse/efm/execution/configuration/common/ui/page/testgen/TestGenerationConfigurationPage.java b/execution/org.eclipse.efm.execution.configuration.common.ui/src/org/eclipse/efm/execution/configuration/common/ui/page/testgen/TestGenerationConfigurationPage.java
index 76d7c76..babdaaf 100644
--- a/execution/org.eclipse.efm.execution.configuration.common.ui/src/org/eclipse/efm/execution/configuration/common/ui/page/testgen/TestGenerationConfigurationPage.java
+++ b/execution/org.eclipse.efm.execution.configuration.common.ui/src/org/eclipse/efm/execution/configuration/common/ui/page/testgen/TestGenerationConfigurationPage.java
@@ -13,7 +13,6 @@
 
 package org.eclipse.efm.execution.configuration.common.ui.page.testgen;
 
-import org.eclipse.core.runtime.CoreException;
 import org.eclipse.debug.core.ILaunchConfiguration;
 import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
 import org.eclipse.efm.execution.configuration.common.ui.api.AbstractConfigurationPage;
@@ -23,11 +22,15 @@
 import org.eclipse.efm.execution.configuration.common.ui.editors.IntegerFieldEditor;
 import org.eclipse.efm.execution.configuration.common.ui.editors.StringFieldEditor;
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Group;
 
 public class TestGenerationConfigurationPage extends AbstractConfigurationPage {
+	
+	private Group groupTraceExtension;
 	private Group groupExtensionObjective;
 
 	private BooleanFieldEditor fTraceExtensionEnabledBooleanField;
@@ -69,20 +72,28 @@
 	}
 
 	private void createExtensionSelectionComponent(Composite parent, IWidgetToolkit widgetToolkit) {
-		Group group = widgetToolkit.createGroup(parent,
+		groupTraceExtension = widgetToolkit.createGroup(parent,
 				"Trace Extension for Test Generation Purpose",
 				1, 1, GridData.FILL_HORIZONTAL);
 
 		Composite comp = widgetToolkit.createComposite(
-				group, 1, 1,  GridData.FILL_HORIZONTAL);
+				groupTraceExtension, 1, 1,  GridData.FILL_HORIZONTAL);
 
 		fTraceExtensionEnabledBooleanField = new BooleanFieldEditor(
 				this, ATTR_ENABLED_TRACE_EXTENSION,
 				"&Enabled Extension", comp, false);
+		
+		fTraceExtensionEnabledBooleanField.addSelectionListener(
+				new SelectionAdapter() {
+					@Override
+					public void widgetSelected(SelectionEvent e) {
+						handleEnablingTraceExtension();
+					}
+				});
 
 
 		groupExtensionObjective = widgetToolkit.createGroup(
-				group, "Extension of Traces to reach Observables",
+				groupTraceExtension, "Extension of Traces to reach Observables",
 				1, 1, GridData.FILL_HORIZONTAL);
 
 		comp = widgetToolkit.createComposite(
@@ -108,27 +119,12 @@
 				DEFAULT_TRACE_EXTENSION_OBJECTIVE, SWT.MULTI);
 	}
 
-
-	private void setEnableExtensionPage(ILaunchConfiguration configuration) {
-		String fAnalysisProfile;
-		boolean localEnable;
-
-		try {
-			fAnalysisProfile = configuration.getAttribute(
-					ATTR_SPECIFICATION_MODEL_ANALYSIS_PROFILE, "");
-
-			localEnable = fTraceExtensionEnabledBooleanField.getBooleanValue() &&
-				(! fAnalysisProfile.equals(ANALYSIS_PROFILE_MODEL_TEST_OFFLINE ) );
-
-			fTraceExtensionEvaluationStepsLimitIntegerField.setEnabled(localEnable);
-
-			propagateVisibility(groupExtensionObjective, localEnable);
-		}
-		catch (CoreException e) {
-			e.printStackTrace();
-		}
+	private void handleEnablingTraceExtension() {
+		propagateVisibility(groupExtensionObjective,
+				fTraceExtensionEnabledBooleanField.getBooleanValue() );
 	}
 
+
 	// ======================================================================================
 	//                              Fields Values Management
 	// ======================================================================================
@@ -158,35 +154,31 @@
 
 	@Override
 	public void initializeFieldValuesFrom(ILaunchConfiguration configuration) {
-		String analysisProfile;
-		try {
-			analysisProfile = configuration.getAttribute(
-					ATTR_SPECIFICATION_MODEL_ANALYSIS_PROFILE, "");
-		}
-		catch (CoreException e) {
-			e.printStackTrace();
-			analysisProfile = "";
-		}
+		fTraceExtensionEnabledBooleanField.initializeFrom(configuration);
+		fTraceExtensionEvaluationStepsLimitIntegerField.initializeFrom(configuration);
+		fTraceExtensionObjectiveStringField.initializeFrom(configuration);
 
-		if ( analysisProfile.equals(ANALYSIS_PROFILE_MODEL_TEST_OFFLINE ) ) {
-			fTraceExtensionEnabledBooleanField.setEnabled(false);
-		}
-		else {
-			fTraceExtensionEnabledBooleanField.setEnabled(true);
+//		String analysisProfile;
+//		try {
+//			analysisProfile = configuration.getAttribute(
+//					ATTR_SPECIFICATION_MODEL_ANALYSIS_PROFILE, "");
+//		}
+//		catch (CoreException e) {
+//			analysisProfile = "";
+//
+//			e.printStackTrace();
+//		}
+//
+//		if ( analysisProfile.equals(ANALYSIS_PROFILE_MODEL_TEST_OFFLINE ) ) {
+//			fTraceExtensionEnabledBooleanField.setEnabled(false);
+//		}
 
-			fTraceExtensionEnabledBooleanField.initializeFrom(configuration);
-			fTraceExtensionEvaluationStepsLimitIntegerField.initializeFrom(configuration);
-			fTraceExtensionObjectiveStringField.initializeFrom(configuration);
-		}
-
-		setEnableExtensionPage(configuration);
+		handleEnablingTraceExtension();
 
 
 		fBasicTracePage.initializeFrom(configuration);
-		fBasicTracePage.setVisibleAndEnabled(true);
 
 		fTTCNTracePage.initializeFrom(configuration);
-		fTTCNTracePage.setVisibleAndEnabled(true);
 	}
 
 
@@ -195,8 +187,6 @@
 	{
 		fTraceExtensionEnabledBooleanField.performApply(configuration);
 
-		setEnableExtensionPage(configuration);
-
 		fTraceExtensionEvaluationStepsLimitIntegerField.performApply(configuration);
 		fTraceExtensionObjectiveStringField.performApply(configuration);
 
@@ -223,5 +213,39 @@
 		return new FieldValidationReturn(true, null);
 	}
 
+	
+	///////////////////////////////////////////////////////////////////////////
+	// Model Analysis Profile changed
+	//
+	@Override
+	public void handleModelAnalysisProfileSelectionChanged(String analysisProfile) {
+		switch ( analysisProfile ) {
+		case ANALYSIS_PROFILE_MODEL_TEST_OFFLINE:
+			groupTraceExtension.setEnabled(false);
+			
+			propagateVisibility(groupExtensionObjective, false);
+			
+			setVisibleAndEnabled(fBasicTracePage.getSection(), false);
+			setVisibleAndEnabled(fTTCNTracePage.getSection() , false);
+			
+			break;
+			
+		case ANALYSIS_PROFILE_MODEL_COVERAGE_TRANSITION:
+		case ANALYSIS_PROFILE_MODEL_COVERAGE_BEHAVIOR:
+		case ANALYSIS_PROFILE_MODEL_EXPLORATION:
+		default:
+			groupTraceExtension.setEnabled(true);
+			
+			propagateVisibility(groupExtensionObjective, true);
+			
+			setVisibleAndEnabled(fBasicTracePage.getSection(), true);
+			setVisibleAndEnabled(fTTCNTracePage.getSection() , true);
+
+			
+			handleEnablingTraceExtension();;
+			break;
+		}
+	}
+
 
 }
diff --git a/execution/org.eclipse.efm.execution.configuration.common.ui/src/org/eclipse/efm/execution/configuration/common/ui/page/testgen/TestGenerationTTCNConfigurationProfile.java b/execution/org.eclipse.efm.execution.configuration.common.ui/src/org/eclipse/efm/execution/configuration/common/ui/page/testgen/TestGenerationTTCNConfigurationProfile.java
index b804820..551f929 100644
--- a/execution/org.eclipse.efm.execution.configuration.common.ui/src/org/eclipse/efm/execution/configuration/common/ui/page/testgen/TestGenerationTTCNConfigurationProfile.java
+++ b/execution/org.eclipse.efm.execution.configuration.common.ui/src/org/eclipse/efm/execution/configuration/common/ui/page/testgen/TestGenerationTTCNConfigurationProfile.java
@@ -12,7 +12,6 @@
  *******************************************************************************/
 package org.eclipse.efm.execution.configuration.common.ui.page.testgen;
 
-import org.eclipse.core.runtime.CoreException;
 import org.eclipse.debug.core.ILaunchConfiguration;
 import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
 import org.eclipse.efm.execution.configuration.common.ui.api.AbstractConfigurationPage;
@@ -20,8 +19,9 @@
 import org.eclipse.efm.execution.configuration.common.ui.api.IWidgetToolkit;
 import org.eclipse.efm.execution.configuration.common.ui.editors.BooleanFieldEditor;
 import org.eclipse.efm.execution.configuration.common.ui.editors.StringFieldEditor;
-import org.eclipse.efm.execution.configuration.common.ui.util.GenericCompositeCreator;
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Group;
@@ -85,6 +85,15 @@
 						ATTR_TTCN_ENABLED_GENERATION,
 						"&Generation", comp, false);
 
+		fTTCNEnabledGenerationBooleanField.addSelectionListener(
+				new SelectionAdapter() {
+					@Override
+					public void widgetSelected(SelectionEvent e) {
+						handleEnablingGeneration();
+					}
+				});
+
+		
 		comp = widgetToolkit.createComposite(
 				group, 2, 1, GridData.FILL_HORIZONTAL);
 
@@ -94,11 +103,38 @@
 						"&Customization", comp,
 						DEFAULT_TTCN_ENABLED_CUSTOMIZATION);
 
+		fTTCNEnabledAdaptationModuleBooleanField.addSelectionListener(
+				new SelectionAdapter() {
+					@Override
+					public void widgetSelected(SelectionEvent e) {
+						handleEnablingAdaptationModule();
+					}
+				});
+
+		
 		createTTCNConfigurationComponent(parent, widgetToolkit);
 
 		createTTCNModuleConfigurationComponent(parent, widgetToolkit);
 	}
 
+	private void handleEnablingGeneration() {
+		fConfigurationPage.propagateVisibility(groupTTCNConfiguration,
+				fTTCNEnabledGenerationBooleanField.getBooleanValue() );
+		
+		fTTCNEnabledAdaptationModuleBooleanField.setEnabled(
+				fTTCNEnabledGenerationBooleanField.getBooleanValue() );
+		
+		fConfigurationPage.propagateVisibility(groupTTCNModule,
+				fTTCNEnabledAdaptationModuleBooleanField.getBooleanValue() &&
+				fTTCNEnabledGenerationBooleanField.getBooleanValue() );
+	}
+
+	private void handleEnablingAdaptationModule() {
+		fConfigurationPage.propagateVisibility(groupTTCNModule,
+				fTTCNEnabledAdaptationModuleBooleanField.getBooleanValue() &&
+				fTTCNEnabledGenerationBooleanField.getBooleanValue() );
+	}
+
 
 	private void createTTCNConfigurationComponent(Composite parent, IWidgetToolkit widgetToolkit) {
 		groupTTCNConfiguration = widgetToolkit.createGroup(parent,
@@ -410,83 +446,31 @@
 				DEFAULT_TTCN_TESTCASES_RECEIVING_IMPL);
 	}
 
-	private String getAnalysisProfile(ILaunchConfiguration configuration) {
-		String analysisProfile;
-		try {
-			analysisProfile = configuration.getAttribute(
-					ATTR_SPECIFICATION_MODEL_ANALYSIS_PROFILE, "");
-		}
-		catch (CoreException e) {
-			e.printStackTrace();
-			analysisProfile = "";
-		}
-		return analysisProfile;
-	}
-
-	private boolean getTTCNTraceEnableGeneration(ILaunchConfiguration configuration) {
-		boolean basicTraceEnableGeneration;
-		try {
-			basicTraceEnableGeneration = configuration.getAttribute(ATTR_TTCN_ENABLED_GENERATION, false);
-		} catch (CoreException e) {
-			e.printStackTrace();
-			basicTraceEnableGeneration = false;
-		}
-		return basicTraceEnableGeneration;
-	}
-
-	private void updateGreyedOutAreas(String analysisProfile, boolean TTCNEnableGeneration) {
-		if ( analysisProfile.equals(ANALYSIS_PROFILE_MODEL_TEST_OFFLINE ) ) {
-			fTTCNEnabledGenerationBooleanField.setEnabled(false);
-			fTTCNEnabledAdaptationModuleBooleanField.setEnabled(false);
-
-			fTTCNEnabledAdaptationModuleBooleanField.setEnabled(false);
-			GenericCompositeCreator.recursiveSetEnabled(groupTTCNConfiguration, false);
-			GenericCompositeCreator.recursiveSetEnabled(groupTTCNModule, false);
-		}
-		else {
-			fTTCNEnabledGenerationBooleanField.setEnabled(true);
-			fTTCNEnabledAdaptationModuleBooleanField.setEnabled(true);
-			if (TTCNEnableGeneration) {
-				fTTCNEnabledAdaptationModuleBooleanField.setEnabled(true);
-				GenericCompositeCreator.recursiveSetEnabled(groupTTCNConfiguration, true);
-				boolean enabledAdaptation = fTTCNEnabledAdaptationModuleBooleanField.getBooleanValue();
-				GenericCompositeCreator.recursiveSetEnabled(groupTTCNModule, enabledAdaptation);
-			} else {
-				fTTCNEnabledAdaptationModuleBooleanField.setEnabled(false);
-				GenericCompositeCreator.recursiveSetEnabled(groupTTCNConfiguration, false);
-				GenericCompositeCreator.recursiveSetEnabled(groupTTCNModule, false);
-			}
-		}
-
-
-	}
-
 
 	@Override
 	public void initializeFrom(ILaunchConfiguration configuration) {
-		String analysisProfile = getAnalysisProfile(configuration);
-		boolean ttcn3TraceEnableGeneration = getTTCNTraceEnableGeneration(configuration);
-		updateGreyedOutAreas(analysisProfile, ttcn3TraceEnableGeneration);
-		if ( ! analysisProfile.equals(ANALYSIS_PROFILE_MODEL_TEST_OFFLINE ) ) {
-			fTTCNEnabledGenerationBooleanField.initializeFrom(configuration);
-			fTTCNEnabledAdaptationModuleBooleanField.initializeFrom(configuration);
-			fTTCNFolderNameStringField.initializeFrom(configuration);
-			fTTCNControlModuleNameStringField.initializeFrom(configuration);
-			fTTCNDeclarationsModuleNameStringField.initializeFrom(configuration);
-			fTTCNTemplatesModuleNameStringField.initializeFrom(configuration);
+		fTTCNEnabledGenerationBooleanField.initializeFrom(configuration);
+		fTTCNEnabledAdaptationModuleBooleanField.initializeFrom(configuration);
 
-			fTTCNTestcasesModuleNameStringField.initializeFrom(configuration);
-			fTTCNTestcasesStartingWrapperStringField.initializeFrom(configuration);
-			fTTCNTestcasesEndingWrapperStringField.initializeFrom(configuration);
-			fTTCNTestcasesSendingWrapperStringField.initializeFrom(configuration);
-			fTTCNTestcasesReceivingWrapperStringField.initializeFrom(configuration);
+		handleEnablingGeneration();
+		handleEnablingAdaptationModule();
 
-			fTTCNAdaptationModuleNameStringField.initializeFrom(configuration);
-			fTTCNAdaptationUtilsImplStringField.initializeFrom(configuration);
-			fTTCNTestcasesStartingEndingImplStringField.initializeFrom(configuration);
-			fTTCNTestcasesSendingImplStringField.initializeFrom(configuration);
-			fTTCNTestcasesReceivingImplStringField.initializeFrom(configuration);
-		}
+		fTTCNFolderNameStringField.initializeFrom(configuration);
+		fTTCNControlModuleNameStringField.initializeFrom(configuration);
+		fTTCNDeclarationsModuleNameStringField.initializeFrom(configuration);
+		fTTCNTemplatesModuleNameStringField.initializeFrom(configuration);
+
+		fTTCNTestcasesModuleNameStringField.initializeFrom(configuration);
+		fTTCNTestcasesStartingWrapperStringField.initializeFrom(configuration);
+		fTTCNTestcasesEndingWrapperStringField.initializeFrom(configuration);
+		fTTCNTestcasesSendingWrapperStringField.initializeFrom(configuration);
+		fTTCNTestcasesReceivingWrapperStringField.initializeFrom(configuration);
+
+		fTTCNAdaptationModuleNameStringField.initializeFrom(configuration);
+		fTTCNAdaptationUtilsImplStringField.initializeFrom(configuration);
+		fTTCNTestcasesStartingEndingImplStringField.initializeFrom(configuration);
+		fTTCNTestcasesSendingImplStringField.initializeFrom(configuration);
+		fTTCNTestcasesReceivingImplStringField.initializeFrom(configuration);
 	}
 
 	@Override
@@ -512,9 +496,8 @@
 		fTTCNTestcasesSendingImplStringField.performApply(configuration);
 		fTTCNTestcasesReceivingImplStringField.performApply(configuration);
 
-		String analysisProfile = getAnalysisProfile(configuration);
-		boolean ttcn3TraceEnableGeneration = getTTCNTraceEnableGeneration(configuration);
-		updateGreyedOutAreas(analysisProfile, ttcn3TraceEnableGeneration);
+//		String analysisProfile = getAnalysisProfile(configuration);
+//		updateGreyedOutAreas(analysisProfile, fTTCNEnabledGenerationBooleanField.getBooleanValue());
 	}
 
 	@Override
diff --git a/execution/org.eclipse.efm.execution.configuration.common.ui/src/org/eclipse/efm/execution/configuration/common/ui/util/StandardWidgetToolkit.java b/execution/org.eclipse.efm.execution.configuration.common.ui/src/org/eclipse/efm/execution/configuration/common/ui/util/StandardWidgetToolkit.java
index 21e510e..ea7de5d 100644
--- a/execution/org.eclipse.efm.execution.configuration.common.ui/src/org/eclipse/efm/execution/configuration/common/ui/util/StandardWidgetToolkit.java
+++ b/execution/org.eclipse.efm.execution.configuration.common.ui/src/org/eclipse/efm/execution/configuration/common/ui/util/StandardWidgetToolkit.java
@@ -22,7 +22,6 @@
 import org.eclipse.swt.widgets.Button;
 import org.eclipse.swt.widgets.Combo;
 import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Group;
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Text;
@@ -36,10 +35,10 @@
 	 * @param control the receiver
 	 * @param visible visible the new visibility state
 	 */
-	public void setVisibleAndEnabled(Control control, boolean visible) {
-		control.setVisible(visible);
+	public void setVisibleAndEnabled(Composite aComposite, boolean visible) {
+		propagateVisibility(aComposite, visible);
 		
-		control.setEnabled(visible);
+		aComposite.setEnabled(visible);
 	}
 	
 	
diff --git a/execution/org.eclipse.efm.execution.launchconfiguration/src/org/eclipse/efm/execution/launchconfiguration/HelpContextIdConstants.java b/execution/org.eclipse.efm.execution.launchconfiguration/src/org/eclipse/efm/execution/launchconfiguration/HelpContextIdConstants.java
index 5ceba69..02b3359 100644
--- a/execution/org.eclipse.efm.execution.launchconfiguration/src/org/eclipse/efm/execution/launchconfiguration/HelpContextIdConstants.java
+++ b/execution/org.eclipse.efm.execution.launchconfiguration/src/org/eclipse/efm/execution/launchconfiguration/HelpContextIdConstants.java
@@ -20,7 +20,7 @@
 
 	public static final String sew_launch_tabgroup = CONTEXT_ID + ".sew_launch_tabgroup";
 
-	public static final String sew_launch_CommonCriteria_tab = CONTEXT_ID + ".sew_launch_CommonCriteria_tab";
+	public static final String sew_launch_Supervisor_tab = CONTEXT_ID + ".sew_launch_Supervisor_tab";
 
 	public static final String sew_launch_Main_tab = CONTEXT_ID + ".sew_launch_Main_tab";
 
diff --git a/execution/org.eclipse.efm.execution.launchconfiguration/src/org/eclipse/efm/execution/launchconfiguration/LaunchConfigurationTabGroup.java b/execution/org.eclipse.efm.execution.launchconfiguration/src/org/eclipse/efm/execution/launchconfiguration/LaunchConfigurationTabGroup.java
index 8fc6c54..e4d3a3e 100644
--- a/execution/org.eclipse.efm.execution.launchconfiguration/src/org/eclipse/efm/execution/launchconfiguration/LaunchConfigurationTabGroup.java
+++ b/execution/org.eclipse.efm.execution.launchconfiguration/src/org/eclipse/efm/execution/launchconfiguration/LaunchConfigurationTabGroup.java
@@ -21,6 +21,7 @@
 import org.eclipse.debug.ui.ILaunchConfigurationDialog;
 import org.eclipse.debug.ui.ILaunchConfigurationTab;
 import org.eclipse.debug.ui.RefreshTab;
+import org.eclipse.efm.execution.configuration.common.ui.api.AbstractConfigurationPage;
 import org.eclipse.efm.execution.core.IWorkflowPreferenceConstants;
 import org.eclipse.efm.execution.core.SymbexPreferenceUtil;
 import org.eclipse.efm.execution.launchconfiguration.ui.tabs.SupervisorTab;
@@ -33,12 +34,19 @@
 
 public class LaunchConfigurationTabGroup extends AbstractLaunchConfigurationTabGroup {
 
-	protected OverviewTab fMainTab;
+	private AbstractConfigurationPage[] fConfigurationPages;
+	
+	protected OverviewTab fOverviewTab;
 
 	protected ExpertTab fExpertTab;
 
-	public OverviewTab getMainTab() {
-		return fMainTab;
+	
+	public AbstractConfigurationPage[] getConfigurationPages() {
+		return fConfigurationPages;
+	}
+
+	public OverviewTab getOverviewTab() {
+		return fOverviewTab;
 	}
 
 	public ExpertTab getExpertTab() {
@@ -51,11 +59,23 @@
 		ArrayList<ILaunchConfigurationTab> tabList =
 				new ArrayList<ILaunchConfigurationTab>();
 
-		fMainTab = new OverviewTab(this);
-		tabList.add( fMainTab );
+		ArrayList<AbstractConfigurationPage> confPageList =
+				new ArrayList<AbstractConfigurationPage>();
 
-		tabList.add( new SupervisorTab(this) );
-		tabList.add( new TestGenerationTab(this) );
+		// OverviewTab
+		fOverviewTab = new OverviewTab(this);
+		tabList.add( fOverviewTab );
+		confPageList.add( fOverviewTab.getConfigurationPage() );
+
+		// SupervisorTab
+		SupervisorTab supervisorTab = new SupervisorTab(this);
+		tabList.add( supervisorTab );
+		confPageList.add( supervisorTab.getConfigurationPage() );
+		
+		// TestGenerationTab
+		TestGenerationTab testGenerationTab = new TestGenerationTab(this);
+		tabList.add( testGenerationTab );
+		confPageList.add( testGenerationTab.getConfigurationPage() );
 
 		if( ILaunchManager.DEBUG_MODE.equals(mode) )
 		{
@@ -68,7 +88,9 @@
 					IWorkflowPreferenceConstants.PREF_EXPERT_MODE) )
 			{
 				fExpertTab = new ExpertTab(this);
+				
 				tabList.add( fExpertTab );
+				confPageList.add( fExpertTab.getConfigurationPage() );
 			}
 
 			if( LaunchDelegate.ENABLED_SYMBEX_DEVELOPER_MODE_OPTION )
@@ -90,7 +112,13 @@
 
 		tabList.add( new CommonTab() );
 
-		setTabs( tabList.toArray( new ILaunchConfigurationTab[tabList.size()] ) );
+		setTabs( tabList.toArray(
+				new ILaunchConfigurationTab[tabList.size()] ) );
+		
+		fConfigurationPages = confPageList.toArray(
+				new AbstractConfigurationPage[confPageList.size()]);
+		
+
 	}
 
 
@@ -116,11 +144,9 @@
 
 	@Override
 	public void performApply(ILaunchConfigurationWorkingCopy configuration) {
-		// TODO Auto-generated method stub
 		super.performApply(configuration);
 
 		setDefaultAttributes(configuration);
 	}
 
-
 }
diff --git a/execution/org.eclipse.efm.execution.launchconfiguration/src/org/eclipse/efm/execution/launchconfiguration/ui/tabs/AbstractSewLaunchConfigurationTab.java b/execution/org.eclipse.efm.execution.launchconfiguration/src/org/eclipse/efm/execution/launchconfiguration/ui/tabs/AbstractSewLaunchConfigurationTab.java
index d230fa7..a0e34ea 100644
--- a/execution/org.eclipse.efm.execution.launchconfiguration/src/org/eclipse/efm/execution/launchconfiguration/ui/tabs/AbstractSewLaunchConfigurationTab.java
+++ b/execution/org.eclipse.efm.execution.launchconfiguration/src/org/eclipse/efm/execution/launchconfiguration/ui/tabs/AbstractSewLaunchConfigurationTab.java
@@ -12,9 +12,6 @@
  *******************************************************************************/
 package org.eclipse.efm.execution.launchconfiguration.ui.tabs;
 
-//import java.lang.reflect.Constructor;
-//import java.lang.reflect.InvocationTargetException;
-
 import org.eclipse.debug.core.ILaunchConfiguration;
 import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
 import org.eclipse.debug.ui.AbstractLaunchConfigurationTab;
@@ -30,16 +27,15 @@
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.dialogs.ContainerSelectionDialog;
-import org.eclipse.ui.forms.widgets.FormToolkit;
 
-public abstract class AbstractSewLaunchConfigurationTab extends AbstractLaunchConfigurationTab implements ILaunchConfigurationGUIelement {
-
-	protected FormToolkit fFormToolkit;
+public abstract class AbstractSewLaunchConfigurationTab 
+		extends AbstractLaunchConfigurationTab
+		implements ILaunchConfigurationGUIelement {
 
 	protected IWidgetToolkit fWidgetToolkit;
 
 	protected LaunchConfigurationTabGroup fGroupTab;
-	protected AbstractConfigurationPage contentCompositeManager;
+	protected AbstractConfigurationPage fContentCompositeManager;
 
 	/**
 	 * Constructor
@@ -51,13 +47,12 @@
 		if (display == null) {
 			display = Display.getDefault();
 		}
-		fFormToolkit = new FormToolkit(display);
 
 		fWidgetToolkit = new StandardWidgetToolkit();
 
 		this.fGroupTab = groupTab;
 
-		this.contentCompositeManager = null;
+		this.fContentCompositeManager = null;
 	}
 
 
@@ -65,15 +60,27 @@
 		return fGroupTab;
 	}
 
-	public OverviewTab getMainTab() {
-		return fGroupTab.getMainTab();
+	public OverviewTab getOverviewTab() {
+		return fGroupTab.getOverviewTab();
 	}
+	
+	public AbstractConfigurationPage getConfigurationPage() {
+		return fContentCompositeManager;
+	}
+	
+
+	
+	@Override
+	public AbstractConfigurationPage[] getConfigurationPages() {
+		return fGroupTab.getConfigurationPages();
+	}
+
 
 	@Override
 	public void createControl(Composite parent) {
-		contentCompositeManager.createControl(parent, fWidgetToolkit);
+		fContentCompositeManager.createControl(parent, fWidgetToolkit);
 
-		setControl( contentCompositeManager.getControl() );
+		setControl( fContentCompositeManager.getControl() );
 
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(), getHelpContextId());
 	}
@@ -82,17 +89,17 @@
 
 	@Override
 	public void setDefaults(ILaunchConfigurationWorkingCopy configuration) {
-		contentCompositeManager.setDefaultFieldValues(configuration);
+		fContentCompositeManager.setDefaultFieldValues(configuration);
 	}
 
 	@Override
 	public void initializeFrom(ILaunchConfiguration configuration) {
-		contentCompositeManager.initializeFieldValuesFrom(configuration);
+		fContentCompositeManager.initializeFieldValuesFrom(configuration);
 	}
 
 	@Override
 	public void performApply(ILaunchConfigurationWorkingCopy configuration) {
-		contentCompositeManager.applyUpdatesOnFieldValuesFrom(configuration);
+		fContentCompositeManager.applyUpdatesOnFieldValuesFrom(configuration);
 	}
 
 	/**
@@ -100,7 +107,7 @@
 	 */
 	@Override
 	public boolean isValid(ILaunchConfiguration launchConfig) {
-		FieldValidationReturn fieldValidation = contentCompositeManager.areFieldsValid(launchConfig);
+		FieldValidationReturn fieldValidation = fContentCompositeManager.areFieldsValid(launchConfig);
 		if (fieldValidation.areFieldsValid()) {
 			setMessage(fieldValidation.getReason());
 		} else {
@@ -135,11 +142,6 @@
 	///////////////////////////////////////////////////////////////////////////
 
 	@Override
-	public FormToolkit getFormToolkit() {
-		return fFormToolkit;
-	}
-
-	@Override
 	public IWidgetToolkit getWidgetToolkit() {
 		return fWidgetToolkit;
 	}
diff --git a/execution/org.eclipse.efm.execution.launchconfiguration/src/org/eclipse/efm/execution/launchconfiguration/ui/tabs/DebugTab.java b/execution/org.eclipse.efm.execution.launchconfiguration/src/org/eclipse/efm/execution/launchconfiguration/ui/tabs/DebugTab.java
index ec4d394..2c27fbb 100644
--- a/execution/org.eclipse.efm.execution.launchconfiguration/src/org/eclipse/efm/execution/launchconfiguration/ui/tabs/DebugTab.java
+++ b/execution/org.eclipse.efm.execution.launchconfiguration/src/org/eclipse/efm/execution/launchconfiguration/ui/tabs/DebugTab.java
@@ -22,7 +22,7 @@
 	public DebugTab(LaunchConfigurationTabGroup groupTab) {
 		super(groupTab);
 
-		contentCompositeManager = new DebugConfigurationPage(this);
+		fContentCompositeManager = new DebugConfigurationPage(this);
 
 		setHelpContextId(HelpContextIdConstants.sew_launch_Debug_tab);
 	}
diff --git a/execution/org.eclipse.efm.execution.launchconfiguration/src/org/eclipse/efm/execution/launchconfiguration/ui/tabs/DeveloperTuningTab.java b/execution/org.eclipse.efm.execution.launchconfiguration/src/org/eclipse/efm/execution/launchconfiguration/ui/tabs/DeveloperTuningTab.java
index 8b31416..197a92a 100644
--- a/execution/org.eclipse.efm.execution.launchconfiguration/src/org/eclipse/efm/execution/launchconfiguration/ui/tabs/DeveloperTuningTab.java
+++ b/execution/org.eclipse.efm.execution.launchconfiguration/src/org/eclipse/efm/execution/launchconfiguration/ui/tabs/DeveloperTuningTab.java
@@ -21,7 +21,7 @@
 	public DeveloperTuningTab(LaunchConfigurationTabGroup groupTab) {
 		super(groupTab);
 
-		contentCompositeManager = new DeveloperTuningConfigurationPage(this);
+		fContentCompositeManager = new DeveloperTuningConfigurationPage(this);
 
 		setHelpContextId(HelpContextIdConstants.sew_launch_Debug_tab);
 	}
diff --git a/execution/org.eclipse.efm.execution.launchconfiguration/src/org/eclipse/efm/execution/launchconfiguration/ui/tabs/ExpertTab.java b/execution/org.eclipse.efm.execution.launchconfiguration/src/org/eclipse/efm/execution/launchconfiguration/ui/tabs/ExpertTab.java
index dc8c6e1..ae94df8 100644
--- a/execution/org.eclipse.efm.execution.launchconfiguration/src/org/eclipse/efm/execution/launchconfiguration/ui/tabs/ExpertTab.java
+++ b/execution/org.eclipse.efm.execution.launchconfiguration/src/org/eclipse/efm/execution/launchconfiguration/ui/tabs/ExpertTab.java
@@ -21,7 +21,7 @@
 	public ExpertTab(LaunchConfigurationTabGroup groupTab) {
 		super(groupTab);
 
-		contentCompositeManager = new ExpertConfigurationPage(this);
+		fContentCompositeManager = new ExpertConfigurationPage(this);
 
 		setHelpContextId(HelpContextIdConstants.sew_launch_Expert_tab);
 	}
diff --git a/execution/org.eclipse.efm.execution.launchconfiguration/src/org/eclipse/efm/execution/launchconfiguration/ui/tabs/OverviewTab.java b/execution/org.eclipse.efm.execution.launchconfiguration/src/org/eclipse/efm/execution/launchconfiguration/ui/tabs/OverviewTab.java
index 5e3a5b9..b49b470 100644
--- a/execution/org.eclipse.efm.execution.launchconfiguration/src/org/eclipse/efm/execution/launchconfiguration/ui/tabs/OverviewTab.java
+++ b/execution/org.eclipse.efm.execution.launchconfiguration/src/org/eclipse/efm/execution/launchconfiguration/ui/tabs/OverviewTab.java
@@ -26,7 +26,7 @@
 	public OverviewTab(LaunchConfigurationTabGroup groupTab) {
 		super(groupTab);
 
-		contentCompositeManager = new OverviewConfigurationPage(this);
+		fContentCompositeManager = new OverviewConfigurationPage(this);
 
 		setHelpContextId(HelpContextIdConstants.sew_launch_Main_tab);
 	}
diff --git a/execution/org.eclipse.efm.execution.launchconfiguration/src/org/eclipse/efm/execution/launchconfiguration/ui/tabs/SupervisorTab.java b/execution/org.eclipse.efm.execution.launchconfiguration/src/org/eclipse/efm/execution/launchconfiguration/ui/tabs/SupervisorTab.java
index 563287c..9c324fb 100644
--- a/execution/org.eclipse.efm.execution.launchconfiguration/src/org/eclipse/efm/execution/launchconfiguration/ui/tabs/SupervisorTab.java
+++ b/execution/org.eclipse.efm.execution.launchconfiguration/src/org/eclipse/efm/execution/launchconfiguration/ui/tabs/SupervisorTab.java
@@ -20,9 +20,9 @@
 	public SupervisorTab(LaunchConfigurationTabGroup groupTab) {
 		super(groupTab);
 
-		contentCompositeManager = new SupervisorConfigurationPage(this);
+		fContentCompositeManager = new SupervisorConfigurationPage(this);
 
-		setHelpContextId(HelpContextIdConstants.sew_launch_CommonCriteria_tab);
+		setHelpContextId(HelpContextIdConstants.sew_launch_Supervisor_tab);
 	}
 
 	@Override
diff --git a/execution/org.eclipse.efm.execution.launchconfiguration/src/org/eclipse/efm/execution/launchconfiguration/ui/tabs/TestGenerationTab.java b/execution/org.eclipse.efm.execution.launchconfiguration/src/org/eclipse/efm/execution/launchconfiguration/ui/tabs/TestGenerationTab.java
index 8e88630..50c80cd 100644
--- a/execution/org.eclipse.efm.execution.launchconfiguration/src/org/eclipse/efm/execution/launchconfiguration/ui/tabs/TestGenerationTab.java
+++ b/execution/org.eclipse.efm.execution.launchconfiguration/src/org/eclipse/efm/execution/launchconfiguration/ui/tabs/TestGenerationTab.java
@@ -25,7 +25,7 @@
 	public TestGenerationTab(LaunchConfigurationTabGroup groupTab) {
 		super(groupTab);
 
-		contentCompositeManager = new TestGenerationConfigurationPage(this);
+		fContentCompositeManager = new TestGenerationConfigurationPage(this);
 
 		setHelpContextId(HelpContextIdConstants.sew_launch_TestGeneration_tab);
 	}
diff --git a/execution/org.eclipse.efm.execution.ui.views/src/org/eclipse/efm/execution/ui/views/symbexlauncher/AbstractSymbexWorkflowView.java b/execution/org.eclipse.efm.execution.ui.views/src/org/eclipse/efm/execution/ui/views/symbexlauncher/AbstractSymbexWorkflowView.java
index 2287b18..16fc5d2 100644
--- a/execution/org.eclipse.efm.execution.ui.views/src/org/eclipse/efm/execution/ui/views/symbexlauncher/AbstractSymbexWorkflowView.java
+++ b/execution/org.eclipse.efm.execution.ui.views/src/org/eclipse/efm/execution/ui/views/symbexlauncher/AbstractSymbexWorkflowView.java
@@ -27,7 +27,6 @@
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.ui.IActionBars;
-import org.eclipse.ui.forms.widgets.FormToolkit;
 import org.eclipse.ui.forms.widgets.ScrolledForm;
 import org.eclipse.ui.part.ViewPart;
 
@@ -44,14 +43,13 @@
 
 	protected void setupFormFrame() {
 		toolkit = new FormWidgetToolkit(parentComposite.getDisplay());
+		
 		scrollform = toolkit.createScrolledForm(parentComposite);
 		//scrollform.setText("Run Configuration");
 		GridLayout layout = new GridLayout(1, false);
 		scrollform.getBody().setLayout(layout);
 
 		createMessageDisplayGraphics();
-		//scrollform.addHelpListener(listener);
-		//this.setHelpContextId("org.eclipse.efm.runconfiguration.efm_runconf_commoncriteria_tab");
 	}
 
 
@@ -108,11 +106,6 @@
 	///////////////////////////////////////////////////////////////////////////
 
 	@Override
-	public FormToolkit getFormToolkit() {
-		return toolkit;
-	}
-
-	@Override
 	public IWidgetToolkit getWidgetToolkit() {
 		return toolkit;
 	}
diff --git a/execution/org.eclipse.efm.execution.ui.views/src/org/eclipse/efm/execution/ui/views/symbexlauncher/FormWidgetToolkit.java b/execution/org.eclipse.efm.execution.ui.views/src/org/eclipse/efm/execution/ui/views/symbexlauncher/FormWidgetToolkit.java
index 9a9c85e..f2a452b 100644
--- a/execution/org.eclipse.efm.execution.ui.views/src/org/eclipse/efm/execution/ui/views/symbexlauncher/FormWidgetToolkit.java
+++ b/execution/org.eclipse.efm.execution.ui.views/src/org/eclipse/efm/execution/ui/views/symbexlauncher/FormWidgetToolkit.java
@@ -25,7 +25,6 @@
 import org.eclipse.swt.widgets.Button;
 import org.eclipse.swt.widgets.Combo;
 import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Group;
 import org.eclipse.swt.widgets.Label;
@@ -50,14 +49,14 @@
 	 * @param control the receiver
 	 * @param visible visible the new visibility state
 	 */
-	public void setVisibleAndEnabled(Control control, boolean visible) {
-		if( control instanceof ExpandableComposite ) {
-			((ExpandableComposite)control).setExpanded(visible);
+	public void setVisibleAndEnabled(Composite aComposite, boolean visible) {
+		if( aComposite instanceof ExpandableComposite ) {
+			((ExpandableComposite)aComposite).setExpanded(visible);
 		} else {
-			control.setVisible(visible);
+			propagateVisibility(aComposite, visible);
 		}
 		
-		control.setEnabled(visible);
+		aComposite.setEnabled(visible);
 	}
 	
 
diff --git a/execution/org.eclipse.efm.execution.ui.views/src/org/eclipse/efm/execution/ui/views/symbexlauncher/SymbexWorkflowView.java b/execution/org.eclipse.efm.execution.ui.views/src/org/eclipse/efm/execution/ui/views/symbexlauncher/SymbexWorkflowView.java
index 7a80fd4..5c65ad5 100644
--- a/execution/org.eclipse.efm.execution.ui.views/src/org/eclipse/efm/execution/ui/views/symbexlauncher/SymbexWorkflowView.java
+++ b/execution/org.eclipse.efm.execution.ui.views/src/org/eclipse/efm/execution/ui/views/symbexlauncher/SymbexWorkflowView.java
@@ -12,7 +12,6 @@
  *******************************************************************************/
 package org.eclipse.efm.execution.ui.views.symbexlauncher;
 
-import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.Map;
@@ -54,7 +53,8 @@
 
 	//public Set<SectionCompositeCreator> compositeSections;
 
-	private ArrayList<AbstractConfigurationPage> compMakers;
+	private AbstractConfigurationPage[] fConfigurationPages;
+	
 
 	protected Composite tabbedCompositeMaster;
 	protected CTabFolder fTabFolder;
@@ -189,11 +189,9 @@
 	}
 
 	
-	//private Map<Integer, AbstractCompositeMaker> quickDico;
-
 	private void createSectionsContent(IWidgetToolkit widgetToolkit)
 	{
-		compMakers = new ArrayList<AbstractConfigurationPage>();
+		fConfigurationPages = new AbstractConfigurationPage[3];
 
 		createOverviewTabItem(widgetToolkit);
 
@@ -203,6 +201,12 @@
 
 		fTabFolder.setSelection(fOverviewTabItem);
 	}
+	
+	
+	@Override
+	public AbstractConfigurationPage[] getConfigurationPages() {
+		return fConfigurationPages;
+	}
 
 
 	private CTabItem fOverviewTabItem;
@@ -233,15 +237,7 @@
 			fOverviewTabItem.setControl(scrolledComposite);
 		}
 
-		compMakers.add(overviewPage);
-//		quickDico.put(1, overviewPage);
-
-
-//		GridLayout gl = new GridLayout(1, false);
-//		control.setLayout(gl);
-//
-//		GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true);
-//		control.setLayoutData(gd);
+		fConfigurationPages[0] = overviewPage;
 	}
 
 
@@ -269,8 +265,7 @@
 			fSupervisorTabItem.setControl(scrolledComposite);
 		}
 
-		compMakers.add(supervisorPage);
-//		quickDico.put(3, supervisorPage);
+		fConfigurationPages[1] = supervisorPage;
 	}
 
 
@@ -298,8 +293,7 @@
 			fTestGenTabItem.setControl(scrolledComposite);
 		}
 
-		compMakers.add(testGenPage);
-//		quickDico.put(3, testGenPage);
+		fConfigurationPages[2] = testGenPage;
 	}
 
 
@@ -312,7 +306,7 @@
 	///////////////////////////////////////////////////////////////////////////
 	// Action utils
 	//
-	public void launchConfiguration(
+	private void execLaunchConfiguration(
 			final ILaunchConfiguration configuration, final String mode)
 	{
 		saveLaunchConfiguration( configuration );
@@ -340,7 +334,7 @@
 		ILaunchConfigurationWorkingCopy rwConfiguration;
 		try {
 			rwConfiguration = configuration.getWorkingCopy();
-			for(AbstractConfigurationPage acm : compMakers) {
+			for(AbstractConfigurationPage acm : fConfigurationPages) {
 				acm.applyUpdatesOnFieldValuesFrom(rwConfiguration);
 			}
 			rwConfiguration.doSave();
@@ -368,7 +362,7 @@
 		action_launch_runconf = new Action() {
 			public void run() {
 				if( launchConfigurationManager.hasSelection() ) {
-					launchConfiguration(
+					execLaunchConfiguration(
 							launchConfigurationManager.getSelection(),
 							ILaunchManager.RUN_MODE);
 				} else {
@@ -384,7 +378,7 @@
 		action_launch_debugconf = new Action() {
 			public void run() {
 				if( launchConfigurationManager.hasSelection() ) {
-					launchConfiguration(
+					execLaunchConfiguration(
 							launchConfigurationManager.getSelection(),
 							ILaunchManager.DEBUG_MODE);
 				} else {
@@ -460,7 +454,7 @@
 	private ILaunchConfigurationWorkingCopy fLasLaunchConfigurationWorkingCopy;
 
 	public void initializeFieldValuesFrom(ILaunchConfiguration configuration) {
-		for(AbstractConfigurationPage acm : compMakers) {
+		for(AbstractConfigurationPage acm : fConfigurationPages) {
 			acm.initializeFieldValuesFrom(configuration);
 		}
 
@@ -479,7 +473,7 @@
 					fLasLaunchConfigurationWorkingCopy = newcopy;
 					System.err.println("++++---- Biopp");
 
-					for(AbstractConfigurationPage acm : compMakers) {
+					for(AbstractConfigurationPage acm : fConfigurationPages) {
 						acm.initializeFieldValuesFrom(selectedLC);
 					}
 				}
