diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/ICDTLaunchConfigurationConstants.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/ICDTLaunchConfigurationConstants.java
index dbbf7df6227..03013750f45 100644
--- a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/ICDTLaunchConfigurationConstants.java
+++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/ICDTLaunchConfigurationConstants.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 QNX Software Systems and others.
+ * Copyright (c) 2000, 2010 QNX Software Systems and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -41,6 +41,30 @@ public interface ICDTLaunchConfigurationConstants {
      */
     public static final String ID_LAUNCH_C_POST_MORTEM = "org.eclipse.cdt.launch.postmortemLaunchType"; //$NON-NLS-1$
     
+    /**
+	 * Specifies the default launch delegate for a Local Debug session
+	 * @since 7.0
+	 */
+    public static final String PREFERRED_DEBUG_LOCAL_LAUNCH_DELEGATE = "org.eclipse.cdt.dsf.gdb.launch.localCLaunch"; //$NON-NLS-1$
+
+    /**
+	 * Specifies the default launch delegate for an Attach Debug session
+	 * @since 7.0
+	 */
+    public static final String PREFERRED_DEBUG_ATTACH_LAUNCH_DELEGATE = "org.eclipse.cdt.dsf.gdb.launch.attachCLaunch"; //$NON-NLS-1$
+
+    /**
+	 * Specifies the default launch delegate for a Post Mortem Debug session
+	 * @since 7.0
+	 */
+    public static final String PREFERRED_DEBUG_POSTMORTEM_LAUNCH_DELEGATE = "org.eclipse.cdt.dsf.gdb.launch.coreCLaunch"; //$NON-NLS-1$
+
+    /**
+     * Specifies the default launch delegate for a Run mode session
+	 * @since 7.0
+	 */
+    public static final String PREFERRED_RUN_LAUNCH_DELEGATE = "org.eclipse.cdt.cdi.launch.localCLaunch"; //$NON-NLS-1$
+    
 	/**
 	 * Identifier for the C/C++ program process type, which is annotated on processes created
 	 * by the C/C++ application launch delegate.
diff --git a/debug/org.eclipse.cdt.debug.ui/plugin.xml b/debug/org.eclipse.cdt.debug.ui/plugin.xml
index 6dccc237add..69b7223759d 100644
--- a/debug/org.eclipse.cdt.debug.ui/plugin.xml
+++ b/debug/org.eclipse.cdt.debug.ui/plugin.xml
@@ -32,6 +32,13 @@
             type="org.eclipse.cdt.launch.applicationLaunchType"
             class="org.eclipse.cdt.debug.internal.ui.launch.PlaceHolderLaunchConfigurationTabGroup"
             id="org.eclipse.cdt.launch.applicationLaunchTabGroup">
+         <launchMode mode="debug"/>
+      </launchConfigurationTabGroup>
+      <launchConfigurationTabGroup
+            type="org.eclipse.cdt.launch.applicationLaunchType"
+            class="org.eclipse.cdt.debug.internal.ui.launch.PlaceHolderLaunchConfigurationTabGroup"
+            id="org.eclipse.cdt.launch.applicationRunLaunchTabGroup">
+         <launchMode mode="run"/>
       </launchConfigurationTabGroup>
       <launchConfigurationTabGroup
             type="org.eclipse.cdt.launch.attachLaunchType"
diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/launch/CApplicationLaunchShortcut.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/launch/CApplicationLaunchShortcut.java
index b0b6f84f699..a76decb2b4f 100644
--- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/launch/CApplicationLaunchShortcut.java
+++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/launch/CApplicationLaunchShortcut.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2009 QNX Software Systems and others.
+ * Copyright (c) 2005, 2010 QNX Software Systems and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -203,13 +203,24 @@ public class CApplicationLaunchShortcut implements ILaunchShortcut2 {
 				ICDTLaunchConfigurationConstants.DEBUGGER_MODE_RUN);
 			wc.setAttribute(ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_ID, debugConfig.getID());
 
-	        // Workaround for bug 262840: select the standard CDT launcher by default.
-	        HashSet<String> set = new HashSet<String>();
-	        set.add(mode);
+	        // Workaround for bug 262840
+			try {
+				HashSet<String> set = new HashSet<String>();
+				set.add(ILaunchManager.RUN_MODE);
+				ILaunchDelegate preferredDelegate = wc.getPreferredDelegate(set);
+				if (preferredDelegate == null) {
+					wc.setPreferredLaunchDelegate(set, ICDTLaunchConfigurationConstants.PREFERRED_RUN_LAUNCH_DELEGATE);
+				}
+			} catch (CoreException e) {}
+			
+			// We must also set the debug mode delegate because this configuration can be re-used
+			// in Debug mode.
 	        try {
+	        	HashSet<String> set = new HashSet<String>();
+	        	set.add(ILaunchManager.DEBUG_MODE);
 	            ILaunchDelegate preferredDelegate = wc.getPreferredDelegate(set);
 	            if (preferredDelegate == null) {
-                    wc.setPreferredLaunchDelegate(set, "org.eclipse.cdt.dsf.gdb.launch.localCLaunch");
+                    wc.setPreferredLaunchDelegate(set, ICDTLaunchConfigurationConstants.PREFERRED_DEBUG_LOCAL_LAUNCH_DELEGATE);
 	            }
 	        } catch (CoreException e) {}
 			// End workaround for bug 262840
diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/launching/LocalApplicationCDebuggerTab.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/launching/LocalApplicationCDebuggerTab.java
index 9e779f3747a..77d993dec4a 100644
--- a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/launching/LocalApplicationCDebuggerTab.java
+++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/launching/LocalApplicationCDebuggerTab.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 Wind River Systems and others.
+ * Copyright (c) 2008, 2010 Wind River Systems and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,6 +11,9 @@
 package org.eclipse.cdt.dsf.gdb.internal.ui.launching;
 
 import org.eclipse.cdt.dsf.gdb.service.SessionType;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.debug.core.ILaunchConfiguration;
+import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
 
 /**
  * Debugger tab to use for a local application launch configuration.
@@ -19,7 +22,43 @@ import org.eclipse.cdt.dsf.gdb.service.SessionType;
  */
 public class LocalApplicationCDebuggerTab extends CDebuggerTab {
 
+	/*
+	 * When the launch configuration is created for Run mode,
+	 * this Debugger tab is not created because it is not used
+	 * for Run mode but only for Debug mode.
+	 * When we then open the same configuration in Debug mode, the launch
+	 * configuration already exists and initializeFrom() is called
+	 * instead of setDefaults().
+	 * We therefore call setDefaults() ourselves and update the configuration.
+	 * If we don't then the user will be required to press Apply to get the
+	 * default settings saved.
+	 * Bug 281970
+	 */
+	private boolean fSetDefaultCalled;
+
     public LocalApplicationCDebuggerTab() {
         super(SessionType.LOCAL, false);
     }
+    
+    @Override
+    public void setDefaults(ILaunchConfigurationWorkingCopy config) {
+    	fSetDefaultCalled = true;
+    	
+    	super.setDefaults(config);
+    }
+    
+    @Override
+    public void initializeFrom(ILaunchConfiguration config) {
+		if (fSetDefaultCalled == false) {
+			try {
+				ILaunchConfigurationWorkingCopy wc;
+				wc = config.getWorkingCopy();
+				setDefaults(wc);
+				wc.doSave();
+			} catch (CoreException e) {
+			}
+		}
+
+		super.initializeFrom(config);
+    }
 }
diff --git a/launch/org.eclipse.cdt.launch/plugin.xml b/launch/org.eclipse.cdt.launch/plugin.xml
index c761efe985c..895e9e16553 100644
--- a/launch/org.eclipse.cdt.launch/plugin.xml
+++ b/launch/org.eclipse.cdt.launch/plugin.xml
@@ -187,6 +187,39 @@
         <associatedDelegate delegate="org.eclipse.cdt.cdi.launch.coreFileCLaunch"/>
         <placement after="org.eclipse.debug.ui.sourceLookupTab"/>
       </tab>
+      
+      <!-- Run launch tabs-->
+      <tab
+            id="org.eclipse.cdt.cdi.launch.runApplicationLaunch.mainTab"
+            group="org.eclipse.cdt.launch.applicationRunLaunchTabGroup"
+            name="%MainLaunchTab.name"
+            class="org.eclipse.cdt.launch.ui.CMainTab">
+        <associatedDelegate delegate="org.eclipse.cdt.cdi.launch.localCLaunch"/>
+      </tab>
+      <tab
+            id="org.eclipse.cdt.cdi.launch.runApplicationLaunch.argumentsTab"
+            group="org.eclipse.cdt.launch.applicationRunLaunchTabGroup"
+            name="%ArgumentsLaunchTab.name"
+            class="org.eclipse.cdt.launch.ui.CArgumentsTab">
+        <associatedDelegate delegate="org.eclipse.cdt.cdi.launch.localCLaunch"/>
+        <placement after="org.eclipse.cdt.cdi.launch.mainTab"/>
+      </tab>
+      <tab
+            id="org.eclipse.cdt.cdi.launch.runApplicationLaunch.environmentTab"
+            group="org.eclipse.cdt.launch.applicationRunLaunchTabGroup"
+            name="%EnvironmentLaunchTab.name"
+            class="org.eclipse.debug.ui.EnvironmentTab">
+        <associatedDelegate delegate="org.eclipse.cdt.cdi.launch.localCLaunch"/>
+        <placement after="org.eclipse.cdt.cdi.launch.argumentsTab"/>
+      </tab>
+      <tab
+            id="org.eclipse.cdt.cdi.launch.runApplicationLaunch.commonTab"
+            group="org.eclipse.cdt.launch.applicationRunLaunchTabGroup"
+            name="%CommonLaunchTab.name"
+            class="org.eclipse.debug.ui.CommonTab">
+        <associatedDelegate delegate="org.eclipse.cdt.cdi.launch.localCLaunch"/>
+        <placement after="org.eclipse.debug.ui.environmentTab"/>
+      </tab>
    </extension>
    <extension
          point="org.eclipse.debug.core.statusHandlers">
diff --git a/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/ui/ApplicationCDebuggerTab.java b/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/ui/ApplicationCDebuggerTab.java
index e5567beb20d..474537b8358 100644
--- a/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/ui/ApplicationCDebuggerTab.java
+++ b/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/ui/ApplicationCDebuggerTab.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 Wind River Systems and others.
+ * Copyright (c) 2008, 2010 Wind River Systems and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,13 +10,53 @@
  *******************************************************************************/
 package org.eclipse.cdt.launch.ui;
 
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.debug.core.ILaunchConfiguration;
+import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
+
 /**
  * CDebugger tab to use for an application launch configuration.
  * 
  * @since 6.0
  */
 public class ApplicationCDebuggerTab extends CDebuggerTab {
-    public ApplicationCDebuggerTab() {
+	/*
+	 * When the launch configuration is created for Run mode,
+	 * this Debugger tab is not created because it is not used
+	 * for Run mode but only for Debug mode.
+	 * When we then open the same configuration in Debug mode, the launch
+	 * configuration already exists and initializeFrom() is called
+	 * instead of setDefaults().
+	 * We therefore call setDefaults() ourselves and update the configuration.
+	 * If we don't then the user will be required to press Apply to get the
+	 * default settings saved.
+	 * Bug 281970
+	 */
+	private boolean fSetDefaultCalled;
+	
+	public ApplicationCDebuggerTab() {
         super (false);
     }
+    
+    @Override
+    public void setDefaults(ILaunchConfigurationWorkingCopy config) {
+    	fSetDefaultCalled = true;
+    	
+    	super.setDefaults(config);
+    }
+    
+    @Override
+    public void initializeFrom(ILaunchConfiguration config) {
+		if (fSetDefaultCalled == false) {
+			try {
+				ILaunchConfigurationWorkingCopy wc;
+				wc = config.getWorkingCopy();
+				setDefaults(wc);
+				wc.doSave();
+			} catch (CoreException e) {
+			}
+		}
+
+		super.initializeFrom(config);
+    }
 }
diff --git a/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/ui/CMainTab.java b/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/ui/CMainTab.java
index 66bb5f51a50..93a618d4155 100644
--- a/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/ui/CMainTab.java
+++ b/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/ui/CMainTab.java
@@ -35,6 +35,7 @@ import org.eclipse.core.runtime.Path;
 import org.eclipse.debug.core.ILaunchConfiguration;
 import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
 import org.eclipse.debug.core.ILaunchDelegate;
+import org.eclipse.debug.core.ILaunchManager;
 import org.eclipse.debug.ui.DebugUITools;
 import org.eclipse.debug.ui.IDebugUIConstants;
 import org.eclipse.jface.dialogs.MessageDialog;
@@ -534,19 +535,30 @@ public class CMainTab extends CAbstractMainTab {
 	 */
 	public void setDefaults(ILaunchConfigurationWorkingCopy config) {
 	    
-	    // Workaround for bug 262840: select the standard CDT launcher by default.
-	    HashSet<String> set = new HashSet<String>();
-	    set.add(getLaunchConfigurationDialog().getMode());
+	    // Workaround for bug 262840
 	    try {
+	    	HashSet<String> set = new HashSet<String>();
+	    	set.add(ILaunchManager.DEBUG_MODE);
     	    ILaunchDelegate preferredDelegate = config.getPreferredDelegate(set);
     	    if (preferredDelegate == null) {
     	        if (config.getType().getIdentifier().equals(ICDTLaunchConfigurationConstants.ID_LAUNCH_C_APP)) {
-    	            config.setPreferredLaunchDelegate(set, "org.eclipse.cdt.dsf.gdb.launch.localCLaunch"); //$NON-NLS-1$
+    	            config.setPreferredLaunchDelegate(set, ICDTLaunchConfigurationConstants.PREFERRED_DEBUG_LOCAL_LAUNCH_DELEGATE);
     	        } else if (config.getType().getIdentifier().equals(ICDTLaunchConfigurationConstants.ID_LAUNCH_C_ATTACH)) {
-                    config.setPreferredLaunchDelegate(set, "org.eclipse.cdt.dsf.gdb.launch.attachCLaunch"); //$NON-NLS-1$
+                    config.setPreferredLaunchDelegate(set, ICDTLaunchConfigurationConstants.PREFERRED_DEBUG_ATTACH_LAUNCH_DELEGATE);
     	        } else if (config.getType().getIdentifier().equals(ICDTLaunchConfigurationConstants.ID_LAUNCH_C_POST_MORTEM)) {
-                    config.setPreferredLaunchDelegate(set, "org.eclipse.cdt.dsf.gdb.launch.coreCLaunch"); //$NON-NLS-1$
-                } 
+                    config.setPreferredLaunchDelegate(set, ICDTLaunchConfigurationConstants.PREFERRED_DEBUG_POSTMORTEM_LAUNCH_DELEGATE);
+                }
+    	    }
+	    } catch (CoreException e) {}
+
+	    // We must also set the preferred delegate for Run mode, because this configuration
+	    // can be used in Run mode.
+	    try {
+	    	HashSet<String> set = new HashSet<String>();
+	    	set.add(ILaunchManager.RUN_MODE);
+	    	ILaunchDelegate preferredDelegate = config.getPreferredDelegate(set);
+    	    if (preferredDelegate == null) {
+    	        config.setPreferredLaunchDelegate(set, ICDTLaunchConfigurationConstants.PREFERRED_RUN_LAUNCH_DELEGATE);
     	    }
 	    } catch (CoreException e) {}