diff --git a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RCharacterStore.java b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RCharacterStore.java
index 0609f1a..f49c2ab 100644
--- a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RCharacterStore.java
+++ b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RCharacterStore.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;
+
 
 /**
  * Interface for R data stores of type {@link RStore#CHARACTER}.
@@ -21,15 +24,16 @@
  * An R data store implements this interface if the R function
  * <code>typeof(object)</code> returns 'character'.</p>
  */
+@NonNullByDefault
 public interface RCharacterStore extends RStore<String> {
 	
 	
 	@Override
-	String get(int idx);
+	@Nullable String get(int idx);
 	@Override
-	String get(long idx);
+	@Nullable String get(long idx);
 	
 	@Override
-	String[] toArray();
+	@Nullable String [] toArray();
 	
 }
diff --git a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RComplexStore.java b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RComplexStore.java
index 79921a4..20cc1fd 100644
--- a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RComplexStore.java
+++ b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RComplexStore.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;
+
 import org.eclipse.statet.rj.data.RComplexStore.Complex;
 
 
@@ -23,6 +26,7 @@
  * An R data store implements this interface if the R function
  * <code>typeof(object)</code> returns 'complex'.</p>
  */
+@NonNullByDefault
 public interface RComplexStore extends RStore<Complex> {
 	
 	
@@ -56,7 +60,7 @@
 		}
 		
 		@Override
-		public boolean equals(final Object obj) {
+		public boolean equals(final @Nullable Object obj) {
 			if (!(obj instanceof Complex)) {
 				return false;
 			}
@@ -83,11 +87,11 @@
 	boolean isNaN(long idx);
 	
 	@Override
-	Complex get(int idx);
+	@Nullable Complex get(int idx);
 	@Override
-	Complex get(long idx);
+	@Nullable Complex get(long idx);
 	
 	@Override
-	Complex[] toArray();
+	@Nullable Complex [] toArray();
 	
 }
diff --git a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RFactorStore.java b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RFactorStore.java
index 94b0b72..5a9f45f 100644
--- a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RFactorStore.java
+++ b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RFactorStore.java
@@ -14,6 +14,8 @@
 
 package org.eclipse.statet.rj.data;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
 
 /**
  * Interface for R data stores of type {@link RStore#FACTOR}.
@@ -21,6 +23,7 @@
  * An R data store implements this interface if the R function
  * <code>class(object)</code> returns 'factor'.</p>
  */
+@NonNullByDefault
 public interface RFactorStore extends RIntegerStore {
 	
 	// TODO Docu && Constructors (-> 1-based codes)
diff --git a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RIntegerStore.java b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RIntegerStore.java
index 8229bec..2d12ec8 100644
--- a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RIntegerStore.java
+++ b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RIntegerStore.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;
+
 
 /**
  * Interface for R data stores of type {@link RStore#INTEGER}.
@@ -21,15 +24,16 @@
  * An R data store implements this interface if the R function
  * <code>typeof(object)</code> returns 'integer'.</p>
  */
+@NonNullByDefault
 public interface RIntegerStore extends RStore<Integer> {
 	
 	
 	@Override
-	Integer get(int idx);
+	@Nullable Integer get(int idx);
 	@Override
-	Integer get(long idx);
+	@Nullable Integer get(long idx);
 	
 	@Override
-	Integer[] toArray();
+	@Nullable Integer [] toArray();
 	
 }
diff --git a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RLogicalStore.java b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RLogicalStore.java
index 49b16ad..af7018a 100644
--- a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RLogicalStore.java
+++ b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RLogicalStore.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;
+
 
 /**
  * Interface for R data stores of type {@link RStore#LOGICAL}.
@@ -21,15 +24,16 @@
  * An R data store implements this interface if the R function
  * <code>typeof(object)</code> returns 'logical'.</p>
  */
+@NonNullByDefault
 public interface RLogicalStore extends RStore<Boolean> {
 	
 	
 	@Override
-	Boolean get(int idx);
+	@Nullable Boolean get(int idx);
 	@Override
-	Boolean get(long idx);
+	@Nullable Boolean get(long idx);
 	
 	@Override
-	Boolean[] toArray();
+	@Nullable Boolean [] toArray();
 	
 }
diff --git a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RNumericStore.java b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RNumericStore.java
index 28a6810..660a57b 100644
--- a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RNumericStore.java
+++ b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RNumericStore.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;
+
 
 /**
  * Interface for R data stores of type {@link RStore#NUMERIC}.
@@ -21,6 +24,7 @@
  * An R data store implements this interface if the R function
  * <code>typeof(object)</code> returns 'double'.</p>
  */
+@NonNullByDefault
 public interface RNumericStore extends RStore<Double> {
 	
 	
@@ -28,11 +32,11 @@
 	boolean isNaN(long idx);
 	
 	@Override
-	Double get(int idx);
+	@Nullable Double get(int idx);
 	@Override
-	Double get(long idx);
+	@Nullable Double get(long idx);
 	
 	@Override
-	Double[] toArray();
+	@Nullable Double [] toArray();
 	
 }
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 0c499da..07ad2ef 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
@@ -56,19 +56,19 @@
 	<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 @Nullable [] names);
+	RList createList(RObject [] components, @Nullable String @Nullable[] names);
 //	RDataFrame createDataFrame(RData[] columns, String[] columnNames, String[] rowNames);
 	
 	RLanguage createName(String name);
 	RLanguage createExpression(String expr);
 	
-	RLogicalStore createLogiData(boolean[] logiValues);
-	RIntegerStore createIntData(int[] intValues);
-	RNumericStore createNumData(double[] numValues);
-	RComplexStore createCplxData(double[] reValues, double[] imValues);
-	RCharacterStore createCharData(String[] charValues);
-	RRawStore createRawData(byte[] values);
-	RFactorStore createFactorData(int[] codes, String[] levels);
+	RLogicalStore createLogiData(boolean [] logiValues);
+	RIntegerStore createIntData(int [] intValues);
+	RNumericStore createNumData(double [] numValues);
+	RComplexStore createCplxData(double [] reValues, double [] imValues);
+	RCharacterStore createCharData(@Nullable String [] charValues);
+	RRawStore createRawData(byte [] values);
+	RFactorStore createFactorData(int[] codes, String [] levels);
 	
 	void writeObject(RObject object, RJIO io) throws IOException;
 	RObject readObject(RJIO io) throws IOException;
diff --git a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RRawStore.java b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RRawStore.java
index e190cbb..9a46da6 100644
--- a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RRawStore.java
+++ b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RRawStore.java
@@ -14,6 +14,9 @@
 
 package org.eclipse.statet.rj.data;
 
+import org.eclipse.statet.jcommons.lang.NonNull;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
 
 /**
  * Interface for R data stores of type {@link RStore#RAW}.
@@ -21,6 +24,7 @@
  * An R data store implements this interface if the R function
  * <code>typeof(object)</code> returns 'raw'.</p>
  */
+@NonNullByDefault
 public interface RRawStore extends RStore<Byte> {
 	
 	
@@ -30,6 +34,7 @@
 	Byte get(long idx);
 	
 	@Override
-	Byte[] toArray();
+	@SuppressWarnings("null")
+	@NonNull Byte [] toArray();
 	
 }
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 7953492..4a41c9a 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
@@ -14,6 +14,9 @@
 
 package org.eclipse.statet.rj.data;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 
 /**
  * This is the abstract one-dimensional data store for an R data type.
@@ -45,6 +48,7 @@
  * <p>
  * Indexes are zero-based (as usual in Java) and not one-base like in R.</p>
  */
+@NonNullByDefault
 public interface RStore<P> {
 	
 	
@@ -627,7 +631,7 @@
 	 * @throws IndexOutOfBoundsException if the index is out of range
 	 *     (idx &lt; 0 || idx &gt;= length()).
 	 */
-	P get(int idx);
+	@Nullable P get(int idx);
 	
 	/**
 	 * Returns the value at the specified index as Java object. The subtypes of
@@ -641,7 +645,7 @@
 	 * @throws IndexOutOfBoundsException if the index is out of range
 	 *     (idx &lt; 0 || idx &gt;= length()).
 	 */
-	P get(long idx);
+	@Nullable P get(long idx);
 	
 	/**
 	 * Returns the values of the store as Java object array. The subtypes of
@@ -653,7 +657,7 @@
 	 * 
 	 * @return a object array with the values of the store
 	 */
-	P[] toArray();
+	@Nullable P [] toArray();
 	
 	boolean allEqual(RStore<?> other);
 	
diff --git a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/AbstractCharacterStore.java b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/AbstractCharacterStore.java
index 0cd2fab..a5b3c67 100644
--- a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/AbstractCharacterStore.java
+++ b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/AbstractCharacterStore.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.RCharacterStore;
 import org.eclipse.statet.rj.data.RObject;
 import org.eclipse.statet.rj.data.RStore;
 
 
+@NonNullByDefault
 public abstract class AbstractCharacterStore extends AbstractRStore<String>
 		implements RCharacterStore {
 	
@@ -120,7 +124,7 @@
 	
 	
 	@Override
-	public abstract String[] toArray();
+	public abstract @Nullable String [] toArray();
 	
 	
 	@Override
diff --git a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/AbstractComplexStore.java b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/AbstractComplexStore.java
index 5fad475..453e532 100644
--- a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/AbstractComplexStore.java
+++ b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/AbstractComplexStore.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.RComplexStore;
 import org.eclipse.statet.rj.data.RObject;
 import org.eclipse.statet.rj.data.RStore;
 
 
+@NonNullByDefault
 public abstract class AbstractComplexStore extends AbstractRStore<RComplexStore.Complex>
 		implements RComplexStore {
 	
@@ -66,6 +70,6 @@
 	
 	
 	@Override
-	public abstract Complex[] toArray();
+	public abstract @Nullable Complex [] toArray();
 	
 }
diff --git a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/AbstractFactorStore.java b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/AbstractFactorStore.java
index 3c45d0d..c661208 100644
--- a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/AbstractFactorStore.java
+++ b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/AbstractFactorStore.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.RFactorStore;
 import org.eclipse.statet.rj.data.RObject;
 import org.eclipse.statet.rj.data.RStore;
 
 
+@NonNullByDefault
 public abstract class AbstractFactorStore extends AbstractRStore<Integer>
 		implements RFactorStore {
 	
@@ -84,7 +88,7 @@
 	
 	
 	@Override
-	public abstract Integer[] toArray();
+	public abstract @Nullable Integer [] toArray();
 	
 	
 }
diff --git a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/AbstractIntegerStore.java b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/AbstractIntegerStore.java
index 285aff7..7e4b5ce 100644
--- a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/AbstractIntegerStore.java
+++ b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/AbstractIntegerStore.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.RIntegerStore;
 import org.eclipse.statet.rj.data.RObject;
 import org.eclipse.statet.rj.data.RStore;
 
 
+@NonNullByDefault
 public abstract class AbstractIntegerStore extends AbstractRStore<Integer>
 		implements RIntegerStore {
 	
@@ -104,7 +108,7 @@
 	
 	
 	@Override
-	public abstract Integer[] toArray();
+	public abstract @Nullable Integer [] toArray();
 	
 	
 	@Override
diff --git a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/AbstractLogicalStore.java b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/AbstractLogicalStore.java
index a218cce..a634d38 100644
--- a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/AbstractLogicalStore.java
+++ b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/AbstractLogicalStore.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.RLogicalStore;
 import org.eclipse.statet.rj.data.RObject;
 import org.eclipse.statet.rj.data.RStore;
 
 
+@NonNullByDefault
 public abstract class AbstractLogicalStore extends AbstractRStore<Boolean>
 		implements RLogicalStore {
 	
@@ -81,9 +85,6 @@
 	
 	@Override
 	public long indexOf(final String character, final long fromIdx) {
-		if (character == null) {
-			throw new NullPointerException();
-		}
 		try {
 			return indexOf(AbstractCharacterStore.toLogi(character) ? 1 : 0, fromIdx);
 		}
@@ -114,7 +115,7 @@
 	
 	
 	@Override
-	public abstract Boolean[] toArray();
+	public abstract @Nullable Boolean [] toArray();
 	
 	
 	@Override
diff --git a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/AbstractNumericStore.java b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/AbstractNumericStore.java
index 27f534d..466db28 100644
--- a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/AbstractNumericStore.java
+++ b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/AbstractNumericStore.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.RNumericStore;
 import org.eclipse.statet.rj.data.RObject;
 import org.eclipse.statet.rj.data.RStore;
 
 
+@NonNullByDefault
 public abstract class AbstractNumericStore extends AbstractRStore<Double>
 		implements RNumericStore {
 	
@@ -30,7 +34,9 @@
 		else if (num == Double.NEGATIVE_INFINITY) {
 			return "-Inf"; //$NON-NLS-1$
 		}
-		return Double.toString(num);
+		else {
+			return Double.toString(num);
+		}
 	}
 	
 	
@@ -117,7 +123,7 @@
 	
 	
 	@Override
-	public abstract Double[] toArray();
+	public abstract @Nullable Double [] toArray();
 	
 	
 	@Override
diff --git a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/AbstractRawStore.java b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/AbstractRawStore.java
index e5fe280..f4be076 100644
--- a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/AbstractRawStore.java
+++ b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/AbstractRawStore.java
@@ -14,11 +14,15 @@
 
 package org.eclipse.statet.rj.data.impl;
 
+import org.eclipse.statet.jcommons.lang.NonNull;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
 import org.eclipse.statet.rj.data.RObject;
 import org.eclipse.statet.rj.data.RRawStore;
 import org.eclipse.statet.rj.data.RStore;
 
 
+@NonNullByDefault
 public abstract class AbstractRawStore extends AbstractRStore<Byte>
 		implements RRawStore {
 	
@@ -95,6 +99,10 @@
 	
 	
 	@Override
+	public abstract @NonNull Byte [] toArray();
+	
+	
+	@Override
 	public long indexOfNA(final long fromIdx) {
 		return -1;
 	}
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 46d75a7..71f7411 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.NonNull;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
 import org.eclipse.statet.jcommons.lang.Nullable;
 
 import org.eclipse.statet.rj.data.RArray;
@@ -38,6 +40,7 @@
 import org.eclipse.statet.rj.data.RVector;
 
 
+@NonNullByDefault
 public class DefaultRObjectFactory implements RObjectFactory {
 	
 	
@@ -96,7 +99,7 @@
 	 * @param logicals the logical values
 	 * @return the R logical vector
 	 */
-	public RVector<RLogicalStore> createLogiVector(final boolean[] logicals) {
+	public RVector<RLogicalStore> createLogiVector(final boolean [] logicals) {
 		return createVector(createLogiData(logicals), RObject.CLASSNAME_LOGICAL);
 	}
 	
@@ -126,7 +129,7 @@
 	 * @param integers the integer values
 	 * @return the R integer vector
 	 */
-	public RVector<RIntegerStore> createIntVector(final int[] integers) {
+	public RVector<RIntegerStore> createIntVector(final int [] integers) {
 		return createVector(createIntData(integers), RObject.CLASSNAME_INTEGER);
 	}
 	
@@ -156,7 +159,7 @@
 	 * @param numerics the numerics values
 	 * @return the R numeric vector
 	 */
-	public RVector<RNumericStore> createNumVector(final double[] numerics) {
+	public RVector<RNumericStore> createNumVector(final double [] numerics) {
 		return createVector(createNumData(numerics), RObject.CLASSNAME_NUMERIC);
 	}
 	
@@ -201,7 +204,7 @@
 	 * @param characters the characters values
 	 * @return the R character vector
 	 */
-	public RVector<RCharacterStore> createCharVector(final String[] characters) {
+	public RVector<RCharacterStore> createCharVector(final @Nullable String [] characters) {
 		return createVector(createCharData(characters), RObject.CLASSNAME_CHARACTER);
 	}
 	
@@ -246,7 +249,7 @@
 	 * @param levels the labels of the levels
 	 * @return the R factor vector
 	 */
-	public RVector<RFactorStore> createFactorVector(final int[] codes, final String[] levels) {
+	public RVector<RFactorStore> createFactorVector(final int [] codes, final String [] levels) {
 		return createVector(createFactorData(codes, levels), RObject.CLASSNAME_FACTOR);
 	}
 	
@@ -259,7 +262,7 @@
 	 * @param levels the labels of the levels
 	 * @return the R factor vector
 	 */
-	public RVector<RFactorStore> createFactorVector(final int length, final String[] levels) {
+	public RVector<RFactorStore> createFactorVector(final int length, final String [] levels) {
 		return createVector(createFactorData(length, levels), RObject.CLASSNAME_FACTOR);
 	}
 	
@@ -274,7 +277,7 @@
 	 * @param levels the labels of the levels
 	 * @return the R factor vector
 	 */
-	public RVector<RFactorStore> createOrderedVector(final int[] codes, final String[] levels) {
+	public RVector<RFactorStore> createOrderedVector(final int [] codes, final String [] levels) {
 		return createVector(createOrderedData(codes, levels), RObject.CLASSNAME_ORDERED);
 	}
 	
@@ -287,7 +290,7 @@
 	 * @param levels the labels of the levels
 	 * @return the R factor vector
 	 */
-	public RVector<RFactorStore> createOrderedVector(final int length, final String[] levels) {
+	public RVector<RFactorStore> createOrderedVector(final int length, final String [] levels) {
 		return createVector(createOrderedData(length, levels), RObject.CLASSNAME_ORDERED);
 	}
 	
@@ -310,7 +313,7 @@
 	}
 	
 	
-	public RArray<RLogicalStore> createLogiArray(final boolean[] logicals, final int[] dim) {
+	public RArray<RLogicalStore> createLogiArray(final boolean [] logicals, final int[] dim) {
 		return createArray(createLogiData(logicals), dim);
 	}
 	
@@ -318,7 +321,7 @@
 		return createArray(createLogiData(RDataUtils.computeLengthFromDim(dim)), dim);
 	}
 	
-	public RArray<RIntegerStore> createIntArray(final int[] integers, final int[] dim) {
+	public RArray<RIntegerStore> createIntArray(final int [] integers, final int[] dim) {
 		return createArray(createIntData(integers), dim);
 	}
 	
@@ -326,7 +329,7 @@
 		return createArray(createIntData(RDataUtils.computeLengthFromDim(dim)), dim);
 	}
 	
-	public RArray<RNumericStore> createNumArray(final double[] numerics, final int[] dim) {
+	public RArray<RNumericStore> createNumArray(final double [] numerics, final int[] dim) {
 		return createArray(createNumData(numerics), dim);
 	}
 	
@@ -334,7 +337,7 @@
 		return createArray(createNumData(RDataUtils.computeLengthFromDim(dim)), dim);
 	}
 	
-	public RArray<RCharacterStore> createCharArray(final String[] characters, final int[] dim) {
+	public RArray<RCharacterStore> createCharArray(final @Nullable String [] characters, final int[] dim) {
 		return createArray(createCharData(characters), dim);
 	}
 	
@@ -343,7 +346,7 @@
 	}
 	
 	
-	public RArray<RLogicalStore> createLogiMatrix(final boolean[] logicals, final int dim1, final int dim2) {
+	public RArray<RLogicalStore> createLogiMatrix(final boolean [] logicals, final int dim1, final int dim2) {
 		return createMatrix(createLogiData(logicals), dim1, dim2);
 	}
 	
@@ -351,7 +354,7 @@
 		return createMatrix(createLogiData(dim1*dim2), dim1, dim2);
 	}
 	
-	public RArray<RIntegerStore> createIntMatrix(final int[] integers, final int dim1, final int dim2) {
+	public RArray<RIntegerStore> createIntMatrix(final int [] integers, final int dim1, final int dim2) {
 		return createMatrix(createIntData(integers), dim1, dim2);
 	}
 	
@@ -359,7 +362,7 @@
 		return createMatrix(createIntData(dim1*dim2), dim1, dim2);
 	}
 	
-	public RArray<RNumericStore> createNumMatrix(final double[] numerics, final int dim1, final int dim2) {
+	public RArray<RNumericStore> createNumMatrix(final double [] numerics, final int dim1, final int dim2) {
 		return createMatrix(createNumData(numerics), dim1, dim2);
 	}
 	
@@ -367,7 +370,7 @@
 		return createMatrix(createNumData(dim1*dim2), dim1, dim2);
 	}
 	
-	public RArray<RCharacterStore> createCharMatrix(final String[] characters, final int dim1, final int dim2) {
+	public RArray<RCharacterStore> createCharMatrix(final @Nullable String [] characters, final int dim1, final int dim2) {
 		return createMatrix(createCharData(characters), dim1, dim2);
 	}
 	
@@ -378,11 +381,14 @@
 	
 	/*-- DataFrame --*/
 	
-	public RDataFrame createDataFrame(final RStore<?>[] colDatas, final String[] colNames) {
+	public RDataFrame createDataFrame(final @NonNull RStore<?> [] colDatas,
+			final @NonNull String [] colNames) {
 		return createDataFrame(colDatas, colNames, null);
 	}
 	
-	public RDataFrame createDataFrame(final RStore<?>[] colDatas, final String[] colNames, final String[] rowNames) {
+	public RDataFrame createDataFrame(final @NonNull RStore<?> [] colDatas,
+			final @NonNull String [] colNames,
+			final String @Nullable[] rowNames) {
 		final RObject[] colVectors= new RObject[colDatas.length];
 		for (int i= 0; i < colVectors.length; i++) {
 			colVectors[i]= createVector(colDatas[i]);
@@ -390,18 +396,19 @@
 		return createDataFrame(colVectors, colNames, rowNames);
 	}
 	
-	public RDataFrame createDataFrame(final RObject[] colVectors,
-			final String[] colNames, final String[] rowNames) {
+	public RDataFrame createDataFrame(final RObject [] colVectors,
+			final @NonNull String [] colNames, final String @Nullable[] rowNames) {
 		return new RDataFrame32Impl(colVectors, RObject.CLASSNAME_DATAFRAME, colNames, rowNames);
 	}
 	
 	
-	public RList createList(final RObject[] components, final String @Nullable [] names, final String classname) {
+	public RList createList(final RObject [] components, final @Nullable String @Nullable[] names,
+			final String classname) {
 		return new RList32Impl(components, classname, names);
 	}
 	
 	@Override
-	public RList createList(final RObject[] components, final String @Nullable [] names) {
+	public RList createList(final RObject [] components, final @Nullable String @Nullable[] names) {
 		return createList(components, names, RObject.CLASSNAME_LIST);
 	}
 	
@@ -422,7 +429,7 @@
 	/*-- Data/RStore --*/
 	
 	@Override
-	public RLogicalStore createLogiData(final boolean[] logiValues) {
+	public RLogicalStore createLogiData(final boolean [] logiValues) {
 		return new RLogicalByte32Store(logiValues);
 	}
 	
@@ -433,7 +440,7 @@
 	}
 	
 	@Override
-	public RIntegerStore createIntData(final int[] intValues) {
+	public RIntegerStore createIntData(final int [] intValues) {
 		return new RInteger32Store(intValues);
 	}
 	
@@ -444,7 +451,7 @@
 	}
 	
 	@Override
-	public RNumericStore createNumData(final double[] numValues) {
+	public RNumericStore createNumData(final double [] numValues) {
 		return new RNumericB32Store(numValues);
 	}
 	
@@ -455,7 +462,7 @@
 	}
 	
 	@Override
-	public RComplexStore createCplxData(final double[] reValues, final double[] imValues) {
+	public RComplexStore createCplxData(final double [] reValues, final double [] imValues) {
 		return new RComplexB32Store(reValues, imValues, null);
 	}
 	
@@ -466,7 +473,7 @@
 	}
 	
 	@Override
-	public RCharacterStore createCharData(final String[] charValues) {
+	public RCharacterStore createCharData(final @Nullable String [] charValues) {
 		return new RCharacter32Store(charValues);
 	}
 	
@@ -477,7 +484,7 @@
 	}
 	
 	@Override
-	public RRawStore createRawData(final byte[] rawValues) {
+	public RRawStore createRawData(final byte [] rawValues) {
 		return new RRaw32Store(rawValues);
 	}
 	
@@ -488,19 +495,19 @@
 	}
 	
 	@Override
-	public RFactorStore createFactorData(final int[] codes, final String[] levels) {
+	public RFactorStore createFactorData(final int [] codes, final String [] levels) {
 		return new RFactor32Store(codes, false, levels);
 	}
 	
-	public RFactorStore createFactorData(final int length, final String[] levels) {
+	public RFactorStore createFactorData(final int length, final String [] levels) {
 		return new RFactor32Store(length, false, levels);
 	}
 	
-	public RFactorStore createOrderedData(final int[] codes, final String[] levels) {
+	public RFactorStore createOrderedData(final int [] codes, final String [] levels) {
 		return new RFactor32Store(codes, true, levels);
 	}
 	
-	public RFactorStore createOrderedData(final int length, final String[] levels) {
+	public RFactorStore createOrderedData(final int length, final String [] levels) {
 		return new RFactor32Store(length, true, levels);
 	}
 	
diff --git a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/ExternalizableRStore.java b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/ExternalizableRStore.java
index 8a9445f..a645c80 100644
--- a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/ExternalizableRStore.java
+++ b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/ExternalizableRStore.java
@@ -16,9 +16,12 @@
 
 import java.io.IOException;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
 import org.eclipse.statet.rj.data.RJIO;
 
 
+@NonNullByDefault
 public interface ExternalizableRStore {
 	
 	
diff --git a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/RDataResizeExtension.java b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/RDataResizeExtension.java
index a2eff09..d38a8ae 100644
--- a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/RDataResizeExtension.java
+++ b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/RDataResizeExtension.java
@@ -14,13 +14,18 @@
 
 package org.eclipse.statet.rj.data.impl;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
 import org.eclipse.statet.rj.data.RStore;
 
 
+@NonNullByDefault
 public interface RDataResizeExtension<P> extends RStore<P> {
 	
+	
 	void remove(int idx);
 	void remove(int[] idxs);
+	
 	void insertNA(int idx);
 	void insertNA(int[] idxs);
 	
diff --git a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/RMissingImpl.java b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/RMissingImpl.java
index a8b4abd..b77c91a 100644
--- a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/RMissingImpl.java
+++ b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/RMissingImpl.java
@@ -14,6 +14,9 @@
 
 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;
@@ -24,6 +27,7 @@
  * 
  * @since de.walware.rj.data 0.5
  */
+@NonNullByDefault
 public class RMissingImpl implements RObject {
 	
 	
@@ -56,12 +60,12 @@
 	}
 	
 	@Override
-	public RStore<?> getData() {
+	public @Nullable RStore<?> getData() {
 		return null;
 	}
 	
 	@Override
-	public RList getAttributes() {
+	public @Nullable RList getAttributes() {
 		return null;
 	}
 	
@@ -71,7 +75,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_MISSING) );
 	}
