diff --git a/modeling/plugins/org.eclipse.pde.ds.ui/src/org/eclipse/pde/ds/ui/internal/editor/masterdetail/PropertiesMasterDetail.java b/modeling/plugins/org.eclipse.pde.ds.ui/src/org/eclipse/pde/ds/ui/internal/editor/masterdetail/PropertiesMasterDetail.java
index 79a1aa5..c7c8e1f 100644
--- a/modeling/plugins/org.eclipse.pde.ds.ui/src/org/eclipse/pde/ds/ui/internal/editor/masterdetail/PropertiesMasterDetail.java
+++ b/modeling/plugins/org.eclipse.pde.ds.ui/src/org/eclipse/pde/ds/ui/internal/editor/masterdetail/PropertiesMasterDetail.java
@@ -8,7 +8,7 @@
  * Contributors:
  *     Anyware Technologies - initial API and implementation
  *
- * $Id: PropertiesMasterDetail.java,v 1.14 2009/08/07 16:41:55 bcabe Exp $
+ * $Id: PropertiesMasterDetail.java,v 1.15 2009/08/21 17:40:59 bcabe Exp $
  */
 package org.eclipse.pde.ds.ui.internal.editor.masterdetail;
 
@@ -31,7 +31,7 @@
 	private Button addButtonProperties;
 
 	public PropertiesMasterDetail(EmfFormEditor<?> editor) {
-		super(editor, "Properties", EmfMasterDetailBlock.NO_BUTTONS);
+		super(editor, "Properties", EmfMasterDetailBlock.USE_CUSTOM_PUSH_BUTTONS);
 	}
 
 	public IDetailsPage getPage(Object key) {
@@ -50,6 +50,7 @@
 	protected void createCustomButtons(Composite parent) {
 		addButtonProperty = createButton(parent, "Add Property");
 		addButtonProperties = createButton(parent, "Add Properties");
+		setRemoveButton(createButton(parent, "Remove"));
 	}
 
 	public Button getAddButtonProperty() {
diff --git a/modeling/plugins/org.eclipse.pde.ds.ui/src/org/eclipse/pde/ds/ui/internal/editor/masterdetail/ServicesMasterDetail.java b/modeling/plugins/org.eclipse.pde.ds.ui/src/org/eclipse/pde/ds/ui/internal/editor/masterdetail/ServicesMasterDetail.java
index 9e0e20f..38bc1b6 100644
--- a/modeling/plugins/org.eclipse.pde.ds.ui/src/org/eclipse/pde/ds/ui/internal/editor/masterdetail/ServicesMasterDetail.java
+++ b/modeling/plugins/org.eclipse.pde.ds.ui/src/org/eclipse/pde/ds/ui/internal/editor/masterdetail/ServicesMasterDetail.java
@@ -8,7 +8,7 @@
  * Contributors:
  *     Anyware Technologies - initial API and implementation
  *
- * $Id: ServicesMasterDetail.java,v 1.9 2009/08/07 16:41:55 bcabe Exp $
+ * $Id: ServicesMasterDetail.java,v 1.10 2009/08/21 17:40:59 bcabe Exp $
  */
 package org.eclipse.pde.ds.ui.internal.editor.masterdetail;
 
@@ -33,7 +33,7 @@
 	private Button _btnAddRequired;
 
 	public ServicesMasterDetail(EmfFormEditor<?> editor) {
-		super(editor, "Services", EmfMasterDetailBlock.NO_BUTTONS);
+		super(editor, "Services", EmfMasterDetailBlock.USE_CUSTOM_PUSH_BUTTONS);
 	}
 
 	@Override
@@ -75,6 +75,7 @@
 	protected void createCustomButtons(Composite parent) {
 		_btnAddRequired = createButton(parent, "Add Reference");
 		_btnAddProvided = createButton(parent, "Add Provided");
+		setRemoveButton(createButton(parent, "Remove"));
 	}
 
 	public Button getBtnAddProvided() {
diff --git a/modeling/plugins/org.eclipse.pde.emfforms/src/org/eclipse/pde/emfforms/editor/EmfMasterDetailBlock.java b/modeling/plugins/org.eclipse.pde.emfforms/src/org/eclipse/pde/emfforms/editor/EmfMasterDetailBlock.java
index 865f445..6722b4a 100644
--- a/modeling/plugins/org.eclipse.pde.emfforms/src/org/eclipse/pde/emfforms/editor/EmfMasterDetailBlock.java
+++ b/modeling/plugins/org.eclipse.pde.emfforms/src/org/eclipse/pde/emfforms/editor/EmfMasterDetailBlock.java
@@ -8,7 +8,7 @@
  * Contributors:
  *     Anyware Technologies - initial API and implementation
  *
- * $Id: EmfMasterDetailBlock.java,v 1.15 2009/09/02 14:11:43 bcabe Exp $
+ * $Id: EmfMasterDetailBlock.java,v 1.16 2009/09/11 21:18:00 bcabe Exp $
  */
 package org.eclipse.pde.emfforms.editor;
 
@@ -45,9 +45,29 @@
 
 	protected EmfFormEditor<?> parentEditor;
 
+	/**
+	 * Style constant to indicate that no generic buttons (neither toolbar nor push) should be displayed 
+	 */
 	public static final int NO_BUTTONS = 0;
+
+	/**
+	 * Style constant to indicate whether generic toolbar buttons should be displayed or not 
+	 */
 	public static final int USE_GENERIC_TOOLBAR_BUTTONS = 1 << 0;
+
+	/**
+	 * Style constant to indicate whether generic push buttons should be displayed on the
+	 * right-hand side of the tree viewer or not
+	 */
 	public static final int USE_GENERIC_PUSH_BUTTONS = 1 << 1;
+
+	/**
+	 * Style constant to indicate whether custom push buttons should be displayed on the
+	 * right-hand side of the tree viewer or not.
+	 * If the flag is set, the {@link EmfMasterDetailBlock#createCustomButtons(Composite)} will be called. 
+	 */
+	public static final int USE_CUSTOM_PUSH_BUTTONS = 1 << 2;
+
 	protected int buttonOption = USE_GENERIC_TOOLBAR_BUTTONS;
 
 	private String title;
@@ -92,10 +112,13 @@
 			Composite buttonComposite = new Composite(client, SWT.NONE);
 			GridLayoutFactory.fillDefaults().numColumns(1).applyTo(buttonComposite);
 
-			addButton = createButton(buttonComposite, "Add"); //$NON-NLS-1$
-			removeButton = createButton(buttonComposite, "Remove"); //$NON-NLS-1$
+			if (showGenericPushButtons())
+				addButton = createButton(buttonComposite, "Add"); //$NON-NLS-1$
+			if (showCustomPushButtons())
+				createCustomButtons(buttonComposite);
+			if (showGenericPushButtons())
+				removeButton = createButton(buttonComposite, "Remove"); //$NON-NLS-1$
 
-			createCustomButtons(buttonComposite);
 			GridDataFactory.fillDefaults().grab(false, false).applyTo(buttonComposite);
 		}
 
@@ -155,7 +178,7 @@
 		// ActionBarContributor's global handlers
 		configureActionBarManagement();
 
-		if (showPushButtons()) {
+		if (getRemoveButton() != null) {
 
 			DataBindingContext bindingContext = new DataBindingContext();
 
@@ -225,7 +248,15 @@
 	}
 
 	private boolean showPushButtons() {
-		return (buttonOption & USE_GENERIC_PUSH_BUTTONS) > 0;
+		return showCustomPushButtons() || showGenericPushButtons();
+	}
+
+	private boolean showCustomPushButtons() {
+		return ((buttonOption & USE_CUSTOM_PUSH_BUTTONS) > 0);
+	}
+
+	private boolean showGenericPushButtons() {
+		return ((buttonOption & USE_GENERIC_PUSH_BUTTONS) > 0);
 	}
 
 	private boolean showToolbarButtons() {
@@ -290,6 +321,14 @@
 		return removeButton;
 	}
 
+	public void setAddButton(Button addButton) {
+		this.addButton = addButton;
+	}
+
+	public void setRemoveButton(Button removeButton) {
+		this.removeButton = removeButton;
+	}
+
 	protected void createContextMenuFor(StructuredViewer viewer) {
 		MenuManager contextMenu = new MenuManager("#PopUp"); //$NON-NLS-1$
 		contextMenu.add(new Separator("additions")); //$NON-NLS-1$
