diff --git a/build/org.eclipse.cdt.autotools.ui/src/org/eclipse/cdt/internal/autotools/ui/preferences/AutoconfEditorPreferencePage.java b/build/org.eclipse.cdt.autotools.ui/src/org/eclipse/cdt/internal/autotools/ui/preferences/AutoconfEditorPreferencePage.java
index ad5fbb4..bc375d8 100644
--- a/build/org.eclipse.cdt.autotools.ui/src/org/eclipse/cdt/internal/autotools/ui/preferences/AutoconfEditorPreferencePage.java
+++ b/build/org.eclipse.cdt.autotools.ui/src/org/eclipse/cdt/internal/autotools/ui/preferences/AutoconfEditorPreferencePage.java
@@ -30,6 +30,8 @@
 import org.eclipse.jface.viewers.TableViewer;
 import org.eclipse.jface.viewers.Viewer;
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.CTabFolder;
+import org.eclipse.swt.custom.CTabItem;
 import org.eclipse.swt.events.SelectionAdapter;
 import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.graphics.Color;
@@ -41,8 +43,6 @@
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.TabFolder;
-import org.eclipse.swt.widgets.TabItem;
 import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.model.WorkbenchViewerComparator;
 
@@ -259,21 +259,22 @@
 		getOverlayStore().load();
 		getOverlayStore().start();
 
-		TabFolder folder = new TabFolder(parent, SWT.NONE);
+		CTabFolder folder = new CTabFolder(parent, SWT.NONE);
 		folder.setLayout(new TabFolderLayout());
 		folder.setLayoutData(new GridData(GridData.FILL_BOTH));
 
-		TabItem item = new TabItem(folder, SWT.NONE);
+		CTabItem item = new CTabItem(folder, SWT.NONE);
+		folder.setSelection(0);
 		item.setText(AutotoolsPreferencesMessages.getString("AutomakeEditorPreferencePage.syntax")); //$NON-NLS-1$
 		item.setControl(createSyntaxPage(folder));
 
-		item = new TabItem(folder, SWT.NONE);
+		item = new CTabItem(folder, SWT.NONE);
 		item.setText(AutotoolsPreferencesMessages.getString("AutoconfEditorPreferencePage.folding")); //$NON-NLS-1$
 		item.setControl(createFoldingTabContent(folder));
 
 		// Allow end-user to select which version of autoconf to use for hover help
 		// and syntax checking of macros.
-		item = new TabItem(folder, SWT.NONE);
+		item = new CTabItem(folder, SWT.NONE);
 		item.setText(AutotoolsPreferencesMessages.getString("AutoconfEditorPreferencePage.version")); //$NON-NLS-1$
 		item.setControl(createVersionTabContent(folder));
 
@@ -447,7 +448,7 @@
 		return colorComposite;
 	}
 
-	private Composite createFoldingTabContent(TabFolder folder) {
+	private Composite createFoldingTabContent(CTabFolder folder) {
 		Composite composite = new Composite(folder, SWT.NULL);
 		// assume parent page uses griddata
 		GridData gd = new GridData(GridData.HORIZONTAL_ALIGN_CENTER | GridData.VERTICAL_ALIGN_FILL);
@@ -474,7 +475,7 @@
 		return composite;
 	}
 
-	private Composite createVersionTabContent(TabFolder folder) {
+	private Composite createVersionTabContent(CTabFolder folder) {
 		Composite composite = new Composite(folder, SWT.NULL);
 		// assume parent page uses griddata
 		GridData gd = new GridData(GridData.HORIZONTAL_ALIGN_CENTER | GridData.VERTICAL_ALIGN_FILL);
diff --git a/build/org.eclipse.cdt.autotools.ui/src/org/eclipse/cdt/internal/autotools/ui/preferences/AutomakeEditorPreferencePage.java b/build/org.eclipse.cdt.autotools.ui/src/org/eclipse/cdt/internal/autotools/ui/preferences/AutomakeEditorPreferencePage.java
index ef767c9..2d3e473 100644
--- a/build/org.eclipse.cdt.autotools.ui/src/org/eclipse/cdt/internal/autotools/ui/preferences/AutomakeEditorPreferencePage.java
+++ b/build/org.eclipse.cdt.autotools.ui/src/org/eclipse/cdt/internal/autotools/ui/preferences/AutomakeEditorPreferencePage.java
@@ -30,6 +30,8 @@
 import org.eclipse.jface.viewers.TableViewer;
 import org.eclipse.jface.viewers.Viewer;
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.CTabFolder;
+import org.eclipse.swt.custom.CTabItem;
 import org.eclipse.swt.events.SelectionAdapter;
 import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.graphics.Color;
@@ -40,8 +42,6 @@
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.TabFolder;
-import org.eclipse.swt.widgets.TabItem;
 import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.model.WorkbenchViewerComparator;
 
@@ -238,15 +238,16 @@
 		getOverlayStore().load();
 		getOverlayStore().start();
 
-		TabFolder folder = new TabFolder(parent, SWT.NONE);
+		CTabFolder folder = new CTabFolder(parent, SWT.NONE);
 		folder.setLayout(new TabFolderLayout());
 		folder.setLayoutData(new GridData(GridData.FILL_BOTH));
 
-		TabItem item = new TabItem(folder, SWT.NONE);
+		CTabItem item = new CTabItem(folder, SWT.NONE);
+		folder.setSelection(0);
 		item.setText(AutotoolsPreferencesMessages.getString("AutomakeEditorPreferencePage.syntax")); //$NON-NLS-1$
 		item.setControl(createSyntaxPage(folder));
 
-		item = new TabItem(folder, SWT.NONE);
+		item = new CTabItem(folder, SWT.NONE);
 		item.setText(AutotoolsPreferencesMessages.getString("AutomakeEditorPreferencePage.folding")); //$NON-NLS-1$
 		item.setControl(createFoldingTabContent(folder));
 
@@ -380,7 +381,7 @@
 		return colorComposite;
 	}
 
-	private Composite createFoldingTabContent(TabFolder folder) {
+	private Composite createFoldingTabContent(CTabFolder folder) {
 		Composite composite = new Composite(folder, SWT.NULL);
 		// assume parent page uses griddata
 		GridData gd = new GridData(GridData.HORIZONTAL_ALIGN_CENTER | GridData.VERTICAL_ALIGN_FILL);
diff --git a/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/internal/ui/preferences/MakefileEditorPreferencePage.java b/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/internal/ui/preferences/MakefileEditorPreferencePage.java
index 1ba6318..edeb814 100644
--- a/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/internal/ui/preferences/MakefileEditorPreferencePage.java
+++ b/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/internal/ui/preferences/MakefileEditorPreferencePage.java
@@ -36,6 +36,8 @@
 import org.eclipse.jface.viewers.TableViewer;
 import org.eclipse.jface.viewers.Viewer;
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.CTabFolder;
+import org.eclipse.swt.custom.CTabItem;
 import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.events.SelectionListener;
 import org.eclipse.swt.graphics.Color;
@@ -46,8 +48,6 @@
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.TabFolder;
-import org.eclipse.swt.widgets.TabItem;
 import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.model.WorkbenchViewerComparator;
 
@@ -246,15 +246,16 @@
 		getOverlayStore().load();
 		getOverlayStore().start();
 
-		TabFolder folder = new TabFolder(parent, SWT.NONE);
+		CTabFolder folder = new CTabFolder(parent, SWT.NONE);
 		folder.setLayout(new TabFolderLayout());
 		folder.setLayoutData(new GridData(GridData.FILL_BOTH));
 
-		TabItem item = new TabItem(folder, SWT.NONE);
+		CTabItem item = new CTabItem(folder, SWT.NONE);
+		folder.setSelection(0);
 		item.setText(MakefilePreferencesMessages.getString("MakefileEditorPreferencePage.syntax")); //$NON-NLS-1$
 		item.setControl(createSyntaxPage(folder));
 
-		item = new TabItem(folder, SWT.NONE);
+		item = new CTabItem(folder, SWT.NONE);
 		item.setText(MakefilePreferencesMessages.getString("MakefileEditorPreferencePage.folding")); //$NON-NLS-1$
 		item.setControl(createFoldingTabContent(folder));
 
@@ -406,7 +407,7 @@
 		return colorComposite;
 	}
 
-	private Composite createFoldingTabContent(TabFolder folder) {
+	private Composite createFoldingTabContent(CTabFolder folder) {
 		Composite composite = new Composite(folder, SWT.NULL);
 		// assume parent page uses griddata
 		GridData gd = new GridData(GridData.HORIZONTAL_ALIGN_CENTER | GridData.VERTICAL_ALIGN_FILL);
diff --git a/codan/org.eclipse.cdt.codan.ui/src/org/eclipse/cdt/codan/internal/ui/widgets/CustomizeProblemComposite.java b/codan/org.eclipse.cdt.codan.ui/src/org/eclipse/cdt/codan/internal/ui/widgets/CustomizeProblemComposite.java
index 564153e..c272b62 100644
--- a/codan/org.eclipse.cdt.codan.ui/src/org/eclipse/cdt/codan/internal/ui/widgets/CustomizeProblemComposite.java
+++ b/codan/org.eclipse.cdt.codan.ui/src/org/eclipse/cdt/codan/internal/ui/widgets/CustomizeProblemComposite.java
@@ -18,11 +18,11 @@
 import org.eclipse.cdt.codan.internal.ui.CodanUIMessages;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.CTabFolder;
+import org.eclipse.swt.custom.CTabItem;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.TabFolder;
-import org.eclipse.swt.widgets.TabItem;
 
 /**
  * Composite for problem customisable parameters
@@ -47,12 +47,13 @@
 		this.setLayout(new GridLayout(1, false));
 		this.problem = selectedProblem;
 		this.resource = resource;
-		final TabFolder tabFolder = new TabFolder(this, SWT.TOP);
+		final CTabFolder tabFolder = new CTabFolder(this, SWT.TOP);
 		tabFolder.setLayoutData(new GridData(GridData.FILL_BOTH));
 		// createMainTab(tabFolder);
 		createParamtersTab(tabFolder, combined);
 		createScopeTab(tabFolder);
 		createLaunchingTab(tabFolder);
+		tabFolder.setSelection(0);
 	}
 
 	public void save(IProblemWorkingCopy problem) {
@@ -64,8 +65,8 @@
 	/**
 	 * @param tabFolder
 	 */
-	private void createParamtersTab(TabFolder tabFolder, boolean combined) {
-		TabItem tabItem1 = new TabItem(tabFolder, SWT.NULL);
+	private void createParamtersTab(CTabFolder tabFolder, boolean combined) {
+		CTabItem tabItem1 = new CTabItem(tabFolder, SWT.NULL);
 		tabItem1.setText(CodanUIMessages.CustomizeProblemComposite_TabParameters);
 		parametersTab = new Composite(tabFolder, SWT.NONE);
 		tabItem1.setControl(parametersTab);
@@ -77,8 +78,8 @@
 	/**
 	 * @param tabFolder
 	 */
-	private void createScopeTab(TabFolder tabFolder) {
-		TabItem tabItem1 = new TabItem(tabFolder, SWT.NULL);
+	private void createScopeTab(CTabFolder tabFolder) {
+		CTabItem tabItem1 = new CTabItem(tabFolder, SWT.NULL);
 		tabItem1.setText(CodanUIMessages.CustomizeProblemComposite_TabScope);
 		Composite comp = new Composite(tabFolder, SWT.NONE);
 		tabItem1.setControl(comp);
@@ -87,8 +88,8 @@
 		scopeComposite.setLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING, true, false));
 	}
 
-	private void createLaunchingTab(TabFolder tabFolder) {
-		TabItem tabItem1 = new TabItem(tabFolder, SWT.NULL);
+	private void createLaunchingTab(CTabFolder tabFolder) {
+		CTabItem tabItem1 = new CTabItem(tabFolder, SWT.NULL);
 		tabItem1.setText(CodanUIMessages.CustomizeProblemComposite_LaunchingTab);
 		Composite comp = new Composite(tabFolder, SWT.NONE);
 		tabItem1.setControl(comp);
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/TabConfigurationBlock.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/TabConfigurationBlock.java
index 2760aeb..9336285 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/TabConfigurationBlock.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/TabConfigurationBlock.java
@@ -24,14 +24,14 @@
 import org.eclipse.jface.dialogs.Dialog;
 import org.eclipse.jface.layout.PixelConverter;
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.CTabFolder;
+import org.eclipse.swt.custom.CTabItem;
 import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.events.SelectionListener;
 import org.eclipse.swt.layout.FillLayout;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.TabFolder;
-import org.eclipse.swt.widgets.TabItem;
 import org.eclipse.ui.preferences.IWorkbenchPreferenceContainer;
 
 /**
@@ -75,12 +75,12 @@
 	@Override
 	protected Control createContents(Composite parent) {
 		PixelConverter pixelConverter = new PixelConverter(parent);
-		final TabFolder folder = new TabFolder(parent, SWT.NONE);
+		final CTabFolder folder = new CTabFolder(parent, SWT.NONE);
 		folder.setLayout(new TabFolderLayout());
 		folder.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false));
 
 		for (int i = 0; i < fTabs.length; i++) {
-			TabItem item = new TabItem(folder, SWT.NONE);
+			CTabItem item = new CTabItem(folder, SWT.NONE);
 			item.setText(fTabLabels[i]);
 			Composite composite = new Composite(folder, SWT.NONE);
 			FillLayout layout = new FillLayout();
@@ -91,6 +91,7 @@
 			item.setData(fTabs[i]);
 			fTabs[i].createContents(composite);
 		}
+		folder.setSelection(0);
 		Dialog.applyDialogFont(folder);
 		folder.addSelectionListener(new SelectionListener() {
 			@Override
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/formatter/ModifyDialog.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/formatter/ModifyDialog.java
index 6b17b47..cb4506e 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/formatter/ModifyDialog.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/formatter/ModifyDialog.java
@@ -42,6 +42,8 @@
 import org.eclipse.jface.dialogs.MessageDialog;
 import org.eclipse.jface.dialogs.StatusDialog;
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.CTabFolder;
+import org.eclipse.swt.custom.CTabItem;
 import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.events.SelectionListener;
 import org.eclipse.swt.graphics.Point;
@@ -54,8 +56,6 @@
 import org.eclipse.swt.widgets.FileDialog;
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.TabFolder;
-import org.eclipse.swt.widgets.TabItem;
 
 public abstract class ModifyDialog extends StatusDialog implements IModifyDialogTabPage.IModificationListener {
 
@@ -88,7 +88,7 @@
 	private final Map<String, String> fWorkingValues;
 	private final List<IModifyDialogTabPage> fTabPages;
 	private final IDialogSettings fDialogSettings;
-	private TabFolder fTabFolder;
+	private CTabFolder fTabFolder;
 	private final ProfileManager fProfileManager;
 	private Button fApplyButton;
 	private Button fSaveButton;
@@ -137,7 +137,7 @@
 
 		if (!fNewProfile) {
 			fTabFolder.setSelection(lastFocusNr);
-			((IModifyDialogTabPage) fTabFolder.getSelection()[0].getData()).setInitialFocus();
+			((IModifyDialogTabPage) fTabFolder.getSelection().getData()).setInitialFocus();
 		}
 	}
 
@@ -165,11 +165,14 @@
 
 		fSaveButton = createButton(nameComposite, SAVE_BUTTON_ID, FormatterMessages.ModifyDialog_Export_Button, false);
 
-		fTabFolder = new TabFolder(composite, SWT.NONE);
+		fTabFolder = new CTabFolder(composite, SWT.NONE);
 		fTabFolder.setFont(composite.getFont());
 		fTabFolder.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
 
 		addPages(fWorkingValues);
+		if (fTabFolder.getSelection() == null) {
+			fTabFolder.setSelection(0);
+		}
 
 		applyDialogFont(composite);
 
@@ -180,7 +183,7 @@
 
 			@Override
 			public void widgetSelected(SelectionEvent e) {
-				final TabItem tabItem = (TabItem) e.item;
+				final CTabItem tabItem = (CTabItem) e.item;
 				final IModifyDialogTabPage page = (IModifyDialogTabPage) tabItem.getData();
 				//				page.fSashForm.setWeights();
 				fDialogSettings.put(fKeyLastFocus, fTabPages.indexOf(page));
@@ -330,7 +333,7 @@
 	}
 
 	protected final void addTabPage(String title, IModifyDialogTabPage tabPage) {
-		final TabItem tabItem = new TabItem(fTabFolder, SWT.NONE);
+		final CTabItem tabItem = new CTabItem(fTabFolder, SWT.NONE);
 		applyDialogFont(tabItem.getControl());
 		tabItem.setText(title);
 		tabItem.setData(tabPage);
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/dialogs/TabFolderOptionBlock.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/dialogs/TabFolderOptionBlock.java
index d0c51fc..d564a8c 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/dialogs/TabFolderOptionBlock.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/dialogs/TabFolderOptionBlock.java
@@ -25,6 +25,8 @@
 import org.eclipse.core.runtime.SubMonitor;
 import org.eclipse.osgi.util.NLS;
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.CTabFolder;
+import org.eclipse.swt.custom.CTabItem;
 import org.eclipse.swt.events.SelectionAdapter;
 import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.graphics.Image;
@@ -33,7 +35,6 @@
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.TabFolder;
 import org.eclipse.swt.widgets.TabItem;
 
 public abstract class TabFolderOptionBlock {
@@ -49,7 +50,7 @@
 	protected ICOptionContainer fParent;
 	private ICOptionPage fCurrentPage;
 
-	private TabFolder fFolder;
+	private CTabFolder fFolder;
 
 	public TabFolderOptionBlock(boolean showMessageArea) {
 		bShowMessageArea = showMessageArea;
@@ -116,7 +117,7 @@
 	}
 
 	protected void createFolder(Composite parent) {
-		fFolder = new TabFolder(parent, SWT.NONE);
+		fFolder = new CTabFolder(parent, SWT.NONE);
 		fFolder.setLayoutData(new GridData(GridData.FILL_BOTH));
 		fFolder.setLayout(new TabFolderLayout());
 
@@ -133,7 +134,7 @@
 	}
 
 	protected void addTab(ICOptionPage tab) {
-		TabItem item = new TabItem(fFolder, SWT.NONE);
+		CTabItem item = new CTabItem(fFolder, SWT.NONE);
 		item.setText(tab.getTitle());
 		Image img = tab.getImage();
 		if (img != null)
@@ -143,6 +144,9 @@
 		tab.createControl(item.getParent());
 		item.setControl(tab.getControl());
 		addOptionPage(tab);
+		if (fFolder.getSelection() == null) {
+			fFolder.setSelection(item);
+		}
 	}
 
 	abstract protected void addTabs();
diff --git a/cross/org.eclipse.cdt.launch.remote/src/org/eclipse/cdt/launch/remote/tabs/RemoteDSFGDBDebuggerPage.java b/cross/org.eclipse.cdt.launch.remote/src/org/eclipse/cdt/launch/remote/tabs/RemoteDSFGDBDebuggerPage.java
index c626617..068feea 100644
--- a/cross/org.eclipse.cdt.launch.remote/src/org/eclipse/cdt/launch/remote/tabs/RemoteDSFGDBDebuggerPage.java
+++ b/cross/org.eclipse.cdt.launch.remote/src/org/eclipse/cdt/launch/remote/tabs/RemoteDSFGDBDebuggerPage.java
@@ -26,6 +26,8 @@
 import org.eclipse.debug.core.ILaunchConfiguration;
 import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.CTabFolder;
+import org.eclipse.swt.custom.CTabItem;
 import org.eclipse.swt.events.ModifyEvent;
 import org.eclipse.swt.events.ModifyListener;
 import org.eclipse.swt.events.SelectionAdapter;
@@ -35,8 +37,6 @@
 import org.eclipse.swt.widgets.Button;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.TabFolder;
-import org.eclipse.swt.widgets.TabItem;
 import org.eclipse.swt.widgets.Text;
 
 public class RemoteDSFGDBDebuggerPage extends GdbDebuggerPage {
@@ -145,8 +145,8 @@
 		configuration.setAttribute(IGDBLaunchConfigurationConstants.ATTR_DEBUGGER_REMOTE_TIMEOUT_VALUE, str);
 	}
 
-	protected void createGdbserverSettingsTab(TabFolder tabFolder) {
-		TabItem tabItem = new TabItem(tabFolder, SWT.NONE);
+	protected void createGdbserverSettingsTab(CTabFolder tabFolder) {
+		CTabItem tabItem = new CTabItem(tabFolder, SWT.NONE);
 		tabItem.setText(Messages.Gdbserver_Settings_Tab_Name);
 
 		Composite comp = new Composite(tabFolder, SWT.NULL);
@@ -239,11 +239,8 @@
 		fRemoteTimeoutValueText.setEnabled(fRemoteTimeoutEnabledCheckbox.getSelection());
 	}
 
-	/* (non-Javadoc)
-	 * @see org.eclipse.cdt.debug.mi.internal.ui.GDBDebuggerPage#createTabs(org.eclipse.swt.widgets.TabFolder)
-	 */
 	@Override
-	public void createTabs(TabFolder tabFolder) {
+	public void createTabs(CTabFolder tabFolder) {
 		super.createTabs(tabFolder);
 		createGdbserverSettingsTab(tabFolder);
 	}
diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/launching/GdbCoreDebuggerPage.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/launching/GdbCoreDebuggerPage.java
index d645e5c..acb289b 100644
--- a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/launching/GdbCoreDebuggerPage.java
+++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/launching/GdbCoreDebuggerPage.java
@@ -27,6 +27,8 @@
 import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
 import org.eclipse.jface.preference.IPreferenceStore;
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.CTabFolder;
+import org.eclipse.swt.custom.CTabItem;
 import org.eclipse.swt.events.ModifyEvent;
 import org.eclipse.swt.events.ModifyListener;
 import org.eclipse.swt.events.SelectionAdapter;
@@ -38,8 +40,6 @@
 import org.eclipse.swt.widgets.FileDialog;
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.TabFolder;
-import org.eclipse.swt.widgets.TabItem;
 import org.eclipse.swt.widgets.Text;
 
 /**
@@ -49,7 +49,7 @@
  * @since 2.0
  */
 public class GdbCoreDebuggerPage extends AbstractCDebuggerPage implements Observer {
-	protected TabFolder fTabFolder;
+	protected CTabFolder fTabFolder;
 	protected Text fGDBCommandText;
 	protected Text fGDBInitText;
 
@@ -61,7 +61,7 @@
 		Composite comp = new Composite(parent, SWT.NONE);
 		comp.setLayout(new GridLayout());
 		comp.setLayoutData(new GridData(GridData.FILL_BOTH));
-		fTabFolder = new TabFolder(comp, SWT.NONE);
+		fTabFolder = new CTabFolder(comp, SWT.NONE);
 		fTabFolder.setLayoutData(new GridData(GridData.FILL_BOTH | GridData.GRAB_VERTICAL));
 		createTabs(fTabFolder);
 		fTabFolder.setSelection(0);
@@ -163,13 +163,13 @@
 		return block;
 	}
 
-	public void createTabs(TabFolder tabFolder) {
+	public void createTabs(CTabFolder tabFolder) {
 		createMainTab(tabFolder);
 		createSolibTab(tabFolder);
 	}
 
-	public void createMainTab(TabFolder tabFolder) {
-		TabItem tabItem = new TabItem(tabFolder, SWT.NONE);
+	public void createMainTab(CTabFolder tabFolder) {
+		CTabItem tabItem = new CTabItem(tabFolder, SWT.NONE);
 		tabItem.setText(LaunchUIMessages.getString("GDBDebuggerPage.main_tab_name")); //$NON-NLS-1$
 		Composite comp = ControlFactory.createCompositeEx(tabFolder, 1, GridData.FILL_BOTH);
 		((GridLayout) comp.getLayout()).makeColumnsEqualWidth = false;
@@ -269,8 +269,8 @@
 		label.setLayoutData(gd);
 	}
 
-	public void createSolibTab(TabFolder tabFolder) {
-		TabItem tabItem = new TabItem(tabFolder, SWT.NONE);
+	public void createSolibTab(CTabFolder tabFolder) {
+		CTabItem tabItem = new CTabItem(tabFolder, SWT.NONE);
 		tabItem.setText(LaunchUIMessages.getString("GDBDebuggerPage.shared_libraries")); //$NON-NLS-1$
 		Composite comp = ControlFactory.createCompositeEx(fTabFolder, 1, GridData.FILL_BOTH);
 		comp.setFont(tabFolder.getFont());
diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/launching/GdbDebuggerPage.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/launching/GdbDebuggerPage.java
index 03f9c5c..50b1a69 100644
--- a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/launching/GdbDebuggerPage.java
+++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/launching/GdbDebuggerPage.java
@@ -33,6 +33,8 @@
 import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
 import org.eclipse.jface.preference.IPreferenceStore;
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.CTabFolder;
+import org.eclipse.swt.custom.CTabItem;
 import org.eclipse.swt.events.ModifyEvent;
 import org.eclipse.swt.events.ModifyListener;
 import org.eclipse.swt.events.SelectionAdapter;
@@ -45,8 +47,6 @@
 import org.eclipse.swt.widgets.FileDialog;
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.TabFolder;
-import org.eclipse.swt.widgets.TabItem;
 import org.eclipse.swt.widgets.Text;
 import org.eclipse.ui.PlatformUI;
 
@@ -54,7 +54,7 @@
  * The dynamic tab for gdb-based debugger implementations.
  */
 public class GdbDebuggerPage extends AbstractCDebuggerPage implements Observer {
-	protected TabFolder fTabFolder;
+	protected CTabFolder fTabFolder;
 	protected Text fGDBCommandText;
 	protected Text fGDBInitText;
 	protected Button fNonStopCheckBox;
@@ -95,7 +95,7 @@
 		Composite comp = new Composite(parent, SWT.NONE);
 		comp.setLayout(new GridLayout());
 		comp.setLayoutData(new GridData(GridData.FILL_BOTH));
-		fTabFolder = new TabFolder(comp, SWT.NONE);
+		fTabFolder = new CTabFolder(comp, SWT.NONE);
 		fTabFolder.setLayoutData(new GridData(GridData.FILL_BOTH | GridData.GRAB_VERTICAL));
 		createTabs(fTabFolder);
 		fTabFolder.setSelection(0);
@@ -373,7 +373,7 @@
 		return block;
 	}
 
-	public void createTabs(TabFolder tabFolder) {
+	public void createTabs(CTabFolder tabFolder) {
 		createMainTab(tabFolder);
 		createSolibTab(tabFolder);
 		if (System.getenv("FLATPAK_SANDBOX_DIR") != null) { //$NON-NLS-1$
@@ -381,8 +381,8 @@
 		}
 	}
 
-	public void createFlatpakTab(TabFolder tabFolder) {
-		TabItem tabItem = new TabItem(tabFolder, SWT.NONE);
+	public void createFlatpakTab(CTabFolder tabFolder) {
+		CTabItem tabItem = new CTabItem(tabFolder, SWT.NONE);
 		tabItem.setText(LaunchUIMessages.getString("GDBDebuggerPage.flatpak_tab_name")); //$NON-NLS-1$
 		Composite comp = ControlFactory.createCompositeEx(tabFolder, 1, GridData.FILL_BOTH);
 		((GridLayout) comp.getLayout()).makeColumnsEqualWidth = false;
@@ -459,8 +459,8 @@
 		fRemoteTimeoutValueText.setEnabled(fRemoteTimeoutEnabledCheckbox.getSelection());
 	}
 
-	public void createMainTab(TabFolder tabFolder) {
-		TabItem tabItem = new TabItem(tabFolder, SWT.NONE);
+	public void createMainTab(CTabFolder tabFolder) {
+		CTabItem tabItem = new CTabItem(tabFolder, SWT.NONE);
 		tabItem.setText(LaunchUIMessages.getString("GDBDebuggerPage.main_tab_name")); //$NON-NLS-1$
 		Composite comp = ControlFactory.createCompositeEx(tabFolder, 1, GridData.FILL_BOTH);
 		((GridLayout) comp.getLayout()).makeColumnsEqualWidth = false;
@@ -622,8 +622,8 @@
 		fReverseDebugMode.select(0);
 	}
 
-	public void createSolibTab(TabFolder tabFolder) {
-		TabItem tabItem = new TabItem(tabFolder, SWT.NONE);
+	public void createSolibTab(CTabFolder tabFolder) {
+		CTabItem tabItem = new CTabItem(tabFolder, SWT.NONE);
 		tabItem.setText(LaunchUIMessages.getString("GDBDebuggerPage.shared_libraries")); //$NON-NLS-1$
 		Composite comp = ControlFactory.createCompositeEx(fTabFolder, 1, GridData.FILL_BOTH);
 		comp.setFont(tabFolder.getFont());
diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/launching/GdbServerDebuggerPage.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/launching/GdbServerDebuggerPage.java
index 05c6e41..9a6ffe4 100644
--- a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/launching/GdbServerDebuggerPage.java
+++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/launching/GdbServerDebuggerPage.java
@@ -29,12 +29,12 @@
 import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
 import org.eclipse.jface.layout.PixelConverter;
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.CTabFolder;
+import org.eclipse.swt.custom.CTabItem;
 import org.eclipse.swt.custom.StackLayout;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.TabFolder;
-import org.eclipse.swt.widgets.TabItem;
 
 /**
  * The dynamic debugger tab for remote launches using gdb server.
@@ -71,8 +71,8 @@
 		createRemoteTimeoutFields();
 	}
 
-	protected void createConnectionTab(TabFolder tabFolder) {
-		TabItem tabItem = new TabItem(tabFolder, SWT.NONE);
+	protected void createConnectionTab(CTabFolder tabFolder) {
+		CTabItem tabItem = new CTabItem(tabFolder, SWT.NONE);
 		tabItem.setText(LaunchUIMessages.getString("GDBServerDebuggerPage.10")); //$NON-NLS-1$
 		Composite comp1 = ControlFactory.createCompositeEx(tabFolder, 1, GridData.FILL_BOTH);
 		((GridLayout) comp1.getLayout()).makeColumnsEqualWidth = false;
@@ -260,7 +260,7 @@
 	}
 
 	@Override
-	public void createTabs(TabFolder tabFolder) {
+	public void createTabs(CTabFolder tabFolder) {
 		super.createTabs(tabFolder);
 		createConnectionTab(tabFolder);
 	}
diff --git a/launch/org.eclipse.cdt.docker.launcher/src/org/eclipse/cdt/internal/docker/launcher/GdbDebuggerPage.java b/launch/org.eclipse.cdt.docker.launcher/src/org/eclipse/cdt/internal/docker/launcher/GdbDebuggerPage.java
index ee973c3..ec5badd 100644
--- a/launch/org.eclipse.cdt.docker.launcher/src/org/eclipse/cdt/internal/docker/launcher/GdbDebuggerPage.java
+++ b/launch/org.eclipse.cdt.docker.launcher/src/org/eclipse/cdt/internal/docker/launcher/GdbDebuggerPage.java
@@ -31,6 +31,8 @@
 import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
 import org.eclipse.jface.preference.IPreferenceStore;
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.CTabFolder;
+import org.eclipse.swt.custom.CTabItem;
 import org.eclipse.swt.events.ModifyEvent;
 import org.eclipse.swt.events.ModifyListener;
 import org.eclipse.swt.events.SelectionAdapter;
@@ -44,8 +46,6 @@
 import org.eclipse.swt.widgets.FileDialog;
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.TabFolder;
-import org.eclipse.swt.widgets.TabItem;
 import org.eclipse.swt.widgets.Text;
 import org.eclipse.ui.PlatformUI;
 
@@ -53,7 +53,7 @@
  * The dynamic tab for gdb-based debugger implementations.
  */
 public class GdbDebuggerPage extends AbstractCDebuggerPage implements Observer {
-	protected TabFolder fTabFolder;
+	protected CTabFolder fTabFolder;
 	protected Text fGDBCommandText;
 	protected Text fGDBInitText;
 	protected Button fNonStopCheckBox;
@@ -77,7 +77,7 @@
 		Composite comp = new Composite(parent, SWT.NONE);
 		comp.setLayout(new GridLayout());
 		comp.setLayoutData(new GridData(GridData.FILL_BOTH));
-		fTabFolder = new TabFolder(comp, SWT.NONE);
+		fTabFolder = new CTabFolder(comp, SWT.NONE);
 		fTabFolder.setLayoutData(new GridData(GridData.FILL_BOTH | GridData.GRAB_VERTICAL));
 		createTabs(fTabFolder);
 		fTabFolder.setSelection(0);
@@ -261,13 +261,13 @@
 		return block;
 	}
 
-	public void createTabs(TabFolder tabFolder) {
+	public void createTabs(CTabFolder tabFolder) {
 		createMainTab(tabFolder);
 		createSolibTab(tabFolder);
 	}
 
-	public void createMainTab(TabFolder tabFolder) {
-		TabItem tabItem = new TabItem(tabFolder, SWT.NONE);
+	public void createMainTab(CTabFolder tabFolder) {
+		CTabItem tabItem = new CTabItem(tabFolder, SWT.NONE);
 		tabItem.setText(Messages.GDBDebuggerPage_main_tab_name);
 		Composite comp = ControlFactory.createCompositeEx(tabFolder, 1, GridData.FILL_BOTH);
 		((GridLayout) comp.getLayout()).makeColumnsEqualWidth = false;
@@ -423,8 +423,8 @@
 		fTracepointModeCombo.select(0);
 	}
 
-	public void createSolibTab(TabFolder tabFolder) {
-		TabItem tabItem = new TabItem(tabFolder, SWT.NONE);
+	public void createSolibTab(CTabFolder tabFolder) {
+		CTabItem tabItem = new CTabItem(tabFolder, SWT.NONE);
 		tabItem.setText(Messages.GDBDebuggerPage10);
 		Composite comp = ControlFactory.createCompositeEx(fTabFolder, 1, GridData.FILL_BOTH);
 		comp.setFont(tabFolder.getFont());
diff --git a/launch/org.eclipse.cdt.docker.launcher/src/org/eclipse/cdt/internal/docker/launcher/RemoteDebuggerPage.java b/launch/org.eclipse.cdt.docker.launcher/src/org/eclipse/cdt/internal/docker/launcher/RemoteDebuggerPage.java
index a9f7317..deb55bc 100644
--- a/launch/org.eclipse.cdt.docker.launcher/src/org/eclipse/cdt/internal/docker/launcher/RemoteDebuggerPage.java
+++ b/launch/org.eclipse.cdt.docker.launcher/src/org/eclipse/cdt/internal/docker/launcher/RemoteDebuggerPage.java
@@ -24,6 +24,8 @@
 import org.eclipse.debug.core.ILaunchConfiguration;
 import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.CTabFolder;
+import org.eclipse.swt.custom.CTabItem;
 import org.eclipse.swt.events.ModifyEvent;
 import org.eclipse.swt.events.ModifyListener;
 import org.eclipse.swt.events.SelectionAdapter;
@@ -33,8 +35,6 @@
 import org.eclipse.swt.widgets.Button;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.TabFolder;
-import org.eclipse.swt.widgets.TabItem;
 import org.eclipse.swt.widgets.Text;
 
 /**
@@ -121,8 +121,8 @@
 		configuration.setAttribute(IGDBLaunchConfigurationConstants.ATTR_DEBUGGER_REMOTE_TIMEOUT_VALUE, str);
 	}
 
-	protected void createGdbserverSettingsTab(TabFolder tabFolder) {
-		TabItem tabItem = new TabItem(tabFolder, SWT.NONE);
+	protected void createGdbserverSettingsTab(CTabFolder tabFolder) {
+		CTabItem tabItem = new CTabItem(tabFolder, SWT.NONE);
 		tabItem.setText(Messages.Gdbserver_Settings_Tab_Name);
 
 		Composite comp = new Composite(tabFolder, SWT.NULL);
@@ -201,7 +201,7 @@
 	}
 
 	@Override
-	public void createTabs(TabFolder tabFolder) {
+	public void createTabs(CTabFolder tabFolder) {
 		super.createTabs(tabFolder);
 		createGdbserverSettingsTab(tabFolder);
 	}
