diff --git a/CHANGES.md b/CHANGES.md
new file mode 100644
index 0000000..09c232c
--- /dev/null
+++ b/CHANGES.md
@@ -0,0 +1,9 @@
+# Notable Changes in StatET RJ
+
+## RJ 3.0.0 ~ StatET 4.0.0
+
+### General
+
+  * All bundles require the bundle `org.eclipse.statet.jcommons.util`.
+
+  * Large parts of API provide nullable annotations. (Bug 539045)
diff --git a/core/org.eclipse.statet.rj.client/src/org/eclipse/statet/rj/server/client/AbstractRJComClient.java b/core/org.eclipse.statet.rj.client/src/org/eclipse/statet/rj/server/client/AbstractRJComClient.java
index 121cdef..50d7f98 100644
--- a/core/org.eclipse.statet.rj.client/src/org/eclipse/statet/rj/server/client/AbstractRJComClient.java
+++ b/core/org.eclipse.statet.rj.client/src/org/eclipse/statet/rj/server/client/AbstractRJComClient.java
@@ -42,6 +42,8 @@
 import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.core.runtime.Status;
 
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 import org.eclipse.statet.rj.RjException;
 import org.eclipse.statet.rj.data.REnvironment;
 import org.eclipse.statet.rj.data.RJIO;
@@ -1274,7 +1276,7 @@
 		}
 	}
 	
-	public final void evalVoid(final String expression, final RObject envir,
+	public final void evalVoid(final String expression, final @Nullable RObject envir,
 			final IProgressMonitor monitor) throws CoreException {
 		if (expression == null) {
 			throw new NullPointerException("expression");
@@ -1303,7 +1305,7 @@
 		}
 	}
 	
-	public final void evalVoid(final String name, final RList args, final RObject envir,
+	public final void evalVoid(final String name, final RList args, final @Nullable RObject envir,
 			final IProgressMonitor monitor) throws CoreException {
 		if (name == null) {
 			throw new NullPointerException("name");
@@ -1335,8 +1337,8 @@
 		}
 	}
 	
-	public RObject evalData(final String expression, final RObject envir,
-			final String factoryId, final int options, final int depth,
+	public RObject evalData(final String expression, final @Nullable RObject envir,
+			final @Nullable String factoryId, final int options, final int depth,
 			final IProgressMonitor monitor) throws CoreException {
 		if (expression == null) {
 			throw new NullPointerException("expression");
@@ -1366,8 +1368,8 @@
 		}
 	}
 	
-	public RObject evalData(final String name, final RObject args, final RObject envir,
-			final String factoryId, final int options, final int depth,
+	public RObject evalData(final String name, final RObject args, final @Nullable RObject envir,
+			final @Nullable String factoryId, final int options, final int depth,
 			final IProgressMonitor monitor) throws CoreException {
 		if (name == null) {
 			throw new NullPointerException("name");
@@ -1401,7 +1403,7 @@
 	}
 	
 	public final RObject evalData(final RReference reference,
-			final String factoryId, final int options, final int depth,
+			final @Nullable String factoryId, final int options, final int depth,
 			final IProgressMonitor monitor) throws CoreException {
 		final byte checkedDepth= (depth < Byte.MAX_VALUE) ? (byte) depth : Byte.MAX_VALUE;
 		final int level= newDataLevel();
@@ -1428,7 +1430,7 @@
 	}
 	
 	public RObject evalData(final byte envType, final String name,
-			final String factoryId, final int options, final int depth,
+			final @Nullable String factoryId, final int options, final int depth,
 			final IProgressMonitor monitor) throws CoreException {
 		if (name == null) {
 			throw new NullPointerException("name");
@@ -1469,7 +1471,7 @@
 		}
 	}
 	
-	public final void assignData(final String expression, final RObject data, final RObject envir,
+	public final void assignData(final String expression, final RObject data, final @Nullable RObject envir,
 			final IProgressMonitor monitor) throws CoreException {
 		if (expression == null) {
 			throw new NullPointerException("expression");
@@ -1502,7 +1504,7 @@
 	}
 	
 	public final void assignData(final String name, final RObject args, final String expression,
-			final RObject envir,
+			final @Nullable RObject envir,
 			final IProgressMonitor monitor) throws CoreException {
 		if (name == null) {
 			throw new NullPointerException("name");
@@ -1538,7 +1540,7 @@
 	}
 	
 	public RObject[] findData(final String symbol, final RObject envir, final boolean inherits,
-			final String factoryId, final int options, final int depth,
+			final @Nullable String factoryId, final int options, final int depth,
 			final IProgressMonitor monitor) throws CoreException {
 		if (symbol == null) {
 			throw new NullPointerException("symbol");
diff --git a/core/org.eclipse.statet.rj.client/src/org/eclipse/statet/rj/server/client/FunctionCallImpl.java b/core/org.eclipse.statet.rj.client/src/org/eclipse/statet/rj/server/client/FunctionCallImpl.java
index f29f624..b26e421 100644
--- a/core/org.eclipse.statet.rj.client/src/org/eclipse/statet/rj/server/client/FunctionCallImpl.java
+++ b/core/org.eclipse.statet.rj.client/src/org/eclipse/statet/rj/server/client/FunctionCallImpl.java
@@ -20,6 +20,9 @@
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 import org.eclipse.statet.rj.data.RList;
 import org.eclipse.statet.rj.data.RObject;
 import org.eclipse.statet.rj.data.RObjectFactory;
@@ -29,12 +32,13 @@
 import org.eclipse.statet.rj.services.RService;
 
 
+@NonNullByDefault
 public class FunctionCallImpl implements FunctionCall {
 	
 	
 	private final String name;
 	
-	private final List<String> argNames= new ArrayList<>();
+	private final List<@Nullable String> argNames= new ArrayList<>();
 	private final List<RObject> argValues= new ArrayList<>();
 	
 	private final AbstractRJComClient rjs;
@@ -50,7 +54,7 @@
 	
 	
 	@Override
-	public FunctionCall add(final String arg, final String expression) {
+	public FunctionCall add(final @Nullable String arg, final String expression) {
 		if (expression == null) {
 			throw new NullPointerException();
 		}
@@ -66,7 +70,7 @@
 	}
 	
 	@Override
-	public FunctionCall add(final String arg, final RObject data) {
+	public FunctionCall add(final @Nullable String arg, final RObject data) {
 		if (data == null) {
 			throw new NullPointerException();
 		}
@@ -81,7 +85,7 @@
 	}
 	
 	@Override
-	public FunctionCall addLogi(final String arg, final boolean logical) {
+	public FunctionCall addLogi(final @Nullable String arg, final boolean logical) {
 		final RObject data= this.rObjectFactory.createVector(
 				this.rObjectFactory.createLogiData(new boolean[] { logical }) );
 		this.argNames.add(arg);
@@ -95,7 +99,7 @@
 	}
 	
 	@Override
-	public FunctionCall addInt(final String arg, final int integer) {
+	public FunctionCall addInt(final @Nullable String arg, final int integer) {
 		final RObject data= this.rObjectFactory.createVector(
 				this.rObjectFactory.createIntData(new int[] { integer }) );
 		this.argNames.add(arg);
@@ -109,7 +113,7 @@
 	}
 	
 	@Override
-	public FunctionCall addNum(final String arg, final double numeric) {
+	public FunctionCall addNum(final @Nullable String arg, final double numeric) {
 		final RObject data= this.rObjectFactory.createVector(
 				this.rObjectFactory.createNumData(new double[] { numeric }) );
 		this.argNames.add(arg);
@@ -123,7 +127,7 @@
 	}
 	
 	@Override
-	public FunctionCall addChar(final String arg, final String character) {
+	public FunctionCall addChar(final @Nullable String arg, final String character) {
 		final RObject data= this.rObjectFactory.createVector(
 				this.rObjectFactory.createCharData(new String[] { character }));
 		this.argNames.add(arg);
@@ -137,7 +141,7 @@
 	}
 	
 	@Override
-	public FunctionCall addCplx(final String arg, final double real, final double imaginary) {
+	public FunctionCall addCplx(final @Nullable String arg, final double real, final double imaginary) {
 		final RObject data= this.rObjectFactory.createVector(
 				this.rObjectFactory.createCplxData(new double[] { real }, new double[] {imaginary }) );
 		this.argNames.add(arg);
@@ -151,7 +155,7 @@
 	}
 	
 	@Override
-	public FunctionCall addNull(final String arg) {
+	public FunctionCall addNull(final @Nullable String arg) {
 		this.argNames.add(arg);
 		this.argValues.add(RNullImpl.INSTANCE);
 		return this;
@@ -165,7 +169,7 @@
 	
 	private RList prepareArgs(final IProgressMonitor monitor) throws CoreException {
 		// TODO step by step upload for large objects
-		final String[] names= this.argNames.toArray(new String[this.argNames.size()]);
+		final String[] names= this.argNames.toArray(new @Nullable String[this.argNames.size()]);
 		final RObject[] values= this.argValues.toArray(new RObject[this.argValues.size()]);
 		assert (names.length == values.length);
 		return this.rObjectFactory.createList(values, names);
@@ -178,7 +182,7 @@
 	}
 	
 	@Override
-	public void evalVoid(final RObject envir, final IProgressMonitor monitor) throws CoreException {
+	public void evalVoid(final @Nullable RObject envir, final IProgressMonitor monitor) throws CoreException {
 		final RList args= prepareArgs(monitor);
 		this.rjs.evalVoid(this.name, args, envir, monitor);
 	}
@@ -190,15 +194,15 @@
 	}
 	
 	@Override
-	public RObject evalData(final String factoryId, final int options, final int depth,
+	public RObject evalData(final @Nullable String factoryId, final int options, final int depth,
 			final IProgressMonitor monitor) throws CoreException {
 		final RList args= prepareArgs(monitor);
 		return this.rjs.evalData(this.name, args, null, factoryId, options, depth, monitor);
 	}
 	
 	@Override
-	public RObject evalData(final RObject envir,
-			final String factoryId, final int options, final int depth,
+	public RObject evalData(final @Nullable RObject envir,
+			final @Nullable String factoryId, final int options, final int depth,
 			final IProgressMonitor monitor) throws CoreException {
 		final RList args= prepareArgs(monitor);
 		return this.rjs.evalData(this.name, args, envir, factoryId, options, depth, monitor);
diff --git a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RArray.java b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RArray.java
index cee235f..84d473c 100644
--- a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RArray.java
+++ b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RArray.java
@@ -14,6 +14,9 @@
 
 package org.eclipse.statet.rj.data;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 
 /**
  * An R object is of the type {@link RObject#TYPE_ARRAY array}, if it is an R
@@ -38,8 +41,10 @@
  * @see RDataUtils#getDataIdxs(int[], int, int)
  * @param <TData> the type of the data store
  */
+@NonNullByDefault
 public interface RArray<TData extends RStore<?>> extends RObject {
 	
+	
 	/**
 	 * Returns the length of the object. The length of an {@link RObject#TYPE_ARRAY array}
 	 * is the count of all data values, the product of its dimensions.
@@ -58,25 +63,25 @@
 	RIntegerStore getDim();
 	
 	/**
-	 * Returns the names for the dimensions of the array. This corresponds to 
-	 * the names of the R attribute <code>dimnames</code> respectively of the R function 
+	 * Returns the names for the dimensions of the array. This corresponds to
+	 * the names of the R attribute <code>dimnames</code> respectively of the R function
 	 * <code>dimnames(object)</code>. That means it is equivalent to the R command
 	 * <code>names(dimnames(object))</code>. The names for the indexes in each dimension,
 	 * the values of the R attribute <code>dimnames</code>, are accessible by {@link #getNames(int)}.
 	 * 
-	 * The returned character data has the same length as the dimension data {@link #getDim()}. 
-	 * If the R element does not have names, the names are invalid, or names are disabled, the 
+	 * The returned character data has the same length as the dimension data {@link #getDim()}.
+	 * If the R element does not have names, the names are invalid, or names are disabled, the
 	 * method returns <code>null</code>.
 	 * 
 	 * @return a charater data store with the names of the dimensions or <code>null</code>
 	 * 
 	 * @since de.walware.rj.data 0.5
 	 */
-	RCharacterStore getDimNames();
+	@Nullable RCharacterStore getDimNames();
 	
 	/**
-	 * Returns the names for the indexes in the given dimension of the array. This corresponds to 
-	 * the values of the R attribute <code>dimnames</code> respectively of the R function 
+	 * Returns the names for the indexes in the given dimension of the array. This corresponds to
+	 * the values of the R attribute <code>dimnames</code> respectively of the R function
 	 * <code>dimnames(object)</code>. The names for the dimensions itself are accessible by
 	 * {@link #getDimNames()}.
 	 * 
@@ -86,7 +91,7 @@
 	 * 
 	 * @since de.walware.rj.data 0.5
 	 */
-	RStore<?> getNames(int dim);
+	@Nullable RStore<?> getNames(int dim);
 	
 	
 	@Override
diff --git a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RDataFrame.java b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RDataFrame.java
index 5c48cac..1cfadb2 100644
--- a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RDataFrame.java
+++ b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RDataFrame.java
@@ -14,10 +14,13 @@
 
 package org.eclipse.statet.rj.data;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 
 /**
- * An R object is of the type {@link RObject#TYPE_DATAFRAME vector}, if it is an R list object 
- * inheriting the R class {@link #CLASSNAME_DATAFRAME data.frame} and compiling with the R rules for 
+ * An R object is of the type {@link RObject#TYPE_DATAFRAME vector}, if it is an R list object
+ * inheriting the R class {@link #CLASSNAME_DATAFRAME data.frame} and compiling with the R rules for
  * a data frame, especially its children are {@link RVector}s of the same length.
  * <p>
  * The methods {@link #getLength()}, {@link #getName(int)}, {@link #get(int)} and
@@ -27,11 +30,13 @@
  * similar functionality with direct access to the data stores of the columns, bypassing the RVector
  * objects.</p>
  * <p>
- * The row information of the data frame are accessible by {@link #getRowCount()} and 
+ * The row information of the data frame are accessible by {@link #getRowCount()} and
  * {@link #getRowNames()}.</p>
  */
+@NonNullByDefault
 public interface RDataFrame extends RList, RObject {
 	
+	
 	/**
 	 * Returns the number of columns of the data frame.
 	 * <p>
@@ -79,7 +84,7 @@
 	 * @return the column vector or <code>null</code> (if no column with the specified name exists)
 	 */
 	@Override
-	RObject get(String name);
+	@Nullable RObject get(String name);
 	
 	/**
 	 * For a data frame this method always returns <code>null</code>.
@@ -87,7 +92,7 @@
 	 * @return <code>null</code>
 	 */
 	@Override
-	RStore<?> getData();
+	@Nullable RStore<?> getData();
 	
 	
 	/**
@@ -147,7 +152,7 @@
 	 * @param name the name of the column
 	 * @return the data store of the column or <code>null</code> (if no column with the specified name exists)
 	 */
-	public RStore<?> getColumn(String name);
+	public @Nullable RStore<?> getColumn(String name);
 	
 	/**
 	 * Returns the number of rows of the data frame.
@@ -165,7 +170,7 @@
 	 * 
 	 * @return the row names
 	 */
-	RStore<?> getRowNames();
+	@Nullable RStore<?> getRowNames();
 	
 	
 //	void setColumn(int idx, RStore<?> column);
diff --git a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RDataUtils.java b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RDataUtils.java
index 0decdff..a7c4ad4 100644
--- a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RDataUtils.java
+++ b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RDataUtils.java
@@ -14,13 +14,17 @@
 
 package org.eclipse.statet.rj.data;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
 
+
+@NonNullByDefault
 public class RDataUtils {
 	
 	/**
 	 * Returns the common abbreviation for the type of the given data store.
 	 * These are the abbreviations used by the R function <code>str(x)</code>.
-	 * If there is no abbreviation for the given type, it return the class name 
+	 * If there is no abbreviation for the given type, it return the class name
 	 * of an R vector with data of this type.
 	 * 
 	 * @param store the data store
@@ -233,7 +237,7 @@
 	}
 	
 	
-	public static final boolean isSingleString(final RObject obj) {
+	public static final boolean isSingleString(final @Nullable RObject obj) {
 		final RStore<?> data;
 		return (obj != null && (data= obj.getData()) != null
 				&& data.getStoreType() == RStore.CHARACTER
@@ -241,7 +245,7 @@
 	}
 	
 	
-	public static final RVector<?> checkRVector(final RObject obj) throws UnexpectedRDataException {
+	public static final RVector<?> checkRVector(final @Nullable RObject obj) throws UnexpectedRDataException {
 		if (obj == null) {
 			throw new UnexpectedRDataException("Missing R object.");
 		}
@@ -252,7 +256,7 @@
 	}
 	
 	@SuppressWarnings("unchecked")
-	public static final RVector<RLogicalStore> checkRLogiVector(final RObject obj) throws UnexpectedRDataException {
+	public static final RVector<RLogicalStore> checkRLogiVector(final @Nullable RObject obj) throws UnexpectedRDataException {
 		if (obj == null) {
 			throw new UnexpectedRDataException("Missing R object.");
 		}
@@ -266,7 +270,7 @@
 	}
 	
 	@SuppressWarnings("unchecked")
-	public static final RVector<RIntegerStore> checkRIntVector(final RObject obj) throws UnexpectedRDataException {
+	public static final RVector<RIntegerStore> checkRIntVector(final @Nullable RObject obj) throws UnexpectedRDataException {
 		if (obj == null) {
 			throw new UnexpectedRDataException("Missing R object.");
 		}
@@ -280,7 +284,7 @@
 	}
 	
 	@SuppressWarnings("unchecked")
-	public static final RVector<RNumericStore> checkRNumVector(final RObject obj) throws UnexpectedRDataException {
+	public static final RVector<RNumericStore> checkRNumVector(final @Nullable RObject obj) throws UnexpectedRDataException {
 		if (obj == null) {
 			throw new UnexpectedRDataException("Missing R object.");
 		}
@@ -294,7 +298,7 @@
 	}
 	
 	@SuppressWarnings("unchecked")
-	public static final RVector<RCharacterStore> checkRCharVector(final RObject obj) throws UnexpectedRDataException {
+	public static final RVector<RCharacterStore> checkRCharVector(final @Nullable RObject obj) throws UnexpectedRDataException {
 		if (obj == null) {
 			throw new UnexpectedRDataException("Missing R object.");
 		}
@@ -307,7 +311,7 @@
 		return (RVector<RCharacterStore>) obj;
 	}
 	
-	public static final RArray<?> checkRArray(final RObject obj) throws UnexpectedRDataException {
+	public static final RArray<?> checkRArray(final @Nullable RObject obj) throws UnexpectedRDataException {
 		if (obj == null) {
 			throw new UnexpectedRDataException("Missing R object.");
 		}
@@ -317,7 +321,7 @@
 		return (RArray<?>) obj;
 	}
 	
-	public static final RArray<?> checkRArray(final RObject obj, final int dim) throws UnexpectedRDataException {
+	public static final RArray<?> checkRArray(final @Nullable RObject obj, final int dim) throws UnexpectedRDataException {
 		if (obj == null) {
 			throw new UnexpectedRDataException("Missing R object.");
 		}
@@ -333,7 +337,7 @@
 		return array;
 	}
 	
-	public static final RArray<?> checkRArray(final RObject obj, final long dim) throws UnexpectedRDataException {
+	public static final RArray<?> checkRArray(final @Nullable RObject obj, final long dim) throws UnexpectedRDataException {
 		if (obj == null) {
 			throw new UnexpectedRDataException("Missing R object.");
 		}
@@ -350,7 +354,7 @@
 	}
 	
 	@SuppressWarnings("unchecked")
-	public static final RArray<RCharacterStore> checkRCharArray(final RObject obj, final int dim) throws UnexpectedRDataException {
+	public static final RArray<RCharacterStore> checkRCharArray(final @Nullable RObject obj, final int dim) throws UnexpectedRDataException {
 		if (obj == null) {
 			throw new UnexpectedRDataException("Missing R object.");
 		}
@@ -369,7 +373,7 @@
 		return array;
 	}
 	
-	public static final RList checkRList(final RObject obj) throws UnexpectedRDataException {
+	public static final RList checkRList(final @Nullable RObject obj) throws UnexpectedRDataException {
 		if (obj == null) {
 			throw new UnexpectedRDataException("Missing R object.");
 		}
@@ -379,7 +383,7 @@
 		return (RList) obj;
 	}
 	
-	public static final RDataFrame checkRDataFrame(final RObject obj) throws UnexpectedRDataException {
+	public static final RDataFrame checkRDataFrame(final @Nullable RObject obj) throws UnexpectedRDataException {
 		if (obj == null) {
 			throw new UnexpectedRDataException("Missing R object.");
 		}
@@ -389,7 +393,7 @@
 		return (RDataFrame) obj;
 	}
 	
-	public static final RDataFrame checkRDataFrame(final RObject obj, final long length) throws UnexpectedRDataException {
+	public static final RDataFrame checkRDataFrame(final @Nullable RObject obj, final long length) throws UnexpectedRDataException {
 		if (obj == null) {
 			throw new UnexpectedRDataException("Missing R object.");
 		}
@@ -402,7 +406,7 @@
 		return (RDataFrame) obj;
 	}
 	
-	public static final RReference checkRReference(final RObject obj) throws UnexpectedRDataException {
+	public static final RReference checkRReference(final @Nullable RObject obj) throws UnexpectedRDataException {
 		if (obj == null) {
 			throw new UnexpectedRDataException("Missing R object.");
 		}
@@ -413,7 +417,7 @@
 		return (RReference) obj;
 	}
 	
-	public static final RReference checkRReference(final RObject obj, final byte referencedObjectType)
+	public static final RReference checkRReference(final @Nullable RObject obj, final byte referencedObjectType)
 			throws UnexpectedRDataException {
 		if (obj == null) {
 			throw new UnexpectedRDataException("Missing R object.");
@@ -431,7 +435,7 @@
 		return (RReference) obj;
 	}
 	
-	public static final RLanguage checkRLanguage(final RObject obj) throws UnexpectedRDataException {
+	public static final RLanguage checkRLanguage(final @Nullable RObject obj) throws UnexpectedRDataException {
 		if (obj == null) {
 			throw new UnexpectedRDataException("Missing R object.");
 		}
@@ -441,7 +445,7 @@
 		return (RLanguage) obj;
 	}
 	
-	public static final Boolean checkSingleLogi(final RObject obj) throws UnexpectedRDataException {
+	public static final @Nullable Boolean checkSingleLogi(final @Nullable RObject obj) throws UnexpectedRDataException {
 		if (obj == null) {
 			throw new UnexpectedRDataException("Missing R object.");
 		}
@@ -461,7 +465,7 @@
 		return Boolean.valueOf(data.getLogi(0));
 	}
 	
-	public static final boolean checkSingleLogiValue(final RObject obj) throws UnexpectedRDataException {
+	public static final boolean checkSingleLogiValue(final @Nullable RObject obj) throws UnexpectedRDataException {
 		if (obj == null) {
 			throw new UnexpectedRDataException("Missing R object.");
 		}
@@ -481,7 +485,7 @@
 		return data.getLogi(0);
 	}
 	
-	public static final Integer checkSingleInt(final RObject obj) throws UnexpectedRDataException {
+	public static final @Nullable Integer checkSingleInt(final @Nullable RObject obj) throws UnexpectedRDataException {
 		if (obj == null) {
 			throw new UnexpectedRDataException("Missing R object.");
 		}
@@ -501,7 +505,7 @@
 		return Integer.valueOf(data.getInt(0));
 	}
 	
-	public static final int checkSingleIntValue(final RObject obj) throws UnexpectedRDataException {
+	public static final int checkSingleIntValue(final @Nullable RObject obj) throws UnexpectedRDataException {
 		if (obj == null) {
 			throw new UnexpectedRDataException("Missing R object.");
 		}
@@ -521,7 +525,7 @@
 		return data.getInt(0);
 	}
 	
-	public static final Double checkSingleNum(final RObject obj) throws UnexpectedRDataException {
+	public static final @Nullable Double checkSingleNum(final @Nullable RObject obj) throws UnexpectedRDataException {
 		if (obj == null) {
 			throw new UnexpectedRDataException("Missing R object.");
 		}
@@ -541,7 +545,7 @@
 		return Double.valueOf(data.getNum(0));
 	}
 	
-	public static final double checkSingleNumValue(final RObject obj) throws UnexpectedRDataException {
+	public static final double checkSingleNumValue(final @Nullable RObject obj) throws UnexpectedRDataException {
 		if (obj == null) {
 			throw new UnexpectedRDataException("Missing R object.");
 		}
@@ -561,7 +565,7 @@
 		return data.getNum(0);
 	}
 	
-	public static final String checkSingleChar(final RObject obj) throws UnexpectedRDataException {
+	public static final @Nullable String checkSingleChar(final @Nullable RObject obj) throws UnexpectedRDataException {
 		if (obj == null) {
 			throw new UnexpectedRDataException("Missing R object.");
 		}
@@ -578,7 +582,7 @@
 		return data.getChar(0);
 	}
 	
-	public static final String checkSingleCharValue(final RObject obj) throws UnexpectedRDataException {
+	public static final String checkSingleCharValue(final @Nullable RObject obj) throws UnexpectedRDataException {
 		if (obj == null) {
 			throw new UnexpectedRDataException("Missing R object.");
 		}
@@ -598,7 +602,7 @@
 		return data.getChar(0);
 	}
 	
-	public static final RObject checkType(final RObject obj, final byte objectType) throws UnexpectedRDataException {
+	public static final RObject checkType(final @Nullable RObject obj, final byte objectType) throws UnexpectedRDataException {
 		if (obj == null) {
 			throw new UnexpectedRDataException("Missing R object.");
 		}
diff --git a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/REnvironment.java b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/REnvironment.java
index 76d64bc..0d89f58 100644
--- a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/REnvironment.java
+++ b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/REnvironment.java
@@ -14,6 +14,8 @@
 
 package org.eclipse.statet.rj.data;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
 
 /**
  * An R object is of the type {@link RObject#TYPE_ENVIRONMENT environment}, if the
@@ -26,6 +28,7 @@
  * Even the interface extends {@link RList}, the objects are not a list in R!
  * The inheritance is only for a uniform API.</p>
  */
+@NonNullByDefault
 public interface REnvironment extends RList {
 	
 	/**
diff --git a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RFunction.java b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RFunction.java
index 1e06234..facafd8 100644
--- a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RFunction.java
+++ b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RFunction.java
@@ -14,7 +14,11 @@
 
 package org.eclipse.statet.rj.data;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
 
+
+@NonNullByDefault
 public interface RFunction extends RObject {
 	
 //	RArgument getArgument(final int idx);
@@ -23,7 +27,7 @@
 //	Iterator<RArgument> getArgumentIterator();
 	
 	// source based
-	String getHeaderSource();
-	String getBodySource();
+	@Nullable String getHeaderSource();
+	@Nullable String getBodySource();
 	
 }
diff --git a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RJIOExternalizable.java b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RJIOExternalizable.java
index e4afe0b..f0e48aa 100644
--- a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RJIOExternalizable.java
+++ b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RJIOExternalizable.java
@@ -16,7 +16,10 @@
 
 import java.io.IOException;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
 
+
+@NonNullByDefault
 public interface RJIOExternalizable {
 	
 	
diff --git a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RLanguage.java b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RLanguage.java
index 4af0911..ca87adf 100644
--- a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RLanguage.java
+++ b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RLanguage.java
@@ -14,10 +14,14 @@
 
 package org.eclipse.statet.rj.data;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 
 /**
  * R object of type call
  */
+@NonNullByDefault
 public interface RLanguage extends RObject {
 	
 	
@@ -30,7 +34,7 @@
 	
 	byte getLanguageType();
 	
-	String getSource();
+	@Nullable String getSource();
 	
 	
 }
diff --git a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RList.java b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RList.java
index 5cec8c5..0182450 100644
--- a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RList.java
+++ b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RList.java
@@ -14,6 +14,9 @@
 
 package org.eclipse.statet.rj.data;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 
 /**
  * An R object is of the type {@link RObject#TYPE_LIST list}, if the object is
@@ -24,7 +27,7 @@
  * objects of this type.</p>
  * <p>
  * The interfaces for R objects of the type {@value RObject#TYPE_DATAFRAME} -
- * {@link RDataFrame}, {@link RObject#TYPE_S4OBJECT} - {@link RS4Object} and 
+ * {@link RDataFrame}, {@link RObject#TYPE_S4OBJECT} - {@link RS4Object} and
  * {@link RObject#TYPE_ENVIRONMENT} - {@link REnvironment} extends this interface for the
  * purpose of a uniform API.
  * Objects of this type does not necessary provide the full functionality and the
@@ -33,8 +36,10 @@
  * <p>
  * Indexes are zero-based (as usual in Java) and not one-base like in R.</p>
  */
+@NonNullByDefault
 public interface RList extends RObject {
 	
+	
 	/**
 	 * Returns the length of the object. The length of a {@link RObject#TYPE_LIST list}
 	 * is the count of list items.
@@ -49,7 +54,7 @@
 	 * 
 	 * @return the item names
 	 */
-	RCharacterStore getNames();
+	@Nullable RCharacterStore getNames();
 	
 	/**
 	 * Returns the name of the item at the specified index.
@@ -57,10 +62,10 @@
 	 * This is equivalent to <code>getNames().getChar(idx)</code>.</p>
 	 * 
 	 * @param idx the index (zero-based) of the item
-	 * @return the slot names
+	 * @return the name of the item
 	 * @throws IndexOutOfBoundsException if <code>idx</code> &lt; 0 or <code>idx</code> &ge; length
 	 */
-	String getName(int idx);
+	@Nullable String getName(int idx);
 	
 	/**
 	 * Returns the name of the item at the specified index.
@@ -68,10 +73,10 @@
 	 * This is equivalent to <code>getNames().getChar(idx)</code>.</p>
 	 * 
 	 * @param idx the index (zero-based) of the item
-	 * @return the slot names
+	 * @return the name of the item
 	 * @throws IndexOutOfBoundsException if <code>idx</code> &lt; 0 or <code>idx</code> &ge; length
 	 */
-	String getName(long idx);
+	@Nullable String getName(long idx);
 	
 	/**
 	 * Returns the item at the specified index.
@@ -80,7 +85,7 @@
 	 * @return the item
 	 * @throws IndexOutOfBoundsException if <code>idx</code> &lt; 0 or <code>idx</code> &ge; length
 	 */
-	RObject get(int idx);
+	@Nullable RObject get(int idx);
 	
 	/**
 	 * Returns the item at the specified index.
@@ -89,7 +94,7 @@
 	 * @return the item
 	 * @throws IndexOutOfBoundsException if <code>idx</code> &lt; 0 or <code>idx</code> &ge; length
 	 */
-	RObject get(long idx);
+	@Nullable RObject get(long idx);
 	
 	/**
 	 * Returns the item with the specified name. If multiple items have that name,
@@ -98,7 +103,7 @@
 	 * @param name the name of the item
 	 * @return the item or <code>null</code> (if no item with the specified name exists)
 	 */
-	RObject get(String name);
+	@Nullable RObject get(String name);
 	
 //	/**
 //	 * Returns an array with the R object items of the list.
diff --git a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RObject.java b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RObject.java
index ca01bfd..556d950 100644
--- a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RObject.java
+++ b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RObject.java
@@ -14,15 +14,19 @@
 
 package org.eclipse.statet.rj.data;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 import org.eclipse.statet.rj.data.impl.RNullImpl;
 
 
 /**
  * Basic interface of all R object.
  * <p>
- * To detect the type of an RObject instance, the method {@link #getRObjectType()} 
+ * To detect the type of an RObject instance, the method {@link #getRObjectType()}
  * should be used, not the java class type (e.g. instanceof) of the object.</p>
  */
+@NonNullByDefault
 public interface RObject {
 	
 	/**
@@ -53,7 +57,7 @@
 	/**
 	 * Constant indicating an RDataFrame object. An R object is of this type
 	 * if it is an R list object inheriting the R class {@link #CLASSNAME_DATAFRAME data.frame}
-	 * and compiling with the R rules for a data frame, especially its children 
+	 * and compiling with the R rules for a data frame, especially its children
 	 * are {@link RVector}s of the same length.
 	 * <p>
 	 * The object is an instance of {@link RDataFrame}.</p>
@@ -61,7 +65,7 @@
 	byte TYPE_DATAFRAME=                0x06;
 	
 	/**
-	 * Constant indicating an RList object. An R object is of this type if it is 
+	 * Constant indicating an RList object. An R object is of this type if it is
 	 * a list but not a data frame (see {@link #TYPE_DATAFRAME}).
 	 * <p>
 	 * The object is an instance of {@link RList}.</p>
@@ -78,7 +82,7 @@
 	/**
 	 * Constant indicating an S4 object. An R object is of this type if the R
 	 * command <code>isS4</code> returns true. This is criterion has priority
-	 * above the criteria for the other data types. If an S4 object represents 
+	 * above the criteria for the other data types. If an S4 object represents
 	 * also a simple data type, this data is accessible by its data slot.
 	 * <p>
 	 * The object is an instance of {@link RS4Object}.</p>
@@ -191,7 +195,7 @@
 	 * 
 	 * @return the data store or <code>null</code>, if not supported by the object
 	 */
-	RStore<?> getData();
+	@Nullable RStore<?> getData();
 	
 	/**
 	 * Returns the attribute list of the object
@@ -200,6 +204,6 @@
 	 * 
 	 * @return the attribute list or <code>null</code>, if not available
 	 */
-	RList getAttributes();
+	@Nullable RList getAttributes();
 	
 }
diff --git a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RObjectFactory.java b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RObjectFactory.java
index 915ca6c..ac820d9 100644
--- a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RObjectFactory.java
+++ b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RObjectFactory.java
@@ -16,8 +16,11 @@
 
 import java.io.IOException;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
 
 
+@NonNullByDefault
 public interface RObjectFactory {
 	
 	/** Flag to fetch only the structure but not the data (store) of the objects */
@@ -27,10 +30,10 @@
 	int F_WITH_ATTR= 0x2;
 	
 	/** Flag to load environments directly instead of the reference only */
-	int F_LOAD_ENVIR= 0x10;
+	int F_LOAD_ENVIRONMENT=                                 1 << 4;
 	
 	/** Flag to eval all promises directly */
-	int F_LOAD_PROMISE= 0x20;
+	int F_LOAD_PROMISE=                                     1 << 5;
 	
 	
 	int O_LENGTHGRADE_MASK= 7; // 3 bits
@@ -50,7 +53,7 @@
 	<TData extends RStore<?>> RVector<TData> createVector(TData data);
 	<TData extends RStore<?>> RArray<TData> createArray(TData data, int[] dim);
 	<TData extends RStore<?>> RArray<TData> createMatrix(TData data, int dim1, int dim2);
-	RList createList(RObject[] components, String[] names);
+	RList createList(RObject[] components, String @Nullable [] names);
 //	RDataFrame createDataFrame(RData[] columns, String[] columnNames, String[] rowNames);
 	
 	RLanguage createName(String name);
@@ -73,7 +76,7 @@
 	void writeAttributeList(RList list, RJIO io) throws IOException;
 	RList readAttributeList(RJIO io) throws IOException;
 	
-	void writeNames(RStore<?> names, RJIO io) throws IOException;
-	RStore<?> readNames(RJIO io, long length) throws IOException;
+	void writeNames(@Nullable RStore<?> names, RJIO io) throws IOException;
+	@Nullable RStore<?> readNames(RJIO io, long length) throws IOException;
 	
 }
diff --git a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RReference.java b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RReference.java
index f14c1a9..e22b195 100644
--- a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RReference.java
+++ b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RReference.java
@@ -14,10 +14,14 @@
 
 package org.eclipse.statet.rj.data;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 
 /**
  * A reference to an R object
  */
+@NonNullByDefault
 public interface RReference extends RObject {
 	
 	
@@ -28,6 +32,6 @@
 	
 	byte getReferencedRObjectType();
 	
-	RObject getResolvedRObject();
+	@Nullable RObject getResolvedRObject();
 	
 }
diff --git a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RS4Object.java b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RS4Object.java
index fa3b617..33a5e83 100644
--- a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RS4Object.java
+++ b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RS4Object.java
@@ -14,9 +14,12 @@
 
 package org.eclipse.statet.rj.data;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 
 /**
- * An R object is of the type {@link RObject#TYPE_S4OBJECT S4 object}, if the R 
+ * An R object is of the type {@link RObject#TYPE_S4OBJECT S4 object}, if the R
  * command <code>isS4(object)</code> returns true.  Such an R S4 object is
  * represented by an instance of this interface.
  * <p>
@@ -33,6 +36,7 @@
  * methods {@link #getLength()}, {@link #getName(int)}, {@link #get(int)} and
  * {@link #get(String)}.</p>
  */
+@NonNullByDefault
 public interface RS4Object extends RList {
 	
 	
@@ -73,7 +77,7 @@
 	 * 
 	 * @return the object in the data slot
 	 */
-	RObject getDataSlot();
+	@Nullable RObject getDataSlot();
 	
 	/**
 	 * Returns the data store of the data slot, if it exists.
@@ -81,7 +85,7 @@
 	 * @return the data of the data slot
 	 */
 	@Override
-	RStore<?> getData();
+	@Nullable RStore<?> getData();
 	
 	/**
 	 * Returns the names of the slots.
diff --git a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RStore.java b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RStore.java
index d87bb2b..b6927a4 100644
--- a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RStore.java
+++ b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RStore.java
@@ -49,6 +49,7 @@
  */
 public interface RStore<P> {
 	
+	
 	/**
 	 * Constant indicating a store for R data type <code>logical<code>.
 	 * 
@@ -101,7 +102,7 @@
 	/**
 	 * Constant indicating a store for R data type <code>character<code>.
 	 * 
-	 * <p>The story object is an instance of {@link RCharacterStore}.  
+	 * <p>The story object is an instance of {@link RCharacterStore}.
 	 * The {@link #getBaseVectorRClassName() class name} is
 	 * <code>{@link RObject#CLASSNAME_CHARACTER character}</code>.</p>
 	 * 
@@ -115,7 +116,7 @@
 	 * 
 	 * <p>Note that raw data doesn't support NAs.</p>
 	 * 
-	 * <p>The story object is an instance of {@link RRawStore}.  
+	 * <p>The story object is an instance of {@link RRawStore}.
 	 * The {@link #getBaseVectorRClassName() class name} is
 	 * <code>{@link RObject#CLASSNAME_RAW raw}</code>.</p>
 	 * 
@@ -129,8 +130,8 @@
 	 * data type for R objects extending the R class <code>factor<code>.
 	 * 
 	 * <p>The story object is an instance of {@link RFactorStore}.
-	 * The {@link #getBaseVectorRClassName() class name} is 
-	 * <code>{@link RObject#CLASSNAME_FACTOR factor}</code> or 
+	 * The {@link #getBaseVectorRClassName() class name} is
+	 * <code>{@link RObject#CLASSNAME_FACTOR factor}</code> or
 	 * <code>{@link RObject#CLASSNAME_ORDERED ordered}</code>.
 	 * 
 	 * @see RFactorStore#getInt(int)
@@ -348,8 +349,8 @@
 	 * Return the numeric/real/double value at the specified index.
 	 * <p>
 	 * Numeric values in R matches exactly the Java double values.
-	 * Also NaN, Inf and -Inf respectively {@link Double#isNaN(double)}, 
-	 * {@link Double#POSITIVE_INFINITY} and {@link Double#NEGATIVE_INFINITY} are 
+	 * Also NaN, Inf and -Inf respectively {@link Double#isNaN(double)},
+	 * {@link Double#POSITIVE_INFINITY} and {@link Double#NEGATIVE_INFINITY} are
 	 * supported.</p>
 	 * 
 	 * @param idx the index (zero-based) of the value
@@ -363,8 +364,8 @@
 	 * Return the numeric/real/double value at the specified index.
 	 * <p>
 	 * Numeric values in R matches exactly the Java double values.
-	 * Also NaN, Inf and -Inf respectively {@link Double#isNaN(double)}, 
-	 * {@link Double#POSITIVE_INFINITY} and {@link Double#NEGATIVE_INFINITY} are 
+	 * Also NaN, Inf and -Inf respectively {@link Double#isNaN(double)},
+	 * {@link Double#POSITIVE_INFINITY} and {@link Double#NEGATIVE_INFINITY} are
 	 * supported.</p>
 	 * 
 	 * @param idx the index (zero-based) of the value
@@ -378,8 +379,8 @@
 	 * Sets the numeric/real/double value at the specified index.
 	 * <p>
 	 * Numeric values in R matches exactly the Java double values.
-	 * Also NaN, Inf and -Inf respectively {@link Double#NaN}, 
-	 * {@link Double#POSITIVE_INFINITY} and {@link Double#NEGATIVE_INFINITY} are 
+	 * Also NaN, Inf and -Inf respectively {@link Double#NaN},
+	 * {@link Double#POSITIVE_INFINITY} and {@link Double#NEGATIVE_INFINITY} are
 	 * supported.</p>
 	 * 
 	 * @param idx the index (zero-based) of the value
@@ -394,8 +395,8 @@
 	 * Sets the numeric/real/double value at the specified index.
 	 * <p>
 	 * Numeric values in R matches exactly the Java double values.
-	 * Also NaN, Inf and -Inf respectively {@link Double#NaN}, 
-	 * {@link Double#POSITIVE_INFINITY} and {@link Double#NEGATIVE_INFINITY} are 
+	 * Also NaN, Inf and -Inf respectively {@link Double#NaN},
+	 * {@link Double#POSITIVE_INFINITY} and {@link Double#NEGATIVE_INFINITY} are
 	 * supported.</p>
 	 * 
 	 * @param idx the index (zero-based) of the value
@@ -409,10 +410,10 @@
 	/**
 	 * Returns the real part the complex number value at the specified index.
 	 * <p>
-	 * The numeric values of the parts of the complex number in R matches 
+	 * The numeric values of the parts of the complex number in R matches
 	 * exactly the Java double values.
-	 * Also NaN, Inf and -Inf respectively {Double#isNaN(double)}, 
-	 * {@link Double#POSITIVE_INFINITY} and {@link Double#NEGATIVE_INFINITY} are 
+	 * Also NaN, Inf and -Inf respectively {Double#isNaN(double)},
+	 * {@link Double#POSITIVE_INFINITY} and {@link Double#NEGATIVE_INFINITY} are
 	 * supported.</p>
 	 * 
 	 * @param idx the index (zero-based) of the value
@@ -425,10 +426,10 @@
 	/**
 	 * Returns the real part the complex number value at the specified index.
 	 * <p>
-	 * The numeric values of the parts of the complex number in R matches 
+	 * The numeric values of the parts of the complex number in R matches
 	 * exactly the Java double values.
-	 * Also NaN, Inf and -Inf respectively {Double#isNaN(double)}, 
-	 * {@link Double#POSITIVE_INFINITY} and {@link Double#NEGATIVE_INFINITY} are 
+	 * Also NaN, Inf and -Inf respectively {Double#isNaN(double)},
+	 * {@link Double#POSITIVE_INFINITY} and {@link Double#NEGATIVE_INFINITY} are
 	 * supported.</p>
 	 * 
 	 * @param idx the index (zero-based) of the value
@@ -441,10 +442,10 @@
 	/**
 	 * Returns the imaginary part the complex number value at the specified index.
 	 * <p>
-	 * The numeric values of the parts of the complex number in R matches 
+	 * The numeric values of the parts of the complex number in R matches
 	 * exactly the Java double values.
-	 * Also NaN, Inf and -Inf respectively {Double#isNaN(double)}, 
-	 * {@link Double#POSITIVE_INFINITY} and {@link Double#NEGATIVE_INFINITY} are 
+	 * Also NaN, Inf and -Inf respectively {Double#isNaN(double)},
+	 * {@link Double#POSITIVE_INFINITY} and {@link Double#NEGATIVE_INFINITY} are
 	 * supported.</p>
 	 * 
 	 * @param idx the index (zero-based) of the value
@@ -457,10 +458,10 @@
 	/**
 	 * Returns the imaginary part the complex number value at the specified index.
 	 * <p>
-	 * The numeric values of the parts of the complex number in R matches 
+	 * The numeric values of the parts of the complex number in R matches
 	 * exactly the Java double values.
-	 * Also NaN, Inf and -Inf respectively {Double#isNaN(double)}, 
-	 * {@link Double#POSITIVE_INFINITY} and {@link Double#NEGATIVE_INFINITY} are 
+	 * Also NaN, Inf and -Inf respectively {Double#isNaN(double)},
+	 * {@link Double#POSITIVE_INFINITY} and {@link Double#NEGATIVE_INFINITY} are
 	 * supported.</p>
 	 * 
 	 * @param idx the index (zero-based) of the value
@@ -473,10 +474,10 @@
 	/**
 	 * Sets the complex number value at the specified index.
 	 * <p>
-	 * The numeric values of the parts of the complex number in R matches 
+	 * The numeric values of the parts of the complex number in R matches
 	 * exactly the Java double values.
-	 * Also NaN, Inf and -Inf respectively {@link Double#NaN}, 
-	 * {@link Double#POSITIVE_INFINITY} and {@link Double#NEGATIVE_INFINITY} are 
+	 * Also NaN, Inf and -Inf respectively {@link Double#NaN},
+	 * {@link Double#POSITIVE_INFINITY} and {@link Double#NEGATIVE_INFINITY} are
 	 * supported.</p>
 	 * 
 	 * @param idx the index (zero-based) of the value
@@ -491,10 +492,10 @@
 	/**
 	 * Sets the complex number value at the specified index.
 	 * <p>
-	 * The numeric values of the parts of the complex number in R matches 
+	 * The numeric values of the parts of the complex number in R matches
 	 * exactly the Java double values.
-	 * Also NaN, Inf and -Inf respectively {@link Double#NaN}, 
-	 * {@link Double#POSITIVE_INFINITY} and {@link Double#NEGATIVE_INFINITY} are 
+	 * Also NaN, Inf and -Inf respectively {@link Double#NaN},
+	 * {@link Double#POSITIVE_INFINITY} and {@link Double#NEGATIVE_INFINITY} are
 	 * supported.</p>
 	 * 
 	 * @param idx the index (zero-based) of the value
@@ -617,7 +618,7 @@
 	void setRaw(long idx, byte raw);
 	
 	/**
-	 * Returns the value at the specified index as Java object. The subtypes of 
+	 * Returns the value at the specified index as Java object. The subtypes of
 	 * RStore defines more specific array types.
 	 * <p>
 	 * R NA values are represented as <code>null</code>. Java primitives are converted
@@ -631,7 +632,7 @@
 	P get(int idx);
 	
 	/**
-	 * Returns the value at the specified index as Java object. The subtypes of 
+	 * Returns the value at the specified index as Java object. The subtypes of
 	 * RStore defines more specific array types.
 	 * <p>
 	 * R NA values are represented as <code>null</code>. Java primitives are converted
@@ -645,7 +646,7 @@
 	P get(long idx);
 	
 	/**
-	 * Returns the values of the store as Java object array. The subtypes of 
+	 * Returns the values of the store as Java object array. The subtypes of
 	 * RStore defines more specific array types.
 	 * <p>
 	 * The array is newly created for each call of this method. It has the
diff --git a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RVector.java b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RVector.java
index 6003879..8498dac 100644
--- a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RVector.java
+++ b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RVector.java
@@ -14,6 +14,9 @@
 
 package org.eclipse.statet.rj.data;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 
 /**
  * An R object is of the type {@link RObject#TYPE_VECTOR vector}, if it is an R
@@ -22,11 +25,11 @@
  * <p>
  * The real data is stored in a {@link RStore} accessible by {@link #getData()}.</p>
  * <p>
- * The type {@link RObject#TYPE_VECTOR vector} equates not the R command 
- * <code>is.vector(object)</code>, mainly because all attributes except the dimension 
+ * The type {@link RObject#TYPE_VECTOR vector} equates not the R command
+ * <code>is.vector(object)</code>, mainly because all attributes except the dimension
  * are allowed (in the R function only the names attribute is allowed).  Especially
  * an R factor object is of the type {@link RObject#TYPE_VECTOR vector}, implements
- * RVector and has a data store of the type {@link RStore#FACTOR}.  Also another S3 
+ * RVector and has a data store of the type {@link RStore#FACTOR}.  Also another S3
  * object based on a such a data object is of the type {@link RObject#TYPE_VECTOR vector}.
  * Whereas a S4 object is never directly of this type even the object simulates such
  * a data object in R. Such an object is of the type {@link RObject#TYPE_S4OBJECT S4 object},
@@ -35,13 +38,15 @@
  * <p>
  * The complementary type for objects with dimension attribute is the type
  * {@link RObject#TYPE_ARRAY array} and the interface {@link RArray}.
- * The data structure for multiple R objects is represented by the type 
+ * The data structure for multiple R objects is represented by the type
  * {@link RObject#TYPE_LIST list} respectively the interface {@link RList}.</p>
  * 
  * @param <TData> the type of the data store
  */
+@NonNullByDefault
 public interface RVector<TData extends RStore<?>> extends RObject {
 	
+	
 	/**
 	 * Returns the length of the object. The length of an {@link RObject#TYPE_VECTOR vector}
 	 * is the count of all data values.
@@ -55,14 +60,14 @@
 	 * Returns the names for the indexes of the vector. This corresponds to the values of the
 	 * R attribute (<code>names</code>) respectively the R function <code>names(object)</code>.
 	 * 
-	 * The returned character data has the same length the vector. If the R element does not have 
+	 * The returned character data has the same length the vector. If the R element does not have
 	 * names, the names are invalid, or names are disabled, the method returns <code>null</code>.
 	 * 
 	 * @return a data store with the names of the indexes or <code>null</code>
 	 * 
 	 * @since de.walware.rj.data 0.5
 	 */
-	RStore<?> getNames();
+	@Nullable RStore<?> getNames();
 	
 	
 	@Override
diff --git a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/DefaultRObjectFactory.java b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/DefaultRObjectFactory.java
index 2c71581..865b806 100644
--- a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/DefaultRObjectFactory.java
+++ b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/DefaultRObjectFactory.java
@@ -17,6 +17,8 @@
 import java.io.IOException;
 import java.io.ObjectInput;
 
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 import org.eclipse.statet.rj.data.RArray;
 import org.eclipse.statet.rj.data.RCharacterStore;
 import org.eclipse.statet.rj.data.RComplexStore;
@@ -394,12 +396,12 @@
 	}
 	
 	
-	public RList createList(final RObject[] components, final String[] names, final String classname) {
+	public RList createList(final RObject[] components, final String @Nullable [] names, final String classname) {
 		return new RList32Impl(components, classname, names);
 	}
 	
 	@Override
-	public RList createList(final RObject[] components, final String[] names) {
+	public RList createList(final RObject[] components, final String @Nullable [] names) {
 		return createList(components, names, RObject.CLASSNAME_LIST);
 	}
 	
@@ -702,7 +704,7 @@
 	}
 	
 	@Override
-	public RStore<?> readNames(final RJIO io, final long length) throws IOException {
+	public @Nullable RStore<?> readNames(final RJIO io, final long length) throws IOException {
 		final byte type= io.readByte();
 		if (type == RStore.CHARACTER) {
 			return (length <= Integer.MAX_VALUE) ?
@@ -716,7 +718,7 @@
 	}
 	
 	@Override
-	public void writeNames(final RStore<?> names, final RJIO io) throws IOException {
+	public void writeNames(final @Nullable RStore<?> names, final RJIO io) throws IOException {
 		if (names != null) {
 			final byte type= names.getStoreType();
 			if (type == RStore.CHARACTER) {
diff --git a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/ExternalizableRObject.java b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/ExternalizableRObject.java
index 5922b85..645538d 100644
--- a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/ExternalizableRObject.java
+++ b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/ExternalizableRObject.java
@@ -16,10 +16,13 @@
 
 import java.io.IOException;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
 import org.eclipse.statet.rj.data.RJIO;
 import org.eclipse.statet.rj.data.RObjectFactory;
 
 
+@NonNullByDefault
 public interface ExternalizableRObject {
 	
 	
diff --git a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/RArrayImpl.java b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/RArrayImpl.java
index c228b5e..2766d18 100644
--- a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/RArrayImpl.java
+++ b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/RArrayImpl.java
@@ -16,6 +16,9 @@
 
 import java.io.IOException;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 import org.eclipse.statet.rj.data.RArray;
 import org.eclipse.statet.rj.data.RCharacterStore;
 import org.eclipse.statet.rj.data.RDataUtils;
@@ -27,6 +30,7 @@
 import org.eclipse.statet.rj.data.RStore;
 
 
+@NonNullByDefault
 public class RArrayImpl<TData extends RStore<?>> extends AbstractRObject
 		implements RArray<TData>, ExternalizableRObject {
 	
@@ -36,7 +40,7 @@
 	
 	private String className1;
 	private RInteger32Store dimAttribute;
-	private SimpleRList<RStore<?>> dimnamesAttribute;
+	private @Nullable SimpleRList<RStore<?>> dimnamesAttribute;
 	
 	
 	public RArrayImpl(final TData data, final String className1, final int[] dim) {
@@ -47,9 +51,9 @@
 		if (data.getLength() >= 0 && data.getLength() != this.length) {
 			throw new IllegalArgumentException("dim");
 		}
+		this.data= data;
 		this.className1= className1;
 		this.dimAttribute= new RInteger32Store(dim);
-		this.data= data;
 	}
 	
 	public RArrayImpl(final RJIO io, final RObjectFactory factory) throws IOException {
@@ -146,7 +150,7 @@
 	}
 	
 	@Override
-	public RCharacterStore getDimNames() {
+	public @Nullable RCharacterStore getDimNames() {
 		if (this.dimnamesAttribute != null) {
 			return this.dimnamesAttribute.getNames();
 		}
@@ -154,7 +158,7 @@
 	}
 	
 	@Override
-	public RStore<?> getNames(final int dim) {
+	public @Nullable RStore<?> getNames(final int dim) {
 		if (this.dimnamesAttribute != null) {
 			return this.dimnamesAttribute.get(dim);
 		}
diff --git a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/RDataFrame32Impl.java b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/RDataFrame32Impl.java
index 2fb81a7..2c8e944 100644
--- a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/RDataFrame32Impl.java
+++ b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/RDataFrame32Impl.java
@@ -16,6 +16,9 @@
 
 import java.io.IOException;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 import org.eclipse.statet.rj.data.RCharacterStore;
 import org.eclipse.statet.rj.data.RDataFrame;
 import org.eclipse.statet.rj.data.RJIO;
@@ -24,6 +27,7 @@
 import org.eclipse.statet.rj.data.RStore;
 
 
+@NonNullByDefault
 public class RDataFrame32Impl extends RList32Impl
 		implements RDataFrame, ExternalizableRObject {
 	
@@ -110,18 +114,16 @@
 	
 	@Override
 	public RStore<?> getColumn(final int idx) {
-		final RObject obj= get(idx);
-		return (obj != null) ? obj.getData() : null;
+		return get(idx).getData();
 	}
 	
 	@Override
 	public RStore<?> getColumn(final long idx) {
-		final RObject obj= get(idx);
-		return (obj != null) ? obj.getData() : null;
+		return get(idx).getData();
 	}
 	
 	@Override
-	public RStore<?> getColumn(final String name) {
+	public @Nullable RStore<?> getColumn(final String name) {
 		final RObject obj= get(name);
 		return (obj != null) ? obj.getData() : null;
 	}
diff --git a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/RFunctionImpl.java b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/RFunctionImpl.java
index 3b1f222..f67a186 100644
--- a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/RFunctionImpl.java
+++ b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/RFunctionImpl.java
@@ -16,24 +16,29 @@
 
 import java.io.IOException;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 import org.eclipse.statet.rj.data.RFunction;
 import org.eclipse.statet.rj.data.RJIO;
 import org.eclipse.statet.rj.data.RObjectFactory;
 import org.eclipse.statet.rj.data.RStore;
 
 
+@NonNullByDefault
 public class RFunctionImpl extends AbstractRObject
 		implements RFunction, ExternalizableRObject {
 	
 	
-	private String headerSource;
-	private String bodySource;
+	private @Nullable String headerSource;
+	private @Nullable String bodySource;
 	
 	
-	public RFunctionImpl(final String header) {
+	public RFunctionImpl(final @Nullable String header) {
 		this.headerSource= header;
 	}
 	
+	@SuppressWarnings("null")
 	public RFunctionImpl(final RJIO io, final RObjectFactory factory) throws IOException {
 		readExternal(io, factory);
 	}
@@ -67,17 +72,17 @@
 	}
 	
 	@Override
-	public String getHeaderSource() {
+	public @Nullable String getHeaderSource() {
 		return this.headerSource;
 	}
 	
 	@Override
-	public String getBodySource() {
+	public @Nullable String getBodySource() {
 		return this.bodySource;
 	}
 	
 	@Override
-	public RStore<?> getData() {
+	public @Nullable RStore<?> getData() {
 		return null;
 	}
 	
diff --git a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/RLanguageImpl.java b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/RLanguageImpl.java
index f36f7ee..45c68d6 100644
--- a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/RLanguageImpl.java
+++ b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/RLanguageImpl.java
@@ -16,12 +16,16 @@
 
 import java.io.IOException;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 import org.eclipse.statet.rj.data.RJIO;
 import org.eclipse.statet.rj.data.RLanguage;
 import org.eclipse.statet.rj.data.RObjectFactory;
 import org.eclipse.statet.rj.data.RStore;
 
 
+@NonNullByDefault
 public class RLanguageImpl extends AbstractRObject
 		implements RLanguage, ExternalizableRObject {
 	
@@ -42,20 +46,21 @@
 	
 	private String className1;
 	
-	private String source;
+	private @Nullable String source;
 	
 	
-	public RLanguageImpl(final byte type, final String source, final String className1) {
+	public RLanguageImpl(final byte type, final String source, final @Nullable String className1) {
 		this.type= type;
 		this.className1= (className1 != null) ? className1 : getBaseClassname(type);
 		this.source= source;
 	}
 	
-	public RLanguageImpl(final byte type, final String className1) {
+	public RLanguageImpl(final byte type, final @Nullable String className1) {
 		this.type= type;
 		this.className1= (className1 != null) ? className1 : getBaseClassname(type);
 	}
 	
+	@SuppressWarnings("null")
 	public RLanguageImpl(final RJIO io, final RObjectFactory factory) throws IOException {
 		readExternal(io, factory);
 	}
@@ -115,12 +120,12 @@
 	}
 	
 	@Override
-	public String getSource() {
+	public @Nullable String getSource() {
 		return this.source;
 	}
 	
 	@Override
-	public RStore<?> getData() {
+	public @Nullable RStore<?> getData() {
 		return null;
 	}
 	
diff --git a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/RNullImpl.java b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/RNullImpl.java
index c5db8be..a257af9 100644
--- a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/RNullImpl.java
+++ b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/RNullImpl.java
@@ -14,11 +14,15 @@
 
 package org.eclipse.statet.rj.data.impl;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 import org.eclipse.statet.rj.data.RList;
 import org.eclipse.statet.rj.data.RObject;
 import org.eclipse.statet.rj.data.RStore;
 
 
+@NonNullByDefault
 public class RNullImpl implements RObject {
 	
 	
@@ -51,12 +55,12 @@
 	}
 	
 	@Override
-	public RStore<?> getData() {
+	public @Nullable RStore<?> getData() {
 		return null;
 	}
 	
 	@Override
-	public RList getAttributes() {
+	public @Nullable RList getAttributes() {
 		return null;
 	}
 	
@@ -66,7 +70,7 @@
 	}
 	
 	@Override
-	public boolean equals(final Object obj) {
+	public boolean equals(final @Nullable Object obj) {
 		return (this == obj || (
 				(obj instanceof RObject) && ((RObject) obj).getRObjectType() == RObject.TYPE_NULL) );
 	}
diff --git a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/RReferenceImpl.java b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/RReferenceImpl.java
index 9be5da8..7adf876 100644
--- a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/RReferenceImpl.java
+++ b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/RReferenceImpl.java
@@ -16,6 +16,9 @@
 
 import java.io.IOException;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 import org.eclipse.statet.rj.data.RDataUtils;
 import org.eclipse.statet.rj.data.RJIO;
 import org.eclipse.statet.rj.data.RList;
@@ -25,6 +28,7 @@
 import org.eclipse.statet.rj.data.RStore;
 
 
+@NonNullByDefault
 public class RReferenceImpl implements RReference, ExternalizableRObject {
 	
 	
@@ -39,6 +43,7 @@
 		this.baseClassName= baseClass;
 	}
 	
+	@SuppressWarnings("null")
 	public RReferenceImpl(final RJIO io, final RObjectFactory factory) throws IOException {
 		readExternal(io, factory);
 	}
@@ -83,17 +88,17 @@
 	}
 	
 	@Override
-	public RObject getResolvedRObject() {
+	public @Nullable RObject getResolvedRObject() {
 		return null;
 	}
 	
 	@Override
-	public RStore<?> getData() {
+	public @Nullable RStore<?> getData() {
 		return null;
 	}
 	
 	@Override
-	public RList getAttributes() {
+	public @Nullable RList getAttributes() {
 		return null;
 	}
 	
diff --git a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/RS4ObjectImpl.java b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/RS4ObjectImpl.java
index d76a386..4fc12bc 100644
--- a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/RS4ObjectImpl.java
+++ b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/RS4ObjectImpl.java
@@ -16,6 +16,9 @@
 
 import java.io.IOException;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 import org.eclipse.statet.rj.data.RCharacterStore;
 import org.eclipse.statet.rj.data.RJIO;
 import org.eclipse.statet.rj.data.RObject;
@@ -24,6 +27,7 @@
 import org.eclipse.statet.rj.data.RStore;
 
 
+@NonNullByDefault
 public class RS4ObjectImpl extends AbstractRObject
 		implements RS4Object, ExternalizableRObject {
 	
@@ -46,6 +50,7 @@
 		this.slotValues= slotValues;
 	}
 	
+	@SuppressWarnings("null")
 	public RS4ObjectImpl(final RJIO io, final RObjectFactory factory) throws IOException {
 		readExternal(io, factory);
 	}
@@ -106,17 +111,12 @@
 	}
 	
 	@Override
-	public RObject getDataSlot() {
+	public @Nullable RObject getDataSlot() {
 		return (this.dataSlotIdx >= 0) ? this.slotValues[this.dataSlotIdx] : null;
 	}
 	
-	public byte getDataType() {
-		return (this.dataSlotIdx >= 0 && this.slotValues[this.dataSlotIdx] != null) ?
-				this.slotValues[this.dataSlotIdx].getData().getStoreType() : 0;
-	}
-	
 	@Override
-	public RStore<?> getData() {
+	public @Nullable RStore<?> getData() {
 		return (this.dataSlotIdx >= 0 && this.slotValues[this.dataSlotIdx] != null) ?
 				this.slotValues[this.dataSlotIdx].getData() : null;
 	}
diff --git a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/RVectorImpl.java b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/RVectorImpl.java
index 9060301..56c24d6 100644
--- a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/RVectorImpl.java
+++ b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/RVectorImpl.java
@@ -16,6 +16,9 @@
 
 import java.io.IOException;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 import org.eclipse.statet.rj.data.RJIO;
 import org.eclipse.statet.rj.data.RList;
 import org.eclipse.statet.rj.data.RObjectFactory;
@@ -23,6 +26,7 @@
 import org.eclipse.statet.rj.data.RVector;
 
 
+@NonNullByDefault
 public class RVectorImpl<TData extends RStore<?>> extends AbstractRObject
 		implements RVector<TData>, ExternalizableRObject {
 	
@@ -31,7 +35,7 @@
 	private long length;
 	
 	private String className1;
-	private RStore<?> namesAttribute;
+	private @Nullable RStore<?> namesAttribute;
 	
 	
 	public RVectorImpl(final TData data, final String className1) {
@@ -75,6 +79,7 @@
 		this.namesAttribute= initialNames;
 	}
 	
+	@SuppressWarnings("null")
 	public RVectorImpl(final RJIO io, final RObjectFactory factory) throws IOException {
 		readExternal(io, factory);
 	}
@@ -149,7 +154,7 @@
 	}
 	
 	@Override
-	public RStore<?> getNames() {
+	public @Nullable RStore<?> getNames() {
 		return this.namesAttribute;
 	}
 	
diff --git a/core/org.eclipse.statet.rj.server.remotetools/.classpath b/core/org.eclipse.statet.rj.server.remotetools/.classpath
index eca7bdb..7728a88 100644
--- a/core/org.eclipse.statet.rj.server.remotetools/.classpath
+++ b/core/org.eclipse.statet.rj.server.remotetools/.classpath
@@ -1,7 +1,15 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
+		<attributes>
+			<attribute name="annotationpath" value="/org.eclipse.statet/eea/"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins">
+		<attributes>
+			<attribute name="annotationpath" value="/org.eclipse.statet/eea/"/>
+		</attributes>
+	</classpathentry>
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
diff --git a/core/org.eclipse.statet.rj.services.core/.classpath b/core/org.eclipse.statet.rj.services.core/.classpath
index 020ba8c..f6c1afc 100644
--- a/core/org.eclipse.statet.rj.services.core/.classpath
+++ b/core/org.eclipse.statet.rj.services.core/.classpath
@@ -3,9 +3,14 @@
 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
 		<attributes>
 			<attribute name="owner.project.facets" value="java"/>
+			<attribute name="annotationpath" value="/org.eclipse.statet/eea/"/>
 		</attributes>
 	</classpathentry>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins">
+		<attributes>
+			<attribute name="annotationpath" value="/org.eclipse.statet/eea/"/>
+		</attributes>
+	</classpathentry>
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="src" path="srcREnv"/>
 	<classpathentry kind="src" path="srcGraphic"/>
diff --git a/core/org.eclipse.statet.rj.services.core/src/org/eclipse/statet/rj/services/FQRObjectRef.java b/core/org.eclipse.statet.rj.services.core/src/org/eclipse/statet/rj/services/FQRObjectRef.java
index 2cc2272..c7c4c1c 100644
--- a/core/org.eclipse.statet.rj.services.core/src/org/eclipse/statet/rj/services/FQRObjectRef.java
+++ b/core/org.eclipse.statet.rj.services.core/src/org/eclipse/statet/rj/services/FQRObjectRef.java
@@ -14,14 +14,17 @@
 
 package org.eclipse.statet.rj.services;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
 import org.eclipse.statet.rj.data.RObject;
 
 
 /**
  * Fully qualified reference to an R object.
  * 
- * @since 2.1 (provisional)
+ * @since 2.1
  */
+@NonNullByDefault
 public interface FQRObjectRef {
 	
 	
@@ -40,7 +43,7 @@
 	RObject getEnv();
 	
 	/**
-	 * Name, relative to the environment, specified by a symbol or call.
+	 * The name, relative to the environment, specified by a symbol or call.
 	 * 
 	 * @return the name
 	 */
diff --git a/core/org.eclipse.statet.rj.services.core/src/org/eclipse/statet/rj/services/FunctionCall.java b/core/org.eclipse.statet.rj.services.core/src/org/eclipse/statet/rj/services/FunctionCall.java
index e80962e..30b70df 100644
--- a/core/org.eclipse.statet.rj.services.core/src/org/eclipse/statet/rj/services/FunctionCall.java
+++ b/core/org.eclipse.statet.rj.services.core/src/org/eclipse/statet/rj/services/FunctionCall.java
@@ -17,6 +17,9 @@
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 import org.eclipse.statet.rj.data.RObject;
 import org.eclipse.statet.rj.data.RStore;
 
@@ -25,7 +28,7 @@
  * A function call provides a comfortable way to build and execute
  * R function call.
  * 
- * <p>A function call builder for a given function can be created by 
+ * <p>A function call builder for a given function can be created by
  * {@link RService#createFunctionCall(String)}.</p>
  * 
  * <p>The builder mainly provides methods to add arguments and to
@@ -33,10 +36,10 @@
  * 
  * <p>Arguments are added by the <code>#add...()</code> methods. The
  * order they are added is exactly the order they are send to R. There
- * are add methods for a symbol referring to data existing in R, 
+ * are add methods for a symbol referring to data existing in R,
  * for given R data objects and for single data values which are
  * transformed automatically from java primitives into R data objects.
- * All methods are available in a variant with and without a parameter 
+ * All methods are available in a variant with and without a parameter
  * for the R argument name. An unnamed argument can be specified by
  * using the variant without the argument name parameter or by specifying
  * the name as <code>null</code>.</p>
@@ -44,6 +47,7 @@
  * <p>The common guidelines in {@link RService} (like concurrency) are effective
  * for all evaluation methods in this interface.</p>
  */
+@NonNullByDefault
 public interface FunctionCall {
 	
 	
@@ -59,7 +63,7 @@
 	 * 
 	 * @see #addChar(String, String) to add a string/character value directly
 	 */
-	FunctionCall add(String arg, String expression);
+	FunctionCall add(@Nullable String arg, String expression);
 	
 	/**
 	 * Adds a unnamed argument with the given R expression as value.
@@ -81,7 +85,7 @@
 	 * @param data an R data object
 	 * @return a reference to this object
 	 */
-	FunctionCall add(String arg, RObject data);
+	FunctionCall add(@Nullable String arg, RObject data);
 	
 	/**
 	 * Adds an unnamed argument with the given R data object as value.
@@ -96,19 +100,19 @@
 	/**
 	 * Adds an argument with the given boolean/logical as value.
 	 * 
-	 * <p>The Java boolean value is transformed into an R data object 
+	 * <p>The Java boolean value is transformed into an R data object
 	 * of type {@link RStore#LOGICAL logical}.</p>
 	 * 
 	 * @param arg the name of the argument or <code>null</code> for unnamed
 	 * @param logical the value of the argument
 	 * @return a reference to this object
 	 */
-	FunctionCall addLogi(String arg, boolean logical);
+	FunctionCall addLogi(@Nullable String arg, boolean logical);
 	
 	/**
 	 * Adds an unnamed argument with the given boolean/logical as value.
 	 * 
-	 * <p>The Java boolean value is transformed into an R data object 
+	 * <p>The Java boolean value is transformed into an R data object
 	 * of type {@link RStore#LOGICAL logical}.</p>
 	 * 
 	 * @param logical the value of the argument
@@ -119,19 +123,19 @@
 	/**
 	 * Adds an argument with the given integer as value.
 	 * 
-	 * <p>The Java integer value is transformed into an R data object 
+	 * <p>The Java integer value is transformed into an R data object
 	 * of type {@link RStore#INTEGER integer}.</p>
 	 * 
 	 * @param arg the name of the argument or <code>null</code> for unnamed
 	 * @param integer the value of the argument
 	 * @return a reference to this object
 	 */
-	FunctionCall addInt(String arg, int integer);
+	FunctionCall addInt(@Nullable String arg, int integer);
 	
 	/**
 	 * Adds an unnamed argument with the given integer as value.
 	 * 
-	 * <p>The Java integer value is transformed into an R data object 
+	 * <p>The Java integer value is transformed into an R data object
 	 * of type {@link RStore#INTEGER integer}.</p>
 	 * 
 	 * @param integer the value of the argument
@@ -142,19 +146,19 @@
 	/**
 	 * Adds an argument with the given double/numeric as value.
 	 * 
-	 * <p>The Java double value is transformed into an R data object 
+	 * <p>The Java double value is transformed into an R data object
 	 * of type {@link RStore#NUMERIC numeric}, also called real.</p>
 	 * 
 	 * @param arg the name of the argument or <code>null</code> for unnamed
 	 * @param numeric the value of the argument
 	 * @return a reference to this object
 	 */
-	FunctionCall addNum(String arg, double numeric);
+	FunctionCall addNum(@Nullable String arg, double numeric);
 	
 	/**
 	 * Adds an unnamed argument with the given double/numeric as value.
 	 * 
-	 * <p>The Java double value is transformed into an R data object 
+	 * <p>The Java double value is transformed into an R data object
 	 * of type {@link RStore#NUMERIC numeric}, also called real.</p>
 	 * 
 	 * @param arg the name of the argument
@@ -166,19 +170,19 @@
 	/**
 	 * Adds an argument with the given string/character as value.
 	 * 
-	 * <p>The Java String value is transformed into an R data object 
+	 * <p>The Java String value is transformed into an R data object
 	 * of type {@link RStore#CHARACTER character}.</p>
 	 * 
 	 * @param arg the name of the argument or <code>null</code> for unnamed
 	 * @param character the value of the argument
 	 * @return a reference to this object
 	 */
-	FunctionCall addCplx(String arg, double real, double imaginary);
+	FunctionCall addCplx(@Nullable String arg, double real, double imaginary);
 	
 	/**
 	 * Adds an unnamed argument with the given string/character as value.
 	 * 
-	 * <p>The Java String value is transformed into an R data object 
+	 * <p>The Java String value is transformed into an R data object
 	 * of type {@link RStore#CHARACTER character}.</p>
 	 * 
 	 * @param character the value of the argument
@@ -189,19 +193,19 @@
 	/**
 	 * Adds an argument with the given string/character as value.
 	 * 
-	 * <p>The Java String value is transformed into an R data object 
+	 * <p>The Java String value is transformed into an R data object
 	 * of type {@link RStore#CHARACTER character}.</p>
 	 * 
 	 * @param arg the name of the argument or <code>null</code> for unnamed
 	 * @param character the value of the argument
 	 * @return a reference to this object
 	 */
-	FunctionCall addChar(String arg, String character);
+	FunctionCall addChar(@Nullable String arg, String character);
 	
 	/**
 	 * Adds an unnamed argument with the given string/character as value.
 	 * 
-	 * <p>The Java String value is transformed into an R data object 
+	 * <p>The Java String value is transformed into an R data object
 	 * of type {@link RStore#CHARACTER character}.</p>
 	 * 
 	 * @param character the value of the argument
@@ -212,18 +216,18 @@
 	/**
 	 * Adds an argument with the given NULL as value.
 	 * 
-	 * <p>The Java String value is transformed into an R data 
+	 * <p>The Java String value is transformed into an R data
 	 * {@link RObject#NULL NULL} object.</p>
 	 * 
 	 * @param arg the name of the argument or <code>null</code> for unnamed
 	 * @return a reference to this object
 	 */
-	FunctionCall addNull(String arg);
+	FunctionCall addNull(@Nullable String arg);
 	
 	/**
 	 * Adds an unnamed argument with the given NULL as value.
 	 * 
-	 * <p>The Java String value is transformed into an R data 
+	 * <p>The Java String value is transformed into an R data
 	 * {@link RObject#NULL NULL} object.</p>
 	 * 
 	 * @return a reference to this object
@@ -257,7 +261,8 @@
 	 * 
 	 * @since de.walware.rj.services 2.1
 	 */
-	void evalVoid(RObject envir, IProgressMonitor monitor) throws CoreException;
+	void evalVoid(@Nullable RObject envir,
+			IProgressMonitor monitor) throws CoreException;
 	
 	/**
 	 * Performs the evaluation of the this function call in R and returns its value as R data object.
@@ -292,7 +297,7 @@
 	 * @throws CoreException if the operation was canceled or failed; the status
 	 *     of the exception contains detail about the cause
 	 */
-	RObject evalData(String factoryId, int options, int depth,
+	RObject evalData(@Nullable String factoryId, int options, int depth,
 			IProgressMonitor monitor) throws CoreException;
 	
 	/**
@@ -314,15 +319,16 @@
 	 * 
 	 * @since de.walware.rj.services 2.1
 	 */
-	RObject evalData(RObject envir, String factoryId, int options, int depth,
+	RObject evalData(@Nullable RObject envir,
+			@Nullable String factoryId, int options, int depth,
 			IProgressMonitor monitor) throws CoreException;
 	
 	/**
 	 * Performs the evaluation of the this function call in R and assign its return value to
 	 * the specified expression.
 	 * 
-	 * <p>The target have to be a valid target expression for a R <code>&lt;-</code> assignment 
-	 * operation.  A single symbol like <code>x</code> or <code>`x-y`</code>, a path in an object 
+	 * <p>The target have to be a valid target expression for a R <code>&lt;-</code> assignment
+	 * operation.  A single symbol like <code>x</code> or <code>`x-y`</code>, a path in an object
 	 * tree like <code>xlist$item1</code> or <code>xobj@slotName</code> is valid as well as
 	 * special function calls which supports assignments like <code>dim(x)</code>.</p>
 	 * 
@@ -335,6 +341,7 @@
 	 * 
 	 * @since de.walware.rj.services 2.0
 	 */
-	void evalAssign(String target, IProgressMonitor monitor) throws CoreException;
+	void evalAssign(String target,
+			IProgressMonitor monitor) throws CoreException;
 	
 }
diff --git a/core/org.eclipse.statet.rj.services.core/src/org/eclipse/statet/rj/services/RJServices.java b/core/org.eclipse.statet.rj.services.core/src/org/eclipse/statet/rj/services/RJServices.java
index 5f59b35..d0f0753 100644
--- a/core/org.eclipse.statet.rj.services.core/src/org/eclipse/statet/rj/services/RJServices.java
+++ b/core/org.eclipse.statet.rj.services.core/src/org/eclipse/statet/rj/services/RJServices.java
@@ -14,7 +14,10 @@
 
 package org.eclipse.statet.rj.services;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
 
+
+@NonNullByDefault
 public class RJServices {
 	
 	
diff --git a/core/org.eclipse.statet.rj.services.core/src/org/eclipse/statet/rj/services/RService.java b/core/org.eclipse.statet.rj.services.core/src/org/eclipse/statet/rj/services/RService.java
index 7320efd..3c2677f 100644
--- a/core/org.eclipse.statet.rj.services.core/src/org/eclipse/statet/rj/services/RService.java
+++ b/core/org.eclipse.statet.rj.services.core/src/org/eclipse/statet/rj/services/RService.java
@@ -20,6 +20,9 @@
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 import org.eclipse.statet.rj.data.RObject;
 import org.eclipse.statet.rj.data.RReference;
 import org.eclipse.statet.rj.graphic.core.RGraphic;
@@ -29,22 +32,22 @@
  * A interface with methods to evaluate and exchange data with R.
  * <p>
  * It depends on the application how to get access to the RService.
- * In StatET it is passed as adapter argument in 
+ * In StatET it is passed as adapter argument in
  * {@link org.eclipse.statet.ecommons.ts.core.IToolRunnable#run(org.eclipse.statet.ecommons.ts.core.IToolService, IProgressMonitor) IToolRunnable#run(...)},
  * if the R console supports the featureset {@link org.eclipse.statet.r.core.tool.RTool#R_DATA_FEATURESET_ID RTool#R_DATA_FEATURESET_ID}.
- * In applications using R in the background by the RServi library, 
+ * In applications using R in the background by the RServi library,
  * the {@link org.eclipse.statet.rj.servi.RServi RServi} object provides the RService methods.</p>
  * <p>
  * If the application has also an console, the operations of an RService
  * usually doesn't appears in the console. Even not recommended, it is possible
  * to call special R functions like print which output is written to the console.
- * It should absolutely avoided to use functions like <code>readline</code> which requires 
+ * It should absolutely avoided to use functions like <code>readline</code> which requires
  * interaction with the console.</p>
  * <p>
  * The methods of an RService should not be called concurrently by different
  * threads. The RService consumer have to make sure that the function calls
  * are synchronized, if multiple thread have access to the same instance.
- * Implementations of RService interface can perform checks too, but the consumer 
+ * Implementations of RService interface can perform checks too, but the consumer
  * must not rely on that.</p>
  * <p>
  * Especially for longer evaluations, it is recommended that the application implements
@@ -59,6 +62,7 @@
  * 
  * @since de.walware.rj.services 0.4
  */
+@NonNullByDefault
 public interface RService {
 	
 	
@@ -89,7 +93,7 @@
 	 * 
 	 * @since de.walware.rj.services 2.1
 	 **/
-	int LOAD_ENVIR=                                         1 << 4;
+	int LOAD_ENVIRONMENT=                                   1 << 4;
 	
 	/**
 	 * Option flag indicating to eval all promises directly.
@@ -112,7 +116,8 @@
 	 * @throws CoreException if the operation was canceled or failed; the status
 	 *     of the exception contains detail about the cause
 	 */
-	void evalVoid(String expression, IProgressMonitor monitor) throws CoreException;
+	void evalVoid(String expression,
+			IProgressMonitor monitor) throws CoreException;
 	
 	/**
 	 * Performs the evaluation of the given expression in R without returning a value.
@@ -129,7 +134,8 @@
 	 * 
 	 * @since de.walware.rj.services 2.1
 	 */
-	void evalVoid(String expression, RObject envir, IProgressMonitor monitor) throws CoreException;
+	void evalVoid(String expression, @Nullable RObject envir,
+			IProgressMonitor monitor) throws CoreException;
 	
 	/**
 	 * Performs the evaluation of the given expression in R and returns its value as R data object.
@@ -147,7 +153,8 @@
 	 * @throws CoreException if the operation was canceled or failed; the status
 	 *     of the exception contains detail about the cause
 	 */
-	RObject evalData(String expression, IProgressMonitor monitor) throws CoreException;
+	RObject evalData(String expression,
+			IProgressMonitor monitor) throws CoreException;
 	
 	/**
 	 * Performs the evaluation of the given expression in R and returns its value. The method returns
@@ -169,7 +176,8 @@
 	 * @see #DEPTH_INFINITE
 	 * @see #DEPTH_ONE
 	 */
-	RObject evalData(String expression, String factoryId, int options, int depth,
+	RObject evalData(String expression,
+			@Nullable String factoryId, int options, int depth,
 			IProgressMonitor monitor) throws CoreException;
 	
 	/**
@@ -195,19 +203,24 @@
 	 * @see #DEPTH_INFINITE
 	 * @see #DEPTH_ONE
 	 */
-	RObject evalData(String expression, RObject envir, String factoryId, int options, int depth,
+	RObject evalData(String expression, @Nullable RObject envir,
+			@Nullable String factoryId, int options, int depth,
 			IProgressMonitor monitor) throws CoreException;
 	
-	RObject evalData(RReference reference, IProgressMonitor monitor) throws CoreException;
-	RObject evalData(RReference reference, String factoryId, int options, int depth,
+	RObject evalData(RReference reference,
+			IProgressMonitor monitor) throws CoreException;
+	RObject evalData(RReference reference,
+			@Nullable String factoryId, int options, int depth,
+			IProgressMonitor monitor) throws CoreException;
+	
 			IProgressMonitor monitor) throws CoreException;
 	
 	/**
 	 * Performs the assignment of the given R data object to an expression in R. The method returns
 	 * after the assignment is finished.
 	 * 
-	 * <p>The target have to be a valid target expression for a R <code>&lt;-</code> assignment 
-	 * operation.  A single symbol like <code>x</code> or <code>`x-y`</code>, a path in an object 
+	 * <p>The target have to be a valid target expression for a R <code>&lt;-</code> assignment
+	 * operation.  A single symbol like <code>x</code> or <code>`x-y`</code>, a path in an object
 	 * tree like <code>xlist$item1</code> or <code>xobj@slotName</code> is valid as well as
 	 * special function calls which supports assignments like <code>dim(x)</code>.</p>
 	 * 
@@ -220,7 +233,8 @@
 	 * @throws CoreException if the operation was canceled or was failed; the status
 	 *     of the exception contains detail about the cause
 	 */
-	void assignData(String target, RObject data, IProgressMonitor monitor) throws CoreException;
+	void assignData(String target, RObject data,
+			IProgressMonitor monitor) throws CoreException;
 	
 //	void assignDataToAttribute(String expression, String attributeName, RObject data, IProgressMonitor monitor) throws CoreException;
 	
diff --git a/core/org.eclipse.statet.rj.services.core/src/org/eclipse/statet/rj/services/RServiceControlExtension.java b/core/org.eclipse.statet.rj.services.core/src/org/eclipse/statet/rj/services/RServiceControlExtension.java
index b3cab26..15b13d3 100644
--- a/core/org.eclipse.statet.rj.services.core/src/org/eclipse/statet/rj/services/RServiceControlExtension.java
+++ b/core/org.eclipse.statet.rj.services.core/src/org/eclipse/statet/rj/services/RServiceControlExtension.java
@@ -19,11 +19,14 @@
 
 import org.eclipse.core.runtime.IProgressMonitor;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
 
 /**
  * 
  * @provisional
  */
+@NonNullByDefault
 public interface RServiceControlExtension {
 	
 	/**
@@ -56,7 +59,7 @@
 	 * If short background operations are waiting for execution, they are executed (depends on
 	 * implementation).</p>
 	 * <p>
-	 * The current thread must hold the lock {@link #getWaitLock()}. The method returns after a 
+	 * The current thread must hold the lock {@link #getWaitLock()}. The method returns after a
 	 * short waiting time, operations are executed <b>or</b> {@link #resume()} is called.</p>
 	 * 
 	 * @param monitor the current monitor
diff --git a/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RCircle.java b/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RCircle.java
index 7303082..c91023d 100644
--- a/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RCircle.java
+++ b/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RCircle.java
@@ -14,10 +14,13 @@
 
 package org.eclipse.statet.rj.graphic.core;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
 
 /**
  * Circle with center <code>(x, y)</code> and radius <code>r</code>.
  */
+@NonNullByDefault
 public class RCircle extends RGraphicElement {
 	
 	
diff --git a/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RClipSetting.java b/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RClipSetting.java
index f104df3..0785b2e 100644
--- a/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RClipSetting.java
+++ b/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RClipSetting.java
@@ -14,11 +14,14 @@
 
 package org.eclipse.statet.rj.graphic.core;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
 
 /**
  * Rectangular clipping area with the vertexes <code>(x0, y0)</code>, <code>(x0, y1)</code>,
  * <code>(x1, y1)</code>, <code>(x1, y1)</code>.
  */
+@NonNullByDefault
 public class RClipSetting extends RPaintSetting {
 	
 	
diff --git a/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RColorSetting.java b/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RColorSetting.java
index a118533..e83ea0d 100644
--- a/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RColorSetting.java
+++ b/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RColorSetting.java
@@ -14,10 +14,13 @@
 
 package org.eclipse.statet.rj.graphic.core;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
 
 /**
  * Configures paint color.
  */
+@NonNullByDefault
 public class RColorSetting extends RPaintSetting {
 	
 	
diff --git a/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RFillSetting.java b/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RFillSetting.java
index ef62600..6d7ed7a 100644
--- a/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RFillSetting.java
+++ b/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RFillSetting.java
@@ -14,10 +14,13 @@
 
 package org.eclipse.statet.rj.graphic.core;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
 
 /**
  * Configures filling paint color.
  */
+@NonNullByDefault
 public class RFillSetting extends RPaintSetting {
 	
 	
diff --git a/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RFontSetting.java b/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RFontSetting.java
index 994523b..374fe4c 100644
--- a/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RFontSetting.java
+++ b/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RFontSetting.java
@@ -14,10 +14,13 @@
 
 package org.eclipse.statet.rj.graphic.core;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
 
 /**
  * Configures the text font.
  */
+@NonNullByDefault
 public class RFontSetting extends RPaintSetting {
 	
 	/**
diff --git a/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RGraphic.java b/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RGraphic.java
index 6058b2c..c1dee1c 100644
--- a/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RGraphic.java
+++ b/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RGraphic.java
@@ -16,6 +16,8 @@
 
 import java.util.List;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
 
 /**
  * An RGraphic represents the client side of a graphic (device)
@@ -31,6 +33,7 @@
  * drawing instructions. Settings are valid for all following drawing instructions
  * until it is changed by a new setting instruction of the same type.</p>
  */
+@NonNullByDefault
 public interface RGraphic {
 	
 	
diff --git a/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RGraphicElement.java b/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RGraphicElement.java
index 1261b90..3fdc496 100644
--- a/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RGraphicElement.java
+++ b/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RGraphicElement.java
@@ -14,10 +14,13 @@
 
 package org.eclipse.statet.rj.graphic.core;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
 
 /**
  * Parent of all instructions painting graphic elements (in contrast to {@link RPaintSetting}).
  */
+@NonNullByDefault
 public abstract class RGraphicElement implements RGraphicInstruction {
 	
 }
diff --git a/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RGraphicInitialization.java b/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RGraphicInitialization.java
index 45b553e..37c704f 100644
--- a/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RGraphicInitialization.java
+++ b/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RGraphicInitialization.java
@@ -14,10 +14,13 @@
 
 package org.eclipse.statet.rj.graphic.core;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
 
 /**
  * First instruction of an R graphic.
  */
+@NonNullByDefault
 public class RGraphicInitialization implements RGraphicInstruction {
 	
 	
diff --git a/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RGraphicInstruction.java b/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RGraphicInstruction.java
index 5dc61a5..fa69d2a 100644
--- a/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RGraphicInstruction.java
+++ b/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RGraphicInstruction.java
@@ -14,6 +14,8 @@
 
 package org.eclipse.statet.rj.graphic.core;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
 
 /**
  * Instruction to paint a R graphic.
@@ -22,6 +24,7 @@
  * 
  * @see RGraphic
  */
+@NonNullByDefault
 public interface RGraphicInstruction {
 	
 	
diff --git a/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RLine.java b/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RLine.java
index 48bf94f..e73ee15 100644
--- a/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RLine.java
+++ b/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RLine.java
@@ -14,10 +14,13 @@
 
 package org.eclipse.statet.rj.graphic.core;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
 
 /**
  * Line with end points <code>(x0, y0)</code> and <code>(x1, y1)</code>.
  */
+@NonNullByDefault
 public class RLine extends RGraphicElement {
 	
 	
diff --git a/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RLineSetting.java b/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RLineSetting.java
index a795286..313fb23 100644
--- a/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RLineSetting.java
+++ b/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RLineSetting.java
@@ -14,10 +14,13 @@
 
 package org.eclipse.statet.rj.graphic.core;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
 
 /**
  * Configures line width and type.
  */
+@NonNullByDefault
 public class RLineSetting extends RPaintSetting {
 	
 	
diff --git a/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RPath.java b/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RPath.java
index 68c2d8e..e6c3fa2 100644
--- a/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RPath.java
+++ b/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RPath.java
@@ -14,10 +14,13 @@
 
 package org.eclipse.statet.rj.graphic.core;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
 
 /**
  * Path with vertices <code>(x[1], y[1])</code>, ..., <code>(x[n-1], y[n-1])</code>.
  */
+@NonNullByDefault
 public class RPath extends RGraphicElement {
 	
 	
diff --git a/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RPolygon.java b/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RPolygon.java
index fea2455..3afbfbe 100644
--- a/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RPolygon.java
+++ b/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RPolygon.java
@@ -14,10 +14,13 @@
 
 package org.eclipse.statet.rj.graphic.core;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
 
 /**
  * Polygon with vertices <code>(x[1], y[1])</code>, ..., <code>(x[n-1], y[n-1])</code>.
  */
+@NonNullByDefault
 public class RPolygon extends RGraphicElement {
 	
 	
diff --git a/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RPolyline.java b/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RPolyline.java
index d9adf44..32cb6d3 100644
--- a/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RPolyline.java
+++ b/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RPolyline.java
@@ -14,10 +14,13 @@
 
 package org.eclipse.statet.rj.graphic.core;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
 
 /**
  * Polyline through <code>(x[0], y[0])</code>, ..., <code>(x[n-1], y[n-1])</code>.
  */
+@NonNullByDefault
 public class RPolyline extends RGraphicElement {
 	
 	
diff --git a/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RRaster.java b/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RRaster.java
index e505995..de8d61e 100644
--- a/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RRaster.java
+++ b/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RRaster.java
@@ -14,10 +14,13 @@
 
 package org.eclipse.statet.rj.graphic.core;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
 
 /**
  * Raster image.
  */
+@NonNullByDefault
 public class RRaster extends RGraphicElement {
 	
 	/**
diff --git a/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RRect.java b/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RRect.java
index 4a2e3d0..d00497f 100644
--- a/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RRect.java
+++ b/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RRect.java
@@ -14,11 +14,14 @@
 
 package org.eclipse.statet.rj.graphic.core;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
 
 /**
  * Rectangle with the vertexes <code>(x0, y0)</code>, <code>(x0, y1)</code>,
  * <code>(x1, y1)</code>, <code>(x1, y1)</code>.
  */
+@NonNullByDefault
 public class RRect extends RGraphicElement {
 	
 	
diff --git a/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RText.java b/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RText.java
index 496c99b..06e28ac 100644
--- a/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RText.java
+++ b/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RText.java
@@ -14,11 +14,14 @@
 
 package org.eclipse.statet.rj.graphic.core;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
 
 /**
  * Text at position <code>(x, y)</code>, horizontal adjusted by <code>hAdj</code>
  * [0, 1] and rotated by <code>rDeg</code>.
  */
+@NonNullByDefault
 public class RText extends RGraphicElement {
 	
 	/**
diff --git a/eclient/org.eclipse.statet.rj.eclient.core/src/org/eclipse/statet/rj/eclient/core/AbstractRToolCommandHandler.java b/eclient/org.eclipse.statet.rj.eclient.core/src/org/eclipse/statet/rj/eclient/core/AbstractRToolCommandHandler.java
index 74fc7a4..27e567a 100644
--- a/eclient/org.eclipse.statet.rj.eclient.core/src/org/eclipse/statet/rj/eclient/core/AbstractRToolCommandHandler.java
+++ b/eclient/org.eclipse.statet.rj.eclient.core/src/org/eclipse/statet/rj/eclient/core/AbstractRToolCommandHandler.java
@@ -20,6 +20,8 @@
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
 import org.eclipse.statet.ecommons.ts.core.ToolCommandHandler;
 import org.eclipse.statet.ecommons.ts.core.ToolService;
 
@@ -27,6 +29,7 @@
 /**
  * @since 1.2
  */
+@NonNullByDefault
 public abstract class AbstractRToolCommandHandler implements ToolCommandHandler {
 	
 	
diff --git a/eclient/org.eclipse.statet.rj.eclient.core/src/org/eclipse/statet/rj/eclient/core/AbstractRToolRunnable.java b/eclient/org.eclipse.statet.rj.eclient.core/src/org/eclipse/statet/rj/eclient/core/AbstractRToolRunnable.java
index 6f7f771..e9cb3a1 100644
--- a/eclient/org.eclipse.statet.rj.eclient.core/src/org/eclipse/statet/rj/eclient/core/AbstractRToolRunnable.java
+++ b/eclient/org.eclipse.statet.rj.eclient.core/src/org/eclipse/statet/rj/eclient/core/AbstractRToolRunnable.java
@@ -17,6 +17,8 @@
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
 import org.eclipse.statet.ecommons.ts.core.Tool;
 import org.eclipse.statet.ecommons.ts.core.ToolRunnable;
 import org.eclipse.statet.ecommons.ts.core.ToolService;
@@ -30,27 +32,28 @@
  * 
  * @since 1.2
  */
+@NonNullByDefault
 public abstract class AbstractRToolRunnable implements ToolRunnable {
 	
 	
-	private final String fTypeId;
-	private final String fLabel;
+	private final String typeId;
+	private final String label;
 	
 	
 	public AbstractRToolRunnable(final String typeId, final String label) {
-		this.fTypeId= typeId;
-		this.fLabel= label;
+		this.typeId= typeId;
+		this.label= label;
 	}
 	
 	
 	@Override
 	public String getTypeId() {
-		return this.fTypeId;
+		return this.typeId;
 	}
 	
 	@Override
 	public String getLabel() {
-		return this.fLabel;
+		return this.label;
 	}
 	
 	@Override
diff --git a/eclient/org.eclipse.statet.rj.eclient.core/src/org/eclipse/statet/rj/eclient/core/RToolService.java b/eclient/org.eclipse.statet.rj.eclient.core/src/org/eclipse/statet/rj/eclient/core/RToolService.java
index 8e9b9db..a1309a5 100644
--- a/eclient/org.eclipse.statet.rj.eclient.core/src/org/eclipse/statet/rj/eclient/core/RToolService.java
+++ b/eclient/org.eclipse.statet.rj.eclient.core/src/org/eclipse/statet/rj/eclient/core/RToolService.java
@@ -14,6 +14,8 @@
 
 package org.eclipse.statet.rj.eclient.core;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
 import org.eclipse.statet.ecommons.ts.core.ToolService;
 
 import org.eclipse.statet.rj.services.RService;
@@ -22,6 +24,7 @@
 /**
  * @since 1.2
  */
+@NonNullByDefault
 public interface RToolService extends ToolService, RService {
 	
 }
diff --git a/eclient/org.eclipse.statet.rj.eclient.core/src/org/eclipse/statet/rj/eclient/core/ToolFQRObjectRef.java b/eclient/org.eclipse.statet.rj.eclient.core/src/org/eclipse/statet/rj/eclient/core/ToolFQRObjectRef.java
index c427307..1842d98 100644
--- a/eclient/org.eclipse.statet.rj.eclient.core/src/org/eclipse/statet/rj/eclient/core/ToolFQRObjectRef.java
+++ b/eclient/org.eclipse.statet.rj.eclient.core/src/org/eclipse/statet/rj/eclient/core/ToolFQRObjectRef.java
@@ -14,6 +14,8 @@
 
 package org.eclipse.statet.rj.eclient.core;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
 import org.eclipse.statet.ecommons.ts.core.Tool;
 
 import org.eclipse.statet.rj.data.RLanguage;
@@ -22,6 +24,7 @@
 import org.eclipse.statet.rj.services.FQRObjectRef;
 
 
+@NonNullByDefault
 public class ToolFQRObjectRef implements FQRObjectRef {
 	
 	
diff --git a/eclient/org.eclipse.statet.rj.eclient.graphics/src/org/eclipse/statet/internal/rj/eclient/graphics/EclipseRGraphic.java b/eclient/org.eclipse.statet.rj.eclient.graphics/src/org/eclipse/statet/internal/rj/eclient/graphics/EclipseRGraphic.java
index bc021ed..e867ece 100644
--- a/eclient/org.eclipse.statet.rj.eclient.graphics/src/org/eclipse/statet/internal/rj/eclient/graphics/EclipseRGraphic.java
+++ b/eclient/org.eclipse.statet.rj.eclient.graphics/src/org/eclipse/statet/internal/rj/eclient/graphics/EclipseRGraphic.java
@@ -37,6 +37,7 @@
 
 import org.eclipse.statet.jcommons.collections.CopyOnWriteIdentityListSet;
 import org.eclipse.statet.jcommons.collections.ImCollections;
+import org.eclipse.statet.jcommons.lang.Nullable;
 
 import org.eclipse.statet.ecommons.runtime.core.StatusChangeListener;
 import org.eclipse.statet.ecommons.ts.core.Tool;
@@ -1187,7 +1188,7 @@
 	}
 	
 	@Override
-	public Tool getRHandle() {
+	public @Nullable Tool getRHandle() {
 		if (this.actions != null) {
 			return this.actions.getRHandle();
 		}
diff --git a/eclient/org.eclipse.statet.rj.eclient.graphics/src/org/eclipse/statet/rj/eclient/graphics/ERGraphic.java b/eclient/org.eclipse.statet.rj.eclient.graphics/src/org/eclipse/statet/rj/eclient/graphics/ERGraphic.java
index 88e3a56..b0b4864 100644
--- a/eclient/org.eclipse.statet.rj.eclient.graphics/src/org/eclipse/statet/rj/eclient/graphics/ERGraphic.java
+++ b/eclient/org.eclipse.statet.rj.eclient.graphics/src/org/eclipse/statet/rj/eclient/graphics/ERGraphic.java
@@ -21,6 +21,8 @@
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 import org.eclipse.statet.ecommons.runtime.core.StatusChangeListener;
 import org.eclipse.statet.ecommons.ts.core.Tool;
 
@@ -112,7 +114,7 @@
 	@Override
 	boolean isActive();
 	
-	Tool getRHandle();
+	@Nullable Tool getRHandle();
 	
 	@Override
 	List<? extends ERGraphicInstruction> getInstructions();
diff --git a/examples/org.eclipse.statet.rj.servi.demo/.classpath b/examples/org.eclipse.statet.rj.servi.demo/.classpath
index eca7bdb..7728a88 100644
--- a/examples/org.eclipse.statet.rj.servi.demo/.classpath
+++ b/examples/org.eclipse.statet.rj.servi.demo/.classpath
@@ -1,7 +1,15 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
+		<attributes>
+			<attribute name="annotationpath" value="/org.eclipse.statet/eea/"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins">
+		<attributes>
+			<attribute name="annotationpath" value="/org.eclipse.statet/eea/"/>
+		</attributes>
+	</classpathentry>
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
diff --git a/examples/org.eclipse.statet.rj.servi.rcpdemo/.classpath b/examples/org.eclipse.statet.rj.servi.rcpdemo/.classpath
index eca7bdb..7728a88 100644
--- a/examples/org.eclipse.statet.rj.servi.rcpdemo/.classpath
+++ b/examples/org.eclipse.statet.rj.servi.rcpdemo/.classpath
@@ -1,7 +1,15 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
+		<attributes>
+			<attribute name="annotationpath" value="/org.eclipse.statet/eea/"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins">
+		<attributes>
+			<attribute name="annotationpath" value="/org.eclipse.statet/eea/"/>
+		</attributes>
+	</classpathentry>
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
diff --git a/examples/org.eclipse.statet.rj.servi.rcpdemo2/.classpath b/examples/org.eclipse.statet.rj.servi.rcpdemo2/.classpath
index eca7bdb..7728a88 100644
--- a/examples/org.eclipse.statet.rj.servi.rcpdemo2/.classpath
+++ b/examples/org.eclipse.statet.rj.servi.rcpdemo2/.classpath
@@ -1,7 +1,15 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
+		<attributes>
+			<attribute name="annotationpath" value="/org.eclipse.statet/eea/"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins">
+		<attributes>
+			<attribute name="annotationpath" value="/org.eclipse.statet/eea/"/>
+		</attributes>
+	</classpathentry>
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
diff --git a/examples/org.eclipse.statet.rj.servi.rcpdemo2/src/org/eclipse/statet/rj/servi/rcpdemo/RServiSession.java b/examples/org.eclipse.statet.rj.servi.rcpdemo2/src/org/eclipse/statet/rj/servi/rcpdemo/RServiSession.java
index f0477fb..17dcd60 100644
--- a/examples/org.eclipse.statet.rj.servi.rcpdemo2/src/org/eclipse/statet/rj/servi/rcpdemo/RServiSession.java
+++ b/examples/org.eclipse.statet.rj.servi.rcpdemo2/src/org/eclipse/statet/rj/servi/rcpdemo/RServiSession.java
@@ -30,6 +30,9 @@
 import org.eclipse.core.runtime.jobs.Job;
 import org.eclipse.ui.statushandlers.StatusManager;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 import org.eclipse.statet.ecommons.ts.core.SystemRunnable;
 import org.eclipse.statet.ecommons.ts.core.Tool;
 import org.eclipse.statet.ecommons.ts.core.ToolQueue;
@@ -49,9 +52,10 @@
 
 
 /**
- * Implementations of ECommons Tool Service and Scheduling interfaces (org.eclipse.statet.ecommons.ts.core) for 
+ * Implementations of ECommons Tool Service and Scheduling interfaces (org.eclipse.statet.ecommons.ts.core) for
  * RServi using Eclipse jobs.
  */
+@NonNullByDefault
 public class RServiSession extends PlatformObject implements Tool {
 	
 	
@@ -132,7 +136,7 @@
 		}
 		
 		@Override
-		public void evalVoid(final String expression, final RObject envir,
+		public void evalVoid(final String expression, final @Nullable RObject envir,
 				final IProgressMonitor monitor) throws CoreException {
 			RServiSession.this.servi.evalVoid(expression, envir, monitor);
 		}
@@ -145,14 +149,14 @@
 		
 		@Override
 		public RObject evalData(final String expression,
-				final String factoryId, final int options, final int depth,
+				final @Nullable String factoryId, final int options, final int depth,
 				final IProgressMonitor monitor) throws CoreException {
 			return RServiSession.this.servi.evalData(expression, factoryId, options, depth, monitor);
 		}
 		
 		@Override
-		public RObject evalData(final String expression, final RObject envir,
-				final String factoryId, final int options, final int depth,
+		public RObject evalData(final String expression, final @Nullable RObject envir,
+				final @Nullable String factoryId, final int options, final int depth,
 				final IProgressMonitor monitor) throws CoreException {
 			return RServiSession.this.servi.evalData(expression, envir, factoryId, options, depth, monitor);
 		}
@@ -165,7 +169,7 @@
 		
 		@Override
 		public RObject evalData(final RReference reference,
-				final String factoryId, final int options, final int depth,
+				final @Nullable String factoryId, final int options, final int depth,
 				final IProgressMonitor monitor) throws CoreException {
 			return RServiSession.this.servi.evalData(reference, factoryId, options, depth, monitor);
 		}
diff --git a/servi/org.eclipse.statet.rj.servi.webapp/.classpath b/servi/org.eclipse.statet.rj.servi.webapp/.classpath
index 168a660..4aacce5 100644
--- a/servi/org.eclipse.statet.rj.servi.webapp/.classpath
+++ b/servi/org.eclipse.statet.rj.servi.webapp/.classpath
@@ -3,6 +3,7 @@
 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
 		<attributes>
 			<attribute name="owner.project.facets" value="java"/>
+			<attribute name="annotationpath" value="/org.eclipse.statet/eea/"/>
 		</attributes>
 	</classpathentry>
 	<classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.web.container"/>
diff --git a/servi/org.eclipse.statet.rj.servi/.classpath b/servi/org.eclipse.statet.rj.servi/.classpath
index b323920..0d41512 100644
--- a/servi/org.eclipse.statet.rj.servi/.classpath
+++ b/servi/org.eclipse.statet.rj.servi/.classpath
@@ -3,9 +3,14 @@
 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
 		<attributes>
 			<attribute name="owner.project.facets" value="java"/>
+			<attribute name="annotationpath" value="/org.eclipse.statet/eea/"/>
 		</attributes>
 	</classpathentry>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins">
+		<attributes>
+			<attribute name="annotationpath" value="/org.eclipse.statet/eea/"/>
+		</attributes>
+	</classpathentry>
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="src" path="srcServer"/>
 	<classpathentry kind="src" path="srcServiPool"/>
diff --git a/servi/org.eclipse.statet.rj.servi/src/org/eclipse/statet/internal/rj/servi/RServiImpl.java b/servi/org.eclipse.statet.rj.servi/src/org/eclipse/statet/internal/rj/servi/RServiImpl.java
index efa126d..451367a 100644
--- a/servi/org.eclipse.statet.rj.servi/src/org/eclipse/statet/internal/rj/servi/RServiImpl.java
+++ b/servi/org.eclipse.statet.rj.servi/src/org/eclipse/statet/internal/rj/servi/RServiImpl.java
@@ -30,6 +30,9 @@
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 import org.eclipse.statet.ecommons.runtime.core.ECommonsRuntime;
 
 import org.eclipse.statet.internal.rj.servi.server.RServiBackend;
@@ -56,6 +59,7 @@
 /**
  * Client side {@link RServi} handler
  */
+@NonNullByDefault
 public class RServiImpl implements RServi, Externalizable {
 	
 	
@@ -137,18 +141,10 @@
 		this.rjs.setServer(this.backend, 1);
 	}
 	
+	@SuppressWarnings("null")
 	public RServiImpl() {
 	}
 	
-	
-	public void setRHandle(final Object rHandle) {
-		this.rHandle= rHandle;
-	}
-	
-	public Object getRHandle() {
-		return this.rHandle;
-	}
-	
 	@Override
 	public void readExternal(final ObjectInput in) throws IOException, ClassNotFoundException {
 		this.accessId= in.readLong();
@@ -165,6 +161,15 @@
 	}
 	
 	
+	public void setRHandle(final Object rHandle) {
+		this.rHandle= rHandle;
+	}
+	
+	public Object getRHandle() {
+		return this.rHandle;
+	}
+	
+	
 	private void init() throws CoreException {
 		this.rjsId= RjsComConfig.registerClientComHandler(this.rjs);
 		final Map<String, Object> properties= new HashMap<>();
@@ -215,7 +220,7 @@
 	}
 	
 	@Override
-	public void evalVoid(final String expression, final RObject envir,
+	public void evalVoid(final String expression, final @Nullable RObject envir,
 			final IProgressMonitor monitor) throws CoreException {
 		if (this.rjsId == 0) {
 			init();
@@ -233,7 +238,8 @@
 	}
 	
 	@Override
-	public RObject evalData(final String expression, final String factoryId, final int options, final int depth,
+	public RObject evalData(final String expression,
+			final @Nullable String factoryId, final int options, final int depth,
 			final IProgressMonitor monitor) throws CoreException {
 		if (this.rjsId == 0) {
 			init();
@@ -242,8 +248,8 @@
 	}
 	
 	@Override
-	public RObject evalData(final String expression, final RObject envir,
-			final String factoryId, final int options, final int depth,
+	public RObject evalData(final String expression, final @Nullable RObject envir,
+			final @Nullable String factoryId, final int options, final int depth,
 			final IProgressMonitor monitor) throws CoreException {
 		if (this.rjsId == 0) {
 			init();
@@ -261,7 +267,8 @@
 	}
 	
 	@Override
-	public RObject evalData(final RReference reference, final String factoryId, final int options, final int depth,
+	public RObject evalData(final RReference reference,
+			final @Nullable String factoryId, final int options, final int depth,
 			final IProgressMonitor monitor) throws CoreException {
 		if (this.rjsId == 0) {
 			init();
@@ -279,7 +286,8 @@
 	}
 	
 	@Override
-	public void downloadFile(final OutputStream out, final String fileName, final int options,
+	public void downloadFile(final OutputStream out, final String fileName,
+			final int options,
 			final IProgressMonitor monitor) throws CoreException {
 		if (this.rjsId == 0) {
 			init();
@@ -288,7 +296,8 @@
 	}
 	
 	@Override
-	public byte[] downloadFile(final String fileName, final int options,
+	public byte[] downloadFile(final String fileName,
+			final int options,
 			final IProgressMonitor monitor) throws CoreException {
 		if (this.rjsId == 0) {
 			init();
@@ -297,7 +306,8 @@
 	}
 	
 	@Override
-	public void uploadFile(final InputStream in, final long length, final String fileName, final int options,
+	public void uploadFile(final InputStream in, final long length, final String fileName,
+			final int options,
 			final IProgressMonitor monitor) throws CoreException {
 		if (this.rjsId == 0) {
 			init();
diff --git a/servi/org.eclipse.statet.rj.servi/src/org/eclipse/statet/rj/servi/RServi.java b/servi/org.eclipse.statet.rj.servi/src/org/eclipse/statet/rj/servi/RServi.java
index 6743190..b45d694 100644
--- a/servi/org.eclipse.statet.rj.servi/src/org/eclipse/statet/rj/servi/RServi.java
+++ b/servi/org.eclipse.statet.rj.servi/src/org/eclipse/statet/rj/servi/RServi.java
@@ -16,22 +16,24 @@
 
 import org.eclipse.core.runtime.CoreException;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
 import org.eclipse.statet.rj.services.RService;
 
 
 /**
- * A RServi provides {@link RService R services} as background computing engine without an 
- * interactive R console. An RServi can be for example connected to a server side R engine or 
+ * A RServi provides {@link RService R services} as background computing engine without an
+ * interactive R console. An RServi can be for example connected to a server side R engine or
  * an R engine embedded in the local application.
  * <p>
  * How to receive an RServi instance depends on the application.
- * The RServi framework includes a server side RServi 
+ * The RServi framework includes a server side RServi
  * {@link org.eclipse.statet.rj.servi.node.RServiPool pool}
  * which can be used to provide RServi instances. To get a RServi instance
  * from such a pool which made available via RMI {@link org.eclipse.statet.rj.servi.pool.RServiUtil RServiUtil}
  * provides helper methods to request a RServi instance.</p>
  * <p>
- * In many applications it is sufficient to use an RServi for a direct 
+ * In many applications it is sufficient to use an RServi for a direct
  * sequence of executions, so that request, evaluations and closing can be
  * performed one after another in a single thread. If it is required to use
  * the RServi multiple times (e.g. a large data set should be reused),
@@ -45,13 +47,14 @@
  * After closing the RServi all resources created by it, R data objects and
  * files on the R host system are cleaned up. Client side R data objects and
  * files are not affected by the clean up. After calling this method,
- * the RServi instance can no longer be used; further function call will 
+ * the RServi instance can no longer be used; further function call will
  * throw an exception.</p>
  * <p>
  * All common guidelines of {@link RService} should be taken into account.</p>
  * 
  * @since 0.1
  */
+@NonNullByDefault
 public interface RServi extends RService {
 	
 	
