Bug 335792 - various small changes to reduce the warning count
diff --git a/bundles/org.eclipse.core.databinding.observable/src/org/eclipse/core/internal/databinding/observable/EmptyObservableList.java b/bundles/org.eclipse.core.databinding.observable/src/org/eclipse/core/internal/databinding/observable/EmptyObservableList.java
index b06b5dd..7aff6ca 100644
--- a/bundles/org.eclipse.core.databinding.observable/src/org/eclipse/core/internal/databinding/observable/EmptyObservableList.java
+++ b/bundles/org.eclipse.core.databinding.observable/src/org/eclipse/core/internal/databinding/observable/EmptyObservableList.java
@@ -71,6 +71,8 @@
 	 * @deprecated use instead the form of the constructor that takes Class as
 	 *             the parameter type for the element type
 	 */
+	// OK to ignore warnings in deprecated methods
+	@SuppressWarnings("unchecked")
 	public EmptyObservableList(Realm realm, Object elementType) {
 		this.realm = realm;
 		this.elementType = elementType;
@@ -92,8 +94,6 @@
 	 *            the element type of the constructed list
 	 * @since 1.1
 	 */
-	// We must set deprecated fields in case any one uses them
-	@SuppressWarnings("deprecation")
 	public EmptyObservableList(Realm realm, Class<E> elementType) {
 		this.realm = realm;
 		this.elementType = elementType;
diff --git a/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/databinding/dialog/ValidationMessageProvider.java b/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/databinding/dialog/ValidationMessageProvider.java
index 00fcb10..a5bc340 100644
--- a/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/databinding/dialog/ValidationMessageProvider.java
+++ b/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/databinding/dialog/ValidationMessageProvider.java
@@ -31,8 +31,7 @@
 	 */
 	public String getMessage(ValidationStatusProvider statusProvider) {
 		if (statusProvider != null) {
-			IStatus status = (IStatus) statusProvider.getValidationStatus()
-					.getValue();
+			IStatus status = statusProvider.getValidationStatus().getValue();
 			return status.getMessage();
 		}
 		return null;
@@ -49,8 +48,7 @@
 			return IMessageProvider.NONE;
 		}
 
-		IStatus status = (IStatus) statusProvider.getValidationStatus()
-				.getValue();
+		IStatus status = statusProvider.getValidationStatus().getValue();
 		int severity = status.getSeverity();
 		switch (severity) {
 		case IStatus.OK:
diff --git a/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/databinding/fieldassist/ControlDecorationSupport.java b/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/databinding/fieldassist/ControlDecorationSupport.java
index 935fdc6..ea143ad 100644
--- a/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/databinding/fieldassist/ControlDecorationSupport.java
+++ b/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/databinding/fieldassist/ControlDecorationSupport.java
@@ -230,7 +230,7 @@
 		}
 
 		if (target instanceof IViewerObservable) {
-			Viewer viewer = ((IViewerObservable) target).getViewer();
+			Viewer viewer = ((IViewerObservable<?>) target).getViewer();
 			return viewer.getControl();
 		}
 
diff --git a/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/databinding/swt/SWTObservables.java b/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/databinding/swt/SWTObservables.java
index f9959af..d95dd5d 100644
--- a/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/databinding/swt/SWTObservables.java
+++ b/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/databinding/swt/SWTObservables.java
@@ -29,17 +29,37 @@
 import org.eclipse.jface.internal.databinding.swt.SWTDelayedObservableValueDecorator;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.custom.CCombo;
+import org.eclipse.swt.custom.CLabel;
+import org.eclipse.swt.custom.CTabItem;
 import org.eclipse.swt.custom.StyledText;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
 import org.eclipse.swt.widgets.Button;
 import org.eclipse.swt.widgets.Combo;
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Item;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Link;
 import org.eclipse.swt.widgets.List;
+import org.eclipse.swt.widgets.Menu;
 import org.eclipse.swt.widgets.MenuItem;
 import org.eclipse.swt.widgets.Scale;
+import org.eclipse.swt.widgets.ScrollBar;
+import org.eclipse.swt.widgets.Shell;
 import org.eclipse.swt.widgets.Slider;
 import org.eclipse.swt.widgets.Spinner;
+import org.eclipse.swt.widgets.TabItem;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
 import org.eclipse.swt.widgets.Text;
+import org.eclipse.swt.widgets.ToolItem;
+import org.eclipse.swt.widgets.ToolTip;
+import org.eclipse.swt.widgets.TrayItem;
+import org.eclipse.swt.widgets.TreeColumn;
 import org.eclipse.swt.widgets.Widget;
 
 /**
@@ -124,8 +144,12 @@
 	 * @return an observable value tracking the enabled state of the given
 	 *         widget.
 	 * @since 1.5
+	 * @deprecated use instead one of the more specific methods
+	 *             observeEnabled(Control), observeEnabled(Menu),
+	 *             observeEnabled(MenuItem), observeEnabled(ScrollBar),
+	 *             observeEnabled(ToolItem)
 	 */
-	public static ISWTObservableValue observeEnabled(Widget widget) {
+	public static ISWTObservableValue<Boolean> observeEnabled(Widget widget) {
 		return WidgetProperties.enabled().observe(widget);
 	}
 
@@ -138,8 +162,65 @@
 	 * @return an observable value tracking the enabled state of the given
 	 *         control
 	 */
-	public static ISWTObservableValue observeEnabled(Control control) {
-		return observeEnabled((Widget) control);
+	public static ISWTObservableValue<Boolean> observeEnabled(Control control) {
+		return WidgetProperties.enabledControl().observe(control);
+	}
+
+	/**
+	 * Returns an observable value tracking the enabled state of the given
+	 * control
+	 * 
+	 * @param menu
+	 *            the control to observe
+	 * @return an observable value tracking the enabled state of the given
+	 *         control
+	 * @since 1.7
+	 */
+	public static ISWTObservableValue<Boolean> observeEnabled(Menu menu) {
+		return WidgetProperties.enabledMenu().observe(menu);
+	}
+
+	/**
+	 * Returns an observable value tracking the enabled state of the given
+	 * control
+	 * 
+	 * @param menuItem
+	 *            the menu item to observe
+	 * @return an observable value tracking the enabled state of the given menu
+	 *         item
+	 * @since 1.7
+	 */
+	public static ISWTObservableValue<Boolean> observeEnabled(MenuItem menuItem) {
+		return WidgetProperties.enabledMenuItem().observe(menuItem);
+	}
+
+	/**
+	 * Returns an observable value tracking the enabled state of the given
+	 * control
+	 * 
+	 * @param scrollBar
+	 *            the scroll bar to observe
+	 * @return an observable value tracking the enabled state of the given
+	 *         scroll bar
+	 * @since 1.7
+	 */
+	public static ISWTObservableValue<Boolean> observeEnabled(
+			ScrollBar scrollBar) {
+		return WidgetProperties.enabledScrollBar().observe(scrollBar);
+	}
+
+	/**
+	 * Returns an observable value tracking the enabled state of the given tool
+	 * item
+	 * 
+	 * @param toolItem
+	 *            the control to observe
+	 * @return an observable value tracking the enabled state of the given tool
+	 *         item
+	 * @since 1.7
+	 */
+	public static ISWTObservableValue<Boolean> observeEnabled(ToolItem toolItem) {
+		return WidgetProperties.enabledToolItem().observe(toolItem);
 	}
 
 	/**
@@ -151,7 +232,7 @@
 	 * @return an observable value tracking the visible state of the given
 	 *         control
 	 */
-	public static ISWTObservableValue observeVisible(Control control) {
+	public static ISWTObservableValue<Boolean> observeVisible(Control control) {
 		return WidgetProperties.visible().observe(control);
 	}
 
@@ -170,24 +251,117 @@
 	 * 
 	 * @param widget
 	 * @return an observable value tracking the tooltip text of the given item
-	 * 
 	 * @since 1.3
+	 * @deprecated use instead one of the more specific methods
+	 *             observeTooltipText(Control), observeTooltipText(CTabItem),
+	 *             observeTooltipText(TabItem), observeTooltipText(TableColumn),
+	 *             observeTooltipText(ToolItem), observeTooltipText(TrayItem),
+	 *             observeTooltipText(TreeColumn)
 	 */
-	public static ISWTObservableValue observeTooltipText(Widget widget) {
+	public static ISWTObservableValue<Boolean> observeTooltipText(Widget widget) {
 		return WidgetProperties.tooltipText().observe(widget);
 	}
 
 	/**
-	 * Returns an observable value tracking the tooltip text of the given
+	 * Returns an observable value tracking the tool-tip text of the given
 	 * control
 	 * 
 	 * @param control
 	 *            the control to observe
-	 * @return an observable value tracking the tooltip text of the given
+	 * @return an observable value tracking the tool-tip text of the given
 	 *         control
 	 */
-	public static ISWTObservableValue observeTooltipText(Control control) {
-		return observeTooltipText((Widget) control);
+	public static ISWTObservableValue<String> observeTooltipText(Control control) {
+		return WidgetProperties.tooltipControl().observe(control);
+	}
+
+	/**
+	 * Returns an observable value tracking the tool-tip text of the given
+	 * custom tab item
+	 * 
+	 * @param cTabItem
+	 *            the control to observe
+	 * @return an observable value tracking the tool-tip text of the given
+	 *         custom tab item
+	 * @since 1.7
+	 */
+	public static ISWTObservableValue<String> observeTooltipText(
+			CTabItem cTabItem) {
+		return WidgetProperties.tooltipCTabItem().observe(cTabItem);
+	}
+
+	/**
+	 * Returns an observable value tracking the tool-tip text of the given tab
+	 * item
+	 * 
+	 * @param tabItem
+	 *            the control to observe
+	 * @return an observable value tracking the tool-tip text of the given tab
+	 *         item
+	 * @since 1.7
+	 */
+	public static ISWTObservableValue<String> observeTooltipText(TabItem tabItem) {
+		return WidgetProperties.tooltipTabItem().observe(tabItem);
+	}
+
+	/**
+	 * Returns an observable value tracking the tool-tip text of the given table
+	 * column
+	 * 
+	 * @param tableColumn
+	 *            the control to observe
+	 * @return an observable value tracking the tool-tip text of the given table
+	 *         column
+	 * @since 1.7
+	 */
+	public static ISWTObservableValue<String> observeTooltipText(
+			TableColumn tableColumn) {
+		return WidgetProperties.tooltipTableColumn().observe(tableColumn);
+	}
+
+	/**
+	 * Returns an observable value tracking the tool-tip text of the given tool
+	 * item
+	 * 
+	 * @param toolItem
+	 *            the control to observe
+	 * @return an observable value tracking the tool-tip text of the given tool
+	 *         item
+	 * @since 1.7
+	 */
+	public static ISWTObservableValue<String> observeTooltipText(
+			ToolItem toolItem) {
+		return WidgetProperties.tooltipToolItem().observe(toolItem);
+	}
+
+	/**
+	 * Returns an observable value tracking the tool-tip text of the given tray
+	 * item
+	 * 
+	 * @param trayItem
+	 *            the control to observe
+	 * @return an observable value tracking the tool-tip text of the given tray
+	 *         item
+	 * @since 1.7
+	 */
+	public static ISWTObservableValue<String> observeTooltipText(
+			TrayItem trayItem) {
+		return WidgetProperties.tooltipTrayItem().observe(trayItem);
+	}
+
+	/**
+	 * Returns an observable value tracking the tool-tip text of the given tree
+	 * column
+	 * 
+	 * @param treeColumn
+	 *            the control to observe
+	 * @return an observable value tracking the tool-tip text of the given tree
+	 *         column
+	 * @since 1.7
+	 */
+	public static ISWTObservableValue<String> observeTooltipText(
+			TreeColumn treeColumn) {
+		return WidgetProperties.tooltipTreeColumn().observe(treeColumn);
 	}
 
 	/**
@@ -207,10 +381,11 @@
 	 * @return observable value
 	 * @throws IllegalArgumentException
 	 *             if <code>control</code> type is unsupported
-	 * 
 	 * @deprecated use instead one of the more specific methods
 	 *             (observeSelection(Button), observeSelection(Combo) etc)
 	 */
+	// It's ok to supress warnings on deprecated methods
+	@SuppressWarnings("unchecked")
 	public static ISWTObservableValue<?> observeSelection(Widget control) {
 		return WidgetProperties.selection().observe(control);
 	}
@@ -235,6 +410,8 @@
 	 * @deprecated use instead one of the more specific methods
 	 *             (observeSelection(Button), observeSelection(Combo) etc)
 	 */
+	// It's ok to supress warnings on deprecated methods
+	@SuppressWarnings("unchecked")
 	public static ISWTObservableValue<?> observeSelection(Control control) {
 		return WidgetProperties.selection().observe(control);
 	}
@@ -513,7 +690,11 @@
 	 * @return observable value
 	 * @throws IllegalArgumentException
 	 *             if <code>control</code> type is unsupported
+	 * @deprecated use instead one of the more specific methods
+	 *             observeText(Text), observeText(Styled)
 	 */
+	// It's ok to suppress warnings on deprecated methods
+	@SuppressWarnings("unchecked")
 	public static ISWTObservableValue<String> observeText(Control control,
 			int event) {
 		return WidgetProperties.text(event).observe(control);
@@ -521,6 +702,36 @@
 
 	/**
 	 * Returns an observable observing the text attribute of the provided
+	 * <code>org.eclipse.swt.widgets.Text</code>.
+	 * 
+	 * @param control
+	 * @param event
+	 *            event type to register for change events
+	 * @return observable value
+	 * @since 1.7
+	 */
+	public static ISWTObservableValue<String> observeText(Text control,
+			int event) {
+		return WidgetProperties.textText(event).observe(control);
+	}
+
+	/**
+	 * Returns an observable observing the text attribute of the provided
+	 * <code>org.eclipse.swt.custom.StyledText</code>.
+	 * 
+	 * @param control
+	 * @param event
+	 *            event type to register for change events
+	 * @return observable value
+	 * @since 1.7
+	 */
+	public static ISWTObservableValue<String> observeText(StyledText control,
+			int event) {
+		return WidgetProperties.textStyledText(event).observe(control);
+	}
+
+	/**
+	 * Returns an observable observing the text attribute of the provided
 	 * <code>widget</code>. The supported types are:
 	 * <ul>
 	 * <li>org.eclipse.swt.widgets.Button (as of 1.3)</li>
@@ -539,15 +750,138 @@
 	 * @return observable value
 	 * @throws IllegalArgumentException
 	 *             if the type of <code>widget</code> is unsupported
-	 * 
 	 * @since 1.3
+	 * @deprecated use instead one of the more specific methods
+	 *             observeText(Button), observeText(CCombo) etc
 	 */
+	// It's ok to suppress warnings on deprecated methods
+	@SuppressWarnings({ "unchecked", "rawtypes" })
 	public static ISWTObservableValue observeText(Widget widget) {
 		return WidgetProperties.text().observe(widget);
 	}
 
 	/**
 	 * Returns an observable observing the text attribute of the provided
+	 * <code>Button</code>.
+	 * 
+	 * @param widget
+	 * @return observable value
+	 * @since 1.7
+	 */
+	public static ISWTObservableValue<String> observeText(Button widget) {
+		return WidgetProperties.textButton().observe(widget);
+	}
+
+	/**
+	 * Returns an observable observing the text attribute of the provided
+	 * <code>CCombo</code>.
+	 * 
+	 * @param widget
+	 * @return observable value
+	 * @since 1.7
+	 */
+	public static ISWTObservableValue<String> observeText(CCombo widget) {
+		return WidgetProperties.textCCombo().observe(widget);
+	}
+
+	/**
+	 * Returns an observable observing the text attribute of the provided
+	 * <code>CLabel</code>.
+	 * 
+	 * @param widget
+	 * @return observable value
+	 * @since 1.7
+	 */
+	public static ISWTObservableValue<String> observeText(CLabel widget) {
+		return WidgetProperties.textCLabel().observe(widget);
+	}
+
+	/**
+	 * Returns an observable observing the text attribute of the provided
+	 * <code>Combo</code>.
+	 * 
+	 * @param widget
+	 * @return observable value
+	 * @since 1.7
+	 */
+	public static ISWTObservableValue<String> observeText(Combo widget) {
+		return WidgetProperties.textCombo().observe(widget);
+	}
+
+	/**
+	 * Returns an observable observing the text attribute of the provided
+	 * <code>Item</code>.
+	 * 
+	 * @param widget
+	 * @return observable value
+	 * @since 1.7
+	 */
+	public static ISWTObservableValue<String> observeText(Item widget) {
+		return WidgetProperties.textItem().observe(widget);
+	}
+
+	/**
+	 * Returns an observable observing the text attribute of the provided
+	 * <code>Label</code>.
+	 * 
+	 * @param widget
+	 * @return observable value
+	 * @since 1.7
+	 */
+	public static ISWTObservableValue<String> observeText(Label widget) {
+		return WidgetProperties.textLabel().observe(widget);
+	}
+
+	/**
+	 * Returns an observable observing the text attribute of the provided
+	 * <code>Link</code>.
+	 * 
+	 * @param widget
+	 * @return observable value
+	 * @since 1.7
+	 */
+	public static ISWTObservableValue<String> observeText(Link widget) {
+		return WidgetProperties.textLink().observe(widget);
+	}
+
+	/**
+	 * Returns an observable observing the text attribute of the provided
+	 * <code>Shell</code>.
+	 * 
+	 * @param widget
+	 * @return observable value
+	 * @since 1.7
+	 */
+	public static ISWTObservableValue<String> observeText(Shell widget) {
+		return WidgetProperties.textShell().observe(widget);
+	}
+
+	/**
+	 * Returns an observable observing the text attribute of the provided
+	 * <code>StyledText</code>.
+	 * 
+	 * @param widget
+	 * @return observable value
+	 * @since 1.7
+	 */
+	public static ISWTObservableValue<String> observeText(StyledText widget) {
+		return WidgetProperties.textStyledText().observe(widget);
+	}
+
+	/**
+	 * Returns an observable observing the text attribute of the provided
+	 * <code>Text</code>.
+	 * 
+	 * @param widget
+	 * @return observable value
+	 * @since 1.7
+	 */
+	public static ISWTObservableValue<String> observeText(Text widget) {
+		return WidgetProperties.textText().observe(widget);
+	}
+
+	/**
+	 * Returns an observable observing the text attribute of the provided
 	 * <code>control</code>. The supported types are:
 	 * <ul>
 	 * <li>org.eclipse.swt.widgets.Button (as of 1.3)</li>
@@ -565,8 +899,12 @@
 	 * @return observable value
 	 * @throws IllegalArgumentException
 	 *             if <code>control</code> type is unsupported
+	 * @deprecated use instead one of the more specific methods
+	 *             observeText(Button), observeText(CCombo) etc
 	 */
-	public static ISWTObservableValue<String> observeText(Control control) {
+	// It's ok to suppress warnings on deprecated methods
+	@SuppressWarnings({ "rawtypes" })
+	public static ISWTObservableValue observeText(Control control) {
 		return observeText((Widget) control);
 	}
 
@@ -582,12 +920,40 @@
 	 * @return an observable observing the message attribute of the provided
 	 *         <code>widget</code>.
 	 * @since 1.3
+	 * @deprecated use instead one of the more specific methods
+	 *             observeMessage(Text), observeMessage(ToolTip)
 	 */
+	// It's ok to suppress warnings on deprecated methods
+	@SuppressWarnings({ "rawtypes", "unchecked" })
 	public static ISWTObservableValue observeMessage(Widget widget) {
 		return WidgetProperties.message().observe(widget);
 	}
 
 	/**
+	 * Returns an observable observing the message attribute of the provided
+	 * <code>Text</code>.
+	 * 
+	 * @param widget
+	 * @return observable value
+	 * @since 1.7
+	 */
+	public static ISWTObservableValue<String> observeMessage(Text widget) {
+		return WidgetProperties.messageText().observe(widget);
+	}
+
+	/**
+	 * Returns an observable observing the message attribute of the provided
+	 * <code>Text</code>.
+	 * 
+	 * @param widget
+	 * @return observable value
+	 * @since 1.7
+	 */
+	public static ISWTObservableValue<String> observeMessage(ToolTip widget) {
+		return WidgetProperties.messageToolTip().observe(widget);
+	}
+
+	/**
 	 * Returns an observable observing the image attribute of the provided
 	 * <code>widget</code>. The supported types are:
 	 * <ul>
@@ -602,12 +968,65 @@
 	 * @throws IllegalArgumentException
 	 *             if <code>widget</code> type is unsupported
 	 * @since 1.3
+	 * @deprecated use instead one of the more specific methods
+	 *             observeImage(Button), observeImage(CLabel),
+	 *             observeImage(Item), observeImage(Label)
 	 */
+	// It's ok to suppress warnings on deprecated methods
+	@SuppressWarnings({ "rawtypes", "unchecked" })
 	public static ISWTObservableValue observeImage(Widget widget) {
 		return WidgetProperties.image().observe(widget);
 	}
 
 	/**
+	 * Returns an observable observing the image attribute of the provided
+	 * <code>Button</code>.
+	 * 
+	 * @param widget
+	 * @return observable value
+	 * @since 1.7
+	 */
+	public static ISWTObservableValue<Image> observeImage(Button widget) {
+		return WidgetProperties.imageButton().observe(widget);
+	}
+
+	/**
+	 * Returns an observable observing the image attribute of the provided
+	 * <code>CLabel</code>.
+	 * 
+	 * @param widget
+	 * @return observable value
+	 * @since 1.7
+	 */
+	public static ISWTObservableValue<Image> observeImage(CLabel widget) {
+		return WidgetProperties.imageCLabel().observe(widget);
+	}
+
+	/**
+	 * Returns an observable observing the image attribute of the provided
+	 * <code>Item</code>.
+	 * 
+	 * @param widget
+	 * @return observable value
+	 * @since 1.7
+	 */
+	public static ISWTObservableValue<Image> observeImage(Item widget) {
+		return WidgetProperties.imageItem().observe(widget);
+	}
+
+	/**
+	 * Returns an observable observing the image attribute of the provided
+	 * <code>Label</code>.
+	 * 
+	 * @param widget
+	 * @return observable value
+	 * @since 1.7
+	 */
+	public static ISWTObservableValue<Image> observeImage(Label widget) {
+		return WidgetProperties.imageLabel().observe(widget);
+	}
+
+	/**
 	 * Returns an observable observing the items attribute of the provided
 	 * <code>control</code>. The supported types are:
 	 * <ul>
@@ -620,12 +1039,52 @@
 	 * @return observable list
 	 * @throws IllegalArgumentException
 	 *             if <code>control</code> type is unsupported
+	 * @deprecated use instead one of the more specific methods
+	 *             observeItems(CCombo), observeItems(Combo), observeItems(List)
 	 */
+	// It's ok to suppress warnings on deprecated methods
+	@SuppressWarnings({ "rawtypes", "unchecked" })
 	public static IObservableList observeItems(Control control) {
 		return WidgetProperties.items().observe(control);
 	}
 
 	/**
+	 * Returns an observable observing the items attribute of the provided
+	 * <code>CCombo</code>.
+	 * 
+	 * @param widget
+	 * @return observable list of items
+	 * @since 1.7
+	 */
+	public static ISWTObservableList<String> observeItems(CCombo widget) {
+		return WidgetProperties.itemsCCombo().observe(widget);
+	}
+
+	/**
+	 * Returns an observable observing the items attribute of the provided
+	 * <code>Combo</code>.
+	 * 
+	 * @param widget
+	 * @return observable list of items
+	 * @since 1.7
+	 */
+	public static ISWTObservableList<String> observeItems(Combo widget) {
+		return WidgetProperties.itemsCombo().observe(widget);
+	}
+
+	/**
+	 * Returns an observable observing the items attribute of the provided
+	 * <code>List</code>.
+	 * 
+	 * @param widget
+	 * @return observable list of items
+	 * @since 1.7
+	 */
+	public static ISWTObservableList<String> observeItems(List widget) {
+		return WidgetProperties.itemsList().observe(widget);
+	}
+
+	/**
 	 * Returns an observable observing the single selection index attribute of
 	 * the provided <code>control</code>. The supported types are:
 	 * <ul>
@@ -639,13 +1098,71 @@
 	 * @return observable value
 	 * @throws IllegalArgumentException
 	 *             if <code>control</code> type is unsupported
+	 * @deprecated use instead one of the more specific methods
+	 *             observeSingleSelection(CCombo),
+	 *             observeSingleSelection(Combo), observeSingleSelection(List),
+	 *             observeSingleSelection(Table)
 	 */
+	// It's ok to suppress warnings on deprecated methods
+	@SuppressWarnings({ "rawtypes", "unchecked" })
 	public static ISWTObservableValue observeSingleSelectionIndex(
 			Control control) {
 		return WidgetProperties.singleSelectionIndex().observe(control);
 	}
 
 	/**
+	 * Returns an observable observing the selection index of the provided
+	 * <code>CCombo</code>.
+	 * 
+	 * @param widget
+	 * @return observable value of the integer index
+	 * @since 1.7
+	 */
+	public static ISWTObservableValue<Integer> observeSingleSelection(
+			CCombo widget) {
+		return WidgetProperties.singleSelectionIndexCCombo().observe(widget);
+	}
+
+	/**
+	 * Returns an observable observing the selection index of the provided
+	 * <code>Combo</code>.
+	 * 
+	 * @param widget
+	 * @return observable value of the integer index
+	 * @since 1.7
+	 */
+	public static ISWTObservableValue<Integer> observeSingleSelection(
+			Combo widget) {
+		return WidgetProperties.singleSelectionIndexCombo().observe(widget);
+	}
+
+	/**
+	 * Returns an observable observing the selection index of the provided
+	 * <code>List</code>.
+	 * 
+	 * @param widget
+	 * @return observable value of the integer index
+	 * @since 1.7
+	 */
+	public static ISWTObservableValue<Integer> observeSingleSelection(
+			List widget) {
+		return WidgetProperties.singleSelectionIndexList().observe(widget);
+	}
+
+	/**
+	 * Returns an observable observing the selection index of the provided
+	 * <code>Table</code>.
+	 * 
+	 * @param widget
+	 * @return observable value of the integer index
+	 * @since 1.7
+	 */
+	public static ISWTObservableValue<Integer> observeSingleSelection(
+			Table widget) {
+		return WidgetProperties.singleSelectionIndexTable().observe(widget);
+	}
+
+	/**
 	 * Returns an observable value tracking the foreground color of the given
 	 * control
 	 * 
@@ -654,7 +1171,7 @@
 	 * @return an observable value tracking the foreground color of the given
 	 *         control
 	 */
-	public static ISWTObservableValue observeForeground(Control control) {
+	public static ISWTObservableValue<Color> observeForeground(Control control) {
 		return WidgetProperties.foreground().observe(control);
 	}
 
@@ -667,7 +1184,7 @@
 	 * @return an observable value tracking the background color of the given
 	 *         control
 	 */
-	public static ISWTObservableValue observeBackground(Control control) {
+	public static ISWTObservableValue<Color> observeBackground(Control control) {
 		return WidgetProperties.background().observe(control);
 	}
 
@@ -678,7 +1195,7 @@
 	 *            the control to observe
 	 * @return an observable value tracking the font of the given control
 	 */
-	public static ISWTObservableValue observeFont(Control control) {
+	public static ISWTObservableValue<Font> observeFont(Control control) {
 		return WidgetProperties.font().observe(control);
 	}
 
@@ -690,7 +1207,7 @@
 	 * @return an observable value tracking the size of the given control
 	 * @since 1.3
 	 */
-	public static ISWTObservableValue observeSize(Control control) {
+	public static ISWTObservableValue<Point> observeSize(Control control) {
 		return WidgetProperties.size().observe(control);
 	}
 
@@ -702,7 +1219,7 @@
 	 * @return an observable value tracking the location of the given control
 	 * @since 1.3
 	 */
-	public static ISWTObservableValue observeLocation(Control control) {
+	public static ISWTObservableValue<Point> observeLocation(Control control) {
 		return WidgetProperties.location().observe(control);
 	}
 
@@ -714,7 +1231,7 @@
 	 * @return an observable value tracking the focus of the given control
 	 * @since 1.3
 	 */
-	public static ISWTObservableValue observeFocus(Control control) {
+	public static ISWTObservableValue<Boolean> observeFocus(Control control) {
 		return WidgetProperties.focused().observe(control);
 	}
 
@@ -726,7 +1243,7 @@
 	 * @return an observable value tracking the bounds of the given control
 	 * @since 1.3
 	 */
-	public static ISWTObservableValue observeBounds(Control control) {
+	public static ISWTObservableValue<Rectangle> observeBounds(Control control) {
 		return WidgetProperties.bounds().observe(control);
 	}
 
@@ -743,11 +1260,53 @@
 	 * @return observable value
 	 * @throws IllegalArgumentException
 	 *             if <code>control</code> type is unsupported
+	 * @deprecated use instead one of the more specific methods
+	 *             observeEditable(CCombo), observeEditable(StyledText),
+	 *             observeEditable(Text)
 	 */
+	// It's ok to suppress warnings on deprecated methods
+	@SuppressWarnings({ "rawtypes", "unchecked" })
 	public static ISWTObservableValue observeEditable(Control control) {
 		return WidgetProperties.editable().observe(control);
 	}
 
+	/**
+	 * Returns an observable observing the editable attribute of the provided
+	 * <code>CCombo</code>.
+	 * 
+	 * @param control
+	 * @return observable value
+	 * @since 1.7
+	 */
+	public static ISWTObservableValue<Boolean> observeEditable(CCombo control) {
+		return WidgetProperties.editableCCombo().observe(control);
+	}
+
+	/**
+	 * Returns an observable observing the editable attribute of the provided
+	 * <code>StyledText</code>.
+	 * 
+	 * @param control
+	 * @return observable value
+	 * @since 1.7
+	 */
+	public static ISWTObservableValue<Boolean> observeEditable(
+			StyledText control) {
+		return WidgetProperties.editableStyledText().observe(control);
+	}
+
+	/**
+	 * Returns an observable observing the editable attribute of the provided
+	 * <code>Text</code>.
+	 * 
+	 * @param control
+	 * @return observable value
+	 * @since 1.7
+	 */
+	public static ISWTObservableValue<Boolean> observeEditable(Text control) {
+		return WidgetProperties.editableText().observe(control);
+	}
+
 	private static class DisplayRealm extends Realm {
 		private Display display;
 
diff --git a/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/databinding/swt/WidgetProperties.java b/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/databinding/swt/WidgetProperties.java
index 2baa2d2..a4cbe65 100644
--- a/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/databinding/swt/WidgetProperties.java
+++ b/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/databinding/swt/WidgetProperties.java
@@ -1421,8 +1421,8 @@
 	 *             tooltipCTabItem(), tooltipControl() etc
 	 */
 	// ok to ignore warnings in deprecated method
-	@SuppressWarnings("rawtypes")
-	public static IWidgetValueProperty tooltipText() {
+	@SuppressWarnings({ "unchecked" })
+	public static IWidgetValueProperty<Widget, Boolean> tooltipText() {
 		return new org.eclipse.jface.internal.databinding.swt.WidgetTooltipTextProperty();
 	}
 
diff --git a/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/databinding/viewers/CellEditorProperties.java b/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/databinding/viewers/CellEditorProperties.java
index 7212b83..6873f0c 100644
--- a/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/databinding/viewers/CellEditorProperties.java
+++ b/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/databinding/viewers/CellEditorProperties.java
@@ -14,6 +14,7 @@
 import org.eclipse.core.databinding.property.value.IValueProperty;
 import org.eclipse.jface.internal.databinding.viewers.CellEditorControlProperty;
 import org.eclipse.jface.viewers.CellEditor;
+import org.eclipse.swt.widgets.Control;
 
 /**
  * A factory for creating properties of JFace {@link CellEditor cell editors}.
@@ -28,7 +29,7 @@
 	 * @return a value property for observing the control of a
 	 *         {@link CellEditor}.
 	 */
-	public static IValueProperty control() {
+	public static IValueProperty<CellEditor, Control> control() {
 		return new CellEditorControlProperty();
 	}
 }
diff --git a/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/databinding/viewers/ObservableMapLabelProvider.java b/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/databinding/viewers/ObservableMapLabelProvider.java
index 0d69bb2..f19a421 100644
--- a/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/databinding/viewers/ObservableMapLabelProvider.java
+++ b/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/databinding/viewers/ObservableMapLabelProvider.java
@@ -93,7 +93,6 @@
 	 * @param attributeMapsList
 	 * @since 1.7
 	 */
-	@SuppressWarnings("deprecation")
 	// This class must initialize the deprecated field
 	public ObservableMapLabelProvider(
 			List<IObservableMap<T, E>> attributeMapsList) {
diff --git a/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/swt/DateTimeSelectionProperty.java b/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/swt/DateTimeSelectionProperty.java
index 76ffe17..705dc88 100644
--- a/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/swt/DateTimeSelectionProperty.java
+++ b/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/swt/DateTimeSelectionProperty.java
@@ -23,7 +23,8 @@
  * @since 3.2
  * 
  */
-public class DateTimeSelectionProperty extends WidgetValueProperty {
+public class DateTimeSelectionProperty extends
+		WidgetValueProperty<DateTime, Date> {
 	/**
 	 * 
 	 */
@@ -36,16 +37,14 @@
 	}
 
 	// One calendar per thread to preserve thread-safety
-	private static final ThreadLocal calendar = new ThreadLocal() {
-		protected Object initialValue() {
+	private static final ThreadLocal<Calendar> calendar = new ThreadLocal<Calendar>() {
+		protected Calendar initialValue() {
 			return Calendar.getInstance();
 		}
 	};
 
-	protected Object doGetValue(Object source) {
-		DateTime dateTime = (DateTime) source;
-
-		Calendar cal = (Calendar) calendar.get();
+	protected Date doGetValue(DateTime dateTime) {
+		Calendar cal = calendar.get();
 		cal.clear();
 		if ((dateTime.getStyle() & SWT.TIME) != 0) {
 			cal.set(Calendar.HOUR_OF_DAY, dateTime.getHours());
@@ -59,18 +58,16 @@
 		return cal.getTime();
 	}
 
-	protected void doSetValue(Object source, Object value) {
-		DateTime dateTime = (DateTime) source;
-
+	protected void doSetValue(DateTime dateTime, Date value) {
 		if (value == null)
 			throw new IllegalArgumentException(
 					"Cannot set null selection on DateTime"); //$NON-NLS-1$
 
-		Calendar cal = (Calendar) calendar.get();
-		cal.setTime((Date) value);
+		Calendar cal = calendar.get();
+		cal.setTime(value);
 		if ((dateTime.getStyle() & SWT.TIME) != 0) {
-			dateTime.setTime(cal.get(Calendar.HOUR_OF_DAY), cal
-					.get(Calendar.MINUTE), cal.get(Calendar.SECOND));
+			dateTime.setTime(cal.get(Calendar.HOUR_OF_DAY),
+					cal.get(Calendar.MINUTE), cal.get(Calendar.SECOND));
 		} else {
 			dateTime.setDate(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH),
 					cal.get(Calendar.DAY_OF_MONTH));
diff --git a/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/swt/WidgetDelegatingListProperty.java b/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/swt/WidgetDelegatingListProperty.java
index 3f303c4..8508a2d 100644
--- a/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/swt/WidgetDelegatingListProperty.java
+++ b/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/swt/WidgetDelegatingListProperty.java
@@ -24,12 +24,23 @@
 				"Widget [" + source.getClass().getName() + "] is not supported."); //$NON-NLS-1$//$NON-NLS-2$
 	}
 
+	/**
+	 * 
+	 * @param elementType
+	 * @deprecated use the form which takes Class as a parameter. This is safer
+	 *             because code in this plug-in fails anyway if a Class is not
+	 *             passed.
+	 */
 	public WidgetDelegatingListProperty(Object elementType) {
 		super(elementType);
 	}
 
+	public WidgetDelegatingListProperty(Class<E> elementType) {
+		super(elementType);
+	}
+
 	public ISWTObservableList<E> observe(S widget) {
-		return (ISWTObservableList) observe(
+		return (ISWTObservableList<E>) observe(
 				SWTObservables.getRealm(widget.getDisplay()), widget);
 	}
 }
\ No newline at end of file
diff --git a/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/viewers/ObservableCollectionTreeContentProvider.java b/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/viewers/ObservableCollectionTreeContentProvider.java
index 384a7a8..e315723 100644
--- a/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/viewers/ObservableCollectionTreeContentProvider.java
+++ b/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/viewers/ObservableCollectionTreeContentProvider.java
@@ -146,7 +146,8 @@
 	private void setViewer(Viewer viewer) {
 		viewerUpdater = createViewerUpdater(viewer);
 		comparer = getElementComparer(viewer);
-		elementNodes = ViewerElementMap.<Object> withComparer(comparer);
+		elementNodes = ViewerElementMap
+				.<Object, TreeNode> withComparer(comparer);
 		viewerObservable.setValue(viewer); // (clears knownElements)
 	}
 
diff --git a/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/viewers/ViewerElementMap.java b/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/viewers/ViewerElementMap.java
index 9262dd9..e49f5df 100644
--- a/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/viewers/ViewerElementMap.java
+++ b/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/viewers/ViewerElementMap.java
@@ -20,7 +20,6 @@
 
 import org.eclipse.core.runtime.Assert;
 import org.eclipse.jface.databinding.util.Util;
-import org.eclipse.jface.internal.databinding.viewers.ObservableCollectionTreeContentProvider.TreeNode;
 import org.eclipse.jface.viewers.IElementComparer;
 import org.eclipse.jface.viewers.StructuredViewer;
 
@@ -445,9 +444,9 @@
 	 * @return a Map for mapping viewer elements as keys to values, using the
 	 *         given {@link IElementComparer} for key comparisons.
 	 */
-	public static <K> Map<K, TreeNode> withComparer(IElementComparer comparer) {
+	public static <K, V> Map<K, V> withComparer(IElementComparer comparer) {
 		if (comparer == null)
-			return new HashMap<K, TreeNode>();
-		return new ViewerElementMap<K, TreeNode>(comparer);
+			return new HashMap<K, V>();
+		return new ViewerElementMap<K, V>(comparer);
 	}
 }
diff --git a/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/viewers/ViewerElementSet.java b/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/viewers/ViewerElementSet.java
index 99a605e..58bdbef 100644
--- a/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/viewers/ViewerElementSet.java
+++ b/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/viewers/ViewerElementSet.java
@@ -159,7 +159,7 @@
 
 	public Object[] toArray(Object[] a) {
 		int size = wrappedSet.size();
-		ViewerElementWrapper[] wrappedArray = (ViewerElementWrapper[]) wrappedSet
+		ViewerElementWrapper[] wrappedArray = wrappedSet
 				.toArray(new ViewerElementWrapper[size]);
 		Object[] result = a;
 		if (a.length < size) {
@@ -200,9 +200,9 @@
 	 * @return a Set for holding viewer elements, using the given
 	 *         {@link IElementComparer} for comparisons.
 	 */
-	public static Set<Object> withComparer(IElementComparer comparer) {
+	public static <E> Set<E> withComparer(IElementComparer comparer) {
 		if (comparer == null)
-			return new HashSet<Object>();
-		return new ViewerElementSet(comparer);
+			return new HashSet<E>();
+		return new ViewerElementSet<E>(comparer);
 	}
 }
diff --git a/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/viewers/ViewerUpdater.java b/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/viewers/ViewerUpdater.java
index 2bf9609..cfcb983 100644
--- a/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/viewers/ViewerUpdater.java
+++ b/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/viewers/ViewerUpdater.java
@@ -71,7 +71,7 @@
 			Object element) {
 		if (!selection.isEmpty()) {
 			IElementComparer comparer = viewer.getComparer();
-			for (Iterator iter = selection.iterator(); iter.hasNext();) {
+			for (Iterator<?> iter = selection.iterator(); iter.hasNext();) {
 				Object selectionElement = iter.next();
 				if (comparer == null ? Util.equals(element, selectionElement)
 						: comparer.equals(element, selectionElement)) {
diff --git a/examples/org.eclipse.jface.examples.databinding/src/org/eclipse/jface/examples/databinding/snippets/Snippet036ValidationMessageProvider.java b/examples/org.eclipse.jface.examples.databinding/src/org/eclipse/jface/examples/databinding/snippets/Snippet036ValidationMessageProvider.java
index 378da67..bb4d754 100644
--- a/examples/org.eclipse.jface.examples.databinding/src/org/eclipse/jface/examples/databinding/snippets/Snippet036ValidationMessageProvider.java
+++ b/examples/org.eclipse.jface.examples.databinding/src/org/eclipse/jface/examples/databinding/snippets/Snippet036ValidationMessageProvider.java
@@ -110,12 +110,12 @@
 			setControl(container);
 
 			// Create the input fields.
-			createTextLine(container, "Name", WritableValue
-					.withValueType(String.class));
-			createTextLine(container, "Age", WritableValue
-					.withValueType(Integer.class));
-			createTextLine(container, "Birthday", WritableValue
-					.withValueType(Date.class));
+			createTextLine(container, "Name",
+					WritableValue.withValueType(String.class));
+			createTextLine(container, "Age",
+					WritableValue.withValueType(Integer.class));
+			createTextLine(container, "Birthday",
+					WritableValue.withValueType(Date.class));
 
 			// Attach the DBC's validation to the wizard.
 			WizardPageSupport wps = WizardPageSupport.create(this, dbc);
@@ -130,8 +130,8 @@
 			// Create the Label.
 			Label label = new Label(parent, SWT.LEFT);
 			label.setText(labelText);
-			GridDataFactory.fillDefaults().align(SWT.LEFT, SWT.CENTER).applyTo(
-					label);
+			GridDataFactory.fillDefaults().align(SWT.LEFT, SWT.CENTER)
+					.applyTo(label);
 
 			// Create the Text.
 			final Text text = new Text(parent, SWT.BORDER);
@@ -206,8 +206,7 @@
 		public int getMessageType(ValidationStatusProvider statusProvider) {
 			if (statusProvider instanceof Binding) {
 				Binding binding = (Binding) statusProvider;
-				IStatus status = (IStatus) binding.getValidationStatus()
-						.getValue();
+				IStatus status = binding.getValidationStatus().getValue();
 
 				// For required validations, we do not want to display an error
 				// icon since the user has not done anything wrong.
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/scenarios/NPETestScenario.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/scenarios/NPETestScenario.java
index 2cdcd25..f2a6848 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/scenarios/NPETestScenario.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/scenarios/NPETestScenario.java
@@ -44,7 +44,7 @@
 		System.out
 				.println("Expecting message about not being able to attach a listener");
 		getDbc().bindValue(SWTObservables.observeText(text, SWT.Modify),
-				BeansObservables.observeValue(person, "name"));
+				BeansObservables.observeValue(person, "name", String.class));
 
 		text.setText("Brad");
 		text.notifyListeners(SWT.FocusOut, null);