diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationTabGroupViewer.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationTabGroupViewer.java
index 45a43f2..30764a4 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationTabGroupViewer.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationTabGroupViewer.java
@@ -1553,12 +1553,7 @@
 	 * Dialog to Show the Command line
 	 */
 	protected void handleShowCommandLinePressed() {
-		ShowCommandLineDialog dialog = new ShowCommandLineDialog(getShell(),
-				LaunchConfigurationsMessages.LaunchConfigurationDialog_ShowCommandLine_Title, null, null, 0,
-				new String[] { LaunchConfigurationsMessages.LaunchConfigurationDialog_ShowCommandLine_Copy,
-						IDialogConstants.CANCEL_LABEL },
-				0,
-				fOriginal);
+		ShowCommandLineDialog dialog = new ShowCommandLineDialog(getShell(), fOriginal);
 		dialog.open();
 	}
 
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationsMessages.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationsMessages.java
index 3414bbb..edaf3c9 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationsMessages.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationsMessages.java
@@ -107,6 +107,7 @@
 	public static String LaunchConfigurationDialog_ShowCommandLine;
 	public static String LaunchConfigurationDialog_ShowCommandLine_Title;
 	public static String LaunchConfigurationDialog_ShowCommandLine_Copy;
+	public static String LaunchConfigurationDialog_ShowCommandLine_Default;
 	public static String LaunchConfigurationSelectionDialog_0;
 	public static String LaunchConfigurationSelectionDialog_1;
 	public static String LaunchConfigurationSelectionDialog_deleteButtonLabel;
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationsMessages.properties b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationsMessages.properties
index b48e01d..de89a84 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationsMessages.properties
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationsMessages.properties
@@ -118,6 +118,7 @@
 LaunchConfigurationDialog_ShowCommandLine=Sho&w Command Line
 LaunchConfigurationDialog_ShowCommandLine_Title=Command Line
 LaunchConfigurationDialog_ShowCommandLine_Copy=C&opy
+LaunchConfigurationDialog_ShowCommandLine_Default=Command Line could not be retrieved.
 LaunchConfigurationsDialog_0=New launch configuration
 LaunchConfigurationsDialog_1=Delete selected launch configuration(s)
 LaunchConfigurationsDialog_2=New launch configuration prototype
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/ShowCommandLineDialog.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/ShowCommandLineDialog.java
index fc3a3b4..f11ab8a 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/ShowCommandLineDialog.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/ShowCommandLineDialog.java
@@ -24,13 +24,15 @@
 import org.eclipse.debug.core.model.ILaunchConfigurationDelegate;
 import org.eclipse.debug.core.model.ILaunchConfigurationDelegate2;
 import org.eclipse.debug.internal.core.DebugCoreMessages;
-import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.debug.internal.ui.DebugUIPlugin;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.dialogs.IDialogSettings;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.dnd.Clipboard;
 import org.eclipse.swt.dnd.TextTransfer;
 import org.eclipse.swt.dnd.Transfer;
 import org.eclipse.swt.graphics.Font;
-import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Composite;
@@ -44,23 +46,37 @@
 /**
  * Allows the user to specify to see and copy the command line to be executed
  * for the launch.
- * 
+ *
  * @since 3.13
  */
-public class ShowCommandLineDialog extends MessageDialog {
+public class ShowCommandLineDialog extends Dialog {
 	Text fModuleArgumentsText;
 	ILaunchConfiguration flaunchConfiguration;
 
 
-	public ShowCommandLineDialog(Shell parentShell, String dialogTitle, Image dialogTitleImage, String dialogMessage, int dialogImageType, String[] dialogButtonLabels, int defaultIndex, ILaunchConfiguration config) {
-		super(parentShell, dialogTitle, dialogTitleImage, dialogMessage, dialogImageType, dialogButtonLabels, defaultIndex);
+	public ShowCommandLineDialog(Shell parentShell, ILaunchConfiguration config) {
+		super(parentShell);
+		setShellStyle(SWT.RESIZE | getShellStyle());
 		flaunchConfiguration = config;
 	}
 
+
 	@Override
-	protected Control createCustomArea(Composite parent) {
-		Composite comp = new Composite(parent, SWT.NONE);
-		comp.setLayout(new GridLayout());
+	protected void configureShell(Shell newShell) {
+		super.configureShell(newShell);
+		newShell.setText(LaunchConfigurationsMessages.LaunchConfigurationDialog_ShowCommandLine_Title);
+	}
+
+	@Override
+	protected void createButtonsForButtonBar(Composite parent) {
+		createButton(parent, IDialogConstants.OK_ID,
+				LaunchConfigurationsMessages.LaunchConfigurationDialog_ShowCommandLine_Copy, true);
+		createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false);
+	}
+
+	@Override
+	protected Control createDialogArea(Composite parent) {
+		Composite comp = (Composite) super.createDialogArea(parent);
 		Font font = parent.getFont();
 
 		Group group = new Group(comp, SWT.NONE);
@@ -72,16 +88,13 @@
 		group.setLayoutData(gd);
 		group.setFont(font);
 
-
-		// Label description = new Label(group, SWT.WRAP);
-		// description.setText(ActionMessages.Override_Dependencies_label1);
 		fModuleArgumentsText = new Text(group, SWT.MULTI | SWT.WRAP | SWT.BORDER | SWT.V_SCROLL);
 		gd = new GridData(GridData.FILL_BOTH);
 		gd.heightHint = convertHeightInCharsToPixels(10);
 		gd.widthHint = convertWidthInCharsToPixels(60);
 		fModuleArgumentsText.setLayoutData(gd);
 
-		String command = "Could not retrieve the command"; //$NON-NLS-1$
+		String command = ""; //$NON-NLS-1$
 		try {
 			Set<String> modes = flaunchConfiguration.getModes();
 			modes.add(ILaunchManager.RUN_MODE);
@@ -108,11 +121,16 @@
 						}
 					}
 				}
-				command = delegate.showCommandLine(flaunchConfiguration, ILaunchManager.RUN_MODE, launch, null);
+				command = delegate.showCommandLine(flaunchConfiguration, ILaunchManager.RUN_MODE, launch,
+						null);
+
 			}
 		} catch (CoreException e) {
 			e.printStackTrace();
 		}
+		if (command == null || (command != null && command.length() == 0)) {
+			command = LaunchConfigurationsMessages.LaunchConfigurationDialog_ShowCommandLine_Default;
+		}
 		fModuleArgumentsText.setText(command);
 		fModuleArgumentsText.setEditable(false);
 
@@ -135,6 +153,21 @@
 		super.buttonPressed(buttonId);
 	}
 
+	@Override
+	protected IDialogSettings getDialogBoundsSettings() {
+		IDialogSettings settings = DebugUIPlugin.getDefault().getDialogSettings();
+		IDialogSettings section = settings.getSection(getDialogSettingsSectionName());
+		if (section == null) {
+			section = settings.addNewSection(getDialogSettingsSectionName());
+		}
+		return section;
+	}
 
+	/**
+	 * @return the name to use to save the dialog settings
+	 */
+	protected String getDialogSettingsSectionName() {
+		return "SHOW_COMMAND_LINE_DIALOG"; //$NON-NLS-1$
+	}
 
 }
