diff --git a/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/internal/swt/ButtonObservableValue.java b/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/internal/swt/ButtonObservableValue.java
index 7acfbd8..b4112ff 100644
--- a/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/internal/swt/ButtonObservableValue.java
+++ b/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/internal/swt/ButtonObservableValue.java
@@ -33,8 +33,8 @@
 		public void handleEvent(Event event) {
 			boolean oldSelectionValue = selectionValue;
 			selectionValue = button.getSelection();
-			fireValueChange(Diffs.createValueDiff(oldSelectionValue ? Boolean.TRUE : Boolean.FALSE,
-					selectionValue ? Boolean.TRUE : Boolean.FALSE));
+						
+			notifyIfChanged(oldSelectionValue, selectionValue);
 		}
 	};
 
@@ -66,9 +66,9 @@
 		boolean oldSelectionValue = selectionValue;
 		selectionValue = value == null ? false : ((Boolean) value)
 				.booleanValue();
+		
 		button.setSelection(selectionValue);
-		fireValueChange(Diffs.createValueDiff(oldSelectionValue ? Boolean.TRUE : Boolean.FALSE,
-				selectionValue ? Boolean.TRUE : Boolean.FALSE));
+		notifyIfChanged(oldSelectionValue, selectionValue);
 	}
 
 	public Object doGetValue() {
@@ -76,7 +76,19 @@
 	}
 
 	public Object getValueType() {
-		return Boolean.class;
+		return Boolean.TYPE;
 	}
 
+	/**
+	 * Notifies consumers with a value change event only if a change occurred.
+	 * 
+	 * @param oldValue
+	 * @param newValue
+	 */
+	private void notifyIfChanged(boolean oldValue, boolean newValue) {
+		if (oldValue != newValue) {
+			fireValueChange(Diffs.createValueDiff(oldValue ? Boolean.TRUE : Boolean.FALSE,
+					newValue ? Boolean.TRUE : Boolean.FALSE));
+		}		
+	}
 }
diff --git a/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/internal/swt/CComboObservableValue.java b/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/internal/swt/CComboObservableValue.java
index 4d57d7d..7e58236 100644
--- a/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/internal/swt/CComboObservableValue.java
+++ b/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/internal/swt/CComboObservableValue.java
@@ -71,8 +71,8 @@
 						String oldValue = currentValue;
 						currentValue = CComboObservableValue.this.ccombo
 						.getText();
-						fireValueChange(Diffs.createValueDiff(oldValue,
-								currentValue));
+						
+						notifyIfChanged(oldValue, currentValue);
 					}
 				}
 			});
@@ -107,7 +107,8 @@
 		} finally {
 			updating = false;
 		}
-		fireValueChange(Diffs.createValueDiff(oldValue, ccombo.getText()));
+		
+		notifyIfChanged(oldValue, ccombo.getText());
 	}
 
 	public Object doGetValue() {
@@ -134,4 +135,10 @@
 	public String getAttribute() {
 		return attribute;
 	}
+	
+	private void notifyIfChanged(String oldValue, String newValue) {
+		if (!oldValue.equals(newValue)) {
+			fireValueChange(Diffs.createValueDiff(oldValue, ccombo.getText()));			
+		}
+	}
 }
diff --git a/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/internal/swt/CComboSingleSelectionObservableValue.java b/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/internal/swt/CComboSingleSelectionObservableValue.java
index 8d79dd2..3f15855 100644
--- a/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/internal/swt/CComboSingleSelectionObservableValue.java
+++ b/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/internal/swt/CComboSingleSelectionObservableValue.java
@@ -11,6 +11,7 @@
  *******************************************************************************/
 package org.eclipse.jface.internal.databinding.internal.swt;
 
+import org.eclipse.core.databinding.observable.Realm;
 import org.eclipse.swt.custom.CCombo;
 import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.events.SelectionListener;
@@ -27,6 +28,14 @@
 	public CComboSingleSelectionObservableValue(CCombo combo) {
 		super(combo);
 	}
+	
+	/**
+	 * @param realm
+	 * @param combo
+	 */
+	public CComboSingleSelectionObservableValue(Realm realm, CCombo combo) {
+		super(realm, combo);
+	}
 
 	private CCombo getCCombo() {
 		return (CCombo) getWidget();
diff --git a/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/internal/swt/CLabelObservableValue.java b/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/internal/swt/CLabelObservableValue.java
index bbdc16c..a18d076 100644
--- a/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/internal/swt/CLabelObservableValue.java
+++ b/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/internal/swt/CLabelObservableValue.java
@@ -43,8 +43,12 @@
 
 	public void doSetValue(final Object value) {
 		String oldValue = label.getText();
-		label.setText(value == null ? "" : value.toString()); //$NON-NLS-1$
-		fireValueChange(Diffs.createValueDiff(oldValue, label.getText()));
+		String newValue = value == null ? "" : value.toString();  //$NON-NLS-1$
+		label.setText(newValue);
+
+		if (!newValue.equals(oldValue)) {
+			fireValueChange(Diffs.createValueDiff(oldValue, newValue));
+		}
 	}
 
 	public Object doGetValue() {
diff --git a/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/internal/swt/ComboObservableValue.java b/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/internal/swt/ComboObservableValue.java
index d7c391b..9b20319 100644
--- a/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/internal/swt/ComboObservableValue.java
+++ b/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/internal/swt/ComboObservableValue.java
@@ -64,8 +64,8 @@
 						String oldValue = currentValue;
 						currentValue = ComboObservableValue.this.combo
 						.getText();
-						fireValueChange(Diffs.createValueDiff(oldValue,
-								currentValue));
+						
+						notifyIfChanged(oldValue, currentValue);
 					}
 				}
 			});
@@ -100,7 +100,8 @@
 		} finally {
 			updating = false;
 		}
-		fireValueChange(Diffs.createValueDiff(oldValue, combo.getText()));
+		
+		notifyIfChanged(oldValue, combo.getText());
 	}
 
 	public Object doGetValue() {
@@ -127,4 +128,10 @@
 	public String getAttribute() {
 		return attribute;
 	}
+	
+	private void notifyIfChanged(String oldValue, String newValue) {
+		if (!oldValue.equals(newValue)) {
+			fireValueChange(Diffs.createValueDiff(oldValue, newValue));
+		}
+	}
 }
diff --git a/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/internal/swt/LabelObservableValue.java b/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/internal/swt/LabelObservableValue.java
index fe94587..2bd9012 100644
--- a/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/internal/swt/LabelObservableValue.java
+++ b/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/internal/swt/LabelObservableValue.java
@@ -43,8 +43,12 @@
 
 	public void doSetValue(final Object value) {
 		String oldValue = label.getText();
-		label.setText(value == null ? "" : value.toString()); //$NON-NLS-1$
-		fireValueChange(Diffs.createValueDiff(oldValue, label.getText()));
+		String newValue = value == null ? "" : value.toString(); //$NON-NLS-1$
+		label.setText(newValue);
+		
+		if (!newValue.equals(oldValue)) {
+			fireValueChange(Diffs.createValueDiff(oldValue, newValue));
+		}
 	}
 
 	public Object doGetValue() {
diff --git a/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/internal/swt/ScaleObservableValue.java b/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/internal/swt/ScaleObservableValue.java
index e8460e6..5683e4c 100644
--- a/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/internal/swt/ScaleObservableValue.java
+++ b/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/internal/swt/ScaleObservableValue.java
@@ -67,8 +67,7 @@
 					if (!updating) {
 						int newSelection = ScaleObservableValue.this.scale
 						.getSelection();
-						fireValueChange(Diffs.createValueDiff(new Integer(
-								currentSelection), new Integer(newSelection)));
+						notifyIfChanged(currentSelection, newSelection);
 						currentSelection = newSelection;
 					}
 				}
@@ -100,8 +99,8 @@
 				Assert.isTrue(false, "invalid attribute name:" + attribute); //$NON-NLS-1$
 				return;
 			}
-			fireValueChange(Diffs.createValueDiff(new Integer(oldValue),
-					new Integer(newValue)));
+			
+			notifyIfChanged(oldValue, newValue);
 		} finally {
 			updating = false;
 		}
@@ -141,4 +140,11 @@
 		}
 		listener = null;
 	}
+	
+	private void notifyIfChanged(int oldValue, int newValue) {
+		if (oldValue != newValue) {
+			fireValueChange(Diffs.createValueDiff(new Integer(oldValue),
+					new Integer(newValue)));
+		}
+	}
 }
diff --git a/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/internal/swt/SingleSelectionObservableValue.java b/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/internal/swt/SingleSelectionObservableValue.java
index b9026ce..9daa486 100644
--- a/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/internal/swt/SingleSelectionObservableValue.java
+++ b/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/internal/swt/SingleSelectionObservableValue.java
@@ -51,8 +51,7 @@
 			public void run() {
 				if (!updating) {
 					int newSelection = doGetSelectionIndex();
-					fireValueChange(Diffs.createValueDiff(new Integer(
-							currentSelection), new Integer(newSelection)));
+					notifyIfChanged(currentSelection, newSelection);
 					currentSelection = newSelection;
 				}
 			}
@@ -69,6 +68,7 @@
 			updating = true;
 			int intValue = ((Integer) value).intValue();
 			doSetSelectionIndex(intValue);
+			notifyIfChanged(currentSelection, intValue);
 			currentSelection = intValue;
 		} finally {
 			updating = false;
@@ -94,4 +94,10 @@
 		return Integer.TYPE;
 	}
 
+	private void notifyIfChanged(int oldValue, int newValue) {
+		if (oldValue != newValue) {
+			fireValueChange(Diffs.createValueDiff(new Integer(
+					oldValue), new Integer(newValue)));
+		}
+	}
 }
diff --git a/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/internal/swt/SpinnerObservableValue.java b/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/internal/swt/SpinnerObservableValue.java
index b9e84f7..cd48d68 100644
--- a/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/internal/swt/SpinnerObservableValue.java
+++ b/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/internal/swt/SpinnerObservableValue.java
@@ -64,8 +64,7 @@
 					if (!updating) {
 						int newSelection = SpinnerObservableValue.this.spinner
 						.getSelection();
-						fireValueChange(Diffs.createValueDiff(new Integer(
-								currentSelection), new Integer(newSelection)));
+						notifyIfChanged(currentSelection, newSelection);
 						currentSelection = newSelection;
 					}
 				}
@@ -97,8 +96,7 @@
 				Assert.isTrue(false, "invalid attribute name:" + attribute); //$NON-NLS-1$
 				return;
 			}
-			fireValueChange(Diffs.createValueDiff(new Integer(oldValue),
-					new Integer(newValue)));
+			notifyIfChanged(oldValue, newValue);
 		} finally {
 			updating = false;
 		}
@@ -126,4 +124,11 @@
 	public String getAttribute() {
 		return attribute;
 	}
+	
+	private void notifyIfChanged(int oldValue, int newValue) {
+		if (oldValue != newValue) {
+			fireValueChange(Diffs.createValueDiff(new Integer(oldValue),
+					new Integer(newValue)));
+		}
+	}
 }
diff --git a/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/internal/swt/TextEditableObservableValue.java b/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/internal/swt/TextEditableObservableValue.java
index f8b21c6..703372f 100644
--- a/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/internal/swt/TextEditableObservableValue.java
+++ b/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/internal/swt/TextEditableObservableValue.java
@@ -11,6 +11,7 @@
 
 package org.eclipse.jface.internal.databinding.internal.swt;
 
+import org.eclipse.core.databinding.observable.Diffs;
 import org.eclipse.core.databinding.observable.Realm;
 import org.eclipse.jface.internal.databinding.provisional.swt.AbstractSWTObservableValue;
 import org.eclipse.swt.widgets.Text;
@@ -58,10 +59,17 @@
 	 * @see org.eclipse.core.databinding.observable.value.AbstractObservableValue#doSetValue(java.lang.Object)
 	 */
 	protected void doSetValue(Object value) {
-		if (Boolean.TRUE.equals(value)) {
-			text.setEditable(true);
-		} else if (Boolean.FALSE.equals(value)) {
-			text.setEditable(false);
+		if (value == null) {
+			throw new IllegalArgumentException("Parameter value was null."); //$NON-NLS-1$
+		}
+		
+		Boolean oldValue = new Boolean(text.getEditable());
+		Boolean newValue = (Boolean) value;
+		
+		text.setEditable(newValue.booleanValue());
+		
+		if (!oldValue.equals(newValue)) {
+			fireValueChange(Diffs.createValueDiff(oldValue, newValue));
 		}
 	}
 }
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/BindingTestSuite.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/BindingTestSuite.java
index 76138d3..94026e9 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/BindingTestSuite.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/BindingTestSuite.java
@@ -109,6 +109,7 @@
 import org.eclipse.jface.tests.internal.databinding.internal.swt.ButtonObservableValueTest;
 import org.eclipse.jface.tests.internal.databinding.internal.swt.CComboObservableValueSelectionTest;
 import org.eclipse.jface.tests.internal.databinding.internal.swt.CComboObservableValueTextTest;
+import org.eclipse.jface.tests.internal.databinding.internal.swt.CComboSingleSelectionObservableValueTest;
 import org.eclipse.jface.tests.internal.databinding.internal.swt.CLabelObservableValueTest;
 import org.eclipse.jface.tests.internal.databinding.internal.swt.ComboObservableValueSelectionTest;
 import org.eclipse.jface.tests.internal.databinding.internal.swt.ComboObservableValueTextTest;
@@ -268,6 +269,7 @@
 		addTest(ButtonObservableValueTest.suite());
 		addTest(CComboObservableValueSelectionTest.suite());
 		addTest(CComboObservableValueTextTest.suite());
+		addTest(CComboSingleSelectionObservableValueTest.suite());
 		addTest(CLabelObservableValueTest.suite());
 		addTest(ComboObservableValueSelectionTest.suite());
 		addTest(ComboObservableValueTextTest.suite());
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/internal/swt/ButtonObservableValueTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/internal/swt/ButtonObservableValueTest.java
index 4a92b3f..6aab90d 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/internal/swt/ButtonObservableValueTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/internal/swt/ButtonObservableValueTest.java
@@ -31,13 +31,34 @@
  * @since 3.2
  */
 public class ButtonObservableValueTest extends TestCase {
-	public void testSetSelectionNotifiesObservable() throws Exception {
-		Shell shell = new Shell();
-		Button button = new Button(shell, SWT.CHECK);
-
-		ButtonObservableValue observableValue = new ButtonObservableValue(
+	private Shell shell;
+	private Button button;
+	private ButtonObservableValue observableValue;
+	private ValueChangeEventTracker listener;
+	
+	/* (non-Javadoc)
+	 * @see junit.framework.TestCase#setUp()
+	 */
+	protected void setUp() throws Exception {
+		super.setUp();
+		
+		shell = new Shell();
+		button = new Button(shell, SWT.CHECK);
+		observableValue = new ButtonObservableValue(
 				button);
-		ValueChangeEventTracker listener = new ValueChangeEventTracker();
+		listener = new ValueChangeEventTracker();
+	}
+	
+	/* (non-Javadoc)
+	 * @see junit.framework.TestCase#tearDown()
+	 */
+	protected void tearDown() throws Exception {
+		shell.dispose();
+		
+		super.tearDown();		
+	}
+	
+	public void testSelection_ChangeNotifiesObservable() throws Exception {
 		observableValue.addValueChangeListener(listener);
 		button.setSelection(true);
 
@@ -47,7 +68,18 @@
 
 		assertEquals("Selection event should notify observable.", 1,
 				listener.count);
-		shell.dispose();
+	}
+	
+	public void testSelection_NoChange() throws Exception {
+		button.setSelection(true);
+		button.notifyListeners(SWT.Selection, null);
+		observableValue.addValueChangeListener(listener);
+		
+		//precondition
+		assertEquals(0, listener.count);
+		
+		button.notifyListeners(SWT.Selection, null);
+		assertEquals("Value did not change.  Listeners should not have been notified.", 0, listener.count);
 	}
 
 	public static Test suite() {
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/internal/swt/CComboObservableValueSelectionTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/internal/swt/CComboObservableValueSelectionTest.java
index 26e7a5f..48d60ec 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/internal/swt/CComboObservableValueSelectionTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/internal/swt/CComboObservableValueSelectionTest.java
@@ -60,7 +60,6 @@
 		ValueChangeEventTracker listener = new ValueChangeEventTracker()
 				.register(observable);
 		combo.select(0);
-		combo.notifyListeners(SWT.Selection, null);
 
 		assertEquals("Observable was not notified.", 1, listener.count);
 	}
@@ -103,7 +102,6 @@
 					.indexOf((String) createValue((IObservableValue) observable));
 
 			combo.select(index);
-			combo.notifyListeners(SWT.Selection, null);
 		}
 
 		public Object getValueType(IObservableValue observable) {
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/internal/swt/CComboSingleSelectionObservableValueTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/internal/swt/CComboSingleSelectionObservableValueTest.java
new file mode 100644
index 0000000..2a9473e
--- /dev/null
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/internal/swt/CComboSingleSelectionObservableValueTest.java
@@ -0,0 +1,86 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Brad Reynolds 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
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Brad Reynolds - initial API and implementation
+ ******************************************************************************/
+
+package org.eclipse.jface.tests.internal.databinding.internal.swt;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+
+import org.eclipse.core.databinding.observable.IObservable;
+import org.eclipse.core.databinding.observable.Realm;
+import org.eclipse.core.databinding.observable.value.IObservableValue;
+import org.eclipse.jface.conformance.databinding.AbstractObservableValueContractDelegate;
+import org.eclipse.jface.conformance.databinding.SWTMutableObservableValueContractTest;
+import org.eclipse.jface.conformance.databinding.SWTObservableValueContractTest;
+import org.eclipse.jface.conformance.databinding.SuiteBuilder;
+import org.eclipse.jface.databinding.swt.ISWTObservable;
+import org.eclipse.jface.internal.databinding.internal.swt.CComboSingleSelectionObservableValue;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.CCombo;
+import org.eclipse.swt.widgets.Shell;
+
+/**
+ * @since 3.2
+ */
+public class CComboSingleSelectionObservableValueTest extends TestCase {
+	public static Test suite() {
+		Delegate delegate = new Delegate();
+		
+		return new SuiteBuilder().addObservableContractTest(
+				SWTObservableValueContractTest.class, delegate)
+				.addObservableContractTest(
+						SWTMutableObservableValueContractTest.class, delegate)
+				.build();
+	}
+
+	/* package */static class Delegate extends
+			AbstractObservableValueContractDelegate {
+		private CCombo combo;
+		private Shell shell;
+
+		public void setUp() {
+			shell = new Shell();
+			combo = new CCombo(shell, SWT.NONE);
+			combo.add("0");
+			combo.add("1");
+		}
+
+		public void tearDown() {
+			shell.dispose();
+		}
+
+		public IObservableValue createObservableValue(Realm realm) {
+			return new CComboSingleSelectionObservableValue(realm, combo);
+		}
+
+		public void change(IObservable observable) {
+			int index = _createValue((IObservableValue) observable);
+			combo.select(index);
+			combo.notifyListeners(SWT.Selection, null);
+		}
+
+		public Object getValueType(IObservableValue observable) {
+			return Integer.TYPE;
+		}
+
+		public Object createValue(IObservableValue observable) {
+			return new Integer(_createValue(observable));
+		}
+		
+		private int _createValue(IObservableValue observable) {
+			CCombo combo = ((CCombo) ((ISWTObservable) observable).getWidget());
+			int value = Math.max(0, combo.getSelectionIndex());
+			
+			//returns either 0 or 1 depending upon current value
+			return Math.abs(value - 1);
+		}
+	}
+}
