diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/Messages.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/Messages.java
index 360ab30..65e1f1b 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/Messages.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/Messages.java
@@ -10,6 +10,7 @@
  *     Marco Descher <marco@descher.at> - Bug 395982, 396975, 426653
  *     Steven Spungin <steven@spungin.tv> - Bug 431735, 430717
  *     Jonas Helming <jhelming@eclipsesource.com - Bug 444340
+ *     Olivier Prouvost <olivier.prouvost@opcoach.com> - Bug 466731
  ******************************************************************************/
 package org.eclipse.e4.tools.emf.ui.internal;
 
@@ -19,6 +20,8 @@
 	public String XmiTab_TypeTextToSearch;
 	public String ModelEditor_Import3x;
 	public String E4StringPickList_Replace;
+	public String E4StringPickList_NewValue;
+	public String E4StringPickList_ToolTipNewValue;
 	public String MarkDuplicateAttributesHandler_MarkDuplicates;
 	public String MarkDuplicateAttributesHandler_SelectAnAttributeToMarkeDuplicate;
 	public String VCommandEditor_ImportCommands;
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/Messages.properties b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/Messages.properties
index 0fba44f..1fa6c0d 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/Messages.properties
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/Messages.properties
@@ -11,12 +11,15 @@
 # *     Marco Descher <marco@descher.at> - Bug 395982, 396975, 426653
 # *     Steven Spungin <steven@spungin.tv> - Bug 431735, 430717, Ongoing Maintenance
 # *     Lars Vogel <Lars.Vogel@gmail.com> - Bug 440159
+# *     Olivier Prouvost <olivier.prouvost@opcoach.com> - Bug 466731
 # ******************************************************************************
 
 PartEditor_InputPart=Input Part
 XmiTab_TypeTextToSearch0=type text to search (press <ENTER> to search for next instance)
 ModelEditor_Import3x=Import 3x
 E4StringPickList_Replace=Replace
+E4StringPickList_NewValue=New Value : 
+E4StringPickList_ToolTipNewValue=Enter your value and press Enter or click the Add button to add it. \nYou can add several values using a semi-colon separated string like this :\n value1;value2;value3
 MarkDuplicateAttributesHandler_MarkDuplicates=Mark Duplicates
 MarkDuplicateAttributesHandler_SelectAnAttributeToMarkeDuplicate=Select an attribute to mark duplicate values
 VCommandEditor_ImportCommands=Import Commands
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/AbstractPickList.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/AbstractPickList.java
index e10de6e..b44f1b3 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/AbstractPickList.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/AbstractPickList.java
@@ -7,6 +7,7 @@
  *
  * Contributors:
  * Steven Spungin <steven@spungin.tv> - initial API and implementation
+ * Olivier Prouvost <olivier.prouvost@opcoach.com> - Bug 466731
  *******************************************************************************/
 
 package org.eclipse.e4.tools.emf.ui.internal.common;
@@ -30,6 +31,7 @@
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.SelectionAdapter;
 import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Font;
 import org.eclipse.swt.layout.FillLayout;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
@@ -58,14 +60,14 @@
 
 	private final Group group;
 	private final Composite toolBar;
-	private final Button tiRemove;
-	private final Button tiUp;
-	private final Button tiDown;
-	private final Button tiAdd;
+	protected final Button tiRemove;
+	protected final Button tiUp;
+	protected final Button tiDown;
+	protected final Button tiAdd;
 	// private final AutoCompleteField autoCompleteField;
 
 	public AbstractPickList(Composite parent, int style, List<PickListFeatures> listFeatures, Messages messages,
-		AbstractComponentEditor componentEditor) {
+			AbstractComponentEditor componentEditor) {
 		super(parent, style);
 
 		// TODO remove dependency to Messages and AbstractComponentEditor. They
@@ -110,6 +112,7 @@
 		layout.marginWidth = 0;
 		toolBar.setLayout(layout);
 		toolBar.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));
+		toolBar.setFont(group.getFont());
 
 		picker.addOpenListener(new IOpenListener() {
 
@@ -123,6 +126,7 @@
 		tiAdd.setText(messages.ModelTooling_Common_AddEllipsis);
 		tiAdd.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false));
 		tiAdd.setImage(componentEditor.createImage(ResourceProvider.IMG_Obj16_table_add));
+		tiAdd.setFont(getButtonFont());
 		tiAdd.addSelectionListener(new SelectionAdapter() {
 			@Override
 			public void widgetSelected(SelectionEvent e) {
@@ -134,6 +138,7 @@
 		tiRemove.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false));
 		tiRemove.setText(messages.ModelTooling_Common_Remove);
 		tiRemove.setImage(componentEditor.createImage(ResourceProvider.IMG_Obj16_table_delete));
+		tiRemove.setFont(getButtonFont());
 		tiRemove.addSelectionListener(new SelectionAdapter() {
 			@Override
 			public void widgetSelected(SelectionEvent e) {
@@ -145,6 +150,7 @@
 		tiDown.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false));
 		tiDown.setText(messages.ModelTooling_Common_Down);
 		tiDown.setImage(componentEditor.createImage(ResourceProvider.IMG_Obj16_arrow_down));
+		tiDown.setFont(getButtonFont());
 		tiDown.addSelectionListener(new SelectionAdapter() {
 			@Override
 			public void widgetSelected(SelectionEvent e) {
@@ -156,6 +162,7 @@
 		tiUp.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false));
 		tiUp.setText(messages.ModelTooling_Common_Up);
 		tiUp.setImage(componentEditor.createImage(ResourceProvider.IMG_Obj16_arrow_up));
+		tiUp.setFont(getButtonFont());
 		tiUp.addSelectionListener(new SelectionAdapter() {
 			@Override
 			public void widgetSelected(SelectionEvent e) {
@@ -191,6 +198,10 @@
 
 	}
 
+	protected Font getButtonFont() {
+		return group.getFont();
+	}
+
 	protected void addPressed() {
 	}
 
@@ -253,10 +264,11 @@
 		final IStructuredSelection selection = (IStructuredSelection) getList().getSelection();
 		final boolean selected = selection.size() > 0;
 		final int count = getItemCount();
+		final boolean tableIsFocused = getList().getTable().isFocusControl();
 		if (tiDown.isDisposed() == false) {
-			tiDown.setEnabled(selected && count > 1);
-			tiUp.setEnabled(selected && count > 1);
+			tiDown.setEnabled(selected && count > 1 && tableIsFocused);
+			tiUp.setEnabled(selected && count > 1 && tableIsFocused);
 		}
-		tiRemove.setEnabled(selected);
+		tiRemove.setEnabled(selected && tableIsFocused);
 	}
 }
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/E4StringPickList.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/E4StringPickList.java
index aa9c06e..f86fa91 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/E4StringPickList.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/E4StringPickList.java
@@ -7,12 +7,14 @@
  *
  * Contributors:
  *     Steven Spungin <steven@spungin.tv> - initial API and implementation, Ongoing Maintenance
+ *     Olivier Prouvost <olivier.prouvost@opcoach.com> - Bug 466731
  *******************************************************************************/
 
 package org.eclipse.e4.tools.emf.ui.internal.common;
 
 import java.util.Arrays;
 import java.util.List;
+
 import org.eclipse.e4.tools.emf.ui.common.component.AbstractComponentEditor;
 import org.eclipse.e4.tools.emf.ui.internal.Messages;
 import org.eclipse.e4.tools.emf.ui.internal.ResourceProvider;
@@ -27,13 +29,17 @@
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.StructuredSelection;
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.FocusAdapter;
+import org.eclipse.swt.events.FocusEvent;
 import org.eclipse.swt.events.ModifyEvent;
 import org.eclipse.swt.events.ModifyListener;
 import org.eclipse.swt.events.SelectionAdapter;
 import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Button;
 import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Text;
 
 /**
@@ -61,9 +67,18 @@
 		tiReplace = new Button(getToolBar(), SWT.PUSH);
 		tiReplace.setText(messages.E4StringPickList_Replace);
 		tiReplace.setImage(editor.createImage(ResourceProvider.IMG_Obj16_world_edit));
+		tiReplace.setFont(getButtonFont());
 
-		text = new Text(getToolBar().getParent(), SWT.SINGLE | SWT.LEAD | SWT.BORDER);
-		text.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1));
+		Composite valueParent = new Composite(getToolBar().getParent(), SWT.BORDER);
+		valueParent.setLayout(new GridLayout(2, false));
+		valueParent.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1));
+
+		Label l = new Label(valueParent, SWT.NONE);
+		l.setText(messages.E4StringPickList_NewValue);
+		l.setToolTipText(messages.E4StringPickList_ToolTipNewValue);
+		text = new Text(valueParent, SWT.SINGLE | SWT.LEAD | SWT.BORDER);
+		text.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+		text.setToolTipText(messages.E4StringPickList_ToolTipNewValue);
 
 		tiReplace.addSelectionListener(new SelectionAdapter() {
 			@Override
@@ -82,6 +97,15 @@
 			}
 		});
 
+		text.addFocusListener(new FocusAdapter() {
+
+			@Override
+			public void focusGained(FocusEvent e) {
+				updateUiState();
+
+			}
+		});
+
 		updateUiState();
 
 	}
@@ -153,11 +177,13 @@
 	public void updateUiState() {
 		super.updateUiState();
 
-		if (getTextWidget() != null) {
+		if (text != null) {
 			IStructuredSelection sel = (IStructuredSelection) viewer.getSelection();
 			Object firstViewerElement = sel.getFirstElement();
-			boolean diff = !getTextWidget().getText().equals(firstViewerElement);
+			String txt = text.getText();
+			boolean diff = !txt.equals(firstViewerElement);
 			tiReplace.setEnabled(firstViewerElement != null && !getTextWidget().getText().isEmpty() && diff);
+			tiAdd.setEnabled(txt.length() > 0 && text.isFocusControl());
 		}
 	}
 
