diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/AbstractPluginBlock.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/AbstractPluginBlock.java
index 4d29880..e79d6cf 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/AbstractPluginBlock.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/AbstractPluginBlock.java
@@ -89,6 +89,11 @@
 	private Button fDefaultsButton;
 	private Button fFilterButton;
 
+	/**
+	 * The configuration this block is currently displaying or <code>null</code>
+	 * if none set.
+	 */
+	protected ILaunchConfiguration fLaunchConfig;
 	private Listener fListener = new Listener();
 
 	private Label fCounter;
@@ -322,7 +327,6 @@
 			fAddWorkspaceButton = createButton(parent, span, indent, NLS.bind(PDEUIMessages.AdvancedLauncherTab_addNew, fTab.getName().toLowerCase(Locale.ENGLISH)));
 		}
 
-
 		GridData gd = new GridData(GridData.FILL_HORIZONTAL);
 		gd.horizontalSpan = span;
 		Label label = new Label(parent, SWT.SEPARATOR | SWT.HORIZONTAL);
@@ -772,12 +776,11 @@
 	 * @throws CoreException
 	 */
 	public void initializeFrom(ILaunchConfiguration config, boolean enableTable) throws CoreException {
+		fLaunchConfig = config;
+		initializeButtonsFrom(config);
 		levelColumnCache = new HashMap<>();
 		autoColumnCache = new HashMap<>();
 		fPluginFilteredTree.getPatternFilter().setPattern(null);
-		fIncludeOptionalButton.setSelection(config.getAttribute(IPDELauncherConstants.INCLUDE_OPTIONAL, true));
-		fAddWorkspaceButton.setSelection(config.getAttribute(IPDELauncherConstants.AUTOMATIC_ADD, true));
-		fAutoValidate.setSelection(config.getAttribute(IPDELauncherConstants.AUTOMATIC_VALIDATE, true));
 		if (!enableTable) {
 			fPluginTreeViewer.setInput(null);
 		} else if (fPluginTreeViewer.getInput() == null) {
@@ -785,6 +788,12 @@
 			fPluginTreeViewer.setInput(PDEPlugin.getDefault());
 			fPluginTreeViewer.reveal(fWorkspacePlugins);
 		}
+	}
+
+	protected void initializeButtonsFrom(ILaunchConfiguration config) throws CoreException {
+		fIncludeOptionalButton.setSelection(config.getAttribute(IPDELauncherConstants.INCLUDE_OPTIONAL, true));
+		fAddWorkspaceButton.setSelection(config.getAttribute(IPDELauncherConstants.AUTOMATIC_ADD, true));
+		fAutoValidate.setSelection(config.getAttribute(IPDELauncherConstants.AUTOMATIC_VALIDATE, true));
 		fFilterButton.setSelection(config.getAttribute(IPDELauncherConstants.SHOW_SELECTED_ONLY, false));
 	}
 
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/OSGiBundleBlock.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/OSGiBundleBlock.java
index b91f27b..7014274 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/OSGiBundleBlock.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/OSGiBundleBlock.java
@@ -27,8 +27,6 @@
 
 public class OSGiBundleBlock extends AbstractPluginBlock {
 
-	private ILaunchConfiguration fLaunchConfiguration;
-
 	public OSGiBundleBlock(BundlesTab tab) {
 		super(tab);
 	}
@@ -69,7 +67,6 @@
 	public void initializeFrom(ILaunchConfiguration configuration) throws CoreException {
 		super.initializeFrom(configuration, true);
 		initializePluginsState(configuration);
-		fLaunchConfiguration = configuration;
 	}
 
 	// TODO deal with the discrepency between save/init states of the two blocks
@@ -81,8 +78,8 @@
 
 	@Override
 	protected LaunchValidationOperation createValidationOperation() throws CoreException {
-		Set<IPluginModelBase> models = BundleLauncherHelper.getMergedBundleMap(fLaunchConfiguration, true).keySet();
-		return new LaunchValidationOperation(fLaunchConfiguration, models);
+		Set<IPluginModelBase> models = BundleLauncherHelper.getMergedBundleMap(fLaunchConfig, true).keySet();
+		return new LaunchValidationOperation(fLaunchConfig, models);
 	}
 
 }
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/PluginBlock.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/PluginBlock.java
index cf27c76..82e920c 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/PluginBlock.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/PluginBlock.java
@@ -31,10 +31,6 @@
 public class PluginBlock extends AbstractPluginBlock {
 
 	/**
-	 * The configuration this block is currently displaying or <code>null</code> if none set
-	 */
-	protected ILaunchConfiguration fLaunchConfig;
-	/**
 	 * Whether the controls have been initialized for fLaunchConfig
 	 */
 	protected boolean fIsEnabled = false;
@@ -51,13 +47,12 @@
 
 	@Override
 	public void initializeFrom(ILaunchConfiguration config, boolean enableTable) throws CoreException {
-
+		super.initializeButtonsFrom(config);
 		if (fLaunchConfig != null && fLaunchConfig.equals(config) && fIsEnabled == enableTable) {
 			// Do nothing
 			return;
 		}
 
-		fLaunchConfig = config;
 		fIsEnabled = enableTable;
 
 		super.initializeFrom(config, enableTable);
