diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/DebugUIPreferenceInitializer.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/DebugUIPreferenceInitializer.java
index 9b639cd..0483d06 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/DebugUIPreferenceInitializer.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/DebugUIPreferenceInitializer.java
@@ -60,7 +60,6 @@
 		prefs.setDefault(IDebugPreferenceConstants.CONSOLE_LOW_WATER_MARK, 80000);
 		prefs.setDefault(IDebugPreferenceConstants.CONSOLE_HIGH_WATER_MARK, 100000);
 		prefs.setDefault(IDebugPreferenceConstants.CONSOLE_TAB_WIDTH, 8);
-//		prefs.setDefault(IDebugPreferenceConstants.CONSOLE_ENCODING, WorkbenchEncoding.getWorkbenchDefaultEncoding());
 		
 		PreferenceConverter.setDefault(prefs, IDebugPreferenceConstants.CONSOLE_SYS_OUT_COLOR, new RGB(0, 0, 255));
 		PreferenceConverter.setDefault(prefs, IDebugPreferenceConstants.CONSOLE_SYS_IN_COLOR, new RGB(0, 200, 125));
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationsDialog.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationsDialog.java
index 60d1b8f..de8711e 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationsDialog.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationsDialog.java
@@ -571,9 +571,6 @@
 		setButtonActionNew(new ButtonActionNew(newButton.getText(), newButton));
 		
 		final Button deleteButton = SWTUtil.createPushButton(buttonComposite, LaunchConfigurationsMessages.getString("LaunchConfigurationDialog.Dele&te_14"), null); //$NON-NLS-1$
-		gd= (GridData)deleteButton.getLayoutData();
-		gd.horizontalAlignment= GridData.BEGINNING;
-		gd.grabExcessHorizontalSpace= true;
 		setButtonActionDelete(new ButtonActionDelete(deleteButton.getText(), deleteButton));
 		
 		AbstractLaunchConfigurationAction.IConfirmationRequestor requestor =
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 b54e3ca..35eedb1 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
@@ -21,6 +21,10 @@
 CommonTab.Cannot_save_launch_configuration_in_a_closed_project._1=Cannot save launch configuration in a closed project.
 CommonTab.10=Launch in bac&kground
 CommonTab.0=Save as
+CommonTab.1=File Encoding:
+CommonTab.2=Default (
+CommonTab.3=)
+CommonTab.4=Other
 CompileErrorPromptStatusHandler.0=Errors in Project
 CompileErrorPromptStatusHandler.1=Errors exist in a required project. Continue launch?
 
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/SourceLookupUIMessages.properties b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/SourceLookupUIMessages.properties
index 250855e..a868193 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/SourceLookupUIMessages.properties
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/SourceLookupUIMessages.properties
@@ -18,7 +18,7 @@
 sourceTab.removeButton = &Remove
 sourceTab.addButton = &Add...
 sourceTab.tabTitle = Source
-sourceTab.defaultButton = Restore De&fault
+sourceTab.defaultButton = Restore Defa&ult
 
 addSourceLocation.title = Add Source
 addSourceLocation.description = Select the type of source to add to the source lookup path
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/DebugUIViewsMessages.properties b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/DebugUIViewsMessages.properties
index 0a6bb55..919b311 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/DebugUIViewsMessages.properties
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/DebugUIViewsMessages.properties
@@ -46,6 +46,10 @@
 BreakpointsViewEventHandler.2=An error occurred while updating one or more breakpoints. The checked state of these breakpoints will not match their enabled state.
 BreakpointsViewEventHandler.4=
 BreakpointsViewEventHandler.5=Exception accessing breakpoint
+BreakpointGroupContainerFactory.0=(no group)
+BreakpointFileContainerFactory.0=(no file)
+BreakpointTypeContainerFactory.0=(other)
+BreakpointProjectContainerFactory.0=(no project)
 DebugViewLabelDecorator.0=Debug
 DebugViewLabelDecorator.1=Fetching {0} labels
 DebugViewLabelDecorator.2=\ ({0} pending)
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/breakpoints/BreakpointFileContainerFactory.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/breakpoints/BreakpointFileContainerFactory.java
index 13b499a..16f6082 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/breakpoints/BreakpointFileContainerFactory.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/breakpoints/BreakpointFileContainerFactory.java
@@ -20,6 +20,7 @@
 import org.eclipse.core.resources.IMarker;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.debug.core.model.IBreakpoint;
+import org.eclipse.debug.internal.ui.views.DebugUIViewsMessages;
 import org.eclipse.jface.viewers.ILabelProvider;
 import org.eclipse.swt.graphics.Image;
 import org.eclipse.ui.ISharedImages;
@@ -99,7 +100,7 @@
 			BreakpointContainer container= new BreakpointContainer(
 					(IBreakpoint[]) other.toArray(new IBreakpoint[0]),
 					this,
-					"(no file)",
+					DebugUIViewsMessages.getString("BreakpointFileContainerFactory.0"), //$NON-NLS-1$
 					parentId);
 			fOtherImage= PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJ_FILE);
 			container.setImage(fOtherImage);
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/breakpoints/BreakpointGroupContainerFactory.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/breakpoints/BreakpointGroupContainerFactory.java
index 68e5cd1..d597864 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/breakpoints/BreakpointGroupContainerFactory.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/breakpoints/BreakpointGroupContainerFactory.java
@@ -19,6 +19,7 @@
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.debug.core.model.IBreakpoint;
 import org.eclipse.debug.internal.ui.DebugUIPlugin;
+import org.eclipse.debug.internal.ui.views.DebugUIViewsMessages;
 
 /**
  * 
@@ -71,7 +72,7 @@
 			BreakpointGroupContainer container= new BreakpointGroupContainer(
 					(IBreakpoint[]) other.toArray(new IBreakpoint[0]),
 					this,
-					"(no group)",
+					DebugUIViewsMessages.getString("BreakpointGroupContainerFactory.0"), //$NON-NLS-1$
 					parentId);
 			containers.add(container);
 		}
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/breakpoints/BreakpointProjectContainerFactory.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/breakpoints/BreakpointProjectContainerFactory.java
index 4eb41ab..580273f 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/breakpoints/BreakpointProjectContainerFactory.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/breakpoints/BreakpointProjectContainerFactory.java
@@ -19,6 +19,7 @@
 import org.eclipse.core.resources.IMarker;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.debug.core.model.IBreakpoint;
+import org.eclipse.debug.internal.ui.views.DebugUIViewsMessages;
 import org.eclipse.jface.viewers.ILabelProvider;
 import org.eclipse.swt.graphics.Image;
 import org.eclipse.ui.PlatformUI;
@@ -79,7 +80,7 @@
 			BreakpointContainer container= new BreakpointContainer(
 					(IBreakpoint[]) other.toArray(new IBreakpoint[0]),
 					this,
-					"(no project)",
+					DebugUIViewsMessages.getString("BreakpointProjectContainerFactory.0"), //$NON-NLS-1$
 					parentId);
 			fOtherImage= PlatformUI.getWorkbench().getSharedImages().getImage(SharedImages.IMG_OBJ_PROJECT);
 			container.setImage(fOtherImage);
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/breakpoints/BreakpointTypeContainerFactory.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/breakpoints/BreakpointTypeContainerFactory.java
index c1994fc..b3c449a 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/breakpoints/BreakpointTypeContainerFactory.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/breakpoints/BreakpointTypeContainerFactory.java
@@ -18,6 +18,7 @@
 
 import org.eclipse.debug.core.DebugPlugin;
 import org.eclipse.debug.core.model.IBreakpoint;
+import org.eclipse.debug.internal.ui.views.DebugUIViewsMessages;
 
 /**
  * 
@@ -37,7 +38,7 @@
 			IBreakpoint breakpoint = breakpoints[i];
 			String typeName= DebugPlugin.getDefault().getBreakpointManager().getTypeName(breakpoint);
 			if (typeName == null) {
-				typeName= "(other)";
+				typeName= DebugUIViewsMessages.getString("BreakpointTypeContainerFactory.0"); //$NON-NLS-1$
 			}
 			List list = (List) map.get(typeName);
 			if (list == null) {
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/console/ProcessConsole.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/console/ProcessConsole.java
index 322baa2..a10b2dc 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/console/ProcessConsole.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/console/ProcessConsole.java
@@ -73,7 +73,11 @@
 	 * Proxy to a console document
 	 */
 	public ProcessConsole(IProcess process, IConsoleColorProvider colorProvider) {
-		super("", IDebugUIConstants.ID_PROCESS_CONSOLE_TYPE, null); //$NON-NLS-1$
+	    this(process, colorProvider, null);
+	}
+	
+	public ProcessConsole(IProcess process, IConsoleColorProvider colorProvider, String encoding) {
+	    super("", IDebugUIConstants.ID_PROCESS_CONSOLE_TYPE, null, encoding, true); //$NON-NLS-1$
 		fProcess = process;
 		
 		fColorProvider = colorProvider;
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/console/ProcessConsoleManager.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/console/ProcessConsoleManager.java
index 68eee55..b4f81e2 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/console/ProcessConsoleManager.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/console/ProcessConsoleManager.java
@@ -156,7 +156,12 @@
                         }
                         //create a new console.
                         IConsoleColorProvider colorProvider = getColorProvider(process.getAttribute(IProcess.ATTR_PROCESS_TYPE));
-                        ProcessConsole pc = new ProcessConsole(process, colorProvider);
+                        String encoding = null;
+                        try {
+                            encoding = launch.getLaunchConfiguration().getAttribute(IDebugUIConstants.ATTR_CONSOLE_ENCODING, (String)null);
+                        } catch (CoreException e) {
+                        }
+                        ProcessConsole pc = new ProcessConsole(process, colorProvider, encoding);
                         pc.setAttribute(IDebugUIConstants.ATTR_CONSOLE_PROCESS, process);
                         //add new console to console manager.
                         ConsolePlugin.getDefault().getConsoleManager().addConsoles(new IConsole[]{pc});
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/CommonTab.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/CommonTab.java
index 19957f1..c405c0c 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/CommonTab.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/CommonTab.java
@@ -16,6 +16,7 @@
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+
 import org.eclipse.core.resources.IContainer;
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IWorkspaceRoot;
@@ -32,6 +33,7 @@
 import org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationsMessages;
 import org.eclipse.debug.internal.ui.launchConfigurations.LaunchGroupExtension;
 import org.eclipse.debug.internal.ui.launchConfigurations.LaunchHistory;
+import org.eclipse.jface.dialogs.Dialog;
 import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.jface.viewers.CheckStateChangedEvent;
 import org.eclipse.jface.viewers.CheckboxTableViewer;
@@ -45,18 +47,21 @@
 import org.eclipse.swt.events.ModifyListener;
 import org.eclipse.swt.events.SelectionAdapter;
 import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.events.SelectionListener;
 import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
 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;
+import org.eclipse.ui.WorkbenchEncoding;
 import org.eclipse.ui.dialogs.ContainerSelectionDialog;
 import org.eclipse.ui.help.WorkbenchHelp;
+import org.eclipse.ui.ide.IDEEncoding;
 
 /**
  * Launch configuration tab used to specify the location a launch configuration
@@ -93,21 +98,21 @@
 			}
 	};
 	
+    private Button fDefaultEncodingButton;
+    private Button fAltEncodingButton;
+    private Combo fEncodingCombo;
+	
 	/**
 	 * @see ILaunchConfigurationTab#createControl(Composite)
 	 */
-	public void createControl(Composite parent) {
-		Font font = parent.getFont();
-		
+	public void createControl(Composite parent) {		
 		Composite comp = new Composite(parent, SWT.NONE);
 		setControl(comp);
 		WorkbenchHelp.setHelp(getControl(), IDebugHelpContextIds.LAUNCH_CONFIGURATION_DIALOG_COMMON_TAB);
 		GridLayout topLayout = new GridLayout();
 		comp.setLayout(topLayout);
-		comp.setFont(font);
 		
 		Group group = new Group(comp, SWT.NONE);
-		group.setFont(font);
 		GridLayout layout = new GridLayout();
 		layout.numColumns = 3;
 		group.setLayout(layout);
@@ -117,13 +122,11 @@
 				
 		setLocalRadioButton(new Button(group, SWT.RADIO));
 		getLocalRadioButton().setText(LaunchConfigurationsMessages.getString("CommonTab.L&ocal_3")); //$NON-NLS-1$
-		getLocalRadioButton().setFont(font);
 		gd = new GridData();
 		gd.horizontalSpan = 3;
 		getLocalRadioButton().setLayoutData(gd);
 		setSharedRadioButton(new Button(group, SWT.RADIO));
 		getSharedRadioButton().setText(LaunchConfigurationsMessages.getString("CommonTab.S&hared_4")); //$NON-NLS-1$
-		getSharedRadioButton().setFont(font);
 		getSharedRadioButton().addSelectionListener(new SelectionAdapter() {
 			public void widgetSelected(SelectionEvent evt) {
 				handleSharedRadioButtonSelected();
@@ -135,7 +138,6 @@
 		setSharedLocationText(new Text(group, SWT.SINGLE | SWT.BORDER));
 		gd = new GridData(GridData.FILL_HORIZONTAL);
 		getSharedLocationText().setLayoutData(gd);
-		getSharedLocationText().setFont(font);
 		getSharedLocationText().addModifyListener(fBasicModifyListener);
 		
 		setSharedLocationButton(createPushButton(group, LaunchConfigurationsMessages.getString("CommonTab.&Browse_6"), null));	 //$NON-NLS-1$
@@ -159,21 +161,19 @@
 		favLayout.numColumns = 2;
 		favLayout.makeColumnsEqualWidth = true;
 		favComp.setLayout(favLayout);
-		favComp.setFont(font);
 		
 		Label favLabel = new Label(favComp, SWT.HORIZONTAL | SWT.LEFT);
 		favLabel.setText(LaunchConfigurationsMessages.getString("CommonTab.Display_in_favorites_menu__10")); //$NON-NLS-1$
 		gd = new GridData(GridData.BEGINNING);
 		gd.horizontalSpan = 2;
 		favLabel.setLayoutData(gd);
-		favLabel.setFont(font);
 		
 		fFavoritesTable = CheckboxTableViewer.newCheckList(favComp, SWT.CHECK | SWT.BORDER | SWT.MULTI | SWT.FULL_SELECTION);
 		Control table = fFavoritesTable.getControl();
 		gd = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);
 		gd.horizontalSpan = 1;
 		table.setLayoutData(gd);
-		table.setFont(font);
+		
 		fFavoritesTable.setContentProvider(new FavoritesContentProvider());
 		fFavoritesTable.setLabelProvider(new FavoritesLabelProvider());
 		fFavoritesTable.addCheckStateListener(
@@ -187,7 +187,46 @@
 			});
 		
 		createVerticalSpacer(comp, 1);
+		addEncodingBlock(comp);
+		
+		createVerticalSpacer(comp, 1);
 		createLaunchInBackgroundComponent(comp);
+		
+		Dialog.applyDialogFont(parent);
+	}
+	
+	private void addEncodingBlock(Composite parent) {
+	    List allEncodings = IDEEncoding.getIDEEncodings();
+	    String defaultEncoding = WorkbenchEncoding.getWorkbenchDefaultEncoding();
+	    
+	    Group group = new Group(parent, SWT.NONE);
+	    group.setText(LaunchConfigurationsMessages.getString("CommonTab.1"));  //$NON-NLS-1$
+	    GridData gd = new GridData(SWT.BEGINNING, SWT.NORMAL, true, false);
+	    gd.horizontalSpan = 2;
+	    group.setLayoutData(gd);
+	    group.setLayout(new GridLayout(2, false));
+	    
+	    fDefaultEncodingButton = createRadioButton(group, LaunchConfigurationsMessages.getString("CommonTab.2") + defaultEncoding + LaunchConfigurationsMessages.getString("CommonTab.3"));  //$NON-NLS-1$ //$NON-NLS-2$
+	    gd = new GridData(SWT.BEGINNING, SWT.NORMAL, true, false);
+	    gd.horizontalSpan = 2;
+	    fDefaultEncodingButton.setLayoutData(gd);
+	    
+	    fAltEncodingButton = createRadioButton(group, LaunchConfigurationsMessages.getString("CommonTab.4"));  //$NON-NLS-1$
+	    fAltEncodingButton.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING));
+	    
+	    fEncodingCombo = new Combo(group, SWT.READ_ONLY);
+	    fEncodingCombo.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING));
+	    fEncodingCombo.setItems((String[]) allEncodings.toArray(new String[0]));
+	    
+	    SelectionListener listener = new SelectionAdapter() {
+	        public void widgetSelected(SelectionEvent e) {
+	            updateLaunchConfigurationDialog();
+	            fEncodingCombo.setEnabled(fAltEncodingButton.getSelection() == true);
+	        }
+	    };
+	    fAltEncodingButton.addSelectionListener(listener);
+	    fDefaultEncodingButton.addSelectionListener(listener);
+	    fEncodingCombo.addSelectionListener(listener);
 	}
 
 	/**
@@ -292,12 +331,30 @@
 		updateSharedLocationFromConfig(configuration);
 		updateFavoritesFromConfig(configuration);
 		updateLaunchInBackground(configuration);
+		updateEncoding(configuration);
 	}
 	
 	protected void updateLaunchInBackground(ILaunchConfiguration configuration) { 
 		fLaunchInBackgroundButton.setSelection(isLaunchInBackground(configuration));
 	}
 	
+	protected void updateEncoding(ILaunchConfiguration configuration) {
+	    String encoding = null;
+	    try {
+	        encoding = configuration.getAttribute(IDebugUIConstants.ATTR_CONSOLE_ENCODING, (String)null);
+        } catch (CoreException e) {
+        }
+        
+        if (encoding != null) {
+            fAltEncodingButton.setSelection(true);
+            fDefaultEncodingButton.setSelection(false);
+            fEncodingCombo.setText(encoding);
+        } else {
+            fDefaultEncodingButton.setSelection(true);
+            fAltEncodingButton.setSelection(false);
+        }
+	}
+	
 	/**
 	 * Returns whether the given configuration should be launched in the background.
 	 * 
@@ -476,6 +533,12 @@
 		updateConfigFromLocalShared(configuration);
 		updateConfigFromFavorites(configuration);
 		setAttribute(IDebugUIConstants.ATTR_LAUNCH_IN_BACKGROUND, configuration, fLaunchInBackgroundButton.getSelection(), true);
+		String encoding = null;
+		if(fAltEncodingButton.getSelection()) {
+		    encoding = fEncodingCombo.getText();
+		}
+		configuration.setAttribute(IDebugUIConstants.ATTR_CONSOLE_ENCODING, encoding);
+		
 	}
 
 	/**
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/IDebugUIConstants.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/IDebugUIConstants.java
index 1180962..70c27fb 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/IDebugUIConstants.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/IDebugUIConstants.java
@@ -553,6 +553,7 @@
 	 * Debug action set identifier (value <code>"org.eclipse.debug.ui.debugActionSet"</code>).
 	 */
 	public static final String DEBUG_ACTION_SET= PLUGIN_ID + ".debugActionSet"; //$NON-NLS-1$
+
 	
 	/**
 	 * Launch action set identifier (value <code>"org.eclipse.debug.ui.launchActionSet"</code>).
@@ -852,6 +853,13 @@
 	 */
 	public static final String ATTR_CONSOLE_PROCESS = PLUGIN_ID + ".ATTR_CONSOLE_PROCESS"; //$NON-NLS-1$
 	
+	/**
+	 * ProcessConsole attribute - references the encoding that the console should use.
+	 * 
+	 * @since 3.1
+	 */
+	public static final String ATTR_CONSOLE_ENCODING = PLUGIN_ID + ".ATTR_CONSOLE_ENCODING"; //$NON-NLS-1$
+	
 	// Extension points
 	
 	/**
