Revise databinding code
  - Replace use of deprecated databinding APIs (untyped
    PojoProperties, untyped BeanProperties, untyped WidgetProperties,
    ViewerObservables, untyped ViewerProperties)
  - Add more nullable annotations
  - Rework code for better null analysis
  - Fix potential NPE
diff --git a/r/org.eclipse.statet.nico.core/src/org/eclipse/statet/nico/core/util/TrackingConfiguration.java b/r/org.eclipse.statet.nico.core/src/org/eclipse/statet/nico/core/util/TrackingConfiguration.java
index 7b8beb0..28c99a9 100644
--- a/r/org.eclipse.statet.nico.core/src/org/eclipse/statet/nico/core/util/TrackingConfiguration.java
+++ b/r/org.eclipse.statet.nico.core/src/org/eclipse/statet/nico/core/util/TrackingConfiguration.java
@@ -18,58 +18,62 @@
 
 import org.eclipse.core.filesystem.EFS;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 import org.eclipse.statet.ecommons.models.AbstractSettingsModelObject;
 
 import org.eclipse.statet.nico.core.runtime.SubmitType;
 
 
+@NonNullByDefault
 public class TrackingConfiguration extends AbstractSettingsModelObject {
 	
 	
-	static int DEFAULT_FILE_MODE = EFS.APPEND;
+	static int DEFAULT_FILE_MODE= EFS.APPEND;
 	
 	
-	private final String fId;
+	private final String id;
 	
-	private String fName;
+	private String name;
 	
-	private boolean fTrackStreamInfo;
-	private boolean fTrackStreamInput;
-	private boolean fTrackStreamInputHistoryOnly;
-	private boolean fTrackStreamOutput;
-	private boolean fTrackStreamOutputTruncate;
-	private int fTrackStreamOutputTruncateLines;
+	private boolean trackStreamInfo;
+	private boolean trackStreamInput;
+	private boolean trackStreamInputHistoryOnly;
+	private boolean trackStreamOutput;
+	private boolean trackStreamOutputTruncate;
+	private int trackStreamOutputTruncateLines;
 	
-	private EnumSet<SubmitType> fSubmitTypes;
+	private EnumSet<SubmitType> submitTypes;
 	
 	private String fFilePath;
 	private int fFileMode;
 	
-	private boolean fPrependTimestamp;
+	private boolean prependTimestamp;
 	
 	
 	public TrackingConfiguration(final String id) {
-		fId = id;
+		this.id= id;
 		
-		fName = ""; //$NON-NLS-1$
+		this.name= ""; //$NON-NLS-1$
 		
 		loadDefaults();
 	}
 	
 	public TrackingConfiguration(final String id, final TrackingConfiguration template) {
-		fId = id;
+		this.id= id;
 		
-		fName = template.fName;
-		fTrackStreamInfo = template.fTrackStreamInfo;
-		fTrackStreamInput = template.fTrackStreamInput;
-		fTrackStreamInputHistoryOnly = template.fTrackStreamInputHistoryOnly;
-		fTrackStreamOutput = template.fTrackStreamOutput;
-		fTrackStreamOutputTruncate = template.fTrackStreamOutputTruncate;
-		fTrackStreamOutputTruncateLines = template.fTrackStreamOutputTruncateLines;
-		fSubmitTypes = template.fSubmitTypes;
-		fFilePath = template.fFilePath;
-		fFileMode = template.fFileMode;
-		fPrependTimestamp = template.fPrependTimestamp;
+		this.name= template.name;
+		this.trackStreamInfo= template.trackStreamInfo;
+		this.trackStreamInput= template.trackStreamInput;
+		this.trackStreamInputHistoryOnly= template.trackStreamInputHistoryOnly;
+		this.trackStreamOutput= template.trackStreamOutput;
+		this.trackStreamOutputTruncate= template.trackStreamOutputTruncate;
+		this.trackStreamOutputTruncateLines= template.trackStreamOutputTruncateLines;
+		this.submitTypes= template.submitTypes;
+		this.fFilePath= template.fFilePath;
+		this.fFileMode= template.fFileMode;
+		this.prependTimestamp= template.prependTimestamp;
 	}
 	
 	
@@ -88,106 +92,106 @@
 	
 	
 	public String getId() {
-		return fId;
+		return this.id;
 	}
 	
 	public String getName() {
-		return fName;
+		return this.name;
 	}
 	
 	public void setName(final String label) {
-		final String oldValue = fName;
-		fName = label;
+		final String oldValue= this.name;
+		this.name= label;
 		firePropertyChange("name", oldValue, label);
 	}
 	
 	public boolean getTrackStreamInfo() {
-		return fTrackStreamInfo;
+		return this.trackStreamInfo;
 	}
 	
 	public void setTrackStreamInfo(final boolean enable) {
-		final boolean oldValue = fTrackStreamInfo;
-		fTrackStreamInfo = enable;
+		final boolean oldValue= this.trackStreamInfo;
+		this.trackStreamInfo= enable;
 		firePropertyChange("trackStreamInfo", oldValue, enable);
 	}
 	
 	public boolean getTrackStreamInput() {
-		return fTrackStreamInput;
+		return this.trackStreamInput;
 	}
 	
 	public void setTrackStreamInput(final boolean enable) {
-		final boolean oldValue = fTrackStreamInput;
-		fTrackStreamInput = enable;
+		final boolean oldValue= this.trackStreamInput;
+		this.trackStreamInput= enable;
 		firePropertyChange("trackStreamInput", oldValue, enable);
 	}
 	
 	public boolean getTrackStreamInputHistoryOnly() {
-		return fTrackStreamInputHistoryOnly;
+		return this.trackStreamInputHistoryOnly;
 	}
 	
 	public void setTrackStreamInputHistoryOnly(final boolean enable) {
-		final boolean oldValue = fTrackStreamInputHistoryOnly;
-		fTrackStreamInputHistoryOnly = enable;
+		final boolean oldValue= this.trackStreamInputHistoryOnly;
+		this.trackStreamInputHistoryOnly= enable;
 		firePropertyChange("trackStreamInputHistoryOnly", oldValue, enable);
 	}
 	
 	public boolean getTrackStreamOutput() {
-		return fTrackStreamOutput;
+		return this.trackStreamOutput;
 	}
 	
 	public void setTrackStreamOutput(final boolean enable) {
-		final boolean oldValue = fTrackStreamOutput;
-		fTrackStreamOutput = enable;
+		final boolean oldValue= this.trackStreamOutput;
+		this.trackStreamOutput= enable;
 		firePropertyChange("trackStreamOutput", oldValue, enable);
 	}
 	
 	public boolean getTrackStreamOutputTruncate() {
-		return fTrackStreamOutputTruncate;
+		return this.trackStreamOutputTruncate;
 	}
 	
 	public void setTrackStreamOutputTruncate(final boolean enable) {
-		final boolean oldValue = fTrackStreamOutputTruncate;
-		fTrackStreamOutputTruncate = enable;
+		final boolean oldValue= this.trackStreamOutputTruncate;
+		this.trackStreamOutputTruncate= enable;
 		firePropertyChange("trackStreamOutputTruncate", oldValue, enable);
 	}
 	
 	public int getTrackStreamOutputTruncateLines() {
-		return fTrackStreamOutputTruncateLines;
+		return this.trackStreamOutputTruncateLines;
 	}
 	
 	public void setTrackStreamOutputTruncateLines(final int lines) {
-		final int oldValue = fTrackStreamOutputTruncateLines;
-		fTrackStreamOutputTruncateLines = lines;
+		final int oldValue= this.trackStreamOutputTruncateLines;
+		this.trackStreamOutputTruncateLines= lines;
 		firePropertyChange("trackStreamOutputTruncateLines", oldValue, lines);
 	}
 	
 	public EnumSet<SubmitType> getSubmitTypes() {
-		return fSubmitTypes;
+		return this.submitTypes;
 	}
 	
 	public void setSubmitTypes(final EnumSet<SubmitType> typesToInclude) {
-		final EnumSet<SubmitType> oldValue = fSubmitTypes;
-		fSubmitTypes = typesToInclude;
+		final EnumSet<SubmitType> oldValue= this.submitTypes;
+		this.submitTypes= typesToInclude;
 		firePropertyChange("submitTypes", oldValue, typesToInclude);
 	}
 	
 	public String getFilePath() {
-		return fFilePath;
+		return this.fFilePath;
 	}
 	
 	public void setFilePath(final String path) {
-		final String oldValue = fFilePath;
-		fFilePath = path;
+		final String oldValue= this.fFilePath;
+		this.fFilePath= path;
 		firePropertyChange("filePath", oldValue, path);
 	}
 	
 	public int getFileMode() {
-		return fFileMode;
+		return this.fFileMode;
 	}
 	
 	public void setFileMode(final int mode) {
-		final int oldValue = fFileMode;
-		fFileMode = mode;
+		final int oldValue= this.fFileMode;
+		this.fFileMode= mode;
 		firePropertyChange("fileMode", oldValue, mode);
 	}
 	
@@ -197,25 +201,25 @@
 	
 	
 	public boolean getPrependTimestamp() {
-		return fPrependTimestamp;
+		return this.prependTimestamp;
 	}
 	
 	public void setPrependTimestamp(final boolean enable) {
-		final boolean oldValue = fPrependTimestamp;
-		fPrependTimestamp = enable;
+		final boolean oldValue= this.prependTimestamp;
+		this.prependTimestamp= enable;
 		firePropertyChange("prependTimestamp", oldValue, enable);
 	}
 	
 	
 	@Override
 	public int hashCode() {
-		return fId.hashCode();
+		return this.id.hashCode();
 	}
 	
 	@Override
-	public boolean equals(final Object obj) {
+	public boolean equals(final @Nullable Object obj) {
 		return (this == obj ||
-				(obj instanceof TrackingConfiguration && fId.equals(((TrackingConfiguration) obj).fId)) );
+				(obj instanceof TrackingConfiguration && this.id.equals(((TrackingConfiguration) obj).id)) );
 	}
 	
 }
diff --git a/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/internal/nico/ui/Messages.java b/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/internal/nico/ui/Messages.java
index acc47b7..23105e4 100644
--- a/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/internal/nico/ui/Messages.java
+++ b/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/internal/nico/ui/Messages.java
@@ -16,7 +16,11 @@
 
 import org.eclipse.osgi.util.NLS;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
 
+
+@NonNullByDefault
+@SuppressWarnings("null")
 public class Messages extends NLS {
 	
 	
diff --git a/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/internal/nico/ui/preferences/ConsolePreferencePage.java b/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/internal/nico/ui/preferences/ConsolePreferencePage.java
index ae651c8..2562bf8 100644
--- a/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/internal/nico/ui/preferences/ConsolePreferencePage.java
+++ b/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/internal/nico/ui/preferences/ConsolePreferencePage.java
@@ -20,7 +20,7 @@
 
 import org.eclipse.core.databinding.UpdateValueStrategy;
 import org.eclipse.core.runtime.CoreException;
-import org.eclipse.jface.databinding.swt.WidgetProperties;
+import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.widgets.Composite;
@@ -28,7 +28,10 @@
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Text;
 
-import org.eclipse.statet.ecommons.databinding.IntegerValidator;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
+import org.eclipse.statet.ecommons.databinding.core.validation.IntegerValidator;
 import org.eclipse.statet.ecommons.databinding.jface.DataBindingSupport;
 import org.eclipse.statet.ecommons.preferences.core.Preference;
 import org.eclipse.statet.ecommons.preferences.ui.ConfigurationBlock;
@@ -42,6 +45,7 @@
 import org.eclipse.statet.nico.ui.util.SubmitTypeSelectionComposite;
 
 
+@NonNullByDefault
 public class ConsolePreferencePage extends ConfigurationBlockPreferencePage {
 	
 	
@@ -57,6 +61,7 @@
 }
 
 
+@NonNullByDefault
 class ConsolePreferenceBlock extends ManagedConfigurationBlock {
 	
 	
@@ -66,14 +71,14 @@
 	private SubmitTypeSelectionComposite outputSubmitTypeControl;
 	
 	
-	public ConsolePreferenceBlock(final StatusChangeListener statusListener) {
+	public ConsolePreferenceBlock(final @Nullable StatusChangeListener statusListener) {
 		super(null, statusListener);
 	}
 	
 	
 	@Override
 	protected void createBlockArea(final Composite pageComposite) {
-		final Map<Preference<?>, String> prefs= new HashMap<>();
+		final Map<Preference<?>, @Nullable String> prefs= new HashMap<>();
 		
 		prefs.put(ConsolePreferences.HISTORYNAVIGATION_SUBMIT_TYPES_PREF, ConsolePreferences.GROUP_ID);
 		prefs.put(NicoUIPreferences.OUTPUT_CHARLIMIT_PREF, ConsolePreferences.GROUP_ID);
@@ -140,10 +145,12 @@
 	@Override
 	protected void addBindings(final DataBindingSupport db) {
 		db.getContext().bindValue(
-				WidgetProperties.text(SWT.Modify).observe(this.outputCharLimitControl),
+				WidgetProperties.text(SWT.Modify)
+						.observe(this.outputCharLimitControl),
 				createObservable(NicoUIPreferences.OUTPUT_CHARLIMIT_PREF),
-				new UpdateValueStrategy().setAfterGetValidator(
-						new IntegerValidator(100000, 1000000000, "Invalid char limit specified (100000, 1000000000).") ),
+				new UpdateValueStrategy<String, Integer>()
+						.setAfterGetValidator(new IntegerValidator(100000, 1000000000,
+								"Invalid char limit specified (100000, 1000000000)." )),
 				null );
 		db.getContext().bindValue(
 				this.outputSubmitTypeControl.getObservable(),
diff --git a/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/internal/nico/ui/preferences/ResourceMappingPreferencePage.java b/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/internal/nico/ui/preferences/ResourceMappingPreferencePage.java
index 0abcd97..8d704aa 100644
--- a/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/internal/nico/ui/preferences/ResourceMappingPreferencePage.java
+++ b/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/internal/nico/ui/preferences/ResourceMappingPreferencePage.java
@@ -23,7 +23,7 @@
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IStatus;
-import org.eclipse.jface.databinding.swt.WidgetProperties;
+import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
 import org.eclipse.jface.dialogs.IDialogSettings;
 import org.eclipse.jface.dialogs.MessageDialog;
 import org.eclipse.jface.viewers.ArrayContentProvider;
@@ -41,6 +41,9 @@
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.swt.widgets.Text;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 import org.eclipse.statet.ecommons.databinding.NotEmptyValidator;
 import org.eclipse.statet.ecommons.databinding.jface.DataBindingSupport;
 import org.eclipse.statet.ecommons.net.resourcemapping.core.IResourceMapping;
@@ -63,6 +66,7 @@
 import org.eclipse.statet.internal.nico.ui.NicoUIPlugin;
 
 
+@NonNullByDefault
 public class ResourceMappingPreferencePage extends ConfigurationBlockPreferencePage {
 	
 	
@@ -78,6 +82,7 @@
 }
 
 
+@NonNullByDefault
 class ResourceMappingConfigurationBlock extends ConfigurationBlock {
 	
 	
@@ -86,7 +91,7 @@
 	
 	private final IObservableList<ResourceMapping> list= new WritableList<>();
 	
-	private ResourceMappingManager manager;
+	private @Nullable ResourceMappingManager manager;
 	
 	
 	public ResourceMappingConfigurationBlock() {
@@ -110,7 +115,7 @@
 			
 			this.listButtons= new ButtonGroup<ResourceMapping>(composite) {
 				@Override
-				protected ResourceMapping edit1(final ResourceMapping item, final boolean newItem, final Object parent) {
+				protected @Nullable ResourceMapping edit1(final @Nullable ResourceMapping item, final boolean newItem, final @Nullable Object parent) {
 					final EditMappingDialog dialog= new EditMappingDialog(getShell(), item, newItem);
 					if (dialog.open() == Window.OK) {
 						return dialog.getResult();
@@ -210,14 +215,16 @@
 	
 	@Override
 	public boolean performOk(final int flags) {
-		if (this.manager != null) {
-			this.manager.setMappings(this.list);
+		final ResourceMappingManager manager= this.manager;
+		if (manager != null) {
+			manager.setMappings(this.list);
 		}
 		return true;
 	}
 	
 }
 
+@NonNullByDefault
 class EditMappingDialog extends ExtStatusDialog {
 	
 	
@@ -231,7 +238,7 @@
 	private final IObservableValue<String> remoteValue;
 	
 	
-	public EditMappingDialog(final Shell shell, final ResourceMapping mapping, final boolean newMapping) {
+	public EditMappingDialog(final Shell shell, final @Nullable ResourceMapping mapping, final boolean newMapping) {
 		super(shell, (newMapping) ? WITH_DATABINDING_CONTEXT :
 				(WITH_DATABINDING_CONTEXT | SHOW_INITIAL_STATUS));
 		setTitle("Edit Resource Mapping");
@@ -292,23 +299,26 @@
 		db.getContext().bindValue(
 				this.localControl.getObservable(),
 				this.localValue,
-				new UpdateValueStrategy().setAfterGetValidator(this.localControl.getValidator()),
+				new UpdateValueStrategy<String, String>()
+						.setAfterGetValidator(this.localControl.getValidator()),
 				null );
 		db.getContext().bindValue(
-				WidgetProperties.text(SWT.Modify).observe(this.hostControl),
+				WidgetProperties.text(SWT.Modify)
+						.observe(this.hostControl),
 				this.hostValue,
-				new UpdateValueStrategy().setAfterGetValidator(new NotEmptyValidator(
-						"Missing host; it must be specified by its hostname or IP number." )),
+				new UpdateValueStrategy<String, String>()
+						.setAfterGetValidator(new NotEmptyValidator("Missing host; it must be specified by its hostname or IP number.")),
 				null );
 		db.getContext().bindValue(
-				WidgetProperties.text(SWT.Modify).observe(this.remoteControl),
+				WidgetProperties.text(SWT.Modify)
+						.observe(this.remoteControl),
 				this.remoteValue,
-				new UpdateValueStrategy().setAfterGetValidator(new NotEmptyValidator(
-						"Missing remote path." )),
+				new UpdateValueStrategy<String, String>()
+						.setAfterGetValidator(new NotEmptyValidator("Missing remote path.")),
 				null );
 	}
 	
-	public ResourceMapping getResult() {
+	public @Nullable ResourceMapping getResult() {
 		try {
 			return new ResourceMapping(this.mappingId, 
 					this.localValue.getValue(),
diff --git a/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/nico/ui/util/ChooseFileHandler.java b/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/nico/ui/util/ChooseFileHandler.java
index 92ec8dd..c84892e 100644
--- a/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/nico/ui/util/ChooseFileHandler.java
+++ b/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/nico/ui/util/ChooseFileHandler.java
@@ -125,8 +125,12 @@
 				}
 			}
 			fNewLocationString = new WritableValue(dir, String.class);
-			db.getContext().bindValue(fLocationGroup.getObservable(), fNewLocationString,
-					new UpdateValueStrategy().setAfterGetValidator(fLocationGroup.getValidator()), null);
+			db.getContext().bindValue(
+					fLocationGroup.getObservable(),
+					fNewLocationString,
+					new UpdateValueStrategy<>()
+							.setAfterGetValidator(fLocationGroup.getValidator()),
+					null );
 		}
 		
 		@Override
diff --git a/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/nico/ui/util/ExportConsoleOutputWizard.java b/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/nico/ui/util/ExportConsoleOutputWizard.java
index f8e0676..b0e1b07 100644
--- a/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/nico/ui/util/ExportConsoleOutputWizard.java
+++ b/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/nico/ui/util/ExportConsoleOutputWizard.java
@@ -35,7 +35,7 @@
 import org.eclipse.core.runtime.jobs.IJobManager;
 import org.eclipse.core.runtime.jobs.ISchedulingRule;
 import org.eclipse.core.runtime.jobs.Job;
-import org.eclipse.jface.databinding.swt.WidgetProperties;
+import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
 import org.eclipse.jface.databinding.wizard.WizardPageSupport;
 import org.eclipse.jface.dialogs.Dialog;
 import org.eclipse.jface.dialogs.IDialogSettings;
@@ -172,7 +172,8 @@
 			this.configControl.addBindings(db);
 			
 			db.getContext().bindValue(
-					WidgetProperties.selection().observe(this.openControl),
+					WidgetProperties.buttonSelection()
+							.observe(this.openControl),
 					this.openValue );
 		}
 		
diff --git a/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/nico/ui/util/SubmitTypeSelectionComposite.java b/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/nico/ui/util/SubmitTypeSelectionComposite.java
index 695b356..eb0f75e 100644
--- a/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/nico/ui/util/SubmitTypeSelectionComposite.java
+++ b/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/nico/ui/util/SubmitTypeSelectionComposite.java
@@ -18,6 +18,7 @@
 import java.util.Objects;
 
 import org.eclipse.core.databinding.observable.Diffs;
+import org.eclipse.core.databinding.observable.value.IObservableValue;
 import org.eclipse.jface.viewers.ArrayContentProvider;
 import org.eclipse.jface.viewers.CheckStateChangedEvent;
 import org.eclipse.jface.viewers.ColumnLabelProvider;
@@ -44,7 +45,7 @@
 	
 	public static final EnumSetPref<SubmitType> SOURCE_ENCODER= new EnumSetPref<>(null, null, SubmitType.class);
 	
-	private class Observable extends AbstractSWTObservableValue {
+	private class Observable extends AbstractSWTObservableValue<EnumSet<SubmitType>> {
 		
 		private EnumSet<SubmitType> lastValue;
 		
@@ -58,14 +59,14 @@
 		}
 		
 		@Override
-		protected Object doGetValue() {
+		protected EnumSet<SubmitType> doGetValue() {
 			return SubmitTypeSelectionComposite.this.selectedTypes;
 		}
 		
 		@Override
-		protected void doSetValue(final Object value) {
+		protected void doSetValue(final EnumSet<SubmitType> value) {
 			if (value instanceof EnumSet<?>) {
-				setSelection(this.lastValue= (EnumSet<SubmitType>) value);
+				setSelection(this.lastValue= value);
 			}
 		}
 		
@@ -172,7 +173,7 @@
 	}
 	
 	
-	public Observable getObservable() {
+	public IObservableValue<EnumSet<SubmitType>> getObservable() {
 		if (this.observable == null) {
 			this.observable= new Observable();
 		}
diff --git a/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/nico/ui/util/TrackingConfigurationComposite.java b/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/nico/ui/util/TrackingConfigurationComposite.java
index 2dc1915..8bc9672 100644
--- a/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/nico/ui/util/TrackingConfigurationComposite.java
+++ b/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/nico/ui/util/TrackingConfigurationComposite.java
@@ -19,10 +19,10 @@
 import java.util.List;
 
 import org.eclipse.core.databinding.UpdateValueStrategy;
-import org.eclipse.core.databinding.beans.BeanProperties;
+import org.eclipse.core.databinding.beans.typed.BeanProperties;
 import org.eclipse.core.databinding.observable.value.IObservableValue;
 import org.eclipse.core.filesystem.EFS;
-import org.eclipse.jface.databinding.swt.WidgetProperties;
+import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.SelectionAdapter;
 import org.eclipse.swt.events.SelectionEvent;
@@ -37,9 +37,9 @@
 import org.eclipse.swt.widgets.MenuItem;
 import org.eclipse.swt.widgets.Text;
 
-import org.eclipse.statet.ecommons.databinding.IntegerValidator;
 import org.eclipse.statet.ecommons.databinding.NotEmptyValidator;
 import org.eclipse.statet.ecommons.databinding.core.observable.ComputedOnChangeValue;
+import org.eclipse.statet.ecommons.databinding.core.validation.IntegerValidator;
 import org.eclipse.statet.ecommons.databinding.jface.DataBindingSupport;
 import org.eclipse.statet.ecommons.ui.util.LayoutUtils;
 import org.eclipse.statet.ecommons.ui.util.VariableFilterUtils;
@@ -298,53 +298,62 @@
 	protected void addBindings(final DataBindingSupport db) {
 		if (this.nameControl != null) {
 			db.getContext().bindValue(
-					WidgetProperties.text(SWT.Modify).observe(this.nameControl),
-					BeanProperties.value(TrackingConfiguration.class, "name") //$NON-NLS-1$
+					WidgetProperties.text(SWT.Modify)
+							.observe(this.nameControl),
+					BeanProperties.value(TrackingConfiguration.class, "name", String.class) //$NON-NLS-1$
 							.observe(this.input),
-					new UpdateValueStrategy().setAfterGetValidator(new NotEmptyValidator(Messages.Tracking_Name_error_Missing_message)),
+					new UpdateValueStrategy<String, String>()
+							.setAfterGetValidator(new NotEmptyValidator(Messages.Tracking_Name_error_Missing_message)),
 					null );
 			}
 		
-		final IObservableValue<Boolean> infoTargetObs= WidgetProperties.selection()
+		final IObservableValue<Boolean> infoTargetObs= WidgetProperties.buttonSelection()
 				.observe(this.streamInfoControl);
 		db.getContext().bindValue(
 				infoTargetObs,
-				BeanProperties.value(TrackingConfiguration.class, "trackStreamInfo") //$NON-NLS-1$
+				BeanProperties.value(TrackingConfiguration.class, "trackStreamInfo", Boolean.TYPE) //$NON-NLS-1$
 						.observe(this.input) );
 		
-		final IObservableValue<Boolean> inputTargetObs= WidgetProperties.selection()
+		final IObservableValue<Boolean> inputTargetObs= WidgetProperties.buttonSelection()
 				.observe(this.streamInputControl);
 		db.getContext().bindValue(inputTargetObs,
-				BeanProperties.value(TrackingConfiguration.class, "trackStreamInput") //$NON-NLS-1$
+				BeanProperties.value(TrackingConfiguration.class, "trackStreamInput", Boolean.TYPE) //$NON-NLS-1$
 						.observe(this.input) );
 		if (this.streamInputHistoryOnlyControl != null) {
 			db.getContext().bindValue(
-					WidgetProperties.enabled().observe(this.streamInputHistoryOnlyControl),
+					WidgetProperties.enabled()
+							.observe(this.streamInputHistoryOnlyControl),
 					inputTargetObs );
 			db.getContext().bindValue(
-					WidgetProperties.selection().observe(this.streamInputHistoryOnlyControl),
-					BeanProperties.value(TrackingConfiguration.class, "trackStreamInputHistoryOnly") //$NON-NLS-1$
+					WidgetProperties.buttonSelection()
+							.observe(this.streamInputHistoryOnlyControl),
+					BeanProperties.value(TrackingConfiguration.class, "trackStreamInputHistoryOnly", Boolean.TYPE) //$NON-NLS-1$
 							.observe(this.input) );
 		}
 		
-		final IObservableValue<Boolean> outputTargetObj= WidgetProperties.selection()
+		final IObservableValue<Boolean> outputTargetObj= WidgetProperties.buttonSelection()
 				.observe(this.streamOutputErrorControl);
-		final IObservableValue<Boolean> outputModelObs= BeanProperties.value(TrackingConfiguration.class, "trackStreamOutput") //$NON-NLS-1$
+		final IObservableValue<Boolean> outputModelObs= BeanProperties
+				.value(TrackingConfiguration.class, "trackStreamOutput", Boolean.TYPE) //$NON-NLS-1$
 				.observe(this.input);
 		db.getContext().bindValue(outputTargetObj, outputModelObs);
 		if (this.streamOutputErrorTruncateControl != null) {
-			final IObservableValue<Boolean> outputTruncateTargetObs= WidgetProperties.selection()
-					.observe(this.streamOutputErrorTruncateControl);
-			final IObservableValue<Boolean> outputTruncateModelObs= BeanProperties.value(TrackingConfiguration.class, "trackStreamOutputTruncate") //$NON-NLS-1$
+			final IObservableValue<Boolean> outputTruncateTargetObs=
+					WidgetProperties.buttonSelection()
+							.observe(this.streamOutputErrorTruncateControl);
+			final IObservableValue<Boolean> outputTruncateModelObs= BeanProperties
+					.value(TrackingConfiguration.class, "trackStreamOutputTruncate", Boolean.TYPE) //$NON-NLS-1$
 					.observe(this.input);
 			db.getContext().bindValue(
-					WidgetProperties.enabled().observe(this.streamOutputErrorTruncateControl),
+					WidgetProperties.enabled()
+							.observe(this.streamOutputErrorTruncateControl),
 					outputTargetObj );
 			db.getContext().bindValue(
 					outputTruncateTargetObs,
 					outputTruncateModelObs );
 			db.getContext().bindValue(
-					WidgetProperties.enabled().observe(this.streamOutputErrorTruncateLinesControl),
+					WidgetProperties.enabled()
+							.observe(this.streamOutputErrorTruncateLinesControl),
 					new ComputedOnChangeValue<Boolean>(Boolean.class, outputModelObs, outputTruncateModelObs) {
 				@Override
 				protected Boolean calculate() {
@@ -354,31 +363,36 @@
 				}
 			});
 			db.getContext().bindValue(
-					WidgetProperties.text(SWT.Modify).observe(this.streamOutputErrorTruncateLinesControl),
-					BeanProperties.value(TrackingConfiguration.class, "trackStreamOutputTruncateLines") //$NON-NLS-1$
+					WidgetProperties.text(SWT.Modify)
+							.observe(this.streamOutputErrorTruncateLinesControl),
+					BeanProperties.value(TrackingConfiguration.class, "trackStreamOutputTruncateLines", Integer.TYPE) //$NON-NLS-1$
 							.observe(this.input),
-					new UpdateValueStrategy().setAfterGetValidator(new IntegerValidator(2, 1000000,
-							Messages.Tracking_OutputStream_TruncateLines_error_Invalid_message )),
+					new UpdateValueStrategy<String, Integer>()
+							.setAfterGetValidator(new IntegerValidator(2, 1000000,
+									Messages.Tracking_OutputStream_TruncateLines_error_Invalid_message )),
 					null );
 		}
 		
 		if (this.submitTypeControl != null) {
 			db.getContext().bindValue(
 					this.submitTypeControl.getObservable(),
-					BeanProperties.value(TrackingConfiguration.class, "submitTypes") //$NON-NLS-1$
+					BeanProperties.value(TrackingConfiguration.class, "submitTypes", EnumSet.class) //$NON-NLS-1$
 							.observe(this.input) );
 		}
 		
 		db.getContext().bindValue(
 				this.filePathControl.getObservable(),
-				BeanProperties.value(TrackingConfiguration.class, "filePath") //$NON-NLS-1$
+				BeanProperties.value(TrackingConfiguration.class, "filePath", String.class) //$NON-NLS-1$
 						.observe(this.input),
-				new UpdateValueStrategy().setAfterGetValidator(this.filePathControl.getValidator()),
+				new UpdateValueStrategy<String, String>()
+						.setAfterGetValidator(this.filePathControl.getValidator()),
 				null );
-		final IObservableValue<Integer> fileModeModelObs= BeanProperties.value(TrackingConfiguration.class, "fileMode") //$NON-NLS-1$
-				.observe(this.input);
+		final IObservableValue<Integer> fileModeModelObs=
+				BeanProperties.value(TrackingConfiguration.class, "fileMode", Integer.TYPE) //$NON-NLS-1$
+						.observe(this.input);
 		db.getContext().bindValue(
-				WidgetProperties.selection().observe(this.fileAppendControl),
+				WidgetProperties.buttonSelection()
+						.observe(this.fileAppendControl),
 				new ComputedOnChangeValue<Boolean>(Boolean.class, fileModeModelObs) {
 			@Override
 			protected Boolean calculate() {
@@ -392,7 +406,8 @@
 			}
 		});
 		db.getContext().bindValue(
-				WidgetProperties.selection().observe(this.fileOverwriteControl),
+				WidgetProperties.buttonSelection()
+						.observe(this.fileOverwriteControl),
 				new ComputedOnChangeValue<Boolean>(Boolean.class, fileModeModelObs) {
 			@Override
 			protected Boolean calculate() {
@@ -408,8 +423,9 @@
 		
 		if (this.prependTimestampControl != null) {
 			db.getContext().bindValue(
-					WidgetProperties.selection().observe(this.prependTimestampControl),
-					BeanProperties.value(TrackingConfiguration.class, "prependTimestamp") //$NON-NLS-1$
+					WidgetProperties.buttonSelection()
+							.observe(this.prependTimestampControl),
+					BeanProperties.value(TrackingConfiguration.class, "prependTimestamp", Boolean.TYPE) //$NON-NLS-1$
 							.observe(this.input) );
 		}
 	}
diff --git a/r/org.eclipse.statet.r.apps/src/org/eclipse/statet/internal/r/apps/ui/launching/AppControlConfigMainTab.java b/r/org.eclipse.statet.r.apps/src/org/eclipse/statet/internal/r/apps/ui/launching/AppControlConfigMainTab.java
index a0225e2..5328917 100644
--- a/r/org.eclipse.statet.r.apps/src/org/eclipse/statet/internal/r/apps/ui/launching/AppControlConfigMainTab.java
+++ b/r/org.eclipse.statet.r.apps/src/org/eclipse/statet/internal/r/apps/ui/launching/AppControlConfigMainTab.java
@@ -22,11 +22,10 @@
 import org.eclipse.core.databinding.observable.Realm;
 import org.eclipse.core.databinding.observable.value.IObservableValue;
 import org.eclipse.core.databinding.observable.value.WritableValue;
-import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.variables.IStringVariable;
 import org.eclipse.debug.core.ILaunchConfiguration;
 import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
-import org.eclipse.jface.databinding.swt.WidgetProperties;
+import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
 import org.eclipse.jface.dialogs.Dialog;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.SelectionAdapter;
@@ -42,7 +41,10 @@
 import org.eclipse.swt.widgets.Text;
 import org.eclipse.ui.PlatformUI;
 
-import org.eclipse.statet.ecommons.databinding.IntegerValidator;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
+import org.eclipse.statet.ecommons.databinding.core.validation.IntegerValidator;
 import org.eclipse.statet.ecommons.databinding.core.validation.UpdateableErrorValidator;
 import org.eclipse.statet.ecommons.debug.ui.config.LaunchConfigPresets;
 import org.eclipse.statet.ecommons.debug.ui.config.LaunchConfigTabWithPresets;
@@ -65,6 +67,7 @@
 import org.eclipse.statet.r.ui.sourceediting.RTemplateSourceViewerConfigurator;
 
 
+@NonNullByDefault
 public class AppControlConfigMainTab extends LaunchConfigTabWithPresets {
 	
 	
@@ -76,7 +79,7 @@
 	private final IObservableValue<String> appPathValue;
 	
 	private final IObservableValue<String> appHostValue;
-	private final IObservableValue<Integer> appPortValue;
+	private final IObservableValue<@Nullable Integer> appPortValue;
 	
 	private final IObservableValue<Boolean> startStopRunningValue;
 	private final IObservableValue<String> startRSnippetValue;
@@ -280,28 +283,36 @@
 //				null );
 		
 		dbc.bindValue(
-				WidgetProperties.text(SWT.Modify).observe(this.sHostControl),
+				WidgetProperties.text(SWT.Modify)
+						.observe(this.sHostControl),
 				this.appHostValue );
 		dbc.bindValue(
-				WidgetProperties.text(SWT.Modify).observe(this.sPortControl),
+				WidgetProperties.text(SWT.Modify)
+						.observe(this.sPortControl),
 				this.appPortValue,
-				new UpdateValueStrategy().setAfterGetValidator(new IntegerValidator(0, 65535, true,
-						Messages.Operation_AppPort_error_SpecInvalid_message )),
+				new UpdateValueStrategy<String, Integer>()
+						.setAfterGetValidator(
+								new IntegerValidator(0, 65535, true,
+										Messages.Operation_AppPort_error_SpecInvalid_message )),
 				null );
 		
 		dbc.bindValue(
-				WidgetProperties.text(SWT.Modify).observe(this.startRSnippetEditor.getTextControl()),
+				WidgetProperties.text(SWT.Modify)
+						.observe(this.startRSnippetEditor.getTextControl()),
 				this.startRSnippetValue,
-				new UpdateValueStrategy().setAfterGetValidator(
-						new UpdateableErrorValidator(new VariableTextValidator(
-								this.rSnippetVariableResolver,
-								Messages.Operation_StartApp_RCode_error_SpecInvalid_message ))),
+				new UpdateValueStrategy<String, String>()
+						.setAfterGetValidator(new UpdateableErrorValidator<>(
+								new VariableTextValidator(
+										this.rSnippetVariableResolver,
+										Messages.Operation_StartApp_RCode_error_SpecInvalid_message ))),
 				null );
 		dbc.bindValue(
-				WidgetProperties.selection().observe(this.startStopRunningControl),
+				WidgetProperties.buttonSelection()
+						.observe(this.startStopRunningControl),
 				this.startStopRunningValue );
 		dbc.bindValue(
-				WidgetProperties.text(SWT.Modify).observe(this.stopRSnippetEditor.getTextControl()),
+				WidgetProperties.text(SWT.Modify)
+						.observe(this.stopRSnippetEditor.getTextControl()),
 				this.stopRSnippetValue );
 	}
 	
@@ -313,60 +324,33 @@
 	
 	@Override
 	protected void doInitialize(final ILaunchConfiguration configuration) {
-//		{	String path= ""; //$NON-NLS-1$
-//			try {
-//				path= configuration.getAttribute(AppControlConfig.EXPL_SOURCE_PATH_ATTR_NAME, path);
-//			}
-//			catch (final CoreException e) {
-//				logReadingError(e);
-//			}
-//			this.appPathValue.setValue(path);
-//		}
+//		this.appPathValue.setValue(readAttribute(configuration, AppControlConfigs.EXPL_SOURCE_PATH_ATTR_NAME,
+//				"" )); //$NON-NLS-1$
 		
-		{	String text= ""; //$NON-NLS-1$
-			try {
-				text= configuration.getAttribute(AppControlConfigs.APP_HOST_ATTR_NAME, text);
-			}
-			catch (final CoreException e) {
-				logReadingError(e);
-			}
+		{	final String text= readAttribute(configuration,
+					AppControlConfigs.APP_HOST_ATTR_NAME,
+					"" ); //$NON-NLS-1$
 			this.appHostValue.setValue(text);
 		}
-		{	int port= 0;
-			try {
-				port= configuration.getAttribute(AppControlConfigs.APP_PORT_ATTR_NAME, port);
-			}
-			catch (final CoreException e) {
-				logReadingError(e);
-			}
+		{	final int port= readAttribute(configuration,
+					AppControlConfigs.APP_PORT_ATTR_NAME,
+					0 );
 			this.appPortValue.setValue((port != 0) ? Integer.valueOf(port) : null);
 		}
 		
-		{	int mode= 0;
-			try {
-				mode= configuration.getAttribute(AppControlConfigs.START_STOP_BLOCKING_TASKS_MODE_ATTR_NAME, mode);
-			}
-			catch (final CoreException e) {
-				logReadingError(e);
-			}
+		{	final int mode= readAttribute(configuration,
+					AppControlConfigs.START_STOP_BLOCKING_TASKS_MODE_ATTR_NAME,
+					0 );
 			this.startStopRunningValue.setValue(mode > 0);
 		}
-		{	String code= ""; //$NON-NLS-1$
-			try {
-				code= configuration.getAttribute(AppControlConfigs.START_R_SNIPPET_CODE_ATTR_NAME, code);
-			}
-			catch (final CoreException e) {
-				logReadingError(e);
-			}
+		{	final String code= readAttribute(configuration,
+					AppControlConfigs.START_R_SNIPPET_CODE_ATTR_NAME,
+					"" ); //$NON-NLS-1$
 			this.startRSnippetValue.setValue(code);
 		}
-		{	String code= ""; //$NON-NLS-1$
-			try {
-				code= configuration.getAttribute(AppControlConfigs.STOP_R_SNIPPET_CODE_ATTR_NAME, code);
-			}
-			catch (final CoreException e) {
-				logReadingError(e);
-			}
+		{	final String code= readAttribute(configuration,
+					AppControlConfigs.STOP_R_SNIPPET_CODE_ATTR_NAME,
+					"" ); //$NON-NLS-1$
 			this.stopRSnippetValue.setValue(code);
 		}
 	}
diff --git a/r/org.eclipse.statet.r.apps/src/org/eclipse/statet/internal/r/apps/ui/launching/AppControlConfigViewTab.java b/r/org.eclipse.statet.r.apps/src/org/eclipse/statet/internal/r/apps/ui/launching/AppControlConfigViewTab.java
index 8a06434..b4d9118 100644
--- a/r/org.eclipse.statet.r.apps/src/org/eclipse/statet/internal/r/apps/ui/launching/AppControlConfigViewTab.java
+++ b/r/org.eclipse.statet.r.apps/src/org/eclipse/statet/internal/r/apps/ui/launching/AppControlConfigViewTab.java
@@ -14,6 +14,10 @@
 
 package org.eclipse.statet.internal.r.apps.ui.launching;
 
+import static org.eclipse.statet.ecommons.databinding.core.observable.ObservableUtils.typed;
+import static org.eclipse.statet.internal.r.apps.ui.launching.AppControlConfigs.VARIABLES_CODE_ATTR_NAME;
+import static org.eclipse.statet.internal.r.apps.ui.launching.AppControlConfigs.VARIABLES_VIEWER_ACTION_ATTR_NAME;
+import static org.eclipse.statet.internal.r.apps.ui.launching.AppControlConfigs.VIEWER_ID_ATTR_NAME;
 import static org.eclipse.statet.jcommons.lang.ObjectUtils.nonNullAssert;
 
 import org.eclipse.core.databinding.DataBindingContext;
@@ -22,11 +26,10 @@
 import org.eclipse.core.databinding.observable.value.IValueChangeListener;
 import org.eclipse.core.databinding.observable.value.ValueChangeEvent;
 import org.eclipse.core.databinding.observable.value.WritableValue;
-import org.eclipse.core.runtime.CoreException;
 import org.eclipse.debug.core.ILaunchConfiguration;
 import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
-import org.eclipse.jface.databinding.swt.WidgetProperties;
-import org.eclipse.jface.databinding.viewers.ViewerProperties;
+import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
+import org.eclipse.jface.databinding.viewers.typed.ViewerProperties;
 import org.eclipse.jface.dialogs.Dialog;
 import org.eclipse.jface.preference.PreferenceDialog;
 import org.eclipse.jface.viewers.ArrayContentProvider;
@@ -101,13 +104,15 @@
 			return this.label;
 		}
 		
-		public Composite enable() {
+		public @Nullable Composite enable() {
+			Composite control= this.detailControl;
 			if (this.id != null) {
-				if (this.detailControl == null) {
-					this.detailControl= createControl(AppControlConfigViewTab.this.viewerDetailControl);
+				if (control == null) {
+					control= createControl(AppControlConfigViewTab.this.viewerDetailControl);
+					this.detailControl= control;
 				}
 			}
-			return this.detailControl;
+			return control;
 		}
 		
 		public void disable() {
@@ -288,26 +293,29 @@
 	@Override
 	protected void addBindings(final DataBindingContext dbc) {
 		dbc.bindValue(
-				ViewerProperties.singleSelection().observe(this.viewerSelectionViewer),
+				ViewerProperties.singleSelection()
+						.observe(this.viewerSelectionViewer),
 				this.viewerValue );
 		
 		dbc.bindValue(
-				WidgetProperties.text(SWT.Modify).observe(this.variablesCodeEditor.getTextControl()),
+				WidgetProperties.text(SWT.Modify)
+						.observe(this.variablesCodeEditor.getTextControl()),
 				this.variablesCodeValue );
 		dbc.bindValue(
-				WidgetProperties.selection().observe(this.variablesActionControl),
+				WidgetProperties.buttonSelection()
+						.observe(this.variablesActionControl),
 				this.variablesActionValue );
 	}
 	
 	@Override
 	public void handleValueChange(final ValueChangeEvent<?> event) {
 		if (event.getObservable() == this.viewerValue) {
-			final ViewerItem oldItem= (ViewerItem) event.diff.getOldValue();
+			final ViewerItem oldItem= typed(event, this.viewerValue).diff.getOldValue();
 			if (oldItem != null) {
 				oldItem.disable();
 			}
 			
-			final ViewerItem newItem= (ViewerItem) event.diff.getNewValue();
+			final ViewerItem newItem= typed(event, this.viewerValue).diff.getNewValue();
 			if (newItem != null) {
 				this.viewerDetailLayout.topControl= newItem.enable();
 			}
@@ -326,34 +334,22 @@
 	
 	@Override
 	protected void doInitialize(final ILaunchConfiguration configuration) {
-		{	String id= ""; //$NON-NLS-1$
-			try {
-				id= configuration.getAttribute(AppControlConfigs.VIEWER_ID_ATTR_NAME, id);
-			}
-			catch (final CoreException e) {
-				logReadingError(e);
-			}
-			id= id.intern();
+		{	final String id= readAttribute(configuration,
+					VIEWER_ID_ATTR_NAME,
+					"") //$NON-NLS-1$
+					.intern();
 			final ViewerItem item= getViewerItem(id);
 			this.viewerValue.setValue(item);
 		}
 		
-		{	String code= ""; //$NON-NLS-1$
-			try {
-				code= configuration.getAttribute(AppControlConfigs.VARIABLES_CODE_ATTR_NAME, code);
-			}
-			catch (final CoreException e) {
-				logReadingError(e);
-			}
+		{	final String code= readAttribute(configuration,
+					VARIABLES_CODE_ATTR_NAME,
+					"" ); //$NON-NLS-1$
 			this.variablesCodeValue.setValue(code);
 		}
-		{	String action= ""; //$NON-NLS-1$
-			try {
-				action= configuration.getAttribute(AppControlConfigs.VARIABLES_VIEWER_ACTION_ATTR_NAME, action);
-			}
-			catch (final CoreException e) {
-				logReadingError(e);
-			}
+		{	final String action= readAttribute(configuration,
+					VARIABLES_VIEWER_ACTION_ATTR_NAME,
+					""); //$NON-NLS-1$
 			this.variablesActionValue.setValue(action.equals(AppControlConfigs.SHOW_ACTION_ID));
 		}
 	}
@@ -361,14 +357,14 @@
 	@Override
 	protected void doSave(final ILaunchConfigurationWorkingCopy configuration) {
 		{	final ViewerItem item= this.viewerValue.getValue();
-			configuration.setAttribute(AppControlConfigs.VIEWER_ID_ATTR_NAME, item.getId());
+			configuration.setAttribute(VIEWER_ID_ATTR_NAME, item.getId());
 		}
 		
 		{	final String code= this.variablesCodeValue.getValue();
-			configuration.setAttribute(AppControlConfigs.VARIABLES_CODE_ATTR_NAME, code);
+			configuration.setAttribute(VARIABLES_CODE_ATTR_NAME, code);
 		}
 		{	final Boolean enabled= this.variablesActionValue.getValue();
-			configuration.setAttribute(AppControlConfigs.VARIABLES_VIEWER_ACTION_ATTR_NAME,
+			configuration.setAttribute(VARIABLES_VIEWER_ACTION_ATTR_NAME,
 					(enabled) ? AppControlConfigs.SHOW_ACTION_ID : null );
 		}
 	}
diff --git a/r/org.eclipse.statet.r.console.ui/src/org/eclipse/statet/internal/r/cmd/ui/launching/RCmdMainTab.java b/r/org.eclipse.statet.r.console.ui/src/org/eclipse/statet/internal/r/cmd/ui/launching/RCmdMainTab.java
index ddc7593..3ccfb3c 100644
--- a/r/org.eclipse.statet.r.console.ui/src/org/eclipse/statet/internal/r/cmd/ui/launching/RCmdMainTab.java
+++ b/r/org.eclipse.statet.r.console.ui/src/org/eclipse/statet/internal/r/cmd/ui/launching/RCmdMainTab.java
@@ -24,9 +24,10 @@
 import org.eclipse.core.databinding.Binding;
 import org.eclipse.core.databinding.DataBindingContext;
 import org.eclipse.core.databinding.UpdateValueStrategy;
-import org.eclipse.core.databinding.beans.BeanProperties;
+import org.eclipse.core.databinding.beans.typed.BeanProperties;
 import org.eclipse.core.databinding.observable.Realm;
 import org.eclipse.core.databinding.observable.value.IObservableValue;
+import org.eclipse.core.databinding.observable.value.IValueChangeListener;
 import org.eclipse.core.databinding.observable.value.ValueChangeEvent;
 import org.eclipse.core.databinding.observable.value.WritableValue;
 import org.eclipse.core.databinding.validation.IValidator;
@@ -38,8 +39,8 @@
 import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
 import org.eclipse.debug.ui.ILaunchConfigurationDialog;
 import org.eclipse.debug.ui.ILaunchConfigurationTab;
-import org.eclipse.jface.databinding.swt.WidgetProperties;
-import org.eclipse.jface.databinding.viewers.ViewersObservables;
+import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
+import org.eclipse.jface.databinding.viewers.typed.ViewerProperties;
 import org.eclipse.jface.dialogs.Dialog;
 import org.eclipse.jface.dialogs.TrayDialog;
 import org.eclipse.jface.viewers.ArrayContentProvider;
@@ -58,6 +59,7 @@
 import org.eclipse.ui.statushandlers.StatusManager;
 
 import org.eclipse.statet.jcommons.collections.ImCollections;
+import org.eclipse.statet.jcommons.lang.Nullable;
 
 import org.eclipse.statet.ecommons.databinding.core.validation.UpdateableErrorValidator;
 import org.eclipse.statet.ecommons.debug.core.util.LaunchUtils;
@@ -288,73 +290,86 @@
 	
 	@Override
 	protected void addBindings(final DataBindingContext dbc) {
-		@SuppressWarnings("unchecked")
-		final IObservableValue<Cmd> cmdSelection= ViewersObservables.observeSingleSelection(this.cmdCombo);
-		dbc.bindValue(cmdSelection, this.cmdValue, null, null);
-		final IValidator cmdValidator=
-				(final Object value) -> {
-					final String s= (String) value;
-					if (s == null || s.trim().isEmpty()) {
+		final IObservableValue<Cmd> cmdSelection= ViewerProperties.singleSelection(Cmd.class)
+				.observe(this.cmdCombo);
+		dbc.bindValue(
+				cmdSelection,
+				this.cmdValue );
+		final IValidator<@Nullable String> cmdValidator= (final @Nullable String value) -> {
+					if (value == null || value.trim().isEmpty()) {
 						return ValidationStatus.warning(Messages.MainTab_error_MissingCMD_message);
 					}
 					return ValidationStatus.ok();
 				};
 		
 		dbc.bindValue(
-				WidgetProperties.text(SWT.Modify).observe(this.cmdText),
-				BeanProperties.value(Cmd.class, "command").observeDetail(cmdSelection), //$NON-NLS-1$
-				new UpdateValueStrategy().setAfterGetValidator(cmdValidator),
-				new UpdateValueStrategy().setBeforeSetValidator(cmdValidator) );
+				WidgetProperties.text(SWT.Modify)
+						.observe(this.cmdText),
+				BeanProperties.value(Cmd.class, "command", String.class) //$NON-NLS-1$
+						.observeDetail(cmdSelection),
+				new UpdateValueStrategy<String, String>()
+						.setAfterGetValidator(cmdValidator),
+				new UpdateValueStrategy<String, String>()
+						.setBeforeSetValidator(cmdValidator) );
 		dbc.bindValue(
-				WidgetProperties.text(SWT.Modify).observe(this.argumentsControl.getTextControl()),
+				WidgetProperties.text(SWT.Modify)
+						.observe(this.argumentsControl.getTextControl()),
 				this.argumentsValue );
 		
 		this.resourceControl.getValidator().setOnLateResolve(IStatus.WARNING);
 		this.resourceControl.getValidator().setOnEmpty(IStatus.OK);
 		this.resourceControl.getValidator().setIgnoreRelative(true);
-		final Binding resourceBinding= dbc.bindValue(this.resourceControl.getObservable(), this.resourceValue,
-				new UpdateValueStrategy().setAfterGetValidator(
-						new UpdateableErrorValidator(this.resourceControl.getValidator())),
+		final Binding resourceBinding= dbc.bindValue(
+				this.resourceControl.getObservable(),
+				this.resourceValue,
+				new UpdateValueStrategy<String, String>()
+						.setAfterGetValidator(new UpdateableErrorValidator<>(
+								this.resourceControl.getValidator() )),
 				null );
-		cmdSelection.addValueChangeListener(
-				(final ValueChangeEvent<? extends Cmd> event) -> {
-					final Cmd cmd= event.diff.getNewValue();
-					if (cmd != null) {
-						RCmdMainTab.this.cmdText.setEditable(cmd.getType() == Cmd.CUSTOM);
-						String label;
-						int mode= 0;
-						switch (cmd.getType()) {
-						case Cmd.PACKAGE_DIR:
-							label= Messages.MainTab_Resource_PackageDir_label;
-							mode= ResourceInputComposite.MODE_DIRECTORY;
-							break;
-						case Cmd.PACKAGE_DIR_OR_ARCHIVE:
-							label= Messages.MainTab_Resource_PackageDirOrArchive_label;
-							mode= ResourceInputComposite.MODE_FILE | ResourceInputComposite.MODE_DIRECTORY;
-							break;
-						case Cmd.DOC:
-							label= Messages.MainTab_Resource_Doc_label;
-							mode= ResourceInputComposite.MODE_FILE;
-							break;
-						case Cmd.DOC_OR_DIR:
-							label= Messages.MainTab_Resource_DocOrDir_label;
-							mode= ResourceInputComposite.MODE_FILE | ResourceInputComposite.MODE_DIRECTORY;
-							break;
-						default: // Cmd.CUSTOM:
-							label= Messages.MainTab_Resource_Other_label;
-							mode= ResourceInputComposite.MODE_FILE | ResourceInputComposite.MODE_DIRECTORY;
-							break;
-						}
-						RCmdMainTab.this.resourceControl.setResourceLabel(label);
-						RCmdMainTab.this.resourceControl.setMode(mode | ResourceInputComposite.MODE_OPEN);
-						resourceBinding.validateTargetToModel();
+		cmdSelection.addValueChangeListener(new IValueChangeListener<Cmd>() {
+			@Override
+			public void handleValueChange(final ValueChangeEvent<? extends Cmd> event) {
+				final Cmd cmd= event.diff.getNewValue();
+				if (cmd != null) {
+					RCmdMainTab.this.cmdText.setEditable(cmd.getType() == Cmd.CUSTOM);
+					String label;
+					int mode= 0;
+					switch (cmd.getType()) {
+					case Cmd.PACKAGE_DIR:
+						label= Messages.MainTab_Resource_PackageDir_label;
+						mode= ResourceInputComposite.MODE_DIRECTORY;
+						break;
+					case Cmd.PACKAGE_DIR_OR_ARCHIVE:
+						label= Messages.MainTab_Resource_PackageDirOrArchive_label;
+						mode= ResourceInputComposite.MODE_FILE | ResourceInputComposite.MODE_DIRECTORY;
+						break;
+					case Cmd.DOC:
+						label= Messages.MainTab_Resource_Doc_label;
+						mode= ResourceInputComposite.MODE_FILE;
+						break;
+					case Cmd.DOC_OR_DIR:
+						label= Messages.MainTab_Resource_DocOrDir_label;
+						mode= ResourceInputComposite.MODE_FILE | ResourceInputComposite.MODE_DIRECTORY;
+						break;
+					default: // Cmd.CUSTOM:
+						label= Messages.MainTab_Resource_Other_label;
+						mode= ResourceInputComposite.MODE_FILE | ResourceInputComposite.MODE_DIRECTORY;
+						break;
 					}
-				} );
+					RCmdMainTab.this.resourceControl.setResourceLabel(label);
+					RCmdMainTab.this.resourceControl.setMode(mode | ResourceInputComposite.MODE_OPEN);
+					resourceBinding.validateTargetToModel();
+				}
+			}
+		});
 		
 		this.workingDirectoryControl.getValidator().setOnEmpty(IStatus.OK);
-		dbc.bindValue(this.workingDirectoryControl.getObservable(), this.workingDirectoryValue,
-				new UpdateValueStrategy().setAfterGetValidator(
-						new UpdateableErrorValidator(this.workingDirectoryControl.getValidator())),
+		dbc.bindValue(
+				this.workingDirectoryControl.getObservable(),
+				this.workingDirectoryValue,
+				new UpdateValueStrategy<String, String>()
+						.setAfterGetValidator(new UpdateableErrorValidator<>(
+								this.workingDirectoryControl.getValidator() )),
 				null );
 	}
 	
@@ -371,46 +386,28 @@
 	protected void doInitialize(final ILaunchConfiguration configuration) {
 		resetCommands();
 		
-		Cmd cmd= null;
-		{	try {
-				final String command= configuration.getAttribute(RCmdLaunching.R_CMD_COMMAND_ATTR_NAME, ""); //$NON-NLS-1$
-				for (final Cmd candidate : this.commands) {
-					if (candidate.getCommand().equals(command)) {
-						cmd= candidate;
-						break;
-					}
-				}
-				if (cmd == null) {
-					this.customCommand.setCommand(command);
-					cmd= this.customCommand;
+		{	final String command= readAttribute(configuration,
+					RCmdLaunching.R_CMD_COMMAND_ATTR_NAME,
+					"" ); //$NON-NLS-1$
+			Cmd cmd= null;
+			for (final Cmd candidate : this.commands) {
+				if (candidate.getCommand().equals(command)) {
+					cmd= candidate;
+					break;
 				}
 			}
-			catch (final CoreException e) {
-				cmd= this.commands[0];
-				logReadingError(e);
+			if (cmd == null) {
+				this.customCommand.setCommand(command);
+				cmd= this.customCommand;
 			}
 			this.cmdValue.setValue(cmd);
 		}
-		{	String value;
-			try {
-				value= configuration.getAttribute(RCmdLaunching.R_CMD_OPTIONS_ATTR_NAME, ""); //$NON-NLS-1$
-				
-			}
-			catch (final CoreException e) {
-				value= ""; //$NON-NLS-1$
-				logReadingError(e);
-			}
-			this.argumentsValue.setValue(value);
-		}
-		{	String value;
-			try {
-				value= configuration.getAttribute(RCmdLaunching.R_CMD_RESOURCE_ATTR_NAME, ""); //$NON-NLS-1$
-			}
-			catch (final CoreException e) {
-				value= ""; //$NON-NLS-1$
-			}
-			this.resourceValue.setValue(value);
-		}
+		this.argumentsValue.setValue(readAttribute(configuration,
+				RCmdLaunching.R_CMD_OPTIONS_ATTR_NAME,
+				"" )); //$NON-NLS-1$
+		this.resourceValue.setValue(readAttribute(configuration,
+				RCmdLaunching.R_CMD_RESOURCE_ATTR_NAME,
+				"" )); //$NON-NLS-1$
 		
 		{	String value;
 			try {
diff --git a/r/org.eclipse.statet.r.console.ui/src/org/eclipse/statet/internal/r/console/ui/Messages.java b/r/org.eclipse.statet.r.console.ui/src/org/eclipse/statet/internal/r/console/ui/Messages.java
index 0a96852..8beddf3 100644
--- a/r/org.eclipse.statet.r.console.ui/src/org/eclipse/statet/internal/r/console/ui/Messages.java
+++ b/r/org.eclipse.statet.r.console.ui/src/org/eclipse/statet/internal/r/console/ui/Messages.java
@@ -16,7 +16,11 @@
 
 import org.eclipse.osgi.util.NLS;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
 
+
+@NonNullByDefault
+@SuppressWarnings("null")
 public class Messages extends NLS {
 	
 	
diff --git a/r/org.eclipse.statet.r.console.ui/src/org/eclipse/statet/internal/r/console/ui/launching/RConsoleMainTab.java b/r/org.eclipse.statet.r.console.ui/src/org/eclipse/statet/internal/r/console/ui/launching/RConsoleMainTab.java
index a166fad..ac22413 100644
--- a/r/org.eclipse.statet.r.console.ui/src/org/eclipse/statet/internal/r/console/ui/launching/RConsoleMainTab.java
+++ b/r/org.eclipse.statet.r.console.ui/src/org/eclipse/statet/internal/r/console/ui/launching/RConsoleMainTab.java
@@ -23,6 +23,7 @@
 import org.eclipse.core.databinding.UpdateValueStrategy;
 import org.eclipse.core.databinding.observable.Realm;
 import org.eclipse.core.databinding.observable.value.IObservableValue;
+import org.eclipse.core.databinding.observable.value.IValueChangeListener;
 import org.eclipse.core.databinding.observable.value.ValueChangeEvent;
 import org.eclipse.core.databinding.observable.value.WritableValue;
 import org.eclipse.core.databinding.validation.IValidator;
@@ -35,8 +36,8 @@
 import org.eclipse.debug.core.ILaunchManager;
 import org.eclipse.debug.ui.ILaunchConfigurationDialog;
 import org.eclipse.debug.ui.ILaunchConfigurationTab;
-import org.eclipse.jface.databinding.swt.WidgetProperties;
-import org.eclipse.jface.databinding.viewers.ViewersObservables;
+import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
+import org.eclipse.jface.databinding.viewers.typed.ViewerProperties;
 import org.eclipse.jface.dialogs.Dialog;
 import org.eclipse.jface.dialogs.TrayDialog;
 import org.eclipse.jface.viewers.ArrayContentProvider;
@@ -262,44 +263,48 @@
 	
 	@Override
 	protected void addBindings(final DataBindingContext dbc, final Realm realm) {
-		IValidator typeValidator= null;
+		IValidator<RConsoleType> typeValidator= null;
 		if (getLaunchConfigurationDialog().getMode().equals(ILaunchManager.DEBUG_MODE)) {
-			typeValidator= new UpdateableErrorValidator((
-					final Object value) -> {
-						final RConsoleType type= (RConsoleType) value;
+			typeValidator= new UpdateableErrorValidator<>((final RConsoleType type) -> {
 						if (!type.isDebugSupported()) {
 							return ValidationStatus.error(NLS.bind(
 									"R launch type ''{0}'' does not support debug mode.",
 									type.getName() ));
 						}
 						return ValidationStatus.ok();
-					} );
+					});
 		}
 		dbc.bindValue(
-				ViewersObservables.observeSingleSelection(this.typesCombo),
+				ViewerProperties.singleSelection(RConsoleType.class)
+						.observe(this.typesCombo),
 				this.typeValue,
 				(typeValidator != null) ? 
-						new UpdateValueStrategy().setAfterGetValidator(typeValidator) :
+						new UpdateValueStrategy<RConsoleType, RConsoleType>()
+								.setAfterGetValidator(typeValidator) :
 						null,
 				null );
 		
 		dbc.bindValue(
-				WidgetProperties.text(SWT.Modify).observe(this.argumentsControl.getTextControl()),
+				WidgetProperties.text(SWT.Modify)
+						.observe(this.argumentsControl.getTextControl()),
 				this.argumentsValue );
 		
 		this.workingDirectoryControl.getValidator().setOnEmpty(IStatus.OK);
 		dbc.bindValue(
 				this.workingDirectoryControl.getObservable(),
 				this.workingDirectoryValue,
-				new UpdateValueStrategy().setAfterGetValidator(
-						new UpdateableErrorValidator(this.workingDirectoryControl.getValidator()) ),
+				new UpdateValueStrategy<String, String>()
+						.setAfterGetValidator(new UpdateableErrorValidator<>(
+								this.workingDirectoryControl.getValidator() )),
 				null );
 		
-		this.typeValue.addValueChangeListener(
-				(final ValueChangeEvent<? extends RConsoleType> event) -> {
-					final Object newValue= event.diff.getNewValue();
-					updateType((RConsoleType) newValue);
-				} );
+		this.typeValue.addValueChangeListener(new IValueChangeListener<RConsoleType>() {
+			@Override
+			public void handleValueChange(final ValueChangeEvent<? extends RConsoleType> event) {
+				final Object newValue= event.diff.getNewValue();
+				updateType((RConsoleType) newValue);
+			}
+		});
 	}
 	
 	public RConsoleType getType() {
@@ -326,46 +331,41 @@
 	
 	@Override
 	protected void doInitialize(final ILaunchConfiguration configuration) {
-		String type= null;
-		try {
-			type= configuration.getAttribute(RConsoleLaunching.ATTR_TYPE, ""); //$NON-NLS-1$
+		{	String type= readAttribute(configuration,
+					RConsoleLaunching.ATTR_TYPE,
+					"" ); //$NON-NLS-1$
 			// convert old rterm to new rj
 			if (type.equals("rterm")) { //$NON-NLS-1$
 				type= RConsoleLaunching.LOCAL_RTERM;
 			}
-		} catch (final CoreException e) {
-			type= ""; //$NON-NLS-1$
-			logReadingError(e);
-		}
-		int i= 0;
-		for (; i < this.types.length; i++) {
-			if (this.types[i].getId().equals(type)) {
-				this.typeValue.setValue(this.types[i]);
-				break;
+			int i= 0;
+			for (; i < this.types.length; i++) {
+				if (this.types[i].getId().equals(type)) {
+					this.typeValue.setValue(this.types[i]);
+					break;
+				}
+			}
+			if (i >= this.types.length) {
+				this.typeValue.setValue(this.defaultType);
 			}
 		}
-		if (i >= this.types.length) {
-			this.typeValue.setValue(this.defaultType);
+		
+		{	String wd= null;
+			try {
+				wd= REnvTab.readWorkingDirectory(configuration);
+			}
+			catch (final CoreException e) {
+				wd= ""; //$NON-NLS-1$
+				logReadingError(e);
+			}
+			this.workingDirectoryValue.setValue(wd);
 		}
 		
-		String wd= null;
-		try {
-			wd= REnvTab.readWorkingDirectory(configuration);
+		{	final String options= readAttribute(configuration,
+					RConsoleLaunching.ATTR_OPTIONS,
+					"" ); //$NON-NLS-1$
+			this.argumentsValue.setValue(options);
 		}
-		catch (final CoreException e) {
-			wd= ""; //$NON-NLS-1$
-			logReadingError(e);
-		}
-		this.workingDirectoryValue.setValue(wd);
-		
-		String options= null;
-		try {
-			options= configuration.getAttribute(RConsoleLaunching.ATTR_OPTIONS, ""); //$NON-NLS-1$
-		} catch (final CoreException e) {
-			options= ""; //$NON-NLS-1$
-			logReadingError(e);
-		}
-		this.argumentsValue.setValue(options);
 		
 		checkHelp(configuration);
 	}
diff --git a/r/org.eclipse.statet.r.console.ui/src/org/eclipse/statet/internal/r/console/ui/launching/RConsoleOptionsTab.java b/r/org.eclipse.statet.r.console.ui/src/org/eclipse/statet/internal/r/console/ui/launching/RConsoleOptionsTab.java
index 49b3ccc..c810f88 100644
--- a/r/org.eclipse.statet.r.console.ui/src/org/eclipse/statet/internal/r/console/ui/launching/RConsoleOptionsTab.java
+++ b/r/org.eclipse.statet.r.console.ui/src/org/eclipse/statet/internal/r/console/ui/launching/RConsoleOptionsTab.java
@@ -33,14 +33,15 @@
 import org.eclipse.debug.core.ILaunchConfiguration;
 import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
 import org.eclipse.jface.databinding.swt.ISWTObservableValue;
-import org.eclipse.jface.databinding.swt.WidgetProperties;
+import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
 import org.eclipse.jface.databinding.viewers.ObservableListContentProvider;
-import org.eclipse.jface.databinding.viewers.ViewersObservables;
+import org.eclipse.jface.databinding.viewers.typed.ViewerProperties;
 import org.eclipse.jface.dialogs.Dialog;
 import org.eclipse.jface.layout.GridLayoutFactory;
 import org.eclipse.jface.viewers.CellLabelProvider;
 import org.eclipse.jface.viewers.CheckboxTableViewer;
 import org.eclipse.jface.viewers.ColumnWeightData;
+import org.eclipse.jface.viewers.ICheckable;
 import org.eclipse.jface.viewers.TableViewerColumn;
 import org.eclipse.jface.viewers.ViewerCell;
 import org.eclipse.swt.SWT;
@@ -53,7 +54,10 @@
 import org.eclipse.swt.widgets.Text;
 import org.eclipse.ui.PlatformUI;
 
-import org.eclipse.statet.ecommons.databinding.IntegerValidator;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
+import org.eclipse.statet.ecommons.databinding.core.validation.IntegerValidator;
 import org.eclipse.statet.ecommons.databinding.jface.SWTMultiEnabledObservable;
 import org.eclipse.statet.ecommons.debug.ui.config.LaunchConfigTabWithDbc;
 import org.eclipse.statet.ecommons.templates.TemplateVariableProcessor;
@@ -86,6 +90,7 @@
  *   <li>Option for a startup snippet</li>
  * </ul>
  */
+@NonNullByDefault
 public class RConsoleOptionsTab extends LaunchConfigTabWithDbc {
 	
 	
@@ -231,7 +236,8 @@
 		
 		this.trackingButtons= new ButtonGroup<TrackingConfiguration>(group) {
 			@Override
-			protected TrackingConfiguration edit1(TrackingConfiguration item, final boolean newItem, final Object parent) {
+			protected @Nullable TrackingConfiguration edit1(@Nullable TrackingConfiguration item,
+					final boolean newItem, final @Nullable Object parent) {
 				TrackingConfigurationDialog dialog;
 				if (!newItem && item != null && item.getId().equals(HistoryTrackingConfiguration.HISTORY_TRACKING_ID)) {
 					item= new HistoryTrackingConfiguration(item.getId(), (HistoryTrackingConfiguration) item);
@@ -355,43 +361,61 @@
 	@Override
 	protected void addBindings(final DataBindingContext dbc, final Realm realm) {
 		dbc.bindValue(
-				WidgetProperties.selection().observe(this.pinControl),
+				WidgetProperties.buttonSelection()
+						.observe(this.pinControl),
 				this.pinValue );
 		
-		this.trackingTable.setContentProvider(new ObservableListContentProvider());
+		this.trackingTable.setContentProvider(new ObservableListContentProvider<TrackingConfiguration>());
 		this.trackingTable.setInput(this.trackingList);
 		
-		dbc.bindValue(new SnippetEditorObservable(realm, this.startupSnippetEditor, SWT.Modify), this.startupSnippetValue, null, null);
+		dbc.bindValue(
+				new SnippetEditorObservable(realm, this.startupSnippetEditor, SWT.Modify),
+				this.startupSnippetValue );
 		
 		dbc.bindValue(
-				WidgetProperties.selection().observe(this.rHelpByStatetControl),
+				WidgetProperties.buttonSelection()
+						.observe(this.rHelpByStatetControl),
 				this.rHelpByStatetValue );
 		dbc.bindValue(
-				WidgetProperties.selection().observe(this.rGraphicsByStatetControl),
+				WidgetProperties.buttonSelection()
+						.observe(this.rGraphicsByStatetControl),
 				this.rGraphicsByStatetValue );
 		dbc.bindValue(
-				WidgetProperties.selection().observe(this.rDbgExtControl),
+				WidgetProperties.buttonSelection()
+						.observe(this.rDbgExtControl),
 				this.rDbgExtValue );
 		
-		final ISWTObservableValue objectDBTargetObs= WidgetProperties.selection().observe(this.objectDBEnabledControl);
-		dbc.bindValue(objectDBTargetObs, this.objectDBEnabledValue);
+		final ISWTObservableValue<Boolean> objectDBTargetObs= WidgetProperties.buttonSelection()
+				.observe(this.objectDBEnabledControl);
 		dbc.bindValue(
-				WidgetProperties.selection().observe(this.objectDBAutoEnabledControl),
+				objectDBTargetObs,
+				this.objectDBEnabledValue );
+		dbc.bindValue(
+				WidgetProperties.buttonSelection()
+						.observe(this.objectDBAutoEnabledControl),
 				this.objectDBAutoEnabledValue );
 		dbc.bindValue(
-				WidgetProperties.text(SWT.Modify).observe(this.objectDBListsChildrenControl),
+				WidgetProperties.text(SWT.Modify)
+						.observe(this.objectDBListsChildrenControl),
 				this.objectDBListsChildrenValue,
-				new UpdateValueStrategy().setAfterGetValidator(new IntegerValidator(100, Integer.MAX_VALUE, "Invalid max value for length of R lists to fetch (100-).")),
+				new UpdateValueStrategy<String, Integer>()
+						.setAfterGetValidator(new IntegerValidator(100, Integer.MAX_VALUE,
+								"Invalid max value for length of R lists to fetch (100-)." )),
 				null );
 		dbc.bindValue(
-				WidgetProperties.text(SWT.Modify).observe(this.objectDBEnvsChildrenControl),
+				WidgetProperties.text(SWT.Modify)
+						.observe(this.objectDBEnvsChildrenControl),
 				this.objectDBEnvsChildrenValue,
-				new UpdateValueStrategy().setAfterGetValidator(new IntegerValidator(100, Integer.MAX_VALUE, "Invalid max value for length of R environments to fetch (100-).")),
+				new UpdateValueStrategy<String, Integer>()
+						.setAfterGetValidator(new IntegerValidator(100, Integer.MAX_VALUE,
+								"Invalid max value for length of R environments to fetch (100-)." )),
 				null );
 		
 		dbc.bindValue(new SWTMultiEnabledObservable(realm, new Control[] {
-						this.objectDBAutoEnabledControl, this.objectDBEnvsChildrenControl, this.objectDBListsChildrenControl,
-				}, null),
+						this.objectDBAutoEnabledControl,
+						this.objectDBEnvsChildrenControl,
+						this.objectDBListsChildrenControl,
+				}, null ),
 				objectDBTargetObs );
 		
 		this.trackingButtons.connectTo(this.trackingTable,
@@ -404,7 +428,10 @@
 		});
 		
 		this.trackingButtons.setCheckedModel(this.trackingEnabledSet);
-		dbc.bindSet(ViewersObservables.observeCheckedElements(this.trackingTable, TrackingConfiguration.class), this.trackingEnabledSet);
+		dbc.bindSet(
+				ViewerProperties.checkedElements(TrackingConfiguration.class)
+						.observe((ICheckable)this.trackingTable),
+				this.trackingEnabledSet );
 	}
 	
 	
@@ -414,117 +441,60 @@
 	
 	@Override
 	protected void doInitialize(final ILaunchConfiguration configuration) {
-		boolean pin;
-		try {
-			pin= configuration.getAttribute(RConsoleLaunching.ATTR_PIN_CONSOLE, false);
-		}
-		catch (final CoreException e) {
-			pin= false;
-			logReadingError(e);
-		}
-		this.pinValue.setValue(pin);
+		this.pinValue.setValue(readAttribute(configuration,
+				RConsoleLaunching.ATTR_PIN_CONSOLE,
+				false ));
 		
-		{	boolean enabled= true;
-			try {
-				enabled= configuration.getAttribute(ATTR_INTEGRATION_RHELP_ENABLED, enabled);
-			}
-			catch (final CoreException e) {
-				logReadingError(e);
-			}
-			this.rHelpByStatetValue.setValue(enabled);
-		}
-		{	boolean enabled= true;
-			try {
-				enabled= configuration.getAttribute(ATTR_INTEGRATION_RGRAPHICS_ASDEFAULT, enabled);
-			}
-			catch (final CoreException e) {
-				logReadingError(e);
-			}
-			this.rGraphicsByStatetValue.setValue(enabled);
-		}
-		{	boolean enabled= true;
-			try {
-				enabled= configuration.getAttribute(ATTR_INTEGRATION_RDBGEXT_ENABLED, enabled);
-			}
-			catch (final CoreException e) {
-				logReadingError(e);
-			}
-			this.rDbgExtValue.setValue(enabled);
-		}
+		this.rHelpByStatetValue.setValue(readAttribute(configuration,
+				ATTR_INTEGRATION_RHELP_ENABLED,
+				true ));
+		this.rGraphicsByStatetValue.setValue(readAttribute(configuration,
+				ATTR_INTEGRATION_RGRAPHICS_ASDEFAULT,
+				true ));
+		this.rDbgExtValue.setValue(readAttribute(configuration,
+				ATTR_INTEGRATION_RDBGEXT_ENABLED,
+				true ));
 		
-		String startupSnippet;
-		try {
-			startupSnippet= configuration.getAttribute(RConsoleLaunching.ATTR_INIT_SCRIPT_SNIPPET, ""); //$NON-NLS-1$
-		}
-		catch (final CoreException e) {
-			startupSnippet= ""; //$NON-NLS-1$
-			logReadingError(e);
-		}
-		this.startupSnippetValue.setValue(startupSnippet);
+		this.startupSnippetValue.setValue(readAttribute(configuration,
+				RConsoleLaunching.ATTR_INIT_SCRIPT_SNIPPET,
+				"" )); //$NON-NLS-1$
 		
-		{	boolean enabled= true;
-			try {
-				enabled= configuration.getAttribute(RConsoleLaunching.ATTR_OBJECTDB_ENABLED, enabled);
-			}
-			catch (final CoreException e) {
-				logReadingError(e);
-			}
-			this.objectDBEnabledValue.setValue(enabled);
-		}
-		{	boolean enabled= true;
-			try {
-				enabled= configuration.getAttribute(RConsoleLaunching.ATTR_OBJECTDB_AUTOREFRESH_ENABLED, enabled);
-			}
-			catch (final CoreException e) {
-				logReadingError(e);
-			}
-			this.objectDBAutoEnabledValue.setValue(enabled);
-		}
-		{	int max= 200000;
-			try {
-				max= configuration.getAttribute(RConsoleLaunching.ATTR_OBJECTDB_LISTS_MAX_LENGTH, max);
-			}
-			catch (final CoreException e) {
-				logReadingError(e);
-			}
-			this.objectDBListsChildrenValue.setValue(max);
-		}
-		{	int max= 20000;
-			try {
-				max= configuration.getAttribute(RConsoleLaunching.ATTR_OBJECTDB_ENVS_MAX_LENGTH, max);
-			}
-			catch (final CoreException e) {
-				logReadingError(e);
-			}
-			this.objectDBEnvsChildrenValue.setValue(max);
-		}
+		this.objectDBEnabledValue.setValue(readAttribute(configuration,
+				RConsoleLaunching.ATTR_OBJECTDB_ENABLED,
+				true ));
+		
+		this.objectDBAutoEnabledValue.setValue(readAttribute(configuration,
+				RConsoleLaunching.ATTR_OBJECTDB_AUTOREFRESH_ENABLED,
+				true ));
+		this.objectDBListsChildrenValue.setValue(readAttribute(configuration,
+				RConsoleLaunching.ATTR_OBJECTDB_LISTS_MAX_LENGTH,
+				200000 ));
+		this.objectDBEnvsChildrenValue.setValue(readAttribute(configuration,
+				RConsoleLaunching.ATTR_OBJECTDB_ENVS_MAX_LENGTH,
+				20000 ));
 		
 		{	this.trackingList.clear();
 			this.trackingMaxCustomId= 0;
-			List<String> trackingIds= Collections.emptyList();
-			try {
-				trackingIds= configuration.getAttribute(TRACKING_IDS, trackingIds);
-				for (final String id : trackingIds) {
-					final TrackingConfiguration trackingConfig= id.equals(HistoryTrackingConfiguration.HISTORY_TRACKING_ID) ?
-							new HistoryTrackingConfiguration(id) : new TrackingConfiguration(id);
-					try {
-						TRACKING_UTIL.load(trackingConfig, configuration);
-						this.trackingList.add(trackingConfig);
-						if (id.startsWith(CUSTOM_TRACKING_ID_PREFIX)) {
-							try {
-								final int num= Integer.parseInt(id.substring(CUSTOM_TRACKING_ID_PREFIX.length()));
-								this.trackingMaxCustomId= Math.max(this.trackingMaxCustomId, num);
-							} catch (final Exception e) {}
-						}
-					}
-					catch (final CoreException e) {
-						trackingIds.remove(id);
-						logReadingError(e);
+			final List<String> trackingIds= readAttribute(configuration,
+					TRACKING_IDS,
+					Collections.emptyList() );
+			for (final String id : trackingIds) {
+				final TrackingConfiguration trackingConfig= id.equals(HistoryTrackingConfiguration.HISTORY_TRACKING_ID) ?
+						new HistoryTrackingConfiguration(id) : new TrackingConfiguration(id);
+				try {
+					TRACKING_UTIL.load(trackingConfig, configuration);
+					this.trackingList.add(trackingConfig);
+					if (id.startsWith(CUSTOM_TRACKING_ID_PREFIX)) {
+						try {
+							final int num= Integer.parseInt(id.substring(CUSTOM_TRACKING_ID_PREFIX.length()));
+							this.trackingMaxCustomId= Math.max(this.trackingMaxCustomId, num);
+						} catch (final Exception e) {}
 					}
 				}
-			}
-			catch (final CoreException e) {
-				logReadingError(e);
+				catch (final CoreException e) {
+					trackingIds.remove(id);
+					logReadingError(e);
+				}
 			}
 			if (!trackingIds.contains(HistoryTrackingConfiguration.HISTORY_TRACKING_ID)) {
 				final TrackingConfiguration trackingConfig= new HistoryTrackingConfiguration(HistoryTrackingConfiguration.HISTORY_TRACKING_ID);
@@ -541,74 +511,68 @@
 		}
 		
 		{	this.trackingEnabledSet.clear();
-			List<String> trackingEnabledIds= Collections.emptyList();
-			try {
-				trackingEnabledIds= configuration.getAttribute(TRACKING_ENABLED_IDS, Collections.EMPTY_LIST);
-				final List<TrackingConfiguration> trackingList= this.trackingList;
-				for (final TrackingConfiguration trackingConfig : trackingList) {
-					if (trackingEnabledIds.contains(trackingConfig.getId())) {
-						this.trackingEnabledSet.add(trackingConfig);
-					}
+			final List<String> trackingIds= readAttribute(configuration,
+					TRACKING_ENABLED_IDS,
+					Collections.emptyList() );
+			final List<TrackingConfiguration> trackingList= this.trackingList;
+			for (final TrackingConfiguration trackingConfig : trackingList) {
+				if (trackingIds.contains(trackingConfig.getId())) {
+					this.trackingEnabledSet.add(trackingConfig);
 				}
 			}
-			catch (final CoreException e) {
-				logReadingError(e);
-			}
 		}
 	}
 	
 	@Override
 	protected void doSave(final ILaunchConfigurationWorkingCopy configuration) {
-		configuration.setAttribute(RConsoleLaunching.ATTR_PIN_CONSOLE, this.pinValue.getValue().booleanValue());
+		configuration.setAttribute(RConsoleLaunching.ATTR_PIN_CONSOLE,
+				this.pinValue.getValue().booleanValue() );
 		
-		{	final Boolean enabled= this.rHelpByStatetValue.getValue();
-			configuration.setAttribute(ATTR_INTEGRATION_RHELP_ENABLED, enabled.booleanValue());
-		}
-		{	final Boolean enabled= this.rGraphicsByStatetValue.getValue();
-			configuration.setAttribute(ATTR_INTEGRATION_RGRAPHICS_ASDEFAULT, enabled.booleanValue());
-		}
-		{	final Boolean enabled= this.rDbgExtValue.getValue();
-			configuration.setAttribute(ATTR_INTEGRATION_RDBGEXT_ENABLED, enabled.booleanValue());
+		configuration.setAttribute(ATTR_INTEGRATION_RHELP_ENABLED,
+				this.rHelpByStatetValue.getValue().booleanValue() );
+		configuration.setAttribute(ATTR_INTEGRATION_RGRAPHICS_ASDEFAULT,
+				this.rGraphicsByStatetValue.getValue().booleanValue() );
+		configuration.setAttribute(ATTR_INTEGRATION_RDBGEXT_ENABLED,
+				this.rDbgExtValue.getValue().booleanValue() );
+		
+		{	final String startupSnippet= this.startupSnippetValue.getValue();
+			if (startupSnippet != null && startupSnippet.length() > 0) {
+				configuration.setAttribute(RConsoleLaunching.ATTR_INIT_SCRIPT_SNIPPET, startupSnippet);
+			}
+			else {
+				configuration.removeAttribute(RConsoleLaunching.ATTR_INIT_SCRIPT_SNIPPET);
+			}
 		}
 		
-		final String startupSnippet= this.startupSnippetValue.getValue();
-		if (startupSnippet != null && startupSnippet.length() > 0) {
-			configuration.setAttribute(RConsoleLaunching.ATTR_INIT_SCRIPT_SNIPPET, startupSnippet);
-		}
-		else {
-			configuration.removeAttribute(RConsoleLaunching.ATTR_INIT_SCRIPT_SNIPPET);
+		configuration.setAttribute(RConsoleLaunching.ATTR_OBJECTDB_ENABLED,
+				this.objectDBEnabledValue.getValue().booleanValue() );
+		
+		configuration.setAttribute(RConsoleLaunching.ATTR_OBJECTDB_AUTOREFRESH_ENABLED,
+				this.objectDBAutoEnabledValue.getValue().booleanValue() );
+		configuration.setAttribute(RConsoleLaunching.ATTR_OBJECTDB_LISTS_MAX_LENGTH,
+				this.objectDBListsChildrenValue.getValue().intValue() );
+		configuration.setAttribute(RConsoleLaunching.ATTR_OBJECTDB_ENVS_MAX_LENGTH,
+				this.objectDBEnvsChildrenValue.getValue().intValue() );
+		
+		{	final List<String> trackingIds= new ArrayList<>(this.trackingList.size());
+			
+			final List<TrackingConfiguration> trackingList= this.trackingList;
+			for (final TrackingConfiguration trackingConfig : trackingList) {
+				final String id= trackingConfig.getId();
+				trackingIds.add(id);
+				TRACKING_UTIL.save(trackingConfig, configuration);
+			}
+			configuration.setAttribute(TRACKING_IDS, trackingIds);
 		}
 		
-		{	final Boolean enabled= this.objectDBEnabledValue.getValue();
-			configuration.setAttribute(RConsoleLaunching.ATTR_OBJECTDB_ENABLED, enabled.booleanValue());
+		{	final List<String> trackingIds= new ArrayList<>(this.trackingEnabledSet.size());
+			final Set<TrackingConfiguration> trackingEnabledSet= this.trackingEnabledSet;
+			for (final TrackingConfiguration trackingConfig : trackingEnabledSet) {
+				final String id= trackingConfig.getId();
+				trackingIds.add(id);
+			}
+			configuration.setAttribute(TRACKING_ENABLED_IDS, trackingIds);
 		}
-		{	final Boolean enabled= this.objectDBAutoEnabledValue.getValue();
-			configuration.setAttribute(RConsoleLaunching.ATTR_OBJECTDB_AUTOREFRESH_ENABLED, enabled.booleanValue());
-		}
-		{	final Integer max= this.objectDBListsChildrenValue.getValue();
-			configuration.setAttribute(RConsoleLaunching.ATTR_OBJECTDB_LISTS_MAX_LENGTH, max.intValue());
-		}
-		{	final Integer max= this.objectDBEnvsChildrenValue.getValue();
-			configuration.setAttribute(RConsoleLaunching.ATTR_OBJECTDB_ENVS_MAX_LENGTH, max.intValue());
-		}
-		
-		final List<String> trackingIds= new ArrayList<>(this.trackingList.size());
-		
-		final List<TrackingConfiguration> trackingList= this.trackingList;
-		for (final TrackingConfiguration trackingConfig : trackingList) {
-			final String id= trackingConfig.getId();
-			trackingIds.add(id);
-			TRACKING_UTIL.save(trackingConfig, configuration);
-		}
-		configuration.setAttribute(TRACKING_IDS, trackingIds);
-		
-		final List<String> trackingEnabledIds= new ArrayList<>(this.trackingEnabledSet.size());
-		final Set<TrackingConfiguration> trackingEnabledSet= this.trackingEnabledSet;
-		for (final TrackingConfiguration trackingConfig : trackingEnabledSet) {
-			final String id= trackingConfig.getId();
-			trackingEnabledIds.add(id);
-		}
-		configuration.setAttribute(TRACKING_ENABLED_IDS, trackingEnabledIds);
 	}
 	
 }
diff --git a/r/org.eclipse.statet.r.console.ui/src/org/eclipse/statet/internal/r/console/ui/launching/RHistoryConfigurationComposite.java b/r/org.eclipse.statet.r.console.ui/src/org/eclipse/statet/internal/r/console/ui/launching/RHistoryConfigurationComposite.java
index f8e01c5..75691fc 100644
--- a/r/org.eclipse.statet.r.console.ui/src/org/eclipse/statet/internal/r/console/ui/launching/RHistoryConfigurationComposite.java
+++ b/r/org.eclipse.statet.r.console.ui/src/org/eclipse/statet/internal/r/console/ui/launching/RHistoryConfigurationComposite.java
@@ -14,8 +14,8 @@
 
 package org.eclipse.statet.internal.r.console.ui.launching;
 
-import org.eclipse.core.databinding.beans.BeanProperties;
-import org.eclipse.jface.databinding.swt.WidgetProperties;
+import org.eclipse.core.databinding.beans.typed.BeanProperties;
+import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.widgets.Button;
@@ -26,7 +26,7 @@
 import org.eclipse.statet.ecommons.ui.util.LayoutUtils;
 
 import org.eclipse.statet.nico.core.NicoVariables;
-import org.eclipse.statet.nico.core.util.TrackingConfiguration;
+import org.eclipse.statet.nico.core.util.HistoryTrackingConfiguration;
 
 
 public class RHistoryConfigurationComposite extends RTrackingConfigurationComposite {
@@ -71,9 +71,16 @@
 		super.addBindings(db);
 		
 		db.getContext().bindValue(
-				WidgetProperties.selection().observe(this.autoloadControl),
-				BeanProperties.value(TrackingConfiguration.class, "loadHistory")
+				WidgetProperties.buttonSelection()
+						.observe(this.autoloadControl),
+				BeanProperties.value(HistoryTrackingConfiguration.class, "loadHistory", Boolean.TYPE)
 						.observe(getInput()) );
 	}
 	
+	
+	@Override
+	public HistoryTrackingConfiguration getInput() {
+		return (HistoryTrackingConfiguration)super.getInput();
+	}
+	
 }
diff --git a/r/org.eclipse.statet.r.console.ui/src/org/eclipse/statet/internal/r/console/ui/launching/RRemoteConsoleMainTab.java b/r/org.eclipse.statet.r.console.ui/src/org/eclipse/statet/internal/r/console/ui/launching/RRemoteConsoleMainTab.java
index 22e8d8b..be8e357 100644
--- a/r/org.eclipse.statet.r.console.ui/src/org/eclipse/statet/internal/r/console/ui/launching/RRemoteConsoleMainTab.java
+++ b/r/org.eclipse.statet.r.console.ui/src/org/eclipse/statet/internal/r/console/ui/launching/RRemoteConsoleMainTab.java
@@ -48,7 +48,7 @@
 import org.eclipse.debug.core.ILaunchConfiguration;
 import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
 import org.eclipse.debug.ui.StringVariableSelectionDialog;
-import org.eclipse.jface.databinding.swt.WidgetProperties;
+import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
 import org.eclipse.jface.dialogs.Dialog;
 import org.eclipse.jface.preference.PreferenceDialog;
 import org.eclipse.swt.SWT;
@@ -70,7 +70,7 @@
 
 import org.eclipse.statet.jcommons.rmi.RMIAddress;
 
-import org.eclipse.statet.ecommons.databinding.IntegerValidator;
+import org.eclipse.statet.ecommons.databinding.core.validation.IntegerValidator;
 import org.eclipse.statet.ecommons.ui.components.WidgetToolsButton;
 import org.eclipse.statet.ecommons.ui.dialogs.DialogUtils;
 import org.eclipse.statet.ecommons.ui.util.LayoutUtils;
@@ -460,31 +460,40 @@
 		
 		final WritableValue<String> addressValue1= new WritableValue<>("", String.class); //$NON-NLS-1$
 		dbc.bindValue(
-				WidgetProperties.text(SWT.Modify).observe(this.addressControl),
+				WidgetProperties.text(SWT.Modify)
+						.observe(this.addressControl),
 				addressValue1 );
 		validator.observeValidatedValue(addressValue1);
-		dbc.bindValue(addressValue1, this.addressValue);
+		dbc.bindValue(
+				addressValue1,
+				this.addressValue );
 		
 		dbc.bindValue(
-				WidgetProperties.text(SWT.Modify).observe(this.usernameControl),
+				WidgetProperties.text(SWT.Modify)
+						.observe(this.usernameControl),
 				this.userValue );
 		
 		dbc.bindValue(
-				WidgetProperties.text(SWT.Modify).observe(this.sshPortControl),
+				WidgetProperties.text(SWT.Modify)
+						.observe(this.sshPortControl),
 				this.sshPortValue,
-				new UpdateValueStrategy().setAfterGetValidator(new IntegerValidator(0, 65535, true,
-						"Invalid SSH port number specified (0-65535)." )),
+				new UpdateValueStrategy<String, Integer>()
+						.setAfterGetValidator(new IntegerValidator(0, 65535, true,
+								"Invalid SSH port number specified (0-65535)." )),
 				null );
 		dbc.bindValue(
-				WidgetProperties.selection().observe(this.sshTunnelControl),
+				WidgetProperties.buttonSelection()
+						.observe(this.sshTunnelControl),
 				this.sshTunnelValue );
 		
 		dbc.bindValue(
-				WidgetProperties.text(SWT.Modify).observe(this.commandControl),
+				WidgetProperties.text(SWT.Modify)
+						.observe(this.commandControl),
 				this.commandValue );
 		
 		dbc.bindValue(
-				WidgetProperties.text(SWT.Modify).observe(this.sshAddress),
+				WidgetProperties.text(SWT.Modify)
+						.observe(this.sshAddress),
 				this.sshAddressValue );
 		
 		this.addressValue.addValueChangeListener(this.updateJob);
@@ -549,55 +558,25 @@
 	protected void doInitialize(final ILaunchConfiguration configuration) {
 		super.doInitialize(configuration);
 		
-		String address;
-		try {
-			address= configuration.getAttribute(RConsoleLaunching.ATTR_ADDRESS, ""); 
-		}
-		catch (final CoreException e) {
-			address= ""; 
-			logReadingError(e);
-		}
-		this.addressValue.setValue(address);
+		this.addressValue.setValue(readAttribute(configuration,
+				RConsoleLaunching.ATTR_ADDRESS,
+				"" )); //$NON-NLS-1$
 		
-		String user;
-		try {
-			user= configuration.getAttribute(RConsoleLaunching.ATTR_LOGIN_NAME, ""); 
-		}
-		catch (final CoreException e) {
-			user= ""; 
-			logReadingError(e);
-		}
-		this.userValue.setValue(user);
+		this.userValue.setValue(readAttribute(configuration,
+				RConsoleLaunching.ATTR_LOGIN_NAME,
+				"" )); //$NON-NLS-1$
 		
-		int port;
-		try {
-			port= configuration.getAttribute(RConsoleLaunching.ATTR_SSH_PORT, DEFAULT_SSH_PORT); 
-		}
-		catch (final CoreException e) {
-			port= DEFAULT_SSH_PORT;
-			logReadingError(e);
-		}
-		this.sshPortValue.setValue(port);
+		this.sshPortValue.setValue(readAttribute(configuration,
+				RConsoleLaunching.ATTR_SSH_PORT,
+				DEFAULT_SSH_PORT ));
 		
-		boolean tunnel;
-		try {
-			tunnel= configuration.getAttribute(RConsoleLaunching.ATTR_SSH_TUNNEL_ENABLED, false); 
-		}
-		catch (final CoreException e) {
-			tunnel= false;
-			logReadingError(e);
-		}
-		this.sshTunnelValue.setValue(tunnel);
+		this.sshTunnelValue.setValue(readAttribute(configuration,
+				RConsoleLaunching.ATTR_SSH_TUNNEL_ENABLED,
+				false ));
 		
-		String command;
-		try {
-			command= configuration.getAttribute(RConsoleLaunching.ATTR_COMMAND, ""); 
-		}
-		catch (final CoreException e) {
-			command= ""; 
-			logReadingError(e);
-		}
-		this.commandValue.setValue(command);
+		this.commandValue.setValue(readAttribute(configuration,
+				RConsoleLaunching.ATTR_COMMAND,
+				"" ));
 	}
 	
 	@Override
diff --git a/r/org.eclipse.statet.r.console.ui/src/org/eclipse/statet/internal/r/console/ui/launching/RTrackingConfigurationComposite.java b/r/org.eclipse.statet.r.console.ui/src/org/eclipse/statet/internal/r/console/ui/launching/RTrackingConfigurationComposite.java
index 2697201..e024da0 100644
--- a/r/org.eclipse.statet.r.console.ui/src/org/eclipse/statet/internal/r/console/ui/launching/RTrackingConfigurationComposite.java
+++ b/r/org.eclipse.statet.r.console.ui/src/org/eclipse/statet/internal/r/console/ui/launching/RTrackingConfigurationComposite.java
@@ -48,6 +48,7 @@
 				RWorkspace.ADDITIONAL_R_VARIABLES);
 	}
 	
+	
 	@Override
 	public void setInput(final TrackingConfiguration config) {
 		super.setInput(config);
diff --git a/r/org.eclipse.statet.r.console.ui/src/org/eclipse/statet/r/console/ui/tools/ChangeWorkingDirectoryWizard.java b/r/org.eclipse.statet.r.console.ui/src/org/eclipse/statet/r/console/ui/tools/ChangeWorkingDirectoryWizard.java
index c2e16f6..b1c5d39 100644
--- a/r/org.eclipse.statet.r.console.ui/src/org/eclipse/statet/r/console/ui/tools/ChangeWorkingDirectoryWizard.java
+++ b/r/org.eclipse.statet.r.console.ui/src/org/eclipse/statet/r/console/ui/tools/ChangeWorkingDirectoryWizard.java
@@ -138,8 +138,12 @@
 			
 			final Realm realm = Realm.getDefault();
 			fDbc = new DataBindingContext(realm);
-			fDbc.bindValue(fLocationGroup.getObservable(), fNewLocationString,
-					new UpdateValueStrategy().setAfterGetValidator(fLocationGroup.getValidator()), null);
+			fDbc.bindValue(
+					fLocationGroup.getObservable(),
+					fNewLocationString,
+					new UpdateValueStrategy<>()
+							.setAfterGetValidator(fLocationGroup.getValidator()),
+					null );
 			
 			WizardPageSupport.create(this, fDbc);
 		}
diff --git a/r/org.eclipse.statet.r.console.ui/src/org/eclipse/statet/r/console/ui/tools/REnvAutoUpdater.java b/r/org.eclipse.statet.r.console.ui/src/org/eclipse/statet/r/console/ui/tools/REnvAutoUpdater.java
index 8c49e41..4c7d930 100644
--- a/r/org.eclipse.statet.r.console.ui/src/org/eclipse/statet/r/console/ui/tools/REnvAutoUpdater.java
+++ b/r/org.eclipse.statet.r.console.ui/src/org/eclipse/statet/r/console/ui/tools/REnvAutoUpdater.java
@@ -27,7 +27,7 @@
 import org.eclipse.statet.jcommons.ts.core.SystemRunnable;
 import org.eclipse.statet.jcommons.ts.core.Tool;
 
-import org.eclipse.statet.ecommons.preferences.core.Preference.StringPref2;
+import org.eclipse.statet.ecommons.preferences.core.Preference.NullableStringPref;
 import org.eclipse.statet.ecommons.preferences.core.util.PreferenceUtils;
 import org.eclipse.statet.ecommons.ui.util.UIAccess;
 
@@ -116,7 +116,7 @@
 		if (rEnvConfig == null) {
 			return;
 		}
-		final StringPref2 pref= new StringPref2(
+		final NullableStringPref pref= new NullableStringPref(
 				IREnvManager.PREF_QUALIFIER + '/' + rEnvConfig.getREnv().getId(),
 				"CheckedR.version" ); //$NON-NLS-1$
 		final String s= PreferenceUtils.getInstancePrefs().getPreferenceValue(pref);
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/pkgmanager/RPkgManagerImpl.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/pkgmanager/RPkgManagerImpl.java
index 22f8b00..c5dffad 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/pkgmanager/RPkgManagerImpl.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/pkgmanager/RPkgManagerImpl.java
@@ -45,7 +45,7 @@
 import org.eclipse.statet.jcommons.ts.core.Tool;
 
 import org.eclipse.statet.ecommons.collections.FastList;
-import org.eclipse.statet.ecommons.preferences.core.Preference.StringPref2;
+import org.eclipse.statet.ecommons.preferences.core.Preference.NullableStringPref;
 import org.eclipse.statet.ecommons.preferences.core.PreferenceAccess;
 import org.eclipse.statet.ecommons.preferences.core.PreferenceSetService;
 import org.eclipse.statet.ecommons.preferences.core.PreferenceSetService.ChangeEvent;
@@ -129,7 +129,7 @@
 	private boolean firstTime;
 	
 	private String bioCVersion;
-	private final StringPref2 bioCVersionPref;
+	private final NullableStringPref bioCVersionPref;
 	
 	private List<RRepo> customRepos;
 	private final List<RRepo> addRepos;
@@ -190,7 +190,7 @@
 		final String qualifier= config.getPrefNodeQualifier();
 		this.selectedReposPref= new RRepoListPref(qualifier, "RPkg.Repos.repos"); //$NON-NLS-1$
 		this.selectedCRANPref= new RRepoPref(qualifier, "RPkg.CRANMirror.repo"); //$NON-NLS-1$
-		this.bioCVersionPref= new StringPref2(qualifier, "RPkg.BioCVersion.ver"); //$NON-NLS-1$
+		this.bioCVersionPref= new NullableStringPref(qualifier, "RPkg.BioCVersion.ver"); //$NON-NLS-1$
 		this.selectedBioCPref= new RRepoPref(qualifier, "RPkg.BioCMirror.repo"); //$NON-NLS-1$
 		
 		this.prefAccess= PreferenceUtils.getInstancePrefs();
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/renv/REnvConfigurationImpl.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/renv/REnvConfigurationImpl.java
index c3fa068..a94b3c0 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/renv/REnvConfigurationImpl.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/renv/REnvConfigurationImpl.java
@@ -56,7 +56,7 @@
 import org.eclipse.statet.ecommons.preferences.core.Preference.IntPref;
 import org.eclipse.statet.ecommons.preferences.core.Preference.StringArrayPref;
 import org.eclipse.statet.ecommons.preferences.core.Preference.StringPref;
-import org.eclipse.statet.ecommons.preferences.core.Preference.StringPref2;
+import org.eclipse.statet.ecommons.preferences.core.Preference.NullableStringPref;
 import org.eclipse.statet.ecommons.preferences.core.PreferenceAccess;
 import org.eclipse.statet.ecommons.preferences.core.util.PreferenceUtils;
 import org.eclipse.statet.ecommons.runtime.core.util.StatusUtils;
@@ -272,13 +272,13 @@
 	
 	private String rVersion;
 	
-	private StringPref2 prefRDocDirectory;
-	private StringPref2 prefRShareDirectory;
-	private StringPref2 prefRIncludeDirectory;
+	private NullableStringPref prefRDocDirectory;
+	private NullableStringPref prefRShareDirectory;
+	private NullableStringPref prefRIncludeDirectory;
 	
-	private StringPref2 prefStateSharedType;
-	private StringPref2 prefStateSharedDirectory;
-	private StringPref2 prefStateSharedServer;
+	private NullableStringPref prefStateSharedType;
+	private NullableStringPref prefStateSharedDirectory;
+	private NullableStringPref prefStateSharedServer;
 	
 	private Properties sharedProperties;
 	private final Object sharedPropertiesLock= new Object();
@@ -476,13 +476,13 @@
 			this.prefRHomeDirectory= new StringPref(this.nodeQualifier, PREFKEY_RHOME_DIR);
 			this.prefRArch= new StringPref(this.nodeQualifier, PREFKEY_SUBARCH);
 			this.prefRBits= new IntPref(this.nodeQualifier, PREFKEY_RBITS);
-			this.prefRDocDirectory= new StringPref2(this.nodeQualifier, PREFKEY_RDOC_DIR);
-			this.prefRShareDirectory= new StringPref2(this.nodeQualifier, PREFKEY_RSHARE_DIR);
-			this.prefRIncludeDirectory= new StringPref2(this.nodeQualifier, PREFKEY_RINCLUDE_DIR);
+			this.prefRDocDirectory= new NullableStringPref(this.nodeQualifier, PREFKEY_RDOC_DIR);
+			this.prefRShareDirectory= new NullableStringPref(this.nodeQualifier, PREFKEY_RSHARE_DIR);
+			this.prefRIncludeDirectory= new NullableStringPref(this.nodeQualifier, PREFKEY_RINCLUDE_DIR);
 		}
-		this.prefStateSharedType= new StringPref2(this.nodeQualifier, STATE_SHARED_TYPE_KEY);
-		this.prefStateSharedDirectory= new StringPref2(this.nodeQualifier, STATE_SHARED_DIRECTORY_PATH_KEY);
-		this.prefStateSharedServer= new StringPref2(this.nodeQualifier, STATE_SHARED_SERVER_URI_KEY);
+		this.prefStateSharedType= new NullableStringPref(this.nodeQualifier, STATE_SHARED_TYPE_KEY);
+		this.prefStateSharedDirectory= new NullableStringPref(this.nodeQualifier, STATE_SHARED_DIRECTORY_PATH_KEY);
+		this.prefStateSharedServer= new NullableStringPref(this.nodeQualifier, STATE_SHARED_SERVER_URI_KEY);
 	}
 	
 	void upgradePref() {
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/RCodeStyleSettings.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/RCodeStyleSettings.java
index ee4953c..48e3135 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/RCodeStyleSettings.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/RCodeStyleSettings.java
@@ -45,7 +45,8 @@
 			RCorePreferenceNodes.CAT_R_CODESTYLE_QUALIFIER, "Tab.size"); //$NON-NLS-1$
 	
 	public static final EnumPref<IndentationType> INDENT_DEFAULT_TYPE_PREF= new EnumPref<>(
-			RCorePreferenceNodes.CAT_R_CODESTYLE_QUALIFIER, "Indent.Default.type", IndentationType.class); //$NON-NLS-1$
+			RCorePreferenceNodes.CAT_R_CODESTYLE_QUALIFIER, "Indent.Default.type", IndentationType.class, //$NON-NLS-1$
+			IndentationType.TAB );
 	
 	public static final IntPref INDENT_SPACES_COUNT_PREF= new IntPref(
 			RCorePreferenceNodes.CAT_R_CODESTYLE_QUALIFIER, "Indent.Spaces.count"); //$NON-NLS-1$
@@ -137,7 +138,7 @@
 	@Override
 	public void loadDefaults() {
 		setTabSize(4);
-		setIndentDefaultType(IndentationType.TAB);
+		setIndentDefaultType(INDENT_DEFAULT_TYPE_PREF.store2Usage(null));
 		setIndentSpacesCount(4);
 		setIndentBlockDepth(1);
 		setIndentGroupDepth(1);
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/RProject.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/RProject.java
index d42a4bf..6dae63b 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/RProject.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/RProject.java
@@ -22,7 +22,7 @@
 import org.eclipse.statet.jcommons.lang.Nullable;
 
 import org.eclipse.statet.ecommons.preferences.core.Preference;
-import org.eclipse.statet.ecommons.preferences.core.Preference.StringPref2;
+import org.eclipse.statet.ecommons.preferences.core.Preference.NullableStringPref;
 import org.eclipse.statet.ecommons.preferences.core.PreferenceAccess;
 
 import org.eclipse.statet.internal.r.core.RProjectNature;
@@ -35,10 +35,10 @@
 	
 	String BUILD_PREF_QUALIFIER= RCore.BUNDLE_ID + "/build/RProject"; //$NON-NLS-1$
 	
-	Preference<@Nullable String> PKG_BASE_FOLDER_PATH_PREF= new StringPref2(BUILD_PREF_QUALIFIER,
+	Preference<@Nullable String> PKG_BASE_FOLDER_PATH_PREF= new NullableStringPref(BUILD_PREF_QUALIFIER,
 			RProjectNature.RPKG_ROOT_FOLDER_PATH_KEY );
 	
-	Preference<@Nullable String> RENV_CODE_PREF= new StringPref2(BUILD_PREF_QUALIFIER,
+	Preference<@Nullable String> RENV_CODE_PREF= new NullableStringPref(BUILD_PREF_QUALIFIER,
 			RProjectNature.RENV_CODE_KEY );
 	
 	
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rlang/RPkgNameValidator.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rlang/RPkgNameValidator.java
index ff203db..5fb686e 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rlang/RPkgNameValidator.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rlang/RPkgNameValidator.java
@@ -19,10 +19,13 @@
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.osgi.util.NLS;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
 import org.eclipse.statet.internal.r.core.Messages;
 
 
-public class RPkgNameValidator implements IValidator {
+@NonNullByDefault
+public class RPkgNameValidator implements IValidator<String> {
 	
 	
 	private static final String TRANSLATION_PREFIX= "Translation-"; //$NON-NLS-1$
@@ -48,8 +51,7 @@
 	
 	
 	@Override
-	public IStatus validate(final Object value) {
-		final String name= (String) value;
+	public IStatus validate(final String name) {
 		if (name == null || name.isEmpty()) {
 			if (this.required) {
 				return ValidationStatus.error(Messages.RPkgName_Validation_error_Empty_message);
diff --git a/r/org.eclipse.statet.r.debug.ui/src/org/eclipse/statet/internal/r/debug/ui/breakpoints/RLineBreakpointDetailEditor.java b/r/org.eclipse.statet.r.debug.ui/src/org/eclipse/statet/internal/r/debug/ui/breakpoints/RLineBreakpointDetailEditor.java
index cf1b103..34afb1b 100644
--- a/r/org.eclipse.statet.r.debug.ui/src/org/eclipse/statet/internal/r/debug/ui/breakpoints/RLineBreakpointDetailEditor.java
+++ b/r/org.eclipse.statet.r.debug.ui/src/org/eclipse/statet/internal/r/debug/ui/breakpoints/RLineBreakpointDetailEditor.java
@@ -19,7 +19,7 @@
 import org.eclipse.core.databinding.observable.value.IObservableValue;
 import org.eclipse.core.databinding.observable.value.WritableValue;
 import org.eclipse.core.runtime.CoreException;
-import org.eclipse.jface.databinding.swt.WidgetProperties;
+import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.widgets.Button;
@@ -90,13 +90,16 @@
 		this.conditionCodeValue= new WritableValue<>(realm, "", String.class);
 		
 		enableAutosave(dbc.bindValue(
-				WidgetProperties.selection().observe(this.conditionEnabledControl),
+				WidgetProperties.buttonSelection()
+						.observe(this.conditionEnabledControl),
 				this.conditionEnabledValue ));
 		dbc.bindValue(
-				WidgetProperties.text(SWT.Modify).observe(this.conditionCodeEditor.getTextControl()),
+				WidgetProperties.text(SWT.Modify)
+						.observe(this.conditionCodeEditor.getTextControl()),
 				this.conditionCodeValue );
 		dbc.bindValue(
-				WidgetProperties.enabled().observe(this.conditionCodeEditor.getTextControl()),
+				WidgetProperties.enabled()
+						.observe(this.conditionCodeEditor.getTextControl()),
 				this.conditionEnabledValue );
 	}
 	
diff --git a/r/org.eclipse.statet.r.debug.ui/src/org/eclipse/statet/internal/r/debug/ui/breakpoints/RMethodBreakpointDetailEditor.java b/r/org.eclipse.statet.r.debug.ui/src/org/eclipse/statet/internal/r/debug/ui/breakpoints/RMethodBreakpointDetailEditor.java
index 474dc71..f6d51a7 100644
--- a/r/org.eclipse.statet.r.debug.ui/src/org/eclipse/statet/internal/r/debug/ui/breakpoints/RMethodBreakpointDetailEditor.java
+++ b/r/org.eclipse.statet.r.debug.ui/src/org/eclipse/statet/internal/r/debug/ui/breakpoints/RMethodBreakpointDetailEditor.java
@@ -19,7 +19,7 @@
 import org.eclipse.core.databinding.observable.value.IObservableValue;
 import org.eclipse.core.databinding.observable.value.WritableValue;
 import org.eclipse.core.runtime.CoreException;
-import org.eclipse.jface.databinding.swt.WidgetProperties;
+import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.widgets.Button;
@@ -83,10 +83,12 @@
 		this.exitValue= new WritableValue<>(realm, Boolean.FALSE, Boolean.class);
 		
 		enableAutosave(dbc.bindValue(
-				WidgetProperties.selection().observe(this.entryControl),
+				WidgetProperties.buttonSelection()
+						.observe(this.entryControl),
 				this.entryValue ));
 		enableAutosave(dbc.bindValue(
-				WidgetProperties.selection().observe(this.exitControl),
+				WidgetProperties.buttonSelection()
+						.observe(this.exitControl),
 				this.exitValue ));
 	}
 	
diff --git a/r/org.eclipse.statet.r.debug.ui/src/org/eclipse/statet/internal/r/debug/ui/sourcelookup/RLibrarySourceContainerBrowser.java b/r/org.eclipse.statet.r.debug.ui/src/org/eclipse/statet/internal/r/debug/ui/sourcelookup/RLibrarySourceContainerBrowser.java
index 9d30991..b33d988 100644
--- a/r/org.eclipse.statet.r.debug.ui/src/org/eclipse/statet/internal/r/debug/ui/sourcelookup/RLibrarySourceContainerBrowser.java
+++ b/r/org.eclipse.statet.r.debug.ui/src/org/eclipse/statet/internal/r/debug/ui/sourcelookup/RLibrarySourceContainerBrowser.java
@@ -87,8 +87,12 @@
 		
 		@Override
 		protected void addBindings(final DataBindingSupport db) {
-			db.getContext().bindValue(this.resourceControl.getObservable(), this.resourceValue,
-					new UpdateValueStrategy().setAfterGetValidator(this.resourceControl.getValidator()), null);
+			db.getContext().bindValue(
+					this.resourceControl.getObservable(),
+					this.resourceValue,
+					new UpdateValueStrategy<String, String>()
+							.setAfterGetValidator(this.resourceControl.getValidator()),
+					null );
 		}
 		
 		public String getResult() {
diff --git a/r/org.eclipse.statet.r.ui/META-INF/MANIFEST.MF b/r/org.eclipse.statet.r.ui/META-INF/MANIFEST.MF
index e4225f6..a7e3204 100644
--- a/r/org.eclipse.statet.r.ui/META-INF/MANIFEST.MF
+++ b/r/org.eclipse.statet.r.ui/META-INF/MANIFEST.MF
@@ -50,7 +50,6 @@
  org.eclipse.statet.ecommons.databinding,
  org.eclipse.statet.ecommons.databinding.core.util;version="4.1.0",
  org.eclipse.statet.ecommons.databinding.core.validation;version="4.1.0",
- org.eclipse.statet.ecommons.databinding.core.workspace,
  org.eclipse.statet.ecommons.debug.core.util,
  org.eclipse.statet.ecommons.graphics.core,
  org.eclipse.statet.ecommons.io,
@@ -58,6 +57,7 @@
  org.eclipse.statet.ecommons.models.core.util,
  org.eclipse.statet.ecommons.preferences,
  org.eclipse.statet.ecommons.resources.core,
+ org.eclipse.statet.ecommons.resources.core.util,
  org.eclipse.statet.ecommons.variables.core,
  org.eclipse.statet.jcommons.collections;version="4.1.0",
  org.eclipse.statet.jcommons.lang;version="4.1.0",
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/REnvSelectionComposite.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/REnvSelectionComposite.java
index 50befbc..3b9093e 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/REnvSelectionComposite.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/REnvSelectionComposite.java
@@ -115,7 +115,7 @@
 		
 	}
 	
-	private class ChooseREnvValidator implements IValidator {
+	private class ChooseREnvValidator implements IValidator<Object> {
 		
 		@Override
 		public IStatus validate(final Object dummy) {
@@ -415,7 +415,7 @@
 		return new CompositeObservable(realm);
 	}
 	
-	public ChooseREnvValidator createValidator(final DataBindingContext context) {
+	public IValidator<Object> createValidator(final DataBindingContext context) {
 		this.bindindContext= context;
 		return new ChooseREnvValidator();
 	}
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/RProjectPropertyPage.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/RProjectPropertyPage.java
index 5ff76fb..ea3996d 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/RProjectPropertyPage.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/RProjectPropertyPage.java
@@ -271,8 +271,8 @@
 		db.getContext().bindValue(
 				this.rEnvControl.createObservable(Realm.getDefault()),
 				createObservable(RProject.RENV_CODE_PREF),
-				new UpdateValueStrategy().setAfterGetValidator(
-						this.rEnvControl.createValidator(db.getContext()) ),
+				new UpdateValueStrategy<String, String>()
+						.setAfterGetValidator(this.rEnvControl.createValidator(db.getContext())),
 				null );
 		
 		this.sourceFolders.bind(db);
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/dataeditor/GotoCellDialog.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/dataeditor/GotoCellDialog.java
index e25382a..65e27d1 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/dataeditor/GotoCellDialog.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/dataeditor/GotoCellDialog.java
@@ -20,7 +20,7 @@
 import org.eclipse.core.databinding.UpdateValueStrategy;
 import org.eclipse.core.databinding.observable.value.IObservableValue;
 import org.eclipse.core.databinding.observable.value.WritableValue;
-import org.eclipse.jface.databinding.swt.WidgetProperties;
+import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.widgets.Composite;
@@ -28,7 +28,7 @@
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Text;
 
-import org.eclipse.statet.ecommons.databinding.LongValidator;
+import org.eclipse.statet.ecommons.databinding.core.validation.LongValidator;
 import org.eclipse.statet.ecommons.databinding.jface.DataBindingSupport;
 import org.eclipse.statet.ecommons.ui.dialogs.ExtStatusDialog;
 import org.eclipse.statet.ecommons.ui.util.LayoutUtils;
@@ -107,11 +107,13 @@
 		for (final Orientation orientation : Orientation.values()) {
 			final LRange lRange= this.indexRanges[orientation.ordinal()];
 			db.getContext().bindValue(
-					WidgetProperties.text(SWT.Modify).observe(this.indexControls[orientation.ordinal()]),
+					WidgetProperties.text(SWT.Modify)
+							.observe(this.indexControls[orientation.ordinal()]),
 					this.indexValues[orientation.ordinal()],
-					new UpdateValueStrategy().setAfterGetValidator(new LongValidator(
-							(lRange.start + 1), lRange.end,
-							"Invalid " + getLabel(orientation) + " index (" + (lRange.start + 1) + "\u2013" + lRange.end + ").")),
+					new UpdateValueStrategy()
+							.setAfterGetValidator(new LongValidator(
+									(lRange.start + 1), lRange.end,
+									"Invalid " + getLabel(orientation) + " index (" + (lRange.start + 1) + "\u2013" + lRange.end + ").")),
 					null );
 			this.indexControls[orientation.ordinal()].selectAll();
 		}
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/datafilter/LevelVariableFilter.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/datafilter/LevelVariableFilter.java
index f8c44a1..407b708 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/datafilter/LevelVariableFilter.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/datafilter/LevelVariableFilter.java
@@ -37,7 +37,7 @@
 	
 	private RStore availableValues;
 	
-	private final IObservableSet selectedValues;
+	private final IObservableSet<Object> selectedValues;
 	
 	
 	public LevelVariableFilter(final FilterSet set, final RDataTableColumn column) {
@@ -66,7 +66,7 @@
 			});
 		}
 		else if (filter.getType() == FilterType.TEXT) {
-			final TextVariableFilter textFilter= (TextVariableFilter) filter;
+			final TextVariableFilter textFilter= (TextVariableFilter)filter;
 			runInRealm(new Runnable() {
 				@Override
 				public void run() {
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/datafilter/TextVariableFilter.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/datafilter/TextVariableFilter.java
index 6bbac9a..3dec2fc 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/datafilter/TextVariableFilter.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/datafilter/TextVariableFilter.java
@@ -19,6 +19,7 @@
 import org.eclipse.core.databinding.observable.set.IObservableSet;
 import org.eclipse.core.databinding.observable.set.WritableSet;
 
+import org.eclipse.statet.jcommons.lang.Nullable;
 import org.eclipse.statet.jcommons.status.ProgressMonitor;
 import org.eclipse.statet.jcommons.status.StatusException;
 
@@ -40,7 +41,7 @@
 	
 	private RCharacter32Store availableValues;
 	
-	private final IObservableSet selectedValues;
+	private final IObservableSet<@Nullable String> selectedValues;
 	
 	
 	public TextVariableFilter(final FilterSet set, final RDataTableColumn column) {
@@ -180,7 +181,7 @@
 		return this.availableValues;
 	}
 	
-	public IObservableSet getSelectedValues() {
+	public IObservableSet<@Nullable String> getSelectedValues() {
 		return this.selectedValues;
 	}
 	
@@ -189,7 +190,7 @@
 		this.selectedValues.clear();
 	}
 	
-	public void removeValues(final Collection<String> values) {
+	public void removeValues(final Collection<@Nullable String> values) {
 		if (values.isEmpty()) {
 			return;
 		}
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/datafilterview/ConverterValidator.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/datafilterview/ConverterValidator.java
deleted file mode 100644
index a58b4db..0000000
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/datafilterview/ConverterValidator.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*=============================================================================#
- # Copyright (c) 2012, 2019 Stephan Wahlbrink and others.
- # 
- # This program and the accompanying materials are made available under the
- # terms of the Eclipse Public License 2.0 which is available at
- # https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
- # which is available at https://www.apache.org/licenses/LICENSE-2.0.
- # 
- # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
- # 
- # Contributors:
- #     Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
- #=============================================================================*/
-
-package org.eclipse.statet.internal.r.ui.datafilterview;
-
-import org.eclipse.core.databinding.conversion.IConverter;
-import org.eclipse.core.databinding.validation.IValidator;
-import org.eclipse.core.databinding.validation.ValidationStatus;
-import org.eclipse.core.runtime.IStatus;
-
-
-public class ConverterValidator implements IValidator {
-	
-	
-	private final IConverter converter;
-	
-	
-	public ConverterValidator(final IConverter converter) {
-		this.converter= converter;
-	}
-	
-	
-	@Override
-	public IStatus validate(final Object value) {
-		try {
-			this.converter.convert(value);
-			return ValidationStatus.ok();
-		}
-		catch (final IllegalArgumentException e) {
-			return ValidationStatus.error(e.getLocalizedMessage());
-		}
-	}
-	
-}
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/datafilterview/Int2TextConverter.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/datafilterview/Int2TextConverter.java
index f81b7c7..f2008b3 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/datafilterview/Int2TextConverter.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/datafilterview/Int2TextConverter.java
@@ -14,10 +14,13 @@
 
 package org.eclipse.statet.internal.r.ui.datafilterview;
 
-import org.eclipse.core.databinding.conversion.IConverter;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
+import org.eclipse.statet.ecommons.databinding.core.conversion.ClassTypedConverter;
 
 
-public class Int2TextConverter implements IConverter {
+@NonNullByDefault
+public class Int2TextConverter implements ClassTypedConverter<Integer, String> {
 	
 	
 	public Int2TextConverter() {
@@ -25,18 +28,18 @@
 	
 	
 	@Override
-	public Object getFromType() {
+	public Class<Integer> getFromType() {
 		return Integer.TYPE;
 	}
 	
 	@Override
-	public Object getToType() {
+	public Class<String> getToType() {
 		return String.class;
 	}
 	
 	@Override
-	public Object convert(final Object fromObject) {
-		return ((Integer) fromObject).toString();
+	public String convert(final Integer fromObject) {
+		return fromObject.toString();
 	}
 	
 }
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/datafilterview/IntervalClient.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/datafilterview/IntervalClient.java
index 39a9483..f86ce7e 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/datafilterview/IntervalClient.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/datafilterview/IntervalClient.java
@@ -19,7 +19,7 @@
 import static org.eclipse.statet.internal.r.ui.datafilter.IntervalVariableFilter.NA_IDX;
 
 import org.eclipse.core.databinding.conversion.IConverter;
-import org.eclipse.jface.databinding.swt.WidgetProperties;
+import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
 import org.eclipse.jface.resource.JFaceResources;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.layout.GridData;
@@ -99,8 +99,8 @@
 	@Override
 	protected void addBindings(final DataBindingSupport db) {
 		if (this.filter.getColumn().getDataStore().getStoreType() == RStore.NUMERIC) {
-			final IConverter text2value= new Text2NumConverter();
-			final IConverter value2text= new Num2TextConverter();
+			final IConverter<String, Double> text2value= new Text2NumConverter();
+			final IConverter<Double, String> value2text= new Num2TextConverter();
 //			{	RDataFormatter colFormatter= this.filter.getColumn().getDefaultFormat();
 //				if (colFormatter != null && colFormatter.hasNumFormat()) {
 //					RDataFormatter textFormatter= new RDataFormatter();
@@ -112,26 +112,31 @@
 			final IntValue2Double2TextBinding.LowerUpperGroup group= new IntValue2Double2TextBinding.LowerUpperGroup(
 					this.scaleControl, this.lowerBoundControl, this.upperBoundControl,
 					db.getRealm(), value2text, text2value );
-			db.getContext().bindValue(group.getLower(),
+			db.getContext().bindValue(
+					group.getLower(),
 					this.filter.getSelectedLowerValue() );
-			db.getContext().bindValue(group.getUpper(),
+			db.getContext().bindValue(
+					group.getUpper(),
 					this.filter.getSelectedUpperValue() );
 			this.lowerUpperGroup= group;
 		}
 		else {
-			final IConverter text2value= new Text2IntConverter();
-			final IConverter value2text= new Int2TextConverter();
+			final IConverter<String, Integer> text2value= new Text2IntConverter();
+			final IConverter<Integer, String> value2text= new Int2TextConverter();
 			final IntValue2TextBinding.LowerUpperGroup group= new IntValue2TextBinding.LowerUpperGroup(
 					this.scaleControl, this.lowerBoundControl, this.upperBoundControl,
 					db.getRealm(), value2text, text2value );
-			db.getContext().bindValue(group.getLower(),
+			db.getContext().bindValue(
+					group.getLower(),
 					this.filter.getSelectedLowerValue() );
-			db.getContext().bindValue(group.getUpper(),
+			db.getContext().bindValue(
+					group.getUpper(),
 					this.filter.getSelectedUpperValue() );
 			this.lowerUpperGroup= group;
 		}
 		db.getContext().bindValue(
-				WidgetProperties.selection().observe(this.NAControl),
+				WidgetProperties.buttonSelection()
+						.observe(this.NAControl),
 				this.filter.getSelectedNA() );
 	}
 	
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/datafilterview/LevelClient.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/datafilterview/LevelClient.java
index 823da5b..bc57cdd 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/datafilterview/LevelClient.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/datafilterview/LevelClient.java
@@ -18,8 +18,9 @@
 import org.eclipse.core.databinding.UpdateSetStrategy;
 import org.eclipse.core.databinding.observable.set.IObservableSet;
 import org.eclipse.jface.action.MenuManager;
-import org.eclipse.jface.databinding.viewers.ViewersObservables;
+import org.eclipse.jface.databinding.viewers.typed.ViewerProperties;
 import org.eclipse.jface.viewers.CheckboxTableViewer;
+import org.eclipse.jface.viewers.ICheckable;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.ui.menus.CommandContributionItemParameter;
@@ -40,7 +41,7 @@
 	
 	private CheckboxTableViewer valueListViewer;
 	
-	private final IObservableSet<?> selectedValues;
+	private final IObservableSet<Object> selectedValues;
 	
 	private RStore availableValues;
 	
@@ -105,10 +106,13 @@
 	@Override
 	protected void addBindings(final DataBindingSupport db) {
 		db.getContext().bindSet(
-				ViewersObservables.observeCheckedElements(this.valueListViewer, Object.class),
+				ViewerProperties.checkedElements(Object.class)
+						.observe((ICheckable)this.valueListViewer),
 				this.selectedValues,
-				new UpdateSetStrategy().setConverter(UI2RStoreConverter.INSTANCE),
-				new UpdateSetStrategy().setConverter(RStore2UIConverter.INSTANCE) );
+				new UpdateSetStrategy<>()
+						.setConverter(new UI2RStoreConverter<>()),
+				new UpdateSetStrategy<>()
+						.setConverter(new RStore2UIConverter<>()) );
 	}
 	
 	@Override
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/datafilterview/Num2TextConverter.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/datafilterview/Num2TextConverter.java
index c4000a4..82a2678 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/datafilterview/Num2TextConverter.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/datafilterview/Num2TextConverter.java
@@ -14,10 +14,13 @@
 
 package org.eclipse.statet.internal.r.ui.datafilterview;
 
-import org.eclipse.core.databinding.conversion.IConverter;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
+import org.eclipse.statet.ecommons.databinding.core.conversion.ClassTypedConverter;
 
 
-public class Num2TextConverter implements IConverter {
+@NonNullByDefault
+public class Num2TextConverter implements ClassTypedConverter<Double, String> {
 	
 	
 	public Num2TextConverter() {
@@ -25,18 +28,18 @@
 	
 	
 	@Override
-	public Object getFromType() {
+	public Class<Double> getFromType() {
 		return Double.TYPE;
 	}
 	
 	@Override
-	public Object getToType() {
+	public Class<String> getToType() {
 		return String.class;
 	}
 	
 	@Override
-	public Object convert(final Object fromObject) {
-		return ((Double) fromObject).toString();
+	public String convert(final Double fromObject) {
+		return fromObject.toString();
 	}
 	
 }
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/datafilterview/RDataFormatterConverter.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/datafilterview/RDataFormatterConverter.java
index 65dcbd3..04d0f3c 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/datafilterview/RDataFormatterConverter.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/datafilterview/RDataFormatterConverter.java
@@ -14,37 +14,45 @@
 
 package org.eclipse.statet.internal.r.ui.datafilterview;
 
-import org.eclipse.core.databinding.conversion.IConverter;
+import static org.eclipse.statet.jcommons.lang.NullDefaultLocation.FIELD;
+import static org.eclipse.statet.jcommons.lang.NullDefaultLocation.PARAMETER;
+import static org.eclipse.statet.jcommons.lang.NullDefaultLocation.RETURN_TYPE;
+
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
+import org.eclipse.statet.ecommons.databinding.core.conversion.ClassTypedConverter;
 
 import org.eclipse.statet.internal.r.ui.dataeditor.RDataFormatter;
 
 
-public class RDataFormatterConverter implements IConverter {
+@NonNullByDefault({ RETURN_TYPE, FIELD })
+public class RDataFormatterConverter<S> implements ClassTypedConverter<S, String> {
 	
 	
-	private final Class fromType;
+	private final Class<S> fromType;
 	
 	private final RDataFormatter formatter;
 	
 	
-	public RDataFormatterConverter(final Class fromType, final RDataFormatter formatter) {
+	@NonNullByDefault({ PARAMETER })
+	public RDataFormatterConverter(final Class<S> fromType, final RDataFormatter formatter) {
 		this.fromType= fromType;
 		this.formatter= formatter;
 	}
 	
 	
 	@Override
-	public Object getFromType() {
+	public Class<S> getFromType() {
 		return this.fromType;
 	}
-
+	
 	@Override
-	public Object getToType() {
+	public Class<String> getToType() {
 		return String.class;
 	}
-
+	
 	@Override
-	public Object convert(final Object fromObject) {
+	public String convert(final S fromObject) {
 		return this.formatter.modelToDisplayValue(fromObject).toString();
 	}
 	
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/datafilterview/RStore2UIConverter.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/datafilterview/RStore2UIConverter.java
index a36aa35..ce31611 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/datafilterview/RStore2UIConverter.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/datafilterview/RStore2UIConverter.java
@@ -16,16 +16,17 @@
 
 import org.eclipse.core.databinding.conversion.IConverter;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 import org.eclipse.statet.internal.r.ui.dataeditor.AbstractRDataProvider;
 
 
-public class RStore2UIConverter implements IConverter {
+@NonNullByDefault
+public class RStore2UIConverter<S> implements IConverter<@Nullable S, Object> {
 	
 	
-	public static final IConverter INSTANCE= new RStore2UIConverter();
-	
-	
-	private RStore2UIConverter() {
+	public RStore2UIConverter() {
 	}
 	
 	
@@ -40,7 +41,7 @@
 	}
 	
 	@Override
-	public Object convert(final Object fromObject) {
+	public Object convert(final @Nullable S fromObject) {
 		if (fromObject == null) {
 			return AbstractRDataProvider.NA;
 		}
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/datafilterview/Text2IntConverter.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/datafilterview/Text2IntConverter.java
index af6fcf2..f7526d4 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/datafilterview/Text2IntConverter.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/datafilterview/Text2IntConverter.java
@@ -14,10 +14,13 @@
 
 package org.eclipse.statet.internal.r.ui.datafilterview;
 
-import org.eclipse.core.databinding.conversion.IConverter;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
+import org.eclipse.statet.ecommons.databinding.core.conversion.ClassTypedConverter;
 
 
-public class Text2IntConverter implements IConverter {
+@NonNullByDefault
+public class Text2IntConverter implements ClassTypedConverter<String, Integer> {
 	
 	
 	public Text2IntConverter() {
@@ -25,22 +28,22 @@
 	
 	
 	@Override
-	public Object getFromType() {
+	public Class<String> getFromType() {
 		return String.class;
 	}
 	
 	@Override
-	public Object getToType() {
+	public Class<Integer> getToType() {
 		return Integer.TYPE;
 	}
 	
 	@Override
-	public Object convert(final Object fromObject) {
-		String s= (String) fromObject;
+	public Integer convert(final String fromObject) {
+		String s= fromObject;
 		if (s == null || (s= s.trim()).length() == 0) {
 			throw new IllegalArgumentException();
 		}
-		if (s.charAt(s.length()-1) == 'L') {
+		if (s.charAt(s.length() - 1) == 'L') {
 			s= s.substring(0, s.length()-1);
 		}
 		if (s.startsWith("0x")) { //$NON-NLS-1$
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/datafilterview/Text2NumConverter.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/datafilterview/Text2NumConverter.java
index 5e85c17..f431639 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/datafilterview/Text2NumConverter.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/datafilterview/Text2NumConverter.java
@@ -14,10 +14,13 @@
 
 package org.eclipse.statet.internal.r.ui.datafilterview;
 
-import org.eclipse.core.databinding.conversion.IConverter;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
+import org.eclipse.statet.ecommons.databinding.core.conversion.ClassTypedConverter;
 
 
-public class Text2NumConverter implements IConverter {
+@NonNullByDefault
+public class Text2NumConverter implements ClassTypedConverter<String, Double> {
 	
 	
 	public Text2NumConverter() {
@@ -25,27 +28,27 @@
 	
 	
 	@Override
-	public Object getFromType() {
+	public Class<String> getFromType() {
 		return String.class;
 	}
 	
 	@Override
-	public Object getToType() {
+	public Class<Double> getToType() {
 		return Double.TYPE;
 	}
 	
 	@Override
-	public Object convert(final Object fromObject) {
-		String s= (String) fromObject;
+	public Double convert(final String fromObject) {
+		String s= fromObject;
 		if (s == null || (s= s.trim()).length() == 0) {
 			throw new IllegalArgumentException();
 		}
-		if (s.charAt(s.length()-1) == 'f') {
+		if (s.charAt(s.length() - 1) == 'f') {
 			if (s.endsWith("Inf")) { //$NON-NLS-1$
-				s= s.substring(0, s.length()-3) + "Infinity"; //$NON-NLS-1$
+				s= s.substring(0, s.length() - 3) + "Infinity"; //$NON-NLS-1$
 			}
 			else {
-				s= s.substring(0, s.length()-1);
+				s= s.substring(0, s.length() - 1);
 			}
 		}
 		return Double.parseDouble(s);
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/datafilterview/TextClient.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/datafilterview/TextClient.java
index 02b9b30..fd6bd09 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/datafilterview/TextClient.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/datafilterview/TextClient.java
@@ -26,8 +26,9 @@
 import org.eclipse.core.databinding.observable.set.IObservableSet;
 import org.eclipse.jface.action.MenuManager;
 import org.eclipse.jface.action.Separator;
-import org.eclipse.jface.databinding.viewers.ViewersObservables;
+import org.eclipse.jface.databinding.viewers.typed.ViewerProperties;
 import org.eclipse.jface.viewers.CheckboxTableViewer;
+import org.eclipse.jface.viewers.ICheckable;
 import org.eclipse.jface.viewers.ISelectionChangedListener;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.SelectionChangedEvent;
@@ -46,6 +47,8 @@
 import org.eclipse.ui.menus.UIElement;
 import org.eclipse.ui.services.IServiceLocator;
 
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 import org.eclipse.statet.ecommons.databinding.jface.DataBindingSupport;
 import org.eclipse.statet.ecommons.ui.actions.ControlServicesUtil;
 import org.eclipse.statet.ecommons.ui.actions.HandlerCollection;
@@ -144,7 +147,7 @@
 	
 	private RCharacterStore availableValues;
 	
-	private final IObservableSet<?> selectedValueSet;
+	private final IObservableSet<@Nullable String> selectedValueSet;
 	
 	private final HandlerCollection valueListHandlers= new HandlerCollection();
 	private MenuManager valueListMenuManager;
@@ -287,10 +290,13 @@
 	@Override
 	protected void addBindings(final DataBindingSupport db) {
 		db.getContext().bindSet(
-				ViewersObservables.observeCheckedElements(this.valueListViewer, Object.class),
+				ViewerProperties.checkedElements(Object.class)
+						.observe((ICheckable)this.valueListViewer),
 				this.selectedValueSet,
-				new UpdateSetStrategy().setConverter(UI2RStoreConverter.INSTANCE),
-				new UpdateSetStrategy().setConverter(RStore2UIConverter.INSTANCE) );
+				new UpdateSetStrategy<Object, @Nullable String>()
+						.setConverter(new UI2RStoreConverter<String>()),
+				new UpdateSetStrategy<@Nullable String, Object>()
+						.setConverter(new RStore2UIConverter<String>()) );
 	}
 	
 	@Override
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/datafilterview/UI2RStoreConverter.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/datafilterview/UI2RStoreConverter.java
index a869f97..875b13b 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/datafilterview/UI2RStoreConverter.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/datafilterview/UI2RStoreConverter.java
@@ -16,16 +16,17 @@
 
 import org.eclipse.core.databinding.conversion.IConverter;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 import org.eclipse.statet.internal.r.ui.dataeditor.AbstractRDataProvider;
 
 
-public class UI2RStoreConverter implements IConverter {
+@NonNullByDefault
+public class UI2RStoreConverter<D> implements IConverter<Object, @Nullable D> {
 	
 	
-	public static final IConverter INSTANCE= new UI2RStoreConverter();
-	
-	
-	private UI2RStoreConverter() {
+	public UI2RStoreConverter() {
 	}
 	
 	
@@ -40,11 +41,11 @@
 	}
 	
 	@Override
-	public Object convert(final Object fromObject) {
+	public @Nullable D convert(final Object fromObject) {
 		if (fromObject == AbstractRDataProvider.NA) {
 			return null;
 		}
-		return fromObject;
+		return (D)fromObject;
 	}
 	
 }
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/DefaultRFoldingPreferences.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/DefaultRFoldingPreferences.java
index eec2f90..7088574 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/DefaultRFoldingPreferences.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/DefaultRFoldingPreferences.java
@@ -16,6 +16,8 @@
 
 import org.eclipse.core.runtime.preferences.IScopeContext;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
 import org.eclipse.statet.ecommons.preferences.core.Preference.BooleanPref;
 import org.eclipse.statet.ecommons.preferences.core.Preference.IntPref;
 import org.eclipse.statet.ecommons.preferences.core.util.PreferenceUtils;
@@ -27,6 +29,7 @@
 /**
  * Preferences for {@link RDefaultFoldingProvider}
  */
+@NonNullByDefault
 public class DefaultRFoldingPreferences {
 	
 	public static final String GROUP_ID = "r.editor/folding/default"; //$NON-NLS-1$
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/graphics/StatetRGraphicCopyToDevWizard.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/graphics/StatetRGraphicCopyToDevWizard.java
index e47916a..abbcf06 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/graphics/StatetRGraphicCopyToDevWizard.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/graphics/StatetRGraphicCopyToDevWizard.java
@@ -25,7 +25,7 @@
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
-import org.eclipse.jface.databinding.swt.WidgetProperties;
+import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
 import org.eclipse.jface.databinding.wizard.WizardPageSupport;
 import org.eclipse.jface.dialogs.Dialog;
 import org.eclipse.jface.dialogs.IDialogSettings;
@@ -153,10 +153,12 @@
 			this.dbc.bindValue(
 					this.locationGroup.getObservable(),
 					this.newLocationValue,
-					new UpdateValueStrategy().setAfterGetValidator(this.locationGroup.getValidator()),
+					new UpdateValueStrategy<String, String>()
+							.setAfterGetValidator(this.locationGroup.getValidator()),
 					null );
 			this.dbc.bindValue(
-					WidgetProperties.selection().observe(this.openFileControl),
+					WidgetProperties.buttonSelection()
+							.observe(this.openFileControl),
 					this.openFileValue );
 			this.openFileValue.setValue(getDialogSettings().getBoolean(SETTINGS_OPEN + this.settingType));
 			
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/pkgmanager/InstallPkgFileWizard.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/pkgmanager/InstallPkgFileWizard.java
index ad71c01..1eff220 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/pkgmanager/InstallPkgFileWizard.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/pkgmanager/InstallPkgFileWizard.java
@@ -27,7 +27,7 @@
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
-import org.eclipse.jface.databinding.viewers.ViewersObservables;
+import org.eclipse.jface.databinding.viewers.typed.ViewerProperties;
 import org.eclipse.jface.databinding.wizard.WizardPageSupport;
 import org.eclipse.jface.dialogs.Dialog;
 import org.eclipse.jface.dialogs.IDialogSettings;
@@ -137,18 +137,19 @@
 		
 		protected void addBindings(final DataBindingSupport databinding) {
 			this.fileControl.getValidator().setOnNotLocal(IStatus.OK);
-			this.fileControl.getValidator().setFileStoreValidator(
-					(final Object value) -> {
-						final IFileStore store= (IFileStore) value;
+			this.fileControl.getValidator().setFileStoreValidator((final IFileStore store) -> {
 						if (store.getName().indexOf('_') < 0
 								|| RPkgUtils.getPkgType(store.getName(), InstallPkgFileWizard.this.pkgManager.getRPlatform()) == null ) {
 							return ValidationStatus.error("File name must follow the pattern '<package_name>_<version>.<ext>'.");
 						}
 						validateType();
 						return ValidationStatus.ok();
-					} );
-			databinding.getContext().bindValue(this.fileControl.getObservable(), this.fileValue,
-					new UpdateValueStrategy().setAfterGetValidator(this.fileControl.getValidator()),
+					});
+			databinding.getContext().bindValue(
+					this.fileControl.getObservable(),
+					this.fileValue,
+					new UpdateValueStrategy<String, String>()
+							.setAfterGetValidator(this.fileControl.getValidator()),
 					null );
 			
 			this.fileControl.getTextControl().addListener(SWT.Modify, new Listener() {
@@ -159,9 +160,11 @@
 			});
 			
 			databinding.getContext().bindValue(
-					ViewersObservables.observeSingleSelection(this.targetControl.getSelectionViewer()),
+					ViewerProperties.singleSelection(Object.class)
+							.observe(this.targetControl.getSelectionViewer()),
 					this.targetValue,
-					new UpdateValueStrategy().setAfterGetValidator(this.targetControl.getValidator()),
+					new UpdateValueStrategy<Object, RLibLocation>()
+							.setAfterGetValidator(this.targetControl.getValidator()),
 					null );
 		}
 		
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/pkgmanager/InstallPkgsWizard.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/pkgmanager/InstallPkgsWizard.java
index 39484c7..1c5cfe4 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/pkgmanager/InstallPkgsWizard.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/pkgmanager/InstallPkgsWizard.java
@@ -22,8 +22,8 @@
 import org.eclipse.core.databinding.observable.value.WritableValue;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
-import org.eclipse.jface.databinding.swt.WidgetProperties;
-import org.eclipse.jface.databinding.viewers.ViewersObservables;
+import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
+import org.eclipse.jface.databinding.viewers.typed.ViewerProperties;
 import org.eclipse.jface.databinding.wizard.WizardPageSupport;
 import org.eclipse.jface.dialogs.Dialog;
 import org.eclipse.jface.operation.IRunnableWithProgress;
@@ -117,16 +117,17 @@
 			if (this.sameTargetControl != null) {
 				this.sameTargetValue= new WritableValue<>(databinding.getRealm(), Boolean.FALSE, Boolean.class);
 				databinding.getContext().bindValue(
-						WidgetProperties.selection().observe(this.sameTargetControl),
-						this.sameTargetValue,
-						null,
-						null );
+						WidgetProperties.buttonSelection()
+								.observe(this.sameTargetControl),
+						this.sameTargetValue );
 			}
 			this.targetLibraryValue= new WritableValue<>(databinding.getRealm(), null, RLibLocation.class);
 			databinding.getContext().bindValue(
-					ViewersObservables.observeSingleSelection(this.selectTargetControl.getSelectionViewer()),
+					ViewerProperties.singleSelection(Object.class)
+							.observe(this.selectTargetControl.getSelectionViewer()),
 					this.targetLibraryValue,
-					new UpdateValueStrategy().setAfterGetValidator(this.selectTargetControl.getValidator()),
+					new UpdateValueStrategy<Object, RLibLocation>()
+							.setAfterGetValidator(this.selectTargetControl.getValidator()),
 					null );
 		}
 		
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/pkgmanager/PkgTab.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/pkgmanager/PkgTab.java
index c465e24..7c488c6 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/pkgmanager/PkgTab.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/pkgmanager/PkgTab.java
@@ -37,7 +37,7 @@
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.jface.action.Separator;
 import org.eclipse.jface.action.ToolBarManager;
-import org.eclipse.jface.databinding.viewers.ViewersObservables;
+import org.eclipse.jface.databinding.viewers.typed.ViewerProperties;
 import org.eclipse.jface.viewers.ArrayContentProvider;
 import org.eclipse.jface.viewers.CellLabelProvider;
 import org.eclipse.jface.viewers.CheckboxTableViewer;
@@ -45,6 +45,7 @@
 import org.eclipse.jface.viewers.ColumnViewerToolTipSupport;
 import org.eclipse.jface.viewers.ColumnWeightData;
 import org.eclipse.jface.viewers.DoubleClickEvent;
+import org.eclipse.jface.viewers.ICheckable;
 import org.eclipse.jface.viewers.IDoubleClickListener;
 import org.eclipse.jface.viewers.IElementComparer;
 import org.eclipse.jface.viewers.ISelectionChangedListener;
@@ -819,13 +820,15 @@
 	void addBinding(final DataBindingSupport db) {
 		this.filterPrioritySet= new WritableSet<>(db.getRealm(), Collections.emptySet(), String.class);
 		db.getContext().bindSet(
-				ViewersObservables.observeCheckedElements(this.filterPriorityTable, String.class),
+				ViewerProperties.checkedElements(String.class)
+						.observe((ICheckable)this.filterPriorityTable),
 				this.filterPrioritySet );
 		new AutoCheckController(this.filterPriorityTable, this.filterPrioritySet);
 		
 		this.filterRViewsSet= new WritableSet<>(db.getRealm(), Collections.emptySet(), IRView.class);
 		db.getContext().bindSet(
-				ViewersObservables.observeCheckedElements(this.filterRViewsTable, IRView.class),
+				ViewerProperties.checkedElements(IRView.class)
+						.observe((ICheckable)this.filterRViewsTable),
 				this.filterRViewsSet );
 		new AutoCheckController(this.filterRViewsTable, this.filterRViewsSet);
 		
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/pkgmanager/RLibrarySelectionComposite.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/pkgmanager/RLibrarySelectionComposite.java
index 6d9e4b0..8b9f357 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/pkgmanager/RLibrarySelectionComposite.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/pkgmanager/RLibrarySelectionComposite.java
@@ -41,7 +41,7 @@
 public class RLibrarySelectionComposite extends Composite {
 	
 	
-	public static class Validator implements IValidator {
+	public static class Validator implements IValidator<Object> {
 		
 		
 		private RuntimeRLibPaths libPaths;
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/pkgmanager/RRepoPreferencePage.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/pkgmanager/RRepoPreferencePage.java
index 3ec6127..f133a16 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/pkgmanager/RRepoPreferencePage.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/pkgmanager/RRepoPreferencePage.java
@@ -14,6 +14,10 @@
 
 package org.eclipse.statet.internal.r.ui.pkgmanager;
 
+import static org.eclipse.statet.jcommons.lang.ObjectUtils.NonNull_Object_TYPE;
+import static org.eclipse.statet.jcommons.lang.ObjectUtils.NonNull_String_TYPE;
+import static org.eclipse.statet.jcommons.lang.ObjectUtils.Nullable_Object_TYPE;
+
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Comparator;
@@ -25,13 +29,12 @@
 
 import org.eclipse.core.databinding.DataBindingContext;
 import org.eclipse.core.databinding.UpdateValueStrategy;
-import org.eclipse.core.databinding.beans.PojoProperties;
-import org.eclipse.core.databinding.conversion.Converter;
+import org.eclipse.core.databinding.beans.typed.PojoProperties;
 import org.eclipse.core.databinding.observable.list.IObservableList;
 import org.eclipse.core.databinding.observable.list.WritableList;
 import org.eclipse.core.runtime.CoreException;
-import org.eclipse.jface.databinding.swt.WidgetProperties;
-import org.eclipse.jface.databinding.viewers.ViewersObservables;
+import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
+import org.eclipse.jface.databinding.viewers.typed.ViewerProperties;
 import org.eclipse.jface.dialogs.Dialog;
 import org.eclipse.jface.viewers.ArrayContentProvider;
 import org.eclipse.jface.viewers.ColumnWeightData;
@@ -50,9 +53,12 @@
 
 import org.eclipse.statet.jcommons.collections.ImCollections;
 import org.eclipse.statet.jcommons.collections.ImList;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
 
 import org.eclipse.statet.ecommons.databinding.NotEmptyValidator;
 import org.eclipse.statet.ecommons.databinding.URLValidator;
+import org.eclipse.statet.ecommons.databinding.core.conversion.ClassTypedConverter;
 import org.eclipse.statet.ecommons.databinding.jface.DataBindingSupport;
 import org.eclipse.statet.ecommons.preferences.core.Preference;
 import org.eclipse.statet.ecommons.preferences.ui.ConfigurationBlock;
@@ -72,6 +78,7 @@
 import org.eclipse.statet.rj.renv.core.RPkgType;
 
 
+@NonNullByDefault
 public class RRepoPreferencePage extends ConfigurationBlockPreferencePage {
 	
 	
@@ -87,11 +94,15 @@
 }
 
 
+@NonNullByDefault
 class EditRepoDialog extends ExtStatusDialog {
 	
 	
 	private static final String DEFAULT_TYPE= "Default"; //$NON-NLS-1$
 	
+	@SuppressWarnings("null")
+	private static final Class<@Nullable RPkgType> Nullable_RPkgType_TYPE= RPkgType.class;
+	
 	
 	private final RRepo repo;
 	private final boolean isNew;
@@ -171,31 +182,34 @@
 	protected void addBindings(final DataBindingSupport databinding) {
 		final DataBindingContext dbc= databinding.getContext();
 		dbc.bindValue(
-				WidgetProperties.text(SWT.Modify).observe(this.nameControl),
-				PojoProperties.value(RRepo.class, "name").observe(this.repo), //$NON-NLS-1$
+				WidgetProperties.text(SWT.Modify)
+						.observe(this.nameControl),
+				PojoProperties.value(RRepo.class, "name", NonNull_String_TYPE) //$NON-NLS-1$
+						.observe(this.repo),
 				null,
 				null );
 		dbc.bindValue(
-				WidgetProperties.text(SWT.Modify).observe(this.urlControl),
-				PojoProperties.value(RRepo.class, "URL").observe(this.repo), //$NON-NLS-1$
-				new UpdateValueStrategy().setAfterGetValidator(
-						new NotEmptyValidator("URL", new URLValidator("URL")) ),
+				WidgetProperties.text(SWT.Modify)
+						.observe(this.urlControl),
+				PojoProperties.value(RRepo.class, "URL", NonNull_String_TYPE) //$NON-NLS-1$
+						.observe(this.repo),
+				new UpdateValueStrategy<String, String>()
+						.setAfterGetValidator(
+								new NotEmptyValidator("URL", new URLValidator("URL")) ),
 				null );
 		dbc.bindValue(
-				ViewersObservables.observeSingleSelection(this.typeControl),
-				PojoProperties.value(RRepo.class, "pkgType").observe(this.repo), //$NON-NLS-1$
-				new UpdateValueStrategy().setConverter(new Converter(RPkgType.class, RPkgType.class) {
-					@Override
-					public Object convert(final Object fromObject) {
-						return (fromObject != DEFAULT_TYPE) ? fromObject : null;
-					}
-				}),
-				new UpdateValueStrategy().setConverter(new Converter(RPkgType.class, RPkgType.class) {
-					@Override
-					public Object convert(final Object fromObject) {
-						return (fromObject != null) ? fromObject : DEFAULT_TYPE;
-					}
-				}) );
+				ViewerProperties.singleSelection(Object.class)
+						.observe(this.typeControl),
+				PojoProperties.value(RRepo.class, "pkgType", Nullable_RPkgType_TYPE) //$NON-NLS-1$
+						.observe(this.repo),
+				new UpdateValueStrategy<@Nullable Object, @Nullable RPkgType>()
+						.setConverter(ClassTypedConverter.create(Nullable_Object_TYPE, Nullable_RPkgType_TYPE,
+								(final @Nullable Object fromObject) ->
+										(fromObject != DEFAULT_TYPE) ? (RPkgType)fromObject : null )),
+				new UpdateValueStrategy<@Nullable RPkgType, @Nullable Object>()
+						.setConverter(ClassTypedConverter.create(Nullable_RPkgType_TYPE, NonNull_Object_TYPE,
+								(final @Nullable RPkgType fromObject) ->
+										(fromObject != null) ? fromObject : DEFAULT_TYPE )));
 	}
 	
 }
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/pkgmanager/RepoTab.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/pkgmanager/RepoTab.java
index f3ae451..cae9967 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/pkgmanager/RepoTab.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/pkgmanager/RepoTab.java
@@ -22,10 +22,11 @@
 import org.eclipse.core.databinding.observable.set.WritableSet;
 import org.eclipse.core.databinding.observable.value.IObservableValue;
 import org.eclipse.core.databinding.observable.value.WritableValue;
-import org.eclipse.jface.databinding.viewers.ViewersObservables;
+import org.eclipse.jface.databinding.viewers.typed.ViewerProperties;
 import org.eclipse.jface.viewers.ArrayContentProvider;
 import org.eclipse.jface.viewers.CheckboxTableViewer;
 import org.eclipse.jface.viewers.ColumnWeightData;
+import org.eclipse.jface.viewers.ICheckable;
 import org.eclipse.jface.viewers.TableViewer;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.SelectionAdapter;
@@ -179,11 +180,16 @@
 		this.selectedBioc= new WritableValue<>(db.getRealm(), null, RRepo.class);
 		
 		db.getContext().bindSet(
-				ViewersObservables.observeCheckedElements(this.repoTable, RRepo.class),
+				ViewerProperties.checkedElements(RRepo.class)
+						.observe((ICheckable)this.repoTable),
 				this.selectedRepos );
-		db.getContext().bindValue(ViewersObservables.observeSingleSelection(this.CranTable),
+		db.getContext().bindValue(
+				ViewerProperties.singleSelection(RRepo.class)
+						.observe(this.CranTable),
 				this.selectedCran );
-		db.getContext().bindValue(ViewersObservables.observeSingleSelection(this.biocTable),
+		db.getContext().bindValue(
+				ViewerProperties.singleSelection(RRepo.class)
+						.observe(this.biocTable),
 				this.selectedBioc );
 		
 		this.selectedRepos.addChangeListener(this.dialog);
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/preferences/RCodeStylePreferenceBlock.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/preferences/RCodeStylePreferenceBlock.java
index af536d4..460fa7b 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/preferences/RCodeStylePreferenceBlock.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/preferences/RCodeStylePreferenceBlock.java
@@ -18,9 +18,9 @@
 import java.util.Map;
 
 import org.eclipse.core.databinding.UpdateValueStrategy;
-import org.eclipse.core.databinding.beans.BeanProperties;
+import org.eclipse.core.databinding.beans.typed.BeanProperties;
 import org.eclipse.core.resources.IProject;
-import org.eclipse.jface.databinding.swt.WidgetProperties;
+import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.widgets.Button;
@@ -34,7 +34,7 @@
 import org.eclipse.statet.jcommons.collections.ImCollections;
 import org.eclipse.statet.jcommons.collections.ImList;
 
-import org.eclipse.statet.ecommons.databinding.IntegerValidator;
+import org.eclipse.statet.ecommons.databinding.core.validation.IntegerValidator;
 import org.eclipse.statet.ecommons.databinding.jface.DataBindingSupport;
 import org.eclipse.statet.ecommons.preferences.core.Preference;
 import org.eclipse.statet.ecommons.preferences.ui.ManagedConfigurationBlock;
@@ -229,38 +229,49 @@
 		this.stdIndentSettings.addBindings(db, this.model);
 		
 		db.getContext().bindValue(
-				WidgetProperties.text(SWT.Modify).observe(this.indentBlockDepth),
-				BeanProperties.value(RCodeStyleSettings.class, RCodeStyleSettings.INDENT_BLOCK_DEPTH_PROP)
+				WidgetProperties.text(SWT.Modify)
+						.observe(this.indentBlockDepth),
+				BeanProperties.value(RCodeStyleSettings.class, RCodeStyleSettings.INDENT_BLOCK_DEPTH_PROP, Integer.TYPE)
 						.observe(db.getRealm(), this.model),
-				new UpdateValueStrategy().setAfterGetValidator(new IntegerValidator(1, 10,
-						Messages.RCodeStyle_Indent_IndentInBlocks_error_message )),
+				new UpdateValueStrategy<String, Integer>()
+						.setAfterGetValidator(new IntegerValidator(1, 10,
+								Messages.RCodeStyle_Indent_IndentInBlocks_error_message )),
 				null );
 		db.getContext().bindValue(
-				WidgetProperties.text(SWT.Modify).observe(this.indentGroupDepth),
-				BeanProperties.value(RCodeStyleSettings.class, RCodeStyleSettings.INDENT_GROUP_DEPTH_PROP)
+				WidgetProperties.text(SWT.Modify)
+						.observe(this.indentGroupDepth),
+				BeanProperties.value(RCodeStyleSettings.class, RCodeStyleSettings.INDENT_GROUP_DEPTH_PROP, Integer.TYPE)
 						.observe(db.getRealm(), this.model),
-				new UpdateValueStrategy().setAfterGetValidator(new IntegerValidator(1, 10, Messages.RCodeStyle_Indent_IndentInGroups_error_message)),
+				new UpdateValueStrategy<String, Integer>()
+						.setAfterGetValidator(new IntegerValidator(1, 10,
+								Messages.RCodeStyle_Indent_IndentInGroups_error_message )),
 				null );
 		db.getContext().bindValue(
-				WidgetProperties.text(SWT.Modify).observe(this.indentWrappedCommandDepth),
-				BeanProperties.value(RCodeStyleSettings.class, RCodeStyleSettings.INDENT_WRAPPED_COMMAND_DEPTH_PROP)
+				WidgetProperties.text(SWT.Modify)
+						.observe(this.indentWrappedCommandDepth),
+				BeanProperties.value(RCodeStyleSettings.class, RCodeStyleSettings.INDENT_WRAPPED_COMMAND_DEPTH_PROP, Integer.TYPE)
 						.observe(db.getRealm(), this.model),
-				new UpdateValueStrategy().setAfterGetValidator(new IntegerValidator(1, 10, Messages.RCodeStyle_Indent_IndentOfWrappedCommands_error_message)),
+				new UpdateValueStrategy<String, Integer>()
+						.setAfterGetValidator(new IntegerValidator(1, 10,
+								Messages.RCodeStyle_Indent_IndentOfWrappedCommands_error_message )),
 				null );
 		
 		for (final Operator operator : this.operators) {
 			db.getContext().bindValue(
-					WidgetProperties.selection().observe(operator.wsBeforeControl),
-					BeanProperties.value(RCodeStyleSettings.class, operator.wsBeforeProp)
+					WidgetProperties.buttonSelection()
+							.observe(operator.wsBeforeControl),
+					BeanProperties.value(RCodeStyleSettings.class, operator.wsBeforeProp, Boolean.TYPE)
 							.observe(db.getRealm(), this.model) );
 			db.getContext().bindValue(
-					WidgetProperties.selection().observe(operator.wsAfterControl),
-					BeanProperties.value(RCodeStyleSettings.class, operator.wsAfterProp)
-					.observe(db.getRealm(), this.model) );
+					WidgetProperties.buttonSelection()
+							.observe(operator.wsAfterControl),
+					BeanProperties.value(RCodeStyleSettings.class, operator.wsAfterProp, Boolean.TYPE)
+							.observe(db.getRealm(), this.model) );
 		}
 		db.getContext().bindValue(
-				WidgetProperties.selection().observe(this.nlFDefBodyBlockBefore),
-				BeanProperties.value(RCodeStyleSettings.class, RCodeStyleSettings.NL_FDEF_BODYBLOCK_BEFORE_PROP)
+				WidgetProperties.buttonSelection()
+						.observe(this.nlFDefBodyBlockBefore),
+				BeanProperties.value(RCodeStyleSettings.class, RCodeStyleSettings.NL_FDEF_BODYBLOCK_BEFORE_PROP, Boolean.TYPE)
 						.observe(db.getRealm(), this.model) );
 	}
 	
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/preferences/REditorPreferencePage.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/preferences/REditorPreferencePage.java
index a0585c3..75bbaa9 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/preferences/REditorPreferencePage.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/preferences/REditorPreferencePage.java
@@ -18,8 +18,8 @@
 import java.util.Map;
 
 import org.eclipse.core.databinding.UpdateValueStrategy;
-import org.eclipse.jface.databinding.swt.WidgetProperties;
-import org.eclipse.jface.databinding.viewers.ViewersObservables;
+import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
+import org.eclipse.jface.databinding.viewers.typed.ViewerProperties;
 import org.eclipse.jface.viewers.ArrayContentProvider;
 import org.eclipse.jface.viewers.ComboViewer;
 import org.eclipse.swt.SWT;
@@ -31,7 +31,10 @@
 import org.eclipse.swt.widgets.Link;
 import org.eclipse.swt.widgets.Text;
 
-import org.eclipse.statet.ecommons.databinding.IntegerValidator;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
+import org.eclipse.statet.ecommons.databinding.core.validation.IntegerValidator;
 import org.eclipse.statet.ecommons.databinding.jface.DataBindingSupport;
 import org.eclipse.statet.ecommons.preferences.core.Preference;
 import org.eclipse.statet.ecommons.preferences.ui.ConfigurationBlock;
@@ -51,6 +54,7 @@
 /**
  * Preference page for 'R Editor Options'
  */
+@NonNullByDefault
 public class REditorPreferencePage extends ConfigurationBlockPreferencePage {
 	
 	
@@ -66,6 +70,7 @@
 }
 
 
+@NonNullByDefault
 class REditorConfigurationBlock extends ManagedConfigurationBlock {
 	
 	
@@ -91,14 +96,14 @@
 	private Button spellEnableControl;
 	
 	
-	public REditorConfigurationBlock(final StatusChangeListener statusListener) {
+	public REditorConfigurationBlock(final @Nullable StatusChangeListener statusListener) {
 		super(null, statusListener);
 	}
 	
 	
 	@Override
 	protected void createBlockArea(final Composite pageComposite) {
-		final Map<Preference<?>, String> prefs= new HashMap<>();
+		final Map<Preference<?>, @Nullable String> prefs= new HashMap<>();
 		
 		prefs.put(REditorOptions.SMARTINSERT_BYDEFAULT_ENABLED_PREF, REditorOptions.SMARTINSERT_GROUP_ID);
 		prefs.put(REditorOptions.SMARTINSERT_TAB_ACTION_PREF, REditorOptions.SMARTINSERT_GROUP_ID);
@@ -287,7 +292,7 @@
 	}
 	
 	private Button[] createSmartInsertOption(final Composite composite,
-			final String text1, final String text2, final boolean console) {
+			final @Nullable String text1, final @Nullable String text2, final boolean console) {
 		GridData gd;
 		if (text1 != null) {
 			final Label label= new Label(composite, SWT.NONE);
@@ -330,85 +335,113 @@
 	@Override
 	protected void addBindings(final DataBindingSupport db) {
 		db.getContext().bindValue(
-				WidgetProperties.selection().observe(this.smartInsertControl),
+				WidgetProperties.buttonSelection()
+						.observe(this.smartInsertControl),
 				createObservable(REditorOptions.SMARTINSERT_BYDEFAULT_ENABLED_PREF) );
 		db.getContext().bindValue(
-				ViewersObservables.observeSingleSelection(this.smartInsertTabActionControl),
+				ViewerProperties.singleSelection(TabAction.class)
+						.observe(this.smartInsertTabActionControl),
 				createObservable(REditorOptions.SMARTINSERT_TAB_ACTION_PREF) );
 		db.getContext().bindValue(
-				WidgetProperties.selection().observe(this.smartInsertOnPasteControl[0]),
+				WidgetProperties.buttonSelection()
+						.observe(this.smartInsertOnPasteControl[0]),
 				createObservable(REditorOptions.SMARTINSERT_ONPASTE_ENABLED_PREF) );
 		db.getContext().bindValue(
-				WidgetProperties.selection().observe(this.smartInsertOnPasteControl[0]),
+				WidgetProperties.buttonSelection()
+						.observe(this.smartInsertOnPasteControl[0]),
 				createObservable(REditorOptions.SMARTINSERT_ONPASTE_ENABLED_PREF) );
 		db.getContext().bindValue(
-				WidgetProperties.selection().observe(this.smartInsertCloseCurlyBracketsControl[0]),
+				WidgetProperties.buttonSelection()
+						.observe(this.smartInsertCloseCurlyBracketsControl[0]),
 				createObservable(REditorOptions.SMARTINSERT_CLOSECURLY_ENABLED_PREF) );
 		db.getContext().bindValue(
-				WidgetProperties.selection().observe(this.smartInsertCloseRoundBracketsControl[0]),
+				WidgetProperties.buttonSelection()
+						.observe(this.smartInsertCloseRoundBracketsControl[0]),
 				createObservable(REditorOptions.SMARTINSERT_CLOSEROUND_ENABLED_PREF) );
 		db.getContext().bindValue(
-				WidgetProperties.selection().observe(this.smartInsertCloseSquareBracketsControl[0]),
+				WidgetProperties.buttonSelection()
+						.observe(this.smartInsertCloseSquareBracketsControl[0]),
 				createObservable(REditorOptions.SMARTINSERT_CLOSESQUARE_ENABLED_PREF) );
 		db.getContext().bindValue(
-				WidgetProperties.selection().observe(this.smartInsertCloseSpecialControl[0]),
+				WidgetProperties.buttonSelection()
+						.observe(this.smartInsertCloseSpecialControl[0]),
 				createObservable(REditorOptions.SMARTINSERT_CLOSESPECIAL_ENABLED_PREF) );
 		db.getContext().bindValue(
-				WidgetProperties.selection().observe(this.smartInsertCloseStringsControl[0]),
+				WidgetProperties.buttonSelection()
+						.observe(this.smartInsertCloseStringsControl[0]),
 				createObservable(REditorOptions.SMARTINSERT_CLOSESTRINGS_ENABLED_PREF) );
 		
 		db.getContext().bindValue(
-				WidgetProperties.selection().observe(this.smartInsertCloseCurlyBracketsControl[1]),
+				WidgetProperties.buttonSelection()
+						.observe(this.smartInsertCloseCurlyBracketsControl[1]),
 				createObservable(RUIPreferenceInitializer.CONSOLE_SMARTINSERT_CLOSECURLY_ENABLED) );
 		db.getContext().bindValue(
-				WidgetProperties.selection().observe(this.smartInsertCloseRoundBracketsControl[1]),
+				WidgetProperties.buttonSelection()
+						.observe(this.smartInsertCloseRoundBracketsControl[1]),
 				createObservable(RUIPreferenceInitializer.CONSOLE_SMARTINSERT_CLOSEROUND_ENABLED) );
 		db.getContext().bindValue(
-				WidgetProperties.selection().observe(this.smartInsertCloseSquareBracketsControl[1]),
+				WidgetProperties.buttonSelection()
+						.observe(this.smartInsertCloseSquareBracketsControl[1]),
 				createObservable(RUIPreferenceInitializer.CONSOLE_SMARTINSERT_CLOSESQUARE_ENABLED) );
 		db.getContext().bindValue(
-				WidgetProperties.selection().observe(this.smartInsertCloseSpecialControl[1]),
+				WidgetProperties.buttonSelection()
+						.observe(this.smartInsertCloseSpecialControl[1]),
 				createObservable(RUIPreferenceInitializer.CONSOLE_SMARTINSERT_CLOSESPECIAL_ENABLED) );
 		db.getContext().bindValue(
-				WidgetProperties.selection().observe(this.smartInsertCloseStringsControl[1]),
+				WidgetProperties.buttonSelection()
+						.observe(this.smartInsertCloseStringsControl[1]),
 				createObservable(RUIPreferenceInitializer.CONSOLE_SMARTINSERT_CLOSESTRINGS_ENABLED) );
 		
 		db.getContext().bindValue(
-				WidgetProperties.selection().observe(this.foldingEnableControl),
+				WidgetProperties.buttonSelection()
+						.observe(this.foldingEnableControl),
 				createObservable(REditorOptions.FOLDING_ENABLED_PREF) );
 		db.getContext().bindValue(
-				WidgetProperties.selection().observe(this.foldingRestoreStateControl),
+				WidgetProperties.buttonSelection()
+						.observe(this.foldingRestoreStateControl),
 				createObservable(REditorOptions.FOLDING_RESTORE_STATE_ENABLED_PREF) );
 		db.getContext().bindValue(
-				WidgetProperties.selection().observe(this.foldingDefaultAllBlocksControl),
+				WidgetProperties.buttonSelection()
+						.observe(this.foldingDefaultAllBlocksControl),
 				createObservable(DefaultRFoldingPreferences.PREF_OTHERBLOCKS_ENABLED) );
 		db.getContext().bindValue(
-				WidgetProperties.text(SWT.Modify).observe(this.foldingDefaultMinLines),
+				WidgetProperties.text(SWT.Modify)
+						.observe(this.foldingDefaultMinLines),
 				createObservable(DefaultRFoldingPreferences.PREF_MINLINES_NUM),
-				new UpdateValueStrategy().setAfterGetValidator(new IntegerValidator(2, 1000, Messages.REditorOptions_Folding_MinNumOfLines_error_message)),
+				new UpdateValueStrategy<String, Integer>()
+						.setAfterGetValidator(new IntegerValidator(2, 1000,
+								Messages.REditorOptions_Folding_MinNumOfLines_error_message )),
 				null );
 		db.getContext().bindValue(
-				WidgetProperties.selection().observe(this.foldingDefaultRoxygenControl),
+				WidgetProperties.buttonSelection()
+						.observe(this.foldingDefaultRoxygenControl),
 				createObservable(DefaultRFoldingPreferences.PREF_ROXYGEN_ENABLED) );
 		db.getContext().bindValue(
-				WidgetProperties.selection().observe(this.foldingDefaultRoxygenInitiallyControl),
+				WidgetProperties.buttonSelection()
+						.observe(this.foldingDefaultRoxygenInitiallyControl),
 				createObservable(DefaultRFoldingPreferences.PREF_ROXYGEN_COLLAPSE_INITIALLY_ENABLED) );
 		db.getContext().bindValue(
-				WidgetProperties.text(SWT.Modify).observe(this.foldingDefaultRoxygenMinLines),
+				WidgetProperties.text(SWT.Modify)
+						.observe(this.foldingDefaultRoxygenMinLines),
 				createObservable(DefaultRFoldingPreferences.PREF_ROXYGEN_MINLINES_NUM),
-				new UpdateValueStrategy().setAfterGetValidator(new IntegerValidator(2, 1000, Messages.REditorOptions_Folding_MinNumOfLines_error_message)),
+				new UpdateValueStrategy<String, Integer>()
+						.setAfterGetValidator(new IntegerValidator(2, 1000,
+								Messages.REditorOptions_Folding_MinNumOfLines_error_message )),
 				null );
 		
 		db.getContext().bindValue(
-				WidgetProperties.selection().observe(this.markOccurrencesControl),
+				WidgetProperties.buttonSelection()
+						.observe(this.markOccurrencesControl),
 				createObservable(REditorOptions.PREF_MARKOCCURRENCES_ENABLED) );
 		
 		db.getContext().bindValue(
-				WidgetProperties.selection().observe(this.problemsEnableControl),
+				WidgetProperties.buttonSelection()
+						.observe(this.problemsEnableControl),
 				createObservable(REditorBuild.PROBLEMCHECKING_ENABLED_PREF) );
 		
 		db.getContext().bindValue(
-				WidgetProperties.selection().observe(this.spellEnableControl),
+				WidgetProperties.buttonSelection()
+						.observe(this.spellEnableControl),
 				createObservable(REditorOptions.PREF_SPELLCHECKING_ENABLED) );
 	}
 	
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/refactoring/ExtractFunctionWizard.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/refactoring/ExtractFunctionWizard.java
index 3eb5c79..e014a75 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/refactoring/ExtractFunctionWizard.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/refactoring/ExtractFunctionWizard.java
@@ -16,11 +16,11 @@
 
 import org.eclipse.core.databinding.DataBindingContext;
 import org.eclipse.core.databinding.UpdateValueStrategy;
-import org.eclipse.core.databinding.beans.PojoProperties;
+import org.eclipse.core.databinding.beans.typed.PojoProperties;
 import org.eclipse.core.databinding.observable.Realm;
 import org.eclipse.core.databinding.observable.list.IObservableList;
 import org.eclipse.core.databinding.observable.list.WritableList;
-import org.eclipse.jface.databinding.swt.WidgetProperties;
+import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
 import org.eclipse.jface.databinding.wizard.WizardPageSupport;
 import org.eclipse.jface.dialogs.Dialog;
 import org.eclipse.jface.resource.JFaceResources;
@@ -216,14 +216,14 @@
 		
 		protected void addBindings(final DataBindingContext dbc, final Realm realm) {
 			dbc.bindValue(
-					WidgetProperties.text(SWT.Modify).observe(this.variableNameControl),
-					PojoProperties.value(ExtractFunctionRefactoring.class, "functionName")
+					WidgetProperties.text(SWT.Modify)
+							.observe(this.variableNameControl),
+					PojoProperties.value(ExtractFunctionRefactoring.class, "functionName", String.class)
 							.observe(realm, getRefactoring()),
-					new UpdateValueStrategy().setAfterGetValidator(
-							(final Object value) -> {
-								return new RefactoringBasedStatus(
-										getRefactoring().checkFunctionName((String) value) );
-							} ),
+					new UpdateValueStrategy<String, String>()
+							.setAfterGetValidator((final String value) ->
+									new RefactoringBasedStatus(
+											getRefactoring().checkFunctionName(value) )),
 					null );
 			this.argumentsViewer.addCheckStateListener(
 					(final CheckStateChangedEvent event) -> {
@@ -237,7 +237,8 @@
 			this.argumentsViewer.setInput(argumentsList);
 			this.argumentsButtons.connectTo(this.argumentsViewer, argumentsList, null);
 			
-//			dbc.bindValue(SWTObservables.observeSelection(fReplaceAllControl),
+//			dbc.bindValue(WidgetProperties.buttonSelection()
+//							.observe(this.replaceAllControl),
 //					PojoObservables.observeValue(realm, getRefactoring(), "replaceAllOccurrences"), null, null);
 		}
 		
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/refactoring/ExtractTempWizard.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/refactoring/ExtractTempWizard.java
index 0d18f8e..414cdf4 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/refactoring/ExtractTempWizard.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/refactoring/ExtractTempWizard.java
@@ -16,9 +16,9 @@
 
 import org.eclipse.core.databinding.DataBindingContext;
 import org.eclipse.core.databinding.UpdateValueStrategy;
-import org.eclipse.core.databinding.beans.PojoProperties;
+import org.eclipse.core.databinding.beans.typed.PojoProperties;
 import org.eclipse.core.databinding.observable.Realm;
-import org.eclipse.jface.databinding.swt.WidgetProperties;
+import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
 import org.eclipse.jface.databinding.wizard.WizardPageSupport;
 import org.eclipse.jface.dialogs.Dialog;
 import org.eclipse.jface.resource.JFaceResources;
@@ -124,18 +124,19 @@
 		
 		protected void addBindings(final DataBindingContext dbc, final Realm realm) {
 			dbc.bindValue(
-					WidgetProperties.text(SWT.Modify).observe(this.variableNameControl),
-					PojoProperties.value(ExtractTempRefactoring.class, "tempName") //$NON-NLS-1$
+					WidgetProperties.text(SWT.Modify)
+							.observe(this.variableNameControl),
+					PojoProperties.value(ExtractTempRefactoring.class, "tempName", String.class) //$NON-NLS-1$
 							.observe(realm, getRefactoring()),
-					new UpdateValueStrategy().setAfterGetValidator(
-							(final Object value) -> {
-								return new RefactoringBasedStatus(
-										getRefactoring().checkTempName((String) value) );
-							} ),
+					new UpdateValueStrategy<String, String>()
+							.setAfterGetValidator((final String value) ->
+									new RefactoringBasedStatus(
+											getRefactoring().checkTempName(value) )),
 					null );
 			dbc.bindValue(
-					WidgetProperties.selection().observe(this.replaceAllControl),
-					PojoProperties.value(ExtractTempRefactoring.class, "replaceAllOccurrences") //$NON-NLS-1$
+					WidgetProperties.buttonSelection()
+							.observe(this.replaceAllControl),
+					PojoProperties.value(ExtractTempRefactoring.class, "replaceAllOccurrences", Boolean.TYPE) //$NON-NLS-1$
 							.observe(realm, getRefactoring()) );
 		}
 		
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/refactoring/FunctionToS4MethodWizard.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/refactoring/FunctionToS4MethodWizard.java
index c120a1e..b9f34c8 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/refactoring/FunctionToS4MethodWizard.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/refactoring/FunctionToS4MethodWizard.java
@@ -16,11 +16,11 @@
 
 import org.eclipse.core.databinding.DataBindingContext;
 import org.eclipse.core.databinding.UpdateValueStrategy;
-import org.eclipse.core.databinding.beans.PojoProperties;
+import org.eclipse.core.databinding.beans.typed.PojoProperties;
 import org.eclipse.core.databinding.observable.Realm;
 import org.eclipse.core.databinding.observable.list.IObservableList;
 import org.eclipse.core.databinding.observable.list.WritableList;
-import org.eclipse.jface.databinding.swt.WidgetProperties;
+import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
 import org.eclipse.jface.databinding.wizard.WizardPageSupport;
 import org.eclipse.jface.dialogs.Dialog;
 import org.eclipse.jface.resource.JFaceResources;
@@ -267,14 +267,14 @@
 		
 		protected void addBindings(final DataBindingContext dbc, final Realm realm) {
 			dbc.bindValue(
-					WidgetProperties.text(SWT.Modify).observe(this.functionNameControl),
-					PojoProperties.value(FunctionToS4MethodRefactoring.class, "functionName") //$NON-NLS-1$
+					WidgetProperties.text(SWT.Modify)
+							.observe(this.functionNameControl),
+					PojoProperties.value(FunctionToS4MethodRefactoring.class, "functionName", String.class) //$NON-NLS-1$
 							.observe(realm, getRefactoring()),
-					new UpdateValueStrategy().setAfterGetValidator(
-							(final Object value) -> {
-								return new RefactoringBasedStatus(
-										getRefactoring().checkFunctionName((String) value) );
-							} ),
+					new UpdateValueStrategy<String, String>()
+							.setAfterGetValidator((final String value) ->
+									new RefactoringBasedStatus(
+											getRefactoring().checkFunctionName(value) )),
 					null );
 			final IObservableList<Variable> argumentsList= new WritableList<>(realm, getRefactoring().getVariables(), Variable.class);
 			this.argumentsViewer.addCheckStateListener(
@@ -346,8 +346,9 @@
 			});
 			
 			dbc.bindValue(
-					WidgetProperties.selection().observe(this.generateGenericControl),
-					PojoProperties.value(FunctionToS4MethodRefactoring.class, "generateGeneric") //$NON-NLS-1$
+					WidgetProperties.buttonSelection()
+							.observe(this.generateGenericControl),
+					PojoProperties.value(FunctionToS4MethodRefactoring.class, "generateGeneric", Boolean.TYPE) //$NON-NLS-1$
 							.observe(realm, getRefactoring()) );
 		}
 		
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/refactoring/RenameInWorkspaceWizard.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/refactoring/RenameInWorkspaceWizard.java
index c688fed..5f906ac 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/refactoring/RenameInWorkspaceWizard.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/refactoring/RenameInWorkspaceWizard.java
@@ -18,10 +18,10 @@
 
 import org.eclipse.core.databinding.DataBindingContext;
 import org.eclipse.core.databinding.UpdateValueStrategy;
-import org.eclipse.core.databinding.beans.PojoProperties;
+import org.eclipse.core.databinding.beans.typed.PojoProperties;
 import org.eclipse.core.databinding.observable.Realm;
 import org.eclipse.core.runtime.Status;
-import org.eclipse.jface.databinding.swt.WidgetProperties;
+import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
 import org.eclipse.jface.databinding.wizard.WizardPageSupport;
 import org.eclipse.jface.dialogs.Dialog;
 import org.eclipse.jface.resource.JFaceResources;
@@ -191,17 +191,19 @@
 		
 		protected void addBindings(final DataBindingContext dbc, final Realm realm) {
 			dbc.bindValue(
-					WidgetProperties.text(SWT.Modify).observe(this.variableNameControl),
-					PojoProperties.value("newName").observe(getRefactoring()), //$NON-NLS-1$
-					new UpdateValueStrategy().setAfterGetValidator(
-							(final Object value) -> {
+					WidgetProperties.text(SWT.Modify)
+							.observe(this.variableNameControl),
+					PojoProperties.value("newName", String.class) //$NON-NLS-1$
+							.observe(getRefactoring()),
+					new UpdateValueStrategy<String, String>()
+							.setAfterGetValidator((final String text) -> {
 								final RenameInWorkspaceRefactoring refactoring= getRefactoring();
-								final RefactoringStatus status= refactoring.checkNewName((String) value);
-								if (status.isOK() && refactoring.getCurrentName().equals(value)) {
+								final RefactoringStatus status= refactoring.checkNewName(text);
+								if (status.isOK() && refactoring.getCurrentName().equals(text)) {
 									return Status.CANCEL_STATUS;
 								}
 								return new RefactoringBasedStatus(status);
-							} ),
+							}),
 					null );
 		}
 		
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/rhelp/RHelpPreferencePage.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/rhelp/RHelpPreferencePage.java
index 7e93c3c..51424fa 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/rhelp/RHelpPreferencePage.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/rhelp/RHelpPreferencePage.java
@@ -21,7 +21,7 @@
 import org.eclipse.core.databinding.observable.Diffs;
 import org.eclipse.core.databinding.observable.Realm;
 import org.eclipse.core.runtime.CoreException;
-import org.eclipse.jface.databinding.swt.WidgetProperties;
+import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.ModifyEvent;
 import org.eclipse.swt.events.ModifyListener;
@@ -35,7 +35,10 @@
 import org.eclipse.swt.widgets.Link;
 import org.eclipse.swt.widgets.Text;
 
-import org.eclipse.statet.ecommons.databinding.IntegerValidator;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
+import org.eclipse.statet.ecommons.databinding.core.validation.IntegerValidator;
 import org.eclipse.statet.ecommons.databinding.jface.AbstractSWTObservableValue;
 import org.eclipse.statet.ecommons.databinding.jface.DataBindingSupport;
 import org.eclipse.statet.ecommons.preferences.core.Preference;
@@ -48,6 +51,7 @@
 import org.eclipse.statet.r.core.RCore;
 
 
+@NonNullByDefault
 public class RHelpPreferencePage extends ConfigurationBlockPreferencePage {
 	
 	
@@ -63,10 +67,11 @@
 }
 
 
+@NonNullByDefault
 class RHelpConfigurationBlock extends ManagedConfigurationBlock {
 	
 	
-	class HomeObservable extends AbstractSWTObservableValue
+	class HomeObservable extends AbstractSWTObservableValue<String>
 			implements SelectionListener, ModifyListener {
 		
 		
@@ -83,6 +88,7 @@
 			RHelpConfigurationBlock.this.homeBlankControl.addSelectionListener(this);
 			RHelpConfigurationBlock.this.homeREnvControl.addSelectionListener(this);
 			RHelpConfigurationBlock.this.homeCustomControl.addSelectionListener(this);
+			this.url= ""; //$NON-NLS-1$
 		}
 		
 		@Override
@@ -91,7 +97,7 @@
 		}
 		
 		@Override
-		protected Object doGetValue() {
+		protected String doGetValue() {
 			if (!this.isUpdating) {
 				this.isUpdating= true;
 				try {
@@ -105,12 +111,9 @@
 		}
 		
 		@Override
-		protected void doSetValue(final Object value) {
+		protected void doSetValue(final @Nullable String value) {
 			this.isUpdating= true;
-			this.url= (String) value;
-			if (this.url == null) {
-				this.url= "about:blank"; //$NON-NLS-1$
-			}
+			this.url= (value != null) ? value : "about:blank"; //$NON-NLS-1$
 			try {
 				if (this.url.equals("about:blank")) { //$NON-NLS-1$
 					RHelpConfigurationBlock.this.homeBlankControl.setSelection(true);
@@ -214,13 +217,13 @@
 	private Text searchMaxFragmentsControl;
 	
 	
-	protected RHelpConfigurationBlock(final StatusChangeListener statusListener) {
+	protected RHelpConfigurationBlock(final @Nullable StatusChangeListener statusListener) {
 		super(null, statusListener);
 	}
 	
 	@Override
 	protected void createBlockArea(final Composite pageComposite) {
-		final Map<Preference<?>, String> prefs= new HashMap<>();
+		final Map<Preference<?>, @Nullable String> prefs= new HashMap<>();
 		
 		prefs.put(RHelpPreferences.HOMEPAGE_URL_PREF, null);
 		prefs.put(RHelpPreferences.SEARCH_REUSE_PAGE_ENABLED_PREF, null);
@@ -312,13 +315,16 @@
 				new HomeObservable(db.getRealm()),
 				createObservable(RHelpPreferences.HOMEPAGE_URL_PREF) );
 		db.getContext().bindValue(
-				WidgetProperties.selection().observe(this.searchReusePageControl),
+				WidgetProperties.buttonSelection()
+						.observe(this.searchReusePageControl),
 				createObservable(RHelpPreferences.SEARCH_REUSE_PAGE_ENABLED_PREF) );
 		db.getContext().bindValue(
-				WidgetProperties.text(SWT.Modify).observe(this.searchMaxFragmentsControl),
+				WidgetProperties.text(SWT.Modify)
+						.observe(this.searchMaxFragmentsControl),
 				createObservable(RHelpPreferences.SEARCH_PREVIEW_FRAGMENTS_MAX_PREF),
-				new UpdateValueStrategy().setAfterGetValidator(new IntegerValidator(1, 1000,
-						"Invalid maximum for preview fragments specified (1-1000).")),
+				new UpdateValueStrategy<String, Integer>()
+						.setAfterGetValidator(new IntegerValidator(1, 1000,
+								"Invalid maximum for preview fragments specified (1-1000).")),
 				null );
 	}
 	
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/rhelp/RHelpPreferences.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/rhelp/RHelpPreferences.java
index b5152bd..2420483 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/rhelp/RHelpPreferences.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/rhelp/RHelpPreferences.java
@@ -14,6 +14,8 @@
 
 package org.eclipse.statet.internal.r.ui.rhelp;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
 import org.eclipse.statet.ecommons.preferences.core.Preference;
 import org.eclipse.statet.ecommons.preferences.core.Preference.BooleanPref;
 import org.eclipse.statet.ecommons.preferences.core.Preference.IntPref;
@@ -22,6 +24,7 @@
 import org.eclipse.statet.r.ui.RUI;
 
 
+@NonNullByDefault
 public class RHelpPreferences {
 	
 	
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/tools/LoadRImageWizard.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/tools/LoadRImageWizard.java
index 6fd2d7b..1a412bb 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/tools/LoadRImageWizard.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/tools/LoadRImageWizard.java
@@ -113,8 +113,12 @@
 			
 			final Realm realm = Realm.getDefault();
 			fDbc = new DataBindingContext(realm);
-			fDbc.bindValue(fLocationGroup.getObservable(), fNewLocationString,
-					new UpdateValueStrategy().setAfterGetValidator(fLocationGroup.getValidator()), null);
+			fDbc.bindValue(
+					fLocationGroup.getObservable(),
+					fNewLocationString,
+					new UpdateValueStrategy<>()
+							.setAfterGetValidator(fLocationGroup.getValidator()),
+					null );
 			
 			WizardPageSupport.create(this, fDbc);
 		}
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/wizards/RPkgProjectWizardPage.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/wizards/RPkgProjectWizardPage.java
index 0de5327..5443ff6 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/wizards/RPkgProjectWizardPage.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/wizards/RPkgProjectWizardPage.java
@@ -25,7 +25,7 @@
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.Path;
-import org.eclipse.jface.databinding.swt.WidgetProperties;
+import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
 import org.eclipse.jface.databinding.wizard.WizardPageSupport;
 import org.eclipse.jface.dialogs.Dialog;
 import org.eclipse.jface.dialogs.IDialogSettings;
@@ -40,8 +40,8 @@
 import org.eclipse.swt.widgets.Text;
 
 import org.eclipse.statet.ecommons.databinding.core.util.DirtyTracker;
-import org.eclipse.statet.ecommons.databinding.core.workspace.RelativePathValidator;
-import org.eclipse.statet.ecommons.databinding.core.workspace.StringToPathConverter;
+import org.eclipse.statet.ecommons.resources.core.util.RelativePathValidator;
+import org.eclipse.statet.ecommons.resources.core.util.StringToPathConverter;
 import org.eclipse.statet.ecommons.ui.dialogs.DialogUtils;
 import org.eclipse.statet.ecommons.ui.util.LayoutUtils;
 
@@ -170,24 +170,30 @@
 		this.pkgUserChanged= new DirtyTracker();
 		
 		final Binding binding= dbc.bindValue(
-				WidgetProperties.text(SWT.Modify).observe(this.pkgNameControl),
+				WidgetProperties.text(SWT.Modify)
+						.observe(this.pkgNameControl),
 				this.pkgNameValue,
-				new UpdateValueStrategy().setAfterGetValidator(new RPkgNameValidator()),
+				new UpdateValueStrategy<String, String>()
+						.setAfterGetValidator(new RPkgNameValidator()),
 				null );
 		this.pkgUserChanged.add(binding);
 		dbc.bindValue(
-				WidgetProperties.text().observe(this.pkgAuthorControl),
+				WidgetProperties.text()
+						.observe(this.pkgAuthorControl),
 				this.pkgAuthorValue );
 		dbc.bindValue(
-				WidgetProperties.text().observe(this.pkgMaintainerControl),
+				WidgetProperties.text()
+						.observe(this.pkgMaintainerControl),
 				this.pkgMaintainerValue );
 		
 		this.pkgFolderValidator= new RelativePathValidator(IResource.FOLDER,
 				null, "package root folder" );
 		dbc.bindValue(
-				WidgetProperties.text(SWT.Modify).observe(this.pkgFolderControl),
+				WidgetProperties.text(SWT.Modify)
+						.observe(this.pkgFolderControl),
 				this.pkgFolderValue,
-				new UpdateValueStrategy().setAfterGetValidator(this.pkgFolderValidator)
+				new UpdateValueStrategy<String, IPath>()
+						.setAfterGetValidator(this.pkgFolderValidator)
 						.setConverter(new StringToPathConverter()),
 				null );
 	}
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/editors/REditorBuild.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/editors/REditorBuild.java
index b7cd473..3f72a4d 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/editors/REditorBuild.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/editors/REditorBuild.java
@@ -14,11 +14,14 @@
 
 package org.eclipse.statet.r.ui.editors;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
 import org.eclipse.statet.ecommons.preferences.core.Preference.BooleanPref;
 
 import org.eclipse.statet.internal.r.ui.RUIPreferenceInitializer;
 
 
+@NonNullByDefault
 public class REditorBuild {
 	
 	
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/editors/REditorOptions.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/editors/REditorOptions.java
index 92e4b75..0924e3f 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/editors/REditorOptions.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/editors/REditorOptions.java
@@ -18,6 +18,8 @@
 
 import java.util.Map;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
 import org.eclipse.statet.ecommons.preferences.AbstractPreferencesModelObject;
 import org.eclipse.statet.ecommons.preferences.core.Preference;
 import org.eclipse.statet.ecommons.preferences.core.Preference.BooleanPref;
@@ -27,6 +29,7 @@
 import org.eclipse.statet.ltk.ui.sourceediting.ISmartInsertSettings;
 
 
+@NonNullByDefault
 public class REditorOptions extends AbstractPreferencesModelObject
 		implements ISmartInsertSettings {
 	// Default values see RUIPreferenceInitializer
@@ -42,8 +45,9 @@
 	public static final BooleanPref SMARTINSERT_ONPASTE_ENABLED_PREF = new BooleanPref(
 			REDITOR_NODE, "smartinsert.on_paste.enabled"); //$NON-NLS-1$
 	
-	public static final Preference<TabAction> SMARTINSERT_TAB_ACTION_PREF= new EnumPref<>(
-			REDITOR_NODE, "SmartInsert.Tab.action", TabAction.class); //$NON-NLS-1$
+	public static final EnumPref<TabAction> SMARTINSERT_TAB_ACTION_PREF= new EnumPref<>(
+			REDITOR_NODE, "SmartInsert.Tab.action", TabAction.class, //$NON-NLS-1$
+			TabAction.INSERT_INDENT_LEVEL );
 	
 	public static final BooleanPref SMARTINSERT_CLOSECURLY_ENABLED_PREF = new BooleanPref(
 			REDITOR_NODE, "smartinsert.close_curlybrackets.enabled"); //$NON-NLS-1$
@@ -98,7 +102,7 @@
 	@Override
 	public void loadDefaults() {
 		fIsSmartByDefaultEnabled = true;
-		fSmartTabAction = TabAction.INSERT_INDENT_LEVEL;
+		fSmartTabAction = SMARTINSERT_TAB_ACTION_PREF.store2Usage(null);
 		fIsSmartCurlyBracketsEnabled = true;
 		fIsSmartRoundBracketsEnabled = true;
 		fIsSmartSquareBracketsEnabled = true;
diff --git a/r/org.eclipse.statet.r.ui/srcDebug/org/eclipse/statet/internal/r/debug/ui/preferences/LocalREnvConfigDialog.java b/r/org.eclipse.statet.r.ui/srcDebug/org/eclipse/statet/internal/r/debug/ui/preferences/LocalREnvConfigDialog.java
index 9fbca7e..4af0b43 100644
--- a/r/org.eclipse.statet.r.ui/srcDebug/org/eclipse/statet/internal/r/debug/ui/preferences/LocalREnvConfigDialog.java
+++ b/r/org.eclipse.statet.r.ui/srcDebug/org/eclipse/statet/internal/r/debug/ui/preferences/LocalREnvConfigDialog.java
@@ -33,7 +33,8 @@
 
 import org.eclipse.core.databinding.Binding;
 import org.eclipse.core.databinding.UpdateValueStrategy;
-import org.eclipse.core.databinding.beans.BeanProperties;
+import org.eclipse.core.databinding.beans.typed.BeanProperties;
+import org.eclipse.core.databinding.observable.value.IValueChangeListener;
 import org.eclipse.core.databinding.observable.value.ValueChangeEvent;
 import org.eclipse.core.databinding.validation.ValidationStatus;
 import org.eclipse.core.filesystem.EFS;
@@ -47,7 +48,7 @@
 import org.eclipse.core.runtime.Status;
 import org.eclipse.core.variables.IStringVariableManager;
 import org.eclipse.core.variables.VariablesPlugin;
-import org.eclipse.jface.databinding.swt.WidgetProperties;
+import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
 import org.eclipse.jface.dialogs.MessageDialog;
 import org.eclipse.jface.operation.IRunnableWithProgress;
 import org.eclipse.jface.viewers.CellEditor;
@@ -601,13 +602,13 @@
 	protected void addBindings(final DataBindingSupport db) {
 		// don't specify IREnvConfiguration.WorkingCopy for BeanProperties (missing with getter)
 		db.getContext().bindValue(
-				WidgetProperties.text(SWT.Modify).observe(this.nameControl),
+				WidgetProperties.text(SWT.Modify)
+						.observe(this.nameControl),
 				BeanProperties.value(IREnvConfiguration.PROP_NAME, String.class)
 						.observe(this.configModel),
-				new UpdateValueStrategy().setAfterGetValidator(
-						(final Object value) -> {
-							String s= (String) value;
-							s= s.trim();
+				new UpdateValueStrategy<String, String>()
+						.setAfterGetValidator((final String value) -> {
+							final String s= value.trim();
 							if (s.isEmpty()) {
 								return ValidationStatus.error(Messages.REnv_Detail_Name_error_Missing_message);
 							}
@@ -618,15 +619,15 @@
 								return ValidationStatus.error(Messages.REnv_Detail_Name_error_InvalidChar_message);
 							}
 							return ValidationStatus.ok();
-						} ),
+						}),
 				null );
 		if (this.rHomeControl != null) {
 			final Binding rHomeBinding= db.getContext().bindValue(
 					this.rHomeControl.getObservable(),
 					BeanProperties.value(IREnvConfiguration.PROP_RHOME, String.class)
 							.observe(this.configModel),
-					new UpdateValueStrategy().setAfterGetValidator(
-							(final Object value) -> {
+					new UpdateValueStrategy<String, String>()
+							.setAfterGetValidator((final String value) -> {
 								final IStatus status= LocalREnvConfigDialog.this.rHomeControl.getValidator().validate(value);
 								if (!status.isOK()) {
 									return status;
@@ -636,17 +637,20 @@
 								}
 								updateArchs(!LocalREnvConfigDialog.this.isNewConfig);
 								return ValidationStatus.ok();
-							} ),
+							}),
 					null );
-			rHomeBinding.getValidationStatus().addValueChangeListener(
-					(final ValueChangeEvent<? extends IStatus> event) -> {
-						final IStatus status= event.diff.getNewValue();
-						LocalREnvConfigDialog.this.loadButton.setEnabled(status.isOK());
-					} );
+			rHomeBinding.getValidationStatus().addValueChangeListener(new IValueChangeListener<IStatus>() {
+				@Override
+				public void handleValueChange(final ValueChangeEvent<? extends IStatus> event) {
+					final IStatus status= event.diff.getNewValue();
+					LocalREnvConfigDialog.this.loadButton.setEnabled(status.isOK());
+				}
+			});
 			rHomeBinding.validateTargetToModel();
 		}
 		db.getContext().bindValue(
-				WidgetProperties.text().observe(this.rArchControl),
+				WidgetProperties.text()
+						.observe(this.rArchControl),
 				BeanProperties.value(IREnvConfiguration.PROP_SUBARCH, String.class)
 						.observe(this.configModel) );
 		
diff --git a/r/org.eclipse.statet.r.ui/srcDebug/org/eclipse/statet/internal/r/debug/ui/preferences/REnvPreferencePage.java b/r/org.eclipse.statet.r.ui/srcDebug/org/eclipse/statet/internal/r/debug/ui/preferences/REnvPreferencePage.java
index fca5e43..432c5a9 100644
--- a/r/org.eclipse.statet.r.ui/srcDebug/org/eclipse/statet/internal/r/debug/ui/preferences/REnvPreferencePage.java
+++ b/r/org.eclipse.statet.r.ui/srcDebug/org/eclipse/statet/internal/r/debug/ui/preferences/REnvPreferencePage.java
@@ -38,8 +38,8 @@
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
-import org.eclipse.jface.databinding.swt.WidgetProperties;
-import org.eclipse.jface.databinding.viewers.ViewersObservables;
+import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
+import org.eclipse.jface.databinding.viewers.typed.ViewerProperties;
 import org.eclipse.jface.dialogs.Dialog;
 import org.eclipse.jface.viewers.ArrayContentProvider;
 import org.eclipse.jface.viewers.ColumnLabelProvider;
@@ -142,8 +142,8 @@
 	private TableViewer listViewer;
 	private ButtonGroup<IREnvConfiguration.WorkingCopy> listButtons;
 	
-	private final IObservableList<IREnvConfiguration> envList= new WritableList<>();
-	private final IObservableValue<IREnvConfiguration> envDefault= new WritableValue<>();
+	private final IObservableList<IREnvConfiguration.WorkingCopy> envList= new WritableList<>();
+	private final IObservableValue<IREnvConfiguration.WorkingCopy> envDefault= new WritableValue<>();
 	private final IObservableValue<IStatus> envListStatus= new WritableValue<>();
 	
 	private ComboViewer indexConsoleViewer;
@@ -452,10 +452,12 @@
 	@Override
 	protected void addBindings(final DataBindingSupport db) {
 		db.getContext().bindValue(
-				ViewersObservables.observeSingleSelection(this.indexConsoleViewer),
+				ViewerProperties.singleSelection(String.class)
+						.observe(this.indexConsoleViewer),
 				createObservable(RRunDebugPreferenceConstants.PREF_RENV_CHECK_UPDATE) );
 		db.getContext().bindValue(
-				WidgetProperties.selection().observe(this.networkEclipseControl),
+				WidgetProperties.buttonSelection()
+						.observe(this.networkEclipseControl),
 				createObservable(RCorePreferenceNodes.PREF_RENV_NETWORK_USE_ECLIPSE) );
 	}
 	
@@ -480,7 +482,7 @@
 		try {
 			final IREnvConfiguration defaultREnv= this.envDefault.getValue();
 			RCore.getREnvManager().set(
-					ImCollections.toList((List<IREnvConfiguration>) this.envList),
+					ImCollections.toList(this.envList),
 					(defaultREnv != null) ? defaultREnv.getREnv().getId() : null );
 			return true;
 		}
@@ -500,7 +502,7 @@
 		final REnv defaultEnv= manager.getDefault().resolve();
 		final List<IREnvConfiguration> rEnvConfigs= manager.getConfigurations();
 		for (final IREnvConfiguration rEnvConfig : rEnvConfigs) {
-			final IREnvConfiguration config= rEnvConfig.createWorkingCopy();
+			final IREnvConfiguration.WorkingCopy config= rEnvConfig.createWorkingCopy();
 			this.envList.add(config);
 			if (config.getREnv() == defaultEnv) {
 				this.envDefault.setValue(config);
diff --git a/r/org.eclipse.statet.r.ui/srcDebug/org/eclipse/statet/internal/r/debug/ui/preferences/RemoteREnvConfigDialog.java b/r/org.eclipse.statet.r.ui/srcDebug/org/eclipse/statet/internal/r/debug/ui/preferences/RemoteREnvConfigDialog.java
index 379a6db..bc2d016 100644
--- a/r/org.eclipse.statet.r.ui/srcDebug/org/eclipse/statet/internal/r/debug/ui/preferences/RemoteREnvConfigDialog.java
+++ b/r/org.eclipse.statet.r.ui/srcDebug/org/eclipse/statet/internal/r/debug/ui/preferences/RemoteREnvConfigDialog.java
@@ -19,11 +19,11 @@
 import java.util.Set;
 
 import org.eclipse.core.databinding.UpdateValueStrategy;
-import org.eclipse.core.databinding.beans.BeanProperties;
+import org.eclipse.core.databinding.beans.typed.BeanProperties;
 import org.eclipse.core.databinding.observable.value.IObservableValue;
 import org.eclipse.core.databinding.observable.value.SelectObservableValue;
 import org.eclipse.core.databinding.validation.ValidationStatus;
-import org.eclipse.jface.databinding.swt.WidgetProperties;
+import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.widgets.Button;
@@ -166,13 +166,13 @@
 	protected void addBindings(final DataBindingSupport db) {
 		// don't specify IREnvConfiguration.WorkingCopy for BeanProperties (missing with getter)
 		db.getContext().bindValue(
-				WidgetProperties.text(SWT.Modify).observe(this.nameControl),
+				WidgetProperties.text(SWT.Modify)
+						.observe(this.nameControl),
 				BeanProperties.value(IREnvConfiguration.PROP_NAME, String.class)
 						.observe(this.configModel),
-				new UpdateValueStrategy().setAfterGetValidator(
-						(final Object value) -> {
-							String s= (String) value;
-							s= s.trim();
+				new UpdateValueStrategy<String, String>()
+						.setAfterGetValidator((final String text) -> {
+							final String s= text.trim();
 							if (s.isEmpty()) {
 								return ValidationStatus.error(Messages.REnv_Detail_Name_error_Missing_message);
 							}
@@ -183,23 +183,26 @@
 								return ValidationStatus.error(Messages.REnv_Detail_Name_error_InvalidChar_message);
 							}
 							return ValidationStatus.ok();
-						} ),
+						}),
 				null );
 		
 		final IObservableValue<Boolean> indexDirectoryValue=
-				WidgetProperties.selection().observe(this.indexDirectorySelectionControl);
+				WidgetProperties.buttonSelection()
+						.observe(this.indexDirectorySelectionControl);
 		final IObservableValue<Boolean> indexServerValue=
-				WidgetProperties.selection().observe(this.indexServerSelectionControl);
+				WidgetProperties.buttonSelection()
+						.observe(this.indexServerSelectionControl);
 		
 		final SelectObservableValue<String> typeValue= new SelectObservableValue<>();
 		typeValue.addOption(REnvConfiguration.SHARED_DIRECTORY, indexDirectoryValue);
 		typeValue.addOption(REnvConfiguration.SHARED_SERVER, indexServerValue);
 		db.getContext().bindValue(typeValue,
 				BeanProperties.value(IREnvConfiguration.PROP_STATE_SHARED_TYPE, String.class)
-				.observe(this.configModel) );
+						.observe(this.configModel) );
 		
 		db.getContext().bindValue(
-				WidgetProperties.enabled().observe(this.indexDirectorResourceControl),
+				WidgetProperties.enabled()
+						.observe(this.indexDirectorResourceControl),
 				indexDirectoryValue );
 		db.getContext().bindValue(
 				this.indexDirectorResourceControl.getObservable(),
@@ -207,10 +210,12 @@
 						.observe(this.configModel) );
 		
 		db.getContext().bindValue(
-				WidgetProperties.enabled().observe(this.indexServerUrlControl),
+				WidgetProperties.enabled()
+						.observe(this.indexServerUrlControl),
 				indexServerValue );
 		db.getContext().bindValue(
-				WidgetProperties.text(SWT.Modify).observe(this.indexServerUrlControl),
+				WidgetProperties.text(SWT.Modify)
+						.observe(this.indexServerUrlControl),
 				BeanProperties.value(IREnvConfiguration.PROP_STATE_SHARED_SERVER, String.class)
 						.observe(this.configModel) );
 	}
diff --git a/r/org.eclipse.statet.r.ui/srcDebug/org/eclipse/statet/r/launching/ui/REnvTab.java b/r/org.eclipse.statet.r.ui/srcDebug/org/eclipse/statet/r/launching/ui/REnvTab.java
index bd34b01..f9b5a99 100644
--- a/r/org.eclipse.statet.r.ui/srcDebug/org/eclipse/statet/r/launching/ui/REnvTab.java
+++ b/r/org.eclipse.statet.r.ui/srcDebug/org/eclipse/statet/r/launching/ui/REnvTab.java
@@ -163,9 +163,12 @@
 	
 	@Override
 	protected void addBindings(final DataBindingContext dbc, final Realm realm) {
-		this.rEnvBinding= dbc.bindValue(this.rEnvControl.createObservable(realm), this.rEnvSettingValue,
-				new UpdateValueStrategy().setAfterGetValidator(
-						new UpdateableErrorValidator(this.rEnvControl.createValidator(dbc))),
+		this.rEnvBinding= dbc.bindValue(
+				this.rEnvControl.createObservable(realm),
+				this.rEnvSettingValue,
+				new UpdateValueStrategy<String, String>()
+						.setAfterGetValidator(new UpdateableErrorValidator<>(
+								this.rEnvControl.createValidator(dbc) )),
 				null );
 	}
 	
@@ -179,7 +182,7 @@
 	@Override
 	protected void doInitialize(final ILaunchConfiguration configuration) {
 		try {
-			final String code= configuration.getAttribute(RLaunching.ATTR_RENV_CODE, (String) null);
+			final String code= configuration.getAttribute(RLaunching.ATTR_RENV_CODE, (String)null);
 			this.rEnvSettingValue.setValue(code);
 		} catch (final CoreException e) {
 			this.rEnvSettingValue.setValue(null);
diff --git a/redocs/org.eclipse.statet.redocs.r/src/org/eclipse/statet/internal/redocs/r/Messages.java b/redocs/org.eclipse.statet.redocs.r/src/org/eclipse/statet/internal/redocs/r/Messages.java
index 5477a65..2d9a65d 100644
--- a/redocs/org.eclipse.statet.redocs.r/src/org/eclipse/statet/internal/redocs/r/Messages.java
+++ b/redocs/org.eclipse.statet.redocs.r/src/org/eclipse/statet/internal/redocs/r/Messages.java
@@ -16,7 +16,11 @@
 
 import org.eclipse.osgi.util.NLS;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
 
+
+@NonNullByDefault
+@SuppressWarnings("null")
 public class Messages extends NLS {
 	
 	
@@ -41,7 +45,6 @@
 	public static String ProcessingOperation_RunRCmdTool_Wd_error_SpecInvalid_message;
 	public static String ProcessingOperation_RunRCmdTool_RCmdResource_error_SpecInvalid_message;
 	public static String ProcessingOperation_RunRCmdTool_RCmdOptions_error_SpecInvalid_message;
-
 	
 	
 	static {
diff --git a/redocs/org.eclipse.statet.redocs.r/src/org/eclipse/statet/redocs/r/ui/processing/RunRCmdToolOperation.java b/redocs/org.eclipse.statet.redocs.r/src/org/eclipse/statet/redocs/r/ui/processing/RunRCmdToolOperation.java
index b94e293..0ba64e3 100644
--- a/redocs/org.eclipse.statet.redocs.r/src/org/eclipse/statet/redocs/r/ui/processing/RunRCmdToolOperation.java
+++ b/redocs/org.eclipse.statet.redocs.r/src/org/eclipse/statet/redocs/r/ui/processing/RunRCmdToolOperation.java
@@ -14,6 +14,8 @@
 
 package org.eclipse.statet.redocs.r.ui.processing;
 
+import static org.eclipse.statet.jcommons.lang.ObjectUtils.nonNullAssert;
+
 import java.util.HashMap;
 import java.util.Map;
 
@@ -24,6 +26,8 @@
 import org.eclipse.debug.ui.IDebugUIConstants;
 import org.eclipse.osgi.util.NLS;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
 import org.eclipse.statet.ecommons.debug.core.util.OverlayLaunchConfiguration;
 import org.eclipse.statet.ecommons.variables.core.VariableText2;
 import org.eclipse.statet.ecommons.variables.core.VariableUtils;
@@ -36,6 +40,7 @@
 import org.eclipse.statet.r.cmd.ui.launching.RCmdLaunching;
 
 
+@NonNullByDefault
 public class RunRCmdToolOperation extends AbstractLaunchConfigOperation {
 	
 	
@@ -68,10 +73,11 @@
 		additionalAttributes.put(IDebugUIConstants.ATTR_LAUNCH_IN_BACKGROUND, false);
 		
 		try {
-			String value= config.getAttribute(RCmdLaunching.WORKING_DIRECTORY_ATTR_NAME, ""); //$NON-NLS-1$
+			String value= nonNullAssert(config.getAttribute(
+					RCmdLaunching.WORKING_DIRECTORY_ATTR_NAME, "" )); //$NON-NLS-1$
 			if (value.isEmpty()) {
-				value= VariableUtils.getValue(getStepConfig().getToolConfig().getVariables()
-						.get(DocProcessingConfig.WD_LOC_VAR_NAME) );
+				value= VariableUtils.getValue(VariableUtils.getChecked(
+						getStepConfig().getToolConfig().getVariables(), DocProcessingConfig.WD_LOC_VAR_NAME ));
 				additionalAttributes.put(ExternalProgramLaunchConfig.WORKING_DIRECTORY_ATTR_NAME, value);
 			}
 			else {
diff --git a/redocs/org.eclipse.statet.redocs.r/src/org/eclipse/statet/redocs/r/ui/processing/RunRConsoleSnippetOperationSettings.java b/redocs/org.eclipse.statet.redocs.r/src/org/eclipse/statet/redocs/r/ui/processing/RunRConsoleSnippetOperationSettings.java
index 9f72731..438f972 100644
--- a/redocs/org.eclipse.statet.redocs.r/src/org/eclipse/statet/redocs/r/ui/processing/RunRConsoleSnippetOperationSettings.java
+++ b/redocs/org.eclipse.statet.redocs.r/src/org/eclipse/statet/redocs/r/ui/processing/RunRConsoleSnippetOperationSettings.java
@@ -21,7 +21,7 @@
 import org.eclipse.core.databinding.observable.Realm;
 import org.eclipse.core.databinding.observable.value.IObservableValue;
 import org.eclipse.core.databinding.observable.value.WritableValue;
-import org.eclipse.jface.databinding.swt.WidgetProperties;
+import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
 import org.eclipse.jface.dialogs.Dialog;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.SelectionAdapter;
@@ -33,6 +33,8 @@
 import org.eclipse.swt.widgets.MenuItem;
 import org.eclipse.ui.PlatformUI;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
 import org.eclipse.statet.ecommons.databinding.core.validation.UpdateableErrorValidator;
 import org.eclipse.statet.ecommons.resources.core.variables.ResourceVariables;
 import org.eclipse.statet.ecommons.templates.TemplateVariableProcessor;
@@ -55,6 +57,7 @@
 import org.eclipse.statet.r.ui.sourceediting.RTemplateSourceViewerConfigurator;
 
 
+@NonNullByDefault
 public class RunRConsoleSnippetOperationSettings extends DocProcessingOperationSettings {
 	
 	
@@ -82,7 +85,7 @@
 	public String getInfo() {
 		final String label= getLabel();
 		final String code= this.snippetValue.getValue();
-		return label + ":  " + ((code != null) ? limitInfo(code) : ""); //$NON-NLS-1$ //$NON-NLS-2$
+		return label + ":  " + limitInfo(code); //$NON-NLS-1$
 	}
 	
 	
@@ -91,7 +94,7 @@
 		super.init(tab);
 		
 		final Realm realm= getRealm();
-		this.snippetValue= new WritableValue<>(realm);
+		this.snippetValue= new WritableValue<>(realm, "", String.class); //$NON-NLS-1$
 	}
 	
 	@Override
@@ -174,12 +177,14 @@
 	@Override
 	protected void addBindings(final DataBindingContext dbc) {
 		dbc.bindValue(
-				WidgetProperties.text(SWT.Modify).observe(this.snippetEditor.getTextControl()),
+				WidgetProperties.text(SWT.Modify)
+						.observe(this.snippetEditor.getTextControl()),
 				this.snippetValue,
-				new UpdateValueStrategy().setAfterGetValidator(
-						new UpdateableErrorValidator(new VariableTextValidator(
-								this.snippetVariableResolver,
-								Messages.ProcessingOperation_RunRConsoleSnippet_RCode_error_SpecInvalid_message ))),
+				new UpdateValueStrategy<String, String>()
+						.setAfterGetValidator(new UpdateableErrorValidator<>(
+								new VariableTextValidator(
+										this.snippetVariableResolver,
+										Messages.ProcessingOperation_RunRConsoleSnippet_RCode_error_SpecInvalid_message ))),
 				null );
 	}
 	
diff --git a/redocs/org.eclipse.statet.redocs.r/src/org/eclipse/statet/redocs/r/ui/processing/RweaveDocProcessingManager.java b/redocs/org.eclipse.statet.redocs.r/src/org/eclipse/statet/redocs/r/ui/processing/RweaveDocProcessingManager.java
index c970acf..ea91fd6 100644
--- a/redocs/org.eclipse.statet.redocs.r/src/org/eclipse/statet/redocs/r/ui/processing/RweaveDocProcessingManager.java
+++ b/redocs/org.eclipse.statet.redocs.r/src/org/eclipse/statet/redocs/r/ui/processing/RweaveDocProcessingManager.java
@@ -16,11 +16,15 @@
 
 import org.eclipse.swt.graphics.Image;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 import org.eclipse.statet.docmlet.base.ui.processing.DocProcessingManager;
 import org.eclipse.statet.internal.redocs.r.Messages;
 import org.eclipse.statet.redocs.r.ui.RedocsRUIResources;
 
 
+@NonNullByDefault
 public class RweaveDocProcessingManager extends DocProcessingManager {
 	
 	
@@ -29,7 +33,7 @@
 	
 	
 	@Override
-	protected Image getActionImage(final byte bits) {
+	protected @Nullable Image getActionImage(final byte bits) {
 		switch (bits) {
 		case WEAVE_BIT:
 			return RedocsRUIResources.INSTANCE.getImage(RedocsRUIResources.TOOL_RWEAVE_IMAGE_ID);
diff --git a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/ui/config/EditorPreferencePage.java b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/ui/config/EditorPreferencePage.java
index 8f11274..e0983e9 100644
--- a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/ui/config/EditorPreferencePage.java
+++ b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/ui/config/EditorPreferencePage.java
@@ -19,7 +19,7 @@
 import java.util.HashMap;
 import java.util.Map;
 
-import org.eclipse.jface.databinding.swt.WidgetProperties;
+import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
 import org.eclipse.osgi.util.NLS;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.layout.GridData;
@@ -27,6 +27,9 @@
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Link;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 import org.eclipse.statet.ecommons.databinding.jface.DataBindingSupport;
 import org.eclipse.statet.ecommons.preferences.core.Preference;
 import org.eclipse.statet.ecommons.preferences.ui.ConfigurationBlock;
@@ -39,6 +42,7 @@
 import org.eclipse.statet.redocs.tex.r.ui.sourceediting.TexRweaveEditingOptions;
 
 
+@NonNullByDefault
 public class EditorPreferencePage extends ConfigurationBlockPreferencePage {
 	
 	
@@ -54,13 +58,14 @@
 }
 
 
+@NonNullByDefault
 class EditorConfigurationBlock extends ManagedConfigurationBlock {
 	
 	
 	private Button spellEnableControl;
 	
 	
-	public EditorConfigurationBlock(final StatusChangeListener statusListener) {
+	public EditorConfigurationBlock(final @Nullable StatusChangeListener statusListener) {
 		super(null, Messages.EditorOptions_title, statusListener);
 	}
 	
@@ -120,7 +125,8 @@
 	@Override
 	protected void addBindings(final DataBindingSupport db) {
 		db.getContext().bindValue(
-				WidgetProperties.selection().observe(this.spellEnableControl),
+				WidgetProperties.buttonSelection()
+						.observe(this.spellEnableControl),
 				createObservable(LTX_SPELLCHECK_ENABLED_PREF) );
 	}
 	
diff --git a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/ui/config/Messages.java b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/ui/config/Messages.java
index 203e7e6..f0744ce 100644
--- a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/ui/config/Messages.java
+++ b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/ui/config/Messages.java
@@ -16,7 +16,11 @@
 
 import org.eclipse.osgi.util.NLS;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
 
+
+@NonNullByDefault
+@SuppressWarnings("null")
 public class Messages extends NLS {
 	
 	
diff --git a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/ui/processing/Messages.java b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/ui/processing/Messages.java
index 1ea9857..6935489 100644
--- a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/ui/processing/Messages.java
+++ b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/ui/processing/Messages.java
@@ -16,7 +16,11 @@
 
 import org.eclipse.osgi.util.NLS;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
 
+
+@NonNullByDefault
+@SuppressWarnings("null")
 public class Messages extends NLS {
 	
 	
diff --git a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/ui/processing/ProduceTab.java b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/ui/processing/ProduceTab.java
index 5fae6d5..b41e69a 100644
--- a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/ui/processing/ProduceTab.java
+++ b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/ui/processing/ProduceTab.java
@@ -23,6 +23,8 @@
 import org.eclipse.swt.graphics.Image;
 
 import org.eclipse.statet.jcommons.collections.ImCollections;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
 
 import org.eclipse.statet.docmlet.base.ui.processing.DocProcessingConfig.Format;
 import org.eclipse.statet.docmlet.base.ui.processing.DocProcessingConfigIOStepTab;
@@ -35,6 +37,7 @@
 import org.eclipse.statet.redocs.r.ui.processing.RunRConsoleSnippetOperationSettings;
 
 
+@NonNullByDefault
 public class ProduceTab extends DocProcessingConfigIOStepTab
 		implements DocProcessingConfigStepTab.Listener {
 	
@@ -109,7 +112,7 @@
 	}
 	
 	@Override
-	protected IFile getInputFile(final Format format) throws CoreException {
+	protected @Nullable IFile getInputFile(final Format format) throws CoreException {
 		if (this.weaveTab.isEnabled()) {
 			return this.weaveTab.getOutputFile();
 		}
diff --git a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/ui/processing/TexRweaveConfig.java b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/ui/processing/TexRweaveConfig.java
index a4a7dd6..f7364f6 100644
--- a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/ui/processing/TexRweaveConfig.java
+++ b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/ui/processing/TexRweaveConfig.java
@@ -18,10 +18,12 @@
 
 import org.eclipse.statet.jcommons.collections.ImCollections;
 import org.eclipse.statet.jcommons.collections.ImList;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
 
 import org.eclipse.statet.redocs.r.ui.processing.RWeaveDocProcessingConfig;
 
 
+@NonNullByDefault
 public class TexRweaveConfig extends RWeaveDocProcessingConfig {
 	
 	
diff --git a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/ui/processing/TexRweaveConfigTabGroup.java b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/ui/processing/TexRweaveConfigTabGroup.java
index 3a95996..f75e990 100644
--- a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/ui/processing/TexRweaveConfigTabGroup.java
+++ b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/ui/processing/TexRweaveConfigTabGroup.java
@@ -24,6 +24,7 @@
 
 import org.eclipse.statet.jcommons.collections.ImCollections;
 import org.eclipse.statet.jcommons.collections.ImList;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
 
 import org.eclipse.statet.ecommons.debug.ui.config.LaunchConfigPresets;
 import org.eclipse.statet.ecommons.debug.ui.util.CheckedCommonTab;
@@ -36,6 +37,7 @@
 /**
  * Tab group for Sweave (LaTeX+R) output creation toolchain.
  */
+@NonNullByDefault
 public class TexRweaveConfigTabGroup extends AbstractLaunchConfigurationTabGroup {
 	
 	
diff --git a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/ui/processing/TexRweaveLaunchDelegate.java b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/ui/processing/TexRweaveLaunchDelegate.java
index b172c49..c9af1dc 100644
--- a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/ui/processing/TexRweaveLaunchDelegate.java
+++ b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/ui/processing/TexRweaveLaunchDelegate.java
@@ -26,6 +26,9 @@
 import org.eclipse.debug.core.ILaunch;
 import org.eclipse.debug.core.ILaunchConfiguration;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 import org.eclipse.statet.docmlet.base.ui.processing.DocProcessingOperation;
 import org.eclipse.statet.docmlet.base.ui.processing.DocProcessingToolConfig;
 import org.eclipse.statet.docmlet.base.ui.processing.DocProcessingToolConfig.StepConfig;
@@ -42,6 +45,7 @@
 import org.eclipse.statet.redocs.tex.r.ui.TexRweaveUI;
 
 
+@NonNullByDefault
 public class TexRweaveLaunchDelegate extends DocProcessingToolLaunchDelegate {
 	
 	
@@ -111,7 +115,7 @@
 		
 		
 		@Override
-		protected DocProcessingOperation createStepOperation(final String id) {
+		protected @Nullable DocProcessingOperation createStepOperation(final String id) {
 			if (id.equals(RunRConsoleSnippetOperation.ID)) {
 				return new RunRConsoleSnippetOperation();
 			}
@@ -140,7 +144,7 @@
 	@Override
 	public void launch(final ILaunchConfiguration configuration, final String mode,
 			final ILaunch launch,
-			final IProgressMonitor monitor) throws CoreException {
+			final @Nullable IProgressMonitor monitor) throws CoreException {
 		final Config config= new Config();
 		if (!config.initRun(configuration)) {
 			return; // nothing to do
diff --git a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/ui/processing/TexTab.java b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/ui/processing/TexTab.java
index ecec2c2..ceff1e4 100644
--- a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/ui/processing/TexTab.java
+++ b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/ui/processing/TexTab.java
@@ -26,6 +26,7 @@
 import org.eclipse.swt.widgets.Composite;
 
 import org.eclipse.statet.jcommons.collections.ImCollections;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
 
 import org.eclipse.statet.ecommons.ui.util.LayoutUtils;
 
@@ -39,6 +40,7 @@
 import org.eclipse.statet.redocs.r.ui.processing.RunRConsoleSnippetOperationSettings;
 
 
+@NonNullByDefault
 public class TexTab extends DocProcessingConfigIOStepTab {
 	
 	
diff --git a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/redocs/tex/r/ui/sourceediting/TexRweaveEditingOptions.java b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/redocs/tex/r/ui/sourceediting/TexRweaveEditingOptions.java
index f7cdbaa..6035db8 100644
--- a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/redocs/tex/r/ui/sourceediting/TexRweaveEditingOptions.java
+++ b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/redocs/tex/r/ui/sourceediting/TexRweaveEditingOptions.java
@@ -14,11 +14,14 @@
 
 package org.eclipse.statet.redocs.tex.r.ui.sourceediting;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
 import org.eclipse.statet.ecommons.preferences.core.Preference.BooleanPref;
 
 import org.eclipse.statet.redocs.tex.r.ui.TexRweaveUI;
 
 
+@NonNullByDefault
 public class TexRweaveEditingOptions {
 	
 	
diff --git a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/ui/config/EditorPreferencePage.java b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/ui/config/EditorPreferencePage.java
index 4d6dfe5..0e53f6e 100644
--- a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/ui/config/EditorPreferencePage.java
+++ b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/ui/config/EditorPreferencePage.java
@@ -19,7 +19,7 @@
 import java.util.HashMap;
 import java.util.Map;
 
-import org.eclipse.jface.databinding.swt.WidgetProperties;
+import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
 import org.eclipse.osgi.util.NLS;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.layout.GridData;
@@ -27,6 +27,9 @@
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Link;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 import org.eclipse.statet.ecommons.databinding.jface.DataBindingSupport;
 import org.eclipse.statet.ecommons.preferences.core.Preference;
 import org.eclipse.statet.ecommons.preferences.ui.ConfigurationBlock;
@@ -39,6 +42,7 @@
 import org.eclipse.statet.redocs.wikitext.r.ui.sourceediting.WikitextRweaveEditingSettings;
 
 
+@NonNullByDefault
 public class EditorPreferencePage extends ConfigurationBlockPreferencePage {
 	
 	
@@ -54,13 +58,14 @@
 }
 
 
+@NonNullByDefault
 class EditorConfigurationBlock extends ManagedConfigurationBlock {
 	
 	
 	private Button spellEnableControl;
 	
 	
-	public EditorConfigurationBlock(final StatusChangeListener statusListener) {
+	public EditorConfigurationBlock(final @Nullable StatusChangeListener statusListener) {
 		super(null, statusListener);
 	}
 	
@@ -120,7 +125,8 @@
 	@Override
 	protected void addBindings(final DataBindingSupport db) {
 		db.getContext().bindValue(
-				WidgetProperties.selection().observe(this.spellEnableControl),
+				WidgetProperties.buttonSelection()
+						.observe(this.spellEnableControl),
 				createObservable(WIKIDOC_SPELLCHECK_ENABLED_PREF) );
 	}
 	
diff --git a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/ui/config/Messages.java b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/ui/config/Messages.java
index 19eb7b1..050834e 100644
--- a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/ui/config/Messages.java
+++ b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/ui/config/Messages.java
@@ -16,7 +16,11 @@
 
 import org.eclipse.osgi.util.NLS;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
 
+
+@NonNullByDefault
+@SuppressWarnings("null")
 public class Messages extends NLS {
 	
 	
diff --git a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/ui/processing/Messages.java b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/ui/processing/Messages.java
index eb5f30d..7f656cd 100644
--- a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/ui/processing/Messages.java
+++ b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/ui/processing/Messages.java
@@ -16,7 +16,11 @@
 
 import org.eclipse.osgi.util.NLS;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
 
+
+@NonNullByDefault
+@SuppressWarnings("null")
 public class Messages extends NLS {
 	
 	
diff --git a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/ui/processing/ProduceTab.java b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/ui/processing/ProduceTab.java
index 2548c81..08d4855 100644
--- a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/ui/processing/ProduceTab.java
+++ b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/ui/processing/ProduceTab.java
@@ -23,6 +23,8 @@
 import org.eclipse.swt.graphics.Image;
 
 import org.eclipse.statet.jcommons.collections.ImCollections;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
 
 import org.eclipse.statet.docmlet.base.ui.processing.DocProcessingConfig.Format;
 import org.eclipse.statet.docmlet.base.ui.processing.DocProcessingConfigIOStepTab;
@@ -35,6 +37,7 @@
 import org.eclipse.statet.redocs.r.ui.processing.RunRConsoleSnippetOperationSettings;
 
 
+@NonNullByDefault
 public class ProduceTab extends DocProcessingConfigIOStepTab
 		implements DocProcessingConfigStepTab.Listener {
 	
@@ -109,7 +112,7 @@
 	}
 	
 	@Override
-	protected IFile getInputFile(final Format format) throws CoreException {
+	protected @Nullable IFile getInputFile(final Format format) throws CoreException {
 		if (this.weaveTab.isEnabled()) {
 			return this.weaveTab.getOutputFile();
 		}
diff --git a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/ui/processing/WeaveTab.java b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/ui/processing/WeaveTab.java
index ea61323..10b67f2 100644
--- a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/ui/processing/WeaveTab.java
+++ b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/ui/processing/WeaveTab.java
@@ -26,6 +26,7 @@
 import org.eclipse.swt.widgets.Composite;
 
 import org.eclipse.statet.jcommons.collections.ImCollections;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
 
 import org.eclipse.statet.ecommons.ui.util.LayoutUtils;
 
@@ -39,6 +40,7 @@
 import org.eclipse.statet.redocs.r.ui.processing.RunRConsoleSnippetOperationSettings;
 
 
+@NonNullByDefault
 public class WeaveTab extends DocProcessingConfigIOStepTab {
 	
 	
diff --git a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/ui/processing/WikitextRweaveConfig.java b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/ui/processing/WikitextRweaveConfig.java
index d4d4598..c24497e 100644
--- a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/ui/processing/WikitextRweaveConfig.java
+++ b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/ui/processing/WikitextRweaveConfig.java
@@ -18,10 +18,13 @@
 
 import org.eclipse.statet.jcommons.collections.ImCollections;
 import org.eclipse.statet.jcommons.collections.ImList;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
 
 import org.eclipse.statet.redocs.r.ui.processing.RWeaveDocProcessingConfig;
 
 
+@NonNullByDefault
 public class WikitextRweaveConfig extends RWeaveDocProcessingConfig {
 	
 	
@@ -46,7 +49,7 @@
 			Messages.Format_AutoWikitext_label, "md / textile / \u2026") { //$NON-NLS-1$
 		
 		@Override
-		public String getExt(final String inputExt) {
+		public @Nullable String getExt(final @Nullable String inputExt) {
 			if (inputExt != null && inputExt.length() > 1
 					&& (inputExt.charAt(0) == 'R' || inputExt.charAt(0) == 'r') ) {
 				return inputExt.substring(1);
diff --git a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/ui/processing/WikitextRweaveConfigTabGroup.java b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/ui/processing/WikitextRweaveConfigTabGroup.java
index 91da0ce..0e1fdc7 100644
--- a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/ui/processing/WikitextRweaveConfigTabGroup.java
+++ b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/ui/processing/WikitextRweaveConfigTabGroup.java
@@ -24,6 +24,7 @@
 
 import org.eclipse.statet.jcommons.collections.ImCollections;
 import org.eclipse.statet.jcommons.collections.ImList;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
 
 import org.eclipse.statet.ecommons.debug.ui.config.LaunchConfigPresets;
 import org.eclipse.statet.ecommons.debug.ui.util.CheckedCommonTab;
@@ -36,6 +37,7 @@
 /**
  * Tab group for Wikitext+R output creation toolchain.
  */
+@NonNullByDefault
 public class WikitextRweaveConfigTabGroup extends AbstractLaunchConfigurationTabGroup {
 	
 	
diff --git a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/ui/processing/WikitextRweaveLaunchDelegate.java b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/ui/processing/WikitextRweaveLaunchDelegate.java
index 08eaf5b..249d328 100644
--- a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/ui/processing/WikitextRweaveLaunchDelegate.java
+++ b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/ui/processing/WikitextRweaveLaunchDelegate.java
@@ -27,6 +27,9 @@
 import org.eclipse.debug.core.ILaunchConfiguration;
 import org.eclipse.osgi.util.NLS;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 import org.eclipse.statet.docmlet.base.ui.processing.DocProcessingOperation;
 import org.eclipse.statet.docmlet.base.ui.processing.DocProcessingToolConfig;
 import org.eclipse.statet.docmlet.base.ui.processing.DocProcessingToolConfig.StepConfig;
@@ -44,6 +47,7 @@
 import org.eclipse.statet.redocs.wikitext.r.ui.WikitextRweaveUI;
 
 
+@NonNullByDefault
 public class WikitextRweaveLaunchDelegate extends DocProcessingToolLaunchDelegate {
 	
 	
@@ -134,7 +138,7 @@
 		}
 		
 		@Override
-		protected DocProcessingOperation createStepOperation(final String id) {
+		protected @Nullable DocProcessingOperation createStepOperation(final String id) {
 			if (id.equals(RunRConsoleSnippetOperation.ID)) {
 				return new RunRConsoleSnippetOperation();
 			}
diff --git a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/redocs/wikitext/r/ui/sourceediting/WikitextRweaveEditingSettings.java b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/redocs/wikitext/r/ui/sourceediting/WikitextRweaveEditingSettings.java
index 8c65c4c..3f3d84c 100644
--- a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/redocs/wikitext/r/ui/sourceediting/WikitextRweaveEditingSettings.java
+++ b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/redocs/wikitext/r/ui/sourceediting/WikitextRweaveEditingSettings.java
@@ -14,11 +14,14 @@
 
 package org.eclipse.statet.redocs.wikitext.r.ui.sourceediting;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
 import org.eclipse.statet.ecommons.preferences.core.Preference.BooleanPref;
 
 import org.eclipse.statet.redocs.wikitext.r.ui.WikitextRweaveUI;
 
 
+@NonNullByDefault
 public class WikitextRweaveEditingSettings {
 	
 	
diff --git a/rtm/org.eclipse.statet.rtm.base.core/src/org/eclipse/statet/rtm/rtdata/types/RExpr.java b/rtm/org.eclipse.statet.rtm.base.core/src/org/eclipse/statet/rtm/rtdata/types/RExpr.java
index 63a13a3..8488f8f 100644
--- a/rtm/org.eclipse.statet.rtm.base.core/src/org/eclipse/statet/rtm/rtdata/types/RExpr.java
+++ b/rtm/org.eclipse.statet.rtm.base.core/src/org/eclipse/statet/rtm/rtdata/types/RExpr.java
@@ -14,7 +14,11 @@
 
 package org.eclipse.statet.rtm.rtdata.types;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
 
+
+@NonNullByDefault
 public class RExpr {
 	
 	
@@ -40,7 +44,7 @@
 	}
 	
 	@Override
-	public boolean equals(final Object obj) {
+	public boolean equals(final @Nullable Object obj) {
 		if (this == obj) {
 			return true;
 		}
diff --git a/rtm/org.eclipse.statet.rtm.base.ui/src/org/eclipse/statet/ecommons/emf/ui/forms/EObjectListProperty.java b/rtm/org.eclipse.statet.rtm.base.ui/src/org/eclipse/statet/ecommons/emf/ui/forms/EObjectListProperty.java
index 25d0548..3bcbec1 100644
--- a/rtm/org.eclipse.statet.rtm.base.ui/src/org/eclipse/statet/ecommons/emf/ui/forms/EObjectListProperty.java
+++ b/rtm/org.eclipse.statet.rtm.base.ui/src/org/eclipse/statet/ecommons/emf/ui/forms/EObjectListProperty.java
@@ -38,7 +38,7 @@
 import org.eclipse.jface.action.IContributionItem;
 import org.eclipse.jface.action.MenuManager;
 import org.eclipse.jface.databinding.viewers.ObservableListContentProvider;
-import org.eclipse.jface.databinding.viewers.ViewersObservables;
+import org.eclipse.jface.databinding.viewers.typed.ViewerProperties;
 import org.eclipse.jface.viewers.ISelectionProvider;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.TableViewer;
@@ -230,7 +230,9 @@
 					getEditingDomain(), this.widget.viewer ));
 		}
 		
-		this.singleSelectionObservable= ViewersObservables.observeSinglePostSelection(this.widget.viewer);
+		this.singleSelectionObservable=
+				ViewerProperties.singlePostSelection((Class<TProperty>)this.modelObservable.getElementType())
+						.observe(this.widget.viewer);
 		
 		this.buttonGroup.updateState();
 	}
diff --git a/rtm/org.eclipse.statet.rtm.base.ui/src/org/eclipse/statet/ecommons/emf/ui/forms/TextProperty.java b/rtm/org.eclipse.statet.rtm.base.ui/src/org/eclipse/statet/ecommons/emf/ui/forms/TextProperty.java
index 5dd05e5..5b8edd6 100644
--- a/rtm/org.eclipse.statet.rtm.base.ui/src/org/eclipse/statet/ecommons/emf/ui/forms/TextProperty.java
+++ b/rtm/org.eclipse.statet.rtm.base.ui/src/org/eclipse/statet/ecommons/emf/ui/forms/TextProperty.java
@@ -19,7 +19,7 @@
 import org.eclipse.emf.databinding.edit.IEMFEditValueProperty;
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.EStructuralFeature;
-import org.eclipse.jface.databinding.swt.WidgetProperties;
+import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
@@ -28,13 +28,12 @@
 import org.eclipse.statet.ecommons.emf.core.databinding.IEMFEditContext;
 
 
-
 public class TextProperty extends EFProperty {
 	
 	
 	private Text widget;
 	
-	private IObservableValue modelObservable;
+	private IObservableValue<String> modelObservable;
 	
 	
 	public TextProperty(final String label, final String tooltip,
@@ -63,14 +62,16 @@
 		final IEMFEditValueProperty emfProperty= EMFEditProperties.value(getEditingDomain(),
 				getEFeature() );
 		this.modelObservable= emfProperty.observeDetail(getBaseObservable());
-		final IObservableValue swtObservable= WidgetProperties.text(SWT.Modify).observe(
-				getRealm(), this.widget );
+		final IObservableValue<String> swtObservable= WidgetProperties.text(SWT.Modify)
+				.observe(getRealm(), this.widget );
 		
-		getDataBindingContext().bindValue(swtObservable, this.modelObservable);
+		getDataBindingContext().bindValue(
+				swtObservable,
+				this.modelObservable);
 	}
 	
 	@Override
-	public IObservableValue getPropertyObservable() {
+	public IObservableValue<String> getPropertyObservable() {
 		return this.modelObservable;
 	}
 	
diff --git a/rtm/org.eclipse.statet.rtm.base.ui/src/org/eclipse/statet/rtm/base/ui/actions/PerspectiveUtil.java b/rtm/org.eclipse.statet.rtm.base.ui/src/org/eclipse/statet/rtm/base/ui/actions/PerspectiveUtil.java
index a169ba5..96e09ec 100644
--- a/rtm/org.eclipse.statet.rtm.base.ui/src/org/eclipse/statet/rtm/base/ui/actions/PerspectiveUtil.java
+++ b/rtm/org.eclipse.statet.rtm.base.ui/src/org/eclipse/statet/rtm/base/ui/actions/PerspectiveUtil.java
@@ -41,7 +41,7 @@
 import org.eclipse.ui.statushandlers.StatusManager;
 
 import org.eclipse.statet.ecommons.preferences.core.Preference;
-import org.eclipse.statet.ecommons.preferences.core.Preference.StringPref2;
+import org.eclipse.statet.ecommons.preferences.core.Preference.NullableStringPref;
 import org.eclipse.statet.ecommons.preferences.core.util.PreferenceUtils;
 import org.eclipse.statet.ecommons.ui.util.UIAccess;
 
@@ -67,7 +67,7 @@
 		if (finalPerspId == null) {
 			return;
 		}
-		final Preference<String> pref= new StringPref2(QUALIFIER, "SwitchTo-" + finalPerspId + "-.action"); //$NON-NLS-1$ //$NON-NLS-2$
+		final Preference<String> pref= new NullableStringPref(QUALIFIER, "SwitchTo-" + finalPerspId + "-.action"); //$NON-NLS-1$ //$NON-NLS-2$
 		
 		final String prefValue= PreferenceUtils.getInstancePrefs().getPreferenceValue(pref);
 		
diff --git a/rtm/org.eclipse.statet.rtm.base.ui/src/org/eclipse/statet/rtm/base/ui/rexpr/RExpr2StringConverter.java b/rtm/org.eclipse.statet.rtm.base.ui/src/org/eclipse/statet/rtm/base/ui/rexpr/RExpr2StringConverter.java
index c59e7c6..6407872 100644
--- a/rtm/org.eclipse.statet.rtm.base.ui/src/org/eclipse/statet/rtm/base/ui/rexpr/RExpr2StringConverter.java
+++ b/rtm/org.eclipse.statet.rtm.base.ui/src/org/eclipse/statet/rtm/base/ui/rexpr/RExpr2StringConverter.java
@@ -16,10 +16,14 @@
 
 import org.eclipse.core.databinding.conversion.IConverter;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 import org.eclipse.statet.rtm.rtdata.types.RExpr;
 
 
-public class RExpr2StringConverter implements IConverter {
+@NonNullByDefault
+public class RExpr2StringConverter implements IConverter<@Nullable RExpr, String> {
 	
 	
 	public RExpr2StringConverter() {
@@ -37,11 +41,11 @@
 	}
 	
 	@Override
-	public String convert(final Object fromObject) {
+	public String convert(final @Nullable RExpr fromObject) {
 		if (fromObject == null) {
 			return ""; //$NON-NLS-1$
 		}
-		return ((RExpr) fromObject).getExpr();
+		return fromObject.getExpr();
 	}
 	
 }
diff --git a/rtm/org.eclipse.statet.rtm.base.ui/src/org/eclipse/statet/rtm/base/ui/rexpr/RExprListProperty.java b/rtm/org.eclipse.statet.rtm.base.ui/src/org/eclipse/statet/rtm/base/ui/rexpr/RExprListProperty.java
index ddf76bc..d87ea2b 100644
--- a/rtm/org.eclipse.statet.rtm.base.ui/src/org/eclipse/statet/rtm/base/ui/rexpr/RExprListProperty.java
+++ b/rtm/org.eclipse.statet.rtm.base.ui/src/org/eclipse/statet/rtm/base/ui/rexpr/RExprListProperty.java
@@ -37,7 +37,7 @@
 import org.eclipse.emf.edit.command.MoveCommand;
 import org.eclipse.emf.edit.command.RemoveCommand;
 import org.eclipse.emf.edit.command.SetCommand;
-import org.eclipse.jface.databinding.swt.WidgetProperties;
+import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
 import org.eclipse.jface.databinding.viewers.ObservableListContentProvider;
 import org.eclipse.jface.databinding.viewers.ObservableValueEditingSupport;
 import org.eclipse.jface.util.LocalSelectionTransfer;
@@ -55,6 +55,8 @@
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
 
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 import org.eclipse.statet.ecommons.emf.core.IContext;
 import org.eclipse.statet.ecommons.emf.core.databinding.IEMFEditContext;
 import org.eclipse.statet.ecommons.emf.core.databinding.IEMFEditPropertyContext;
@@ -74,7 +76,7 @@
 public class RExprListProperty extends EFProperty implements ButtonGroup.IActions<RTypedExpr> {
 	
 	
-	private class RExprEditing extends ObservableValueEditingSupport {
+	private class RExprEditing extends ObservableValueEditingSupport<RTypedExpr, RTypedExpr, String> {
 		
 		
 		private CellEditor cellEditor;
@@ -104,25 +106,25 @@
 		
 		@Override
 		protected IObservableValue<String> doCreateCellEditorObservable(final CellEditor cellEditor) {
-//			return new ObjValueObservable<RTypedExpr>(this.modelObservable.getRealm(),
-//					(IObjValueWidget<RTypedExpr>) this.cellEditor.getControl() );
 			return WidgetProperties.text(SWT.Modify)
-					.observe(((TextCellEditor) this.cellEditor).getControl());
+					.observe(((TextCellEditor)this.cellEditor).getControl());
 		}
 		
 		@Override
-		protected Binding createBinding(final IObservableValue target, final IObservableValue model) {
-			return getDataBindingContext().bindValue(target, model,
-					new UpdateValueStrategy(UpdateValueStrategy.POLICY_CONVERT)
+		protected Binding createBinding(final IObservableValue<String> target, final IObservableValue<RTypedExpr> model) {
+			return getDataBindingContext().bindValue(
+					target,
+					model,
+					new UpdateValueStrategy<String, @Nullable RTypedExpr>(UpdateValueStrategy.POLICY_CONVERT)
 							.setConverter(new String2RTypedExprConverter(RExprListProperty.this.types.getDefaultTypeKey())),
-					new UpdateValueStrategy()
+					new UpdateValueStrategy<@Nullable RTypedExpr, String>()
 							.setConverter(new RExpr2StringConverter()) );
 		}
 		
 		@Override
-		protected IObservableValue<RTypedExpr> doCreateElementObservable(final Object element, final ViewerCell cell) {
+		protected IObservableValue<RTypedExpr> doCreateElementObservable(final RTypedExpr element, final ViewerCell cell) {
 			return new AbstractObservableValue<RTypedExpr>() {
-				RTypedExpr value= (RTypedExpr) element;
+				RTypedExpr value= element;
 				@Override
 				public Object getValueType() {
 					return RTypedExpr.class;
@@ -132,7 +134,7 @@
 					return this.value;
 				}
 				@Override
-				protected void doSetValue(final RTypedExpr value) {
+				protected void doSetValue(final @Nullable RTypedExpr value) {
 					final int index= getIndex(value);
 					final CommandStack commandStack= getEditingDomain().getCommandStack();
 					final IEMFObservable emfObservable= (IEMFObservable) RExprListProperty.this.modelObservable;
diff --git a/rtm/org.eclipse.statet.rtm.base.ui/src/org/eclipse/statet/rtm/base/ui/rexpr/String2RTypedExprConverter.java b/rtm/org.eclipse.statet.rtm.base.ui/src/org/eclipse/statet/rtm/base/ui/rexpr/String2RTypedExprConverter.java
index 506c736..632000b 100644
--- a/rtm/org.eclipse.statet.rtm.base.ui/src/org/eclipse/statet/rtm/base/ui/rexpr/String2RTypedExprConverter.java
+++ b/rtm/org.eclipse.statet.rtm.base.ui/src/org/eclipse/statet/rtm/base/ui/rexpr/String2RTypedExprConverter.java
@@ -16,10 +16,14 @@
 
 import org.eclipse.core.databinding.conversion.IConverter;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 import org.eclipse.statet.rtm.rtdata.types.RTypedExpr;
 
 
-public class String2RTypedExprConverter implements IConverter {
+@NonNullByDefault
+public class String2RTypedExprConverter implements IConverter<String, @Nullable RTypedExpr> {
 	
 	
 	private final String type;
@@ -45,12 +49,12 @@
 	}
 	
 	@Override
-	public RTypedExpr convert(final Object fromObject) {
-		final String s= (String) fromObject;
+	public @Nullable RTypedExpr convert(final @Nullable String fromObject) {
+		final String s= fromObject;
 		if (s == null || s.isEmpty()) {
 			return null;
 		}
-		return new RTypedExpr(this.type, (String) fromObject);
+		return new RTypedExpr(this.type, fromObject);
 	}
 	
 }