diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/CForLoop.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/CForLoop.java
index b58224e..12c1b93 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/CForLoop.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/CForLoop.java
@@ -83,11 +83,6 @@
 	}
 	
 	@Override
-	public final RAstNode[] getChildren() {
-		return new RAstNode[] { this.varSymbol, this.condExpr.node, this.loopExpr.node };
-	}
-	
-	@Override
 	public final int getChildIndex(final AstNode child) {
 		if (this.varSymbol == child) {
 			return 0;
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/CIfElse.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/CIfElse.java
index 4bb2bfd..4d1a762 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/CIfElse.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/CIfElse.java
@@ -94,16 +94,6 @@
 	}
 	
 	@Override
-	public final RAstNode[] getChildren() {
-		if (this.withElse) {
-			return new RAstNode[] { this.condExpr.node, this.thenExpr.node, this.elseExpr.node };
-		}
-		else {
-			return new RAstNode[] { this.condExpr.node, this.thenExpr.node };
-		}
-	}
-	
-	@Override
 	public final int getChildIndex(final AstNode child) {
 		if (this.condExpr.node == child) {
 			return 0;
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/CLoopCommand.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/CLoopCommand.java
index 9c13316..7b188b1 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/CLoopCommand.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/CLoopCommand.java
@@ -107,11 +107,6 @@
 	}
 	
 	@Override
-	public final RAstNode[] getChildren() {
-		return NO_CHILDREN;
-	}
-	
-	@Override
 	public final int getChildIndex(final AstNode child) {
 		return -1;
 	}
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/CRepeatLoop.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/CRepeatLoop.java
index a6489f8..85cd880 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/CRepeatLoop.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/CRepeatLoop.java
@@ -73,11 +73,6 @@
 	}
 	
 	@Override
-	public final RAstNode[] getChildren() {
-		return new RAstNode[] { this.loopExpr.node };
-	}
-	
-	@Override
 	public final int getChildIndex(final AstNode child) {
 		if (this.loopExpr.node == child) {
 			return 0;
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/CWhileLoop.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/CWhileLoop.java
index e9bb0c8..10ff440 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/CWhileLoop.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/CWhileLoop.java
@@ -79,11 +79,6 @@
 	}
 	
 	@Override
-	public final RAstNode[] getChildren() {
-		return new RAstNode[] { this.condExpr.node, this.loopExpr.node };
-	}
-	
-	@Override
 	public final int getChildIndex(final AstNode child) {
 		if (this.condExpr.node == child) {
 			return 0;
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/Comment.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/Comment.java
index f1ad05a..3a3b553 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/Comment.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/Comment.java
@@ -62,11 +62,6 @@
 		}
 		
 		@Override
-		public final RAstNode[] getChildren() {
-			return NO_CHILDREN;
-		}
-		
-		@Override
 		public final int getChildIndex(final AstNode child) {
 			return -1;
 		}
@@ -118,11 +113,6 @@
 		}
 		
 		@Override
-		public final RAstNode[] getChildren() {
-			return NO_CHILDREN;
-		}
-		
-		@Override
 		public final int getChildIndex(final AstNode child) {
 			return -1;
 		}
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/DocuComment.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/DocuComment.java
index d4d03c9..2dcdc0a 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/DocuComment.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/DocuComment.java
@@ -18,7 +18,6 @@
 import java.util.List;
 
 import org.eclipse.statet.jcommons.collections.ImList;
-import org.eclipse.statet.jcommons.lang.NonNull;
 import org.eclipse.statet.jcommons.lang.NonNullByDefault;
 import org.eclipse.statet.jcommons.lang.Nullable;
 
@@ -81,13 +80,6 @@
 	}
 	
 	@Override
-	public final RAstNode[] getChildren() {
-		final RAstNode[] children= new @NonNull RAstNode[this.lines.length];
-		System.arraycopy(this.lines, 0, children, 0, this.lines.length);
-		return children;
-	}
-	
-	@Override
 	public final int getChildIndex(final AstNode child) {
 		for (int i= 0; i < this.lines.length; i++) {
 			if (this.lines[i] == child) {
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/DocuTag.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/DocuTag.java
index a7dfbf7..434ee11 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/DocuTag.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/DocuTag.java
@@ -17,7 +17,6 @@
 import java.lang.reflect.InvocationTargetException;
 import java.util.Objects;
 
-import org.eclipse.statet.jcommons.lang.NonNull;
 import org.eclipse.statet.jcommons.lang.NonNullByDefault;
 import org.eclipse.statet.jcommons.lang.Nullable;
 
@@ -56,13 +55,6 @@
 	
 	
 	@Override
-	public final RAstNode[] getChildren() {
-		final RAstNode[] children= new @NonNull RAstNode[this.fragments.length];
-		System.arraycopy(this.fragments, 0, children, 0, this.fragments.length);
-		return children;
-	}
-	
-	@Override
 	public final boolean hasChildren() {
 		return (this.fragments.length > 0);
 	}
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/DocuText.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/DocuText.java
index 03bfed1..2874393 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/DocuText.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/DocuText.java
@@ -54,11 +54,6 @@
 	
 	
 	@Override
-	public final RAstNode[] getChildren() {
-		return NO_CHILDREN;
-	}
-	
-	@Override
 	public final boolean hasChildren() {
 		return false;
 	}
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/Dummy.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/Dummy.java
index 6b3b7f1..184cd24 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/Dummy.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/Dummy.java
@@ -76,11 +76,6 @@
 		}
 		
 		@Override
-		public final RAstNode[] getChildren() {
-			return NO_CHILDREN;
-		}
-		
-		@Override
 		public final int getChildIndex(final AstNode child) {
 			return -1;
 		}
@@ -163,11 +158,6 @@
 		}
 		
 		@Override
-		public final RAstNode[] getChildren() {
-			return new RAstNode[] { this.leftExpr.node, this.rightExpr.node };
-		}
-		
-		@Override
 		public final int getChildIndex(final AstNode child) {
 			if (this.leftExpr.node == child) {
 				return 0;
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/ExpressionList.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/ExpressionList.java
index d4eafe4..7ffe800 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/ExpressionList.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/ExpressionList.java
@@ -20,7 +20,6 @@
 import java.util.ArrayList;
 import java.util.List;
 
-import org.eclipse.statet.jcommons.lang.NonNull;
 import org.eclipse.statet.jcommons.lang.NonNullByDefault;
 import org.eclipse.statet.jcommons.lang.Nullable;
 
@@ -48,16 +47,6 @@
 	}
 	
 	@Override
-	public final RAstNode[] getChildren() {
-		final int n= this.expressions.size();
-		final RAstNode[] children= new @NonNull RAstNode[n];
-		for (int i= 0; i < n; i++) {
-			children[i]= this.expressions.get(i).node;
-		}
-		return children;
-	}
-	
-	@Override
 	public final int getChildIndex(final AstNode child) {
 		for (int i= this.expressions.size() - 1; i >= 0; i--) {
 			if (this.expressions.get(i).node == child) {
@@ -79,7 +68,9 @@
 	
 	@Override
 	public final void acceptInRChildren(final RAstVisitor visitor) throws InvocationTargetException {
-		acceptChildrenExpr(visitor, this.expressions);
+		for (final Expression expr : this.expressions) {
+			expr.node.acceptInR(visitor);
+		}
 	}
 	
 	@Override
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/FCall.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/FCall.java
index f1b238d..1130b80 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/FCall.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/FCall.java
@@ -17,12 +17,10 @@
 import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS12_SYNTAX_EXPR_AS_REF_MISSING;
 
 import java.lang.reflect.InvocationTargetException;
-import java.util.ArrayList;
-import java.util.List;
 
-import org.eclipse.statet.jcommons.collections.IntArrayList;
-import org.eclipse.statet.jcommons.collections.IntList;
-import org.eclipse.statet.jcommons.lang.NonNull;
+import org.eclipse.statet.jcommons.collections.ImCollections;
+import org.eclipse.statet.jcommons.collections.ImIntList;
+import org.eclipse.statet.jcommons.collections.ImList;
 import org.eclipse.statet.jcommons.lang.NonNullByDefault;
 import org.eclipse.statet.jcommons.lang.Nullable;
 
@@ -41,21 +39,25 @@
 	public static final class Args extends RAstNode {
 		
 		
-		final List<Arg> specs;
-		final IntList sepList;
+		private ImList<Arg> args;
+		private ImIntList sepOffsets;
 		
 		
+		@SuppressWarnings("null")
 		Args(final FCall parent) {
 			this.rParent= parent;
-			this.specs= new ArrayList<>(1);
-			this.sepList= new IntArrayList(1);
 		}
 		
 //		Args(final List<Arg> args) {
-//			rParent= null;
-//			specs= args;
+//			this.rParent= null;
+//			this.args= args;
 //		}
 		
+		void finish(final RParser.ArgsBuilder<Arg> argsBuilder) {
+			this.args= ImCollections.toList(argsBuilder.args);
+			this.sepOffsets= ImCollections.toIntList(argsBuilder.sepOffsets);
+		}
+		
 		
 		@Override
 		public final NodeType getNodeType() {
@@ -67,13 +69,8 @@
 			return null;
 		}
 		
-		public int getSeparatorOffset(final int index) {
-			return this.sepList.getAt(index);
-		}
-		
-		@Override
-		public final void acceptInR(final RAstVisitor visitor) throws InvocationTargetException {
-			visitor.visit(this);
+		public ImIntList getSeparatorOffsets() {
+			return this.sepOffsets;
 		}
 		
 		
@@ -84,42 +81,48 @@
 		
 		@Override
 		public final boolean hasChildren() {
-			return (!this.specs.isEmpty());
+			return (!this.args.isEmpty());
 		}
 		
 		@Override
 		public final int getChildCount() {
-			return this.specs.size();
+			return this.args.size();
 		}
 		
 		@Override
 		public final Arg getChild(final int index) {
-			return this.specs.get(index);
-		}
-		
-		@Override
-		public final Arg[] getChildren() {
-			return this.specs.toArray(new @NonNull Arg[this.specs.size()]);
+			return this.args.get(index);
 		}
 		
 		@Override
 		public final int getChildIndex(final AstNode child) {
-			for (int i= this.specs.size() - 1; i >= 0; i--) {
-				if (this.specs.get(i) == child) {
+			for (int i= this.args.size() - 1; i >= 0; i--) {
+				if (this.args.get(i) == child) {
 					return i;
 				}
 			}
 			return -1;
 		}
 		
+		public ImList<Arg> getArgChildren() {
+			return this.args;
+		}
+		
+		@Override
+		public final void acceptInR(final RAstVisitor visitor) throws InvocationTargetException {
+			visitor.visit(this);
+		}
+		
 		@Override
 		public final void acceptInRChildren(final RAstVisitor visitor) throws InvocationTargetException {
-			acceptChildren(visitor, this.specs);
+			for (final RAstNode arg : this.args) {
+				arg.acceptInR(visitor);
+			}
 		}
 		
 		@Override
 		public final void acceptInChildren(final AstVisitor visitor) throws InvocationTargetException {
-			for (final RAstNode child : this.specs) {
+			for (final RAstNode child : this.args) {
 				visitor.visit(child);
 			}
 		}
@@ -230,11 +233,6 @@
 	}
 	
 	@Override
-	public final RAstNode[] getChildren() {
-		return new RAstNode[] { this.refExpr.node, this.args };
-	}
-	
-	@Override
 	public final int getChildIndex(final AstNode child) {
 		if (this.refExpr.node == child) {
 			return 0;
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/FDef.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/FDef.java
index ad7684c..91af465 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/FDef.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/FDef.java
@@ -19,10 +19,9 @@
 import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS3_FDEF;
 
 import java.lang.reflect.InvocationTargetException;
-import java.util.ArrayList;
-import java.util.List;
 
-import org.eclipse.statet.jcommons.lang.NonNull;
+import org.eclipse.statet.jcommons.collections.ImCollections;
+import org.eclipse.statet.jcommons.collections.ImList;
 import org.eclipse.statet.jcommons.lang.NonNullByDefault;
 import org.eclipse.statet.jcommons.lang.Nullable;
 
@@ -79,12 +78,25 @@
 	public static final class Args extends RAstNode {
 		
 		
-		final List<Arg> specs;
+		private ImList<Arg> args;
+//		private ImIntList sepOffsets;
 		
 		
+		@SuppressWarnings("null")
 		Args(final FDef parent) {
 			this.rParent= parent;
-			this.specs= new ArrayList<>(0);
+		}
+		
+		void finish(final RParser.ArgsBuilder<Arg> argsBuilder) {
+			this.args= ImCollections.toList(argsBuilder.args);
+//			this.sepOffsets= ImCollections.toIntList(argsBuilder.sepOffsets);
+		}
+		
+		void finishMissing(final int offset) {
+			this.startOffset= offset;
+			this.endOffset= offset;
+			this.args= ImCollections.emptyList();
+//			this.sepOffsets= ImCollections.toIntList(argsBuilder.sepOffsets);
 		}
 		
 		
@@ -106,34 +118,33 @@
 		
 		@Override
 		public final boolean hasChildren() {
-			return (!this.specs.isEmpty());
+			return (!this.args.isEmpty());
 		}
 		
 		@Override
 		public final int getChildCount() {
-			return this.specs.size();
+			return this.args.size();
 		}
 		
 		@Override
 		public final Arg getChild(final int index) {
-			return this.specs.get(index);
-		}
-		
-		@Override
-		public final Arg[] getChildren() {
-			return this.specs.toArray(new @NonNull Arg[this.specs.size()]);
+			return this.args.get(index);
 		}
 		
 		@Override
 		public final int getChildIndex(final AstNode child) {
-			for (int i= this.specs.size() - 1; i >= 0; i--) {
-				if (this.specs.get(i) == child) {
+			for (int i= this.args.size() - 1; i >= 0; i--) {
+				if (this.args.get(i) == child) {
 					return i;
 				}
 			}
 			return -1;
 		}
 		
+		public ImList<Arg> getArgChildren() {
+			return this.args;
+		}
+		
 		@Override
 		public final void acceptInR(final RAstVisitor visitor) throws InvocationTargetException {
 			visitor.visit(this);
@@ -141,12 +152,14 @@
 		
 		@Override
 		public final void acceptInRChildren(final RAstVisitor visitor) throws InvocationTargetException {
-			acceptChildren(visitor, this.specs);
+			for (final RAstNode arg : this.args) {
+				arg.acceptInR(visitor);
+			}
 		}
 		
 		@Override
 		public final void acceptInChildren(final AstVisitor visitor) throws InvocationTargetException {
-			for (final RAstNode child : this.specs) {
+			for (final RAstNode child : this.args) {
 				visitor.visit(child);
 			}
 		}
@@ -236,16 +249,6 @@
 		}
 		
 		@Override
-		public final RAstNode[] getChildren() {
-			if (this.withDefault) {
-				return new RAstNode[] { this.argName, this.defaultExpr.node };
-			}
-			else {
-				return new RAstNode[] { this.argName };
-			}
-		}
-		
-		@Override
 		public final int getChildIndex(final AstNode child) {
 			if (this.argName == child) {
 				return 0;
@@ -331,7 +334,7 @@
 	
 	
 	int argsOpenOffset= NA_OFFSET;
-	Args args= new Args(this);
+	final Args args= new Args(this);
 	int argsCloseOffset= NA_OFFSET;
 	final Expression expr= new Expression();
 	
@@ -374,11 +377,6 @@
 	}
 	
 	@Override
-	public final RAstNode[] getChildren() {
-		return new RAstNode[] { this.args, this.expr.node };
-	}
-	
-	@Override
 	public final int getChildIndex(final AstNode child) {
 		if (this.args == child) {
 			return 0;
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/Group.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/Group.java
index 0614c1f..a0a2fe7 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/Group.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/Group.java
@@ -73,11 +73,6 @@
 	}
 	
 	@Override
-	public final RAstNode[] getChildren() {
-		return new RAstNode[] { this.expr.node };
-	}
-	
-	@Override
 	public final int getChildIndex(final AstNode child) {
 		if (this.expr.node == child) {
 			return 0;
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/Help.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/Help.java
index 0dca0bb..cc26445 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/Help.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/Help.java
@@ -83,15 +83,6 @@
 	}
 	
 	@Override
-	public final RAstNode[] getChildren() {
-		final RAstNode typeNode= this.leftExpr.node;
-		if (typeNode != null) {
-			return new RAstNode[] { typeNode, this.rightExpr.node };
-		}
-		return new RAstNode[] { this.rightExpr.node };
-	}
-	
-	@Override
 	public final int getChildIndex(final AstNode child) {
 		if (this.leftExpr.node == child) {
 			return 0;
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/Model.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/Model.java
index 50812f8..2e555a6 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/Model.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/Model.java
@@ -81,15 +81,6 @@
 		throw new IndexOutOfBoundsException();
 	}
 	
-	@Override
-	public final RAstNode[] getChildren() {
-		final RAstNode leftNode= this.leftExpr.node;
-		if (leftNode != null) {
-			return new RAstNode[] { leftNode, this.rightExpr.node };
-		}
-		return new RAstNode[] { this.rightExpr.node };
-	}
-	
 	public final boolean hasLeft() {
 		return (this.leftExpr.node != null);
 	}
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/NSGet.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/NSGet.java
index 1ee86c8..311a3e8 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/NSGet.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/NSGet.java
@@ -106,11 +106,6 @@
 	}
 	
 	@Override
-	public final RAstNode[] getChildren() {
-		return new RAstNode[] { this.namespace, this.element };
-	}
-	
-	@Override
 	public final int getChildIndex(final AstNode child) {
 		if (this.namespace == child) {
 			return 0;
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/NodeType.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/NodeType.java
index c419d02..acc08ec 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/NodeType.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/NodeType.java
@@ -73,7 +73,6 @@
 	
 	C_IF ("if", 100001, Assoc.RIGHTSTD), //$NON-NLS-1$
 	C_FOR ("for", 100002, Assoc.LEFTSTD), //$NON-NLS-1$
-	C_IN ("in", 100002, Assoc.LEFTSTD), //$NON-NLS-1$
 	C_WHILE ("while", 100002, Assoc.LEFTSTD), //$NON-NLS-1$
 	C_REPEAT ("repeat", 100002, Assoc.LEFTSTD), //$NON-NLS-1$
 	C_NEXT ("next", 1, Assoc.TERM), //$NON-NLS-1$
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/NullConst.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/NullConst.java
index 695ae99..7aa44b5 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/NullConst.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/NullConst.java
@@ -62,11 +62,6 @@
 	}
 	
 	@Override
-	public final RAstNode[] getChildren() {
-		return NO_CHILDREN;
-	}
-	
-	@Override
 	public final int getChildIndex(final AstNode child) {
 		return -1;
 	}
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/RAstNode.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/RAstNode.java
index 107d17f..9b47a1c 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/RAstNode.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/RAstNode.java
@@ -17,7 +17,6 @@
 import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS_OK;
 
 import java.lang.reflect.InvocationTargetException;
-import java.util.List;
 
 import org.eclipse.statet.jcommons.lang.NonNullByDefault;
 import org.eclipse.statet.jcommons.lang.Nullable;
@@ -99,7 +98,6 @@
 	public abstract int getChildCount();
 	@Override
 	public abstract RAstNode getChild(int index);
-	public abstract RAstNode[] getChildren();
 	@Override
 	public abstract int getChildIndex(AstNode child);
 	
@@ -121,9 +119,10 @@
 	
 	
 	int getEqualsIndex(final RAstNode element) {
-		final RAstNode[] children= getChildren();
 		int index= 0;
-		for (final RAstNode child : children) {
+		final int n= getChildCount();
+		for (int i= 0; i < n; i++) {
+			final RAstNode child= getChild(i);
 			if (child == element) {
 				return index;
 			}
@@ -139,18 +138,6 @@
 	
 	public abstract void acceptInRChildren(RAstVisitor visitor) throws InvocationTargetException;
 	
-	protected final void acceptChildren(final RAstVisitor visitor, final List<? extends RAstNode> children) throws InvocationTargetException {
-		for (final RAstNode child : children) {
-			child.acceptInR(visitor);
-		}
-	}
-	
-	protected final void acceptChildrenExpr(final RAstVisitor visitor, final List<Expression> children) throws InvocationTargetException {
-		for (final Expression expr : children) {
-			expr.node.acceptInR(visitor);
-		}
-	}
-	
 	
 	abstract @Nullable Expression getExpr(RAstNode child);
 	abstract @Nullable Expression getLeftExpr();
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/RAsts.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/RAsts.java
index a1ef0be..857aacc 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/RAsts.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/RAsts.java
@@ -690,7 +690,6 @@
 				topdown.add(parent.getChildIndex(node) + 3);
 				node= parent.getRParent();
 				continue;
-			case C_IN:
 			case F_CALL_ARGS:
 				if (parent == baseNode) {
 					continue;
@@ -771,7 +770,6 @@
 			
 			// part of parent element
 			case SUB_INDEXED_ARGS:
-			case C_IN:
 			case F_CALL_ARGS:
 			
 			case SUB_INDEXED_ARG: // -> ARGS
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/RParser.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/RParser.java
index 1d9465b..7daada6 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/RParser.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/RParser.java
@@ -50,6 +50,8 @@
 import java.util.Collections;
 import java.util.List;
 
+import org.eclipse.statet.jcommons.collections.IntArrayList;
+import org.eclipse.statet.jcommons.collections.IntList;
 import org.eclipse.statet.jcommons.lang.NonNull;
 import org.eclipse.statet.jcommons.lang.NonNullByDefault;
 import org.eclipse.statet.jcommons.lang.Nullable;
@@ -83,6 +85,14 @@
 	public static final int LEXER_CONFIG= RLexer.SKIP_WHITESPACE;
 	
 	
+	static final class ArgsBuilder<T> {
+		
+		final ArrayList<T> args= new ArrayList<>(8);
+		
+		final IntList sepOffsets= new IntArrayList(8);
+		
+	}
+	
 	private static final class ExprContext {
 		final RAstNode rootNode;
 		final Expression rootExpr;
@@ -317,6 +327,7 @@
 	}
 	
 	private void init() {
+		clearArgsBuilder();
 		if (this.roxygen != null) {
 			this.roxygen.init();
 		}
@@ -1087,7 +1098,7 @@
 			}
 		}
 		else {
-			node.args.startOffset= node.args.endOffset= node.endOffset;
+			node.args.finishMissing(node.endOffset);
 			if ((node.status & STATUSFLAG_REAL_ERROR) == 0) {
 				node.status= STATUS12_SYNTAX_FDEF_ARGS_MISSING;
 			}
@@ -1126,6 +1137,7 @@
 	}
 	
 	final void scanInFDefArgs(final FDef.Args args) {
+		final var builder= this.<FDef.Arg>getArgsBuilder();
 		args.startOffset= args.endOffset= args.rParent.endOffset;
 		ITER_ARGS : while (true) {
 			final FDef.Arg arg= new FDef.Arg(args);
@@ -1142,8 +1154,8 @@
 				arg.startOffset= arg.endOffset= this.lexer.getOffset();
 				break;
 			default:
-				if (args.specs.isEmpty()) {
-					return;
+				if (builder.args.isEmpty()) {
+					break ITER_ARGS;
 				}
 				arg.startOffset= arg.endOffset= args.endOffset;
 				break;
@@ -1162,7 +1174,7 @@
 				arg.endOffset= arg.defaultExpr.node.endOffset;
 			}
 			
-			args.specs.add(arg);
+			builder.args.add(arg);
 			args.status= POST_VISITOR.checkTerminal(arg);
 			if (this.nextType == RTerminal.COMMA) {
 				args.endOffset= this.lexer.getOffset() + 1;
@@ -1171,14 +1183,17 @@
 				continue ITER_ARGS;
 			}
 			else {
-				args.startOffset= args.specs.get(0).startOffset;
+				args.startOffset= builder.args.get(0).startOffset;
 				args.endOffset= arg.endOffset;
-				return;
+				break ITER_ARGS;
 			}
 		}
+		args.finish(builder);
+		returnArgsBuilder(builder);
 	}
 	
 	final void scanInSpecArgs(final FCall.Args args) {
+		final var builder= this.<FCall.Arg>getArgsBuilder();
 		args.startOffset= args.endOffset= args.rParent.endOffset;
 		ITER_ARGS : while (true) {
 			final FCall.Arg arg= new FCall.Arg(args);
@@ -1242,27 +1257,30 @@
 			}
 			
 			if (this.nextType == RTerminal.COMMA) {
-				args.specs.add(arg);
+				builder.args.add(arg);
 				args.status= POST_VISITOR.checkTerminal(arg);
-				args.sepList.add(this.lexer.getOffset());
+				builder.sepOffsets.add(this.lexer.getOffset());
 				args.endOffset= this.lexer.getOffset() + 1;
 				consumeToken();
 				readLines();
 				continue ITER_ARGS;
 			}
-			// last arg before )
-			if (args.specs.isEmpty() && !arg.hasChildren()) {
-				return;
+			else {
+				if (arg.hasChildren() || !builder.args.isEmpty()) {
+					builder.args.add(arg);
+					args.status= POST_VISITOR.checkTerminal(arg);
+					args.startOffset= builder.args.get(0).startOffset;
+					args.endOffset= arg.endOffset;
+				}
+				break ITER_ARGS;
 			}
-			args.specs.add(arg);
-			args.status= POST_VISITOR.checkTerminal(arg);
-			args.startOffset= args.specs.get(0).startOffset;
-			args.endOffset= arg.endOffset;
-			return;
 		}
+		args.finish(builder);
+		returnArgsBuilder(builder);
 	}
 	
 	final void scanInSpecArgs(final SubIndexed.Args args) {
+		final var builder= this.<SubIndexed.Arg>getArgsBuilder();
 		args.startOffset= args.endOffset= args.rParent.endOffset;
 		ITER_ARGS : while (true) {
 			final SubIndexed.Arg arg= new SubIndexed.Arg(args);
@@ -1326,23 +1344,26 @@
 			}
 			
 			if (this.nextType == RTerminal.COMMA) {
-				args.specs.add(arg);
+				builder.args.add(arg);
 				args.status= POST_VISITOR.checkTerminal(arg);
+				builder.sepOffsets.add(this.lexer.getOffset());
 				args.endOffset= this.lexer.getOffset() + 1;
 				consumeToken();
 				readLines();
 				continue ITER_ARGS;
 			}
-			// last arg before )
-			if (args.specs.isEmpty() && !arg.hasChildren()) {
-				return;
+			else {
+				if (arg.hasChildren() || !builder.args.isEmpty()) {
+					builder.args.add(arg);
+					args.status= POST_VISITOR.checkTerminal(arg);
+					args.startOffset= builder.args.get(0).startOffset;
+					args.endOffset= arg.endOffset;
+				}
+				break ITER_ARGS;
 			}
-			args.specs.add(arg);
-			args.status= POST_VISITOR.checkTerminal(arg);
-			args.startOffset= args.specs.get(0).startOffset;
-			args.endOffset= arg.endOffset;
-			return;
 		}
+		args.finish(builder);
+		returnArgsBuilder(builder);
 	}
 	
 	final boolean recoverCCont() {
@@ -1830,4 +1851,38 @@
 		}
 	}
 	
+	
+	private List<ArgsBuilder<?>> argBuilders= new ArrayList<>(16);
+	private int argBuildersIdx;
+	
+	private void clearArgsBuilder() {
+		int idx= this.argBuildersIdx;
+		while (idx > 0) {
+			final var builder= this.argBuilders.get(--idx);
+			builder.args.clear();
+			builder.sepOffsets.clear();
+		}
+		this.argBuildersIdx= 0;
+	}
+	
+	@SuppressWarnings("unchecked")
+	private <TArg> ArgsBuilder<TArg> getArgsBuilder() {
+		final ArgsBuilder<TArg> builder;
+		if (this.argBuildersIdx < this.argBuilders.size()) {
+			builder= (ArgsBuilder<TArg>)this.argBuilders.get(this.argBuildersIdx);
+		}
+		else {
+			builder= new ArgsBuilder<>();
+			this.argBuilders.add(builder);
+		}
+		this.argBuildersIdx++;
+		return builder;
+	}
+	
+	private void returnArgsBuilder(final ArgsBuilder<?> builder) {
+		builder.args.clear();
+		builder.sepOffsets.clear();
+		this.argBuildersIdx--;
+	}
+	
 }
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/Sign.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/Sign.java
index 7ffb30f..0975a23 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/Sign.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/Sign.java
@@ -134,11 +134,6 @@
 	}
 	
 	@Override
-	public final RAstNode[] getChildren() {
-		return new RAstNode[] { this.rightExpr.node };
-	}
-	
-	@Override
 	public final int getChildIndex(final AstNode child) {
 		if (this.rightExpr.node == child) {
 			return 0;
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/SingleValue.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/SingleValue.java
index 246c6fd..cbe5c51 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/SingleValue.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/SingleValue.java
@@ -61,11 +61,6 @@
 	}
 	
 	@Override
-	public final RAstNode[] getChildren() {
-		return NO_CHILDREN;
-	}
-	
-	@Override
 	public final int getChildIndex(final AstNode child) {
 		return -1;
 	}
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/SpecItem.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/SpecItem.java
index e6a0485..e7ef3a0 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/SpecItem.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/SpecItem.java
@@ -113,26 +113,6 @@
 	}
 	
 	@Override
-	public final RAstNode[] getChildren() {
-		final RAstNode nameNode= this.argName;
-		final RAstNode valueNode= this.valueExpr.node;
-		if (nameNode != null) {
-			if (valueNode != null) {
-				return new RAstNode[] { nameNode, valueNode };
-			}
-			else {
-				return new RAstNode[] { nameNode };
-			}
-		}
-		else if (valueNode != null) {
-			return new RAstNode[] { valueNode };
-		}
-		else {
-			return NO_CHILDREN;
-		}
-	}
-	
-	@Override
 	public int getChildIndex(final AstNode child) {
 		if (this.argName == child) {
 			return 0;
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/SpecList.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/SpecList.java
deleted file mode 100644
index 6879a22..0000000
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/SpecList.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*=============================================================================#
- # Copyright (c) 2007, 2021 Stephan Wahlbrink and others.
- # 
- # This program and the accompanying materials are made available under the
- # terms of the Eclipse Public License 2.0 which is available at
- # https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
- # which is available at https://www.apache.org/licenses/LICENSE-2.0.
- # 
- # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
- # 
- # Contributors:
- #     Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
- #=============================================================================*/
-
-package org.eclipse.statet.r.core.rsource.ast;
-
-import java.lang.reflect.InvocationTargetException;
-import java.util.ArrayList;
-import java.util.List;
-
-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.ltk.ast.core.AstNode;
-import org.eclipse.statet.ltk.ast.core.AstVisitor;
-import org.eclipse.statet.r.core.rsource.RTerminal;
-
-
-/**
- * Comma separated list
- */
-@NonNullByDefault
-abstract class SpecList extends RAstNode {
-	
-	
-	final List<SpecItem> specs= new ArrayList<>(0);
-	
-	
-	SpecList() {
-	}
-	
-	
-	@Override
-	public final @Nullable RTerminal getOperator(final int index) {
-		return null;
-	}
-	
-	
-	@Override
-	public final boolean hasChildren() {
-		return (!this.specs.isEmpty());
-	}
-	
-	@Override
-	public final int getChildCount() {
-		return this.specs.size();
-	}
-	
-	@Override
-	public final RAstNode getChild(final int index) {
-		return this.specs.get(index);
-	}
-	
-	@Override
-	public final RAstNode[] getChildren() {
-		return this.specs.toArray(new @NonNull RAstNode[this.specs.size()]);
-	}
-	
-	@Override
-	public final int getChildIndex(final AstNode child) {
-		for (int i= this.specs.size() - 1; i >= 0; i--) {
-			if (this.specs.get(i) == child) {
-				return i;
-			}
-		}
-		return -1;
-	}
-	
-	@Override
-	public final void acceptInRChildren(final RAstVisitor visitor) throws InvocationTargetException {
-		acceptChildren(visitor, this.specs);
-	}
-	
-	@Override
-	public final void acceptInChildren(final AstVisitor visitor) throws InvocationTargetException {
-		for (final RAstNode child : this.specs) {
-			visitor.visit(child);
-		}
-	}
-	
-	
-	@Override
-	final @Nullable Expression getExpr(final RAstNode child) {
-		return null;
-	}
-	
-	@Override
-	final @Nullable Expression getLeftExpr() {
-		return null;
-	}
-	
-	@Override
-	final @Nullable Expression getRightExpr() {
-		return null;
-	}
-	
-	abstract SpecItem createItem();
-	
-	void appendItem(final SpecItem item) {
-		this.specs.add(item);
-	}
-	
-	
-	@Override
-	final int getMissingExprStatus(final Expression expr) {
-		throw new IllegalArgumentException();
-	}
-	
-}
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/StdBinary.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/StdBinary.java
index b2c35da..204562b 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/StdBinary.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/StdBinary.java
@@ -63,11 +63,6 @@
 		}
 	}
 	
-	@Override
-	public final RAstNode[] getChildren() {
-		return new RAstNode[] { this.leftExpr.node, this.rightExpr.node };
-	}
-	
 	public final RAstNode getLeftChild() {
 		return this.leftExpr.node;
 	}
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/SubIndexed.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/SubIndexed.java
index c4c478b..49f28c8 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/SubIndexed.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/SubIndexed.java
@@ -17,10 +17,10 @@
 import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS12_SYNTAX_EXPR_AS_REF_MISSING;
 
 import java.lang.reflect.InvocationTargetException;
-import java.util.ArrayList;
-import java.util.List;
 
-import org.eclipse.statet.jcommons.lang.NonNull;
+import org.eclipse.statet.jcommons.collections.ImCollections;
+import org.eclipse.statet.jcommons.collections.ImIntList;
+import org.eclipse.statet.jcommons.collections.ImList;
 import org.eclipse.statet.jcommons.lang.NonNullByDefault;
 import org.eclipse.statet.jcommons.lang.Nullable;
 
@@ -78,14 +78,21 @@
 	public static final class Args extends RAstNode {
 		
 		
-		final List<Arg> specs;
+		private ImList<Arg> args;
+		private ImIntList sepOffsets;
 		
 		
+		@SuppressWarnings("null")
 		Args(final SubIndexed parent) {
 			this.rParent= parent;
-			this.specs= new ArrayList<>();
 		}
 		
+		void finish(final RParser.ArgsBuilder<Arg> argsBuilder) {
+			this.args= ImCollections.toList(argsBuilder.args);
+			this.sepOffsets= ImCollections.toIntList(argsBuilder.sepOffsets);
+		}
+		
+		
 		@Override
 		public final NodeType getNodeType() {
 			return NodeType.SUB_INDEXED_ARGS;
@@ -96,37 +103,40 @@
 			return null;
 		}
 		
+		public ImIntList getSeparatorOffsets() {
+			return this.sepOffsets;
+		}
+		
 		
 		@Override
 		public final boolean hasChildren() {
-			return (!this.specs.isEmpty());
+			return (!this.args.isEmpty());
 		}
 		
 		@Override
 		public final int getChildCount() {
-			return this.specs.size();
+			return this.args.size();
 		}
 		
 		@Override
-		public final RAstNode getChild(final int index) {
-			return this.specs.get(index);
-		}
-		
-		@Override
-		public final RAstNode[] getChildren() {
-			return this.specs.toArray(new @NonNull RAstNode[this.specs.size()]);
+		public final Arg getChild(final int index) {
+			return this.args.get(index);
 		}
 		
 		@Override
 		public final int getChildIndex(final AstNode child) {
-			for (int i= this.specs.size() - 1; i >= 0; i--) {
-				if (this.specs.get(i) == child) {
+			for (int i= this.args.size() - 1; i >= 0; i--) {
+				if (this.args.get(i) == child) {
 					return i;
 				}
 			}
 			return -1;
 		}
 		
+		public ImList<Arg> getArgChildren() {
+			return this.args;
+		}
+		
 		@Override
 		public final void acceptInR(final RAstVisitor visitor) throws InvocationTargetException {
 			visitor.visit(this);
@@ -134,12 +144,14 @@
 		
 		@Override
 		public final void acceptInRChildren(final RAstVisitor visitor) throws InvocationTargetException {
-			acceptChildren(visitor, this.specs);
+			for (final RAstNode arg : this.args) {
+				arg.acceptInR(visitor);
+			}
 		}
 		
 		@Override
 		public final void acceptInChildren(final AstVisitor visitor) throws InvocationTargetException {
-			for (final RAstNode child : this.specs) {
+			for (final RAstNode child : this.args) {
 				visitor.visit(child);
 			}
 		}
@@ -240,11 +252,6 @@
 		}
 	}
 	
-	@Override
-	public final RAstNode[] getChildren() {
-		return new RAstNode[] { this.expr.node, this.sublist };
-	}
-	
 	public final RAstNode getRefChild() {
 		return this.expr.node;
 	}
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/SubNamed.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/SubNamed.java
index e80fb59..035d7af 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/SubNamed.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/SubNamed.java
@@ -104,11 +104,6 @@
 	}
 	
 	@Override
-	public final RAstNode[] getChildren() {
-		return new RAstNode[] { this.expr.node, this.subname };
-	}
-	
-	@Override
 	public final int getChildIndex(final AstNode child) {
 		if (this.expr.node == child) {
 			return 0;
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/RContextInformationValidator.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/RContextInformationValidator.java
index f4e28d3..3dd9add 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/RContextInformationValidator.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/RContextInformationValidator.java
@@ -192,7 +192,7 @@
 			return 0;
 		}
 		for (int i= 0; i < last; i++) {
-			if (offset <= args.getSeparatorOffset(i)) {
+			if (offset <= args.getSeparatorOffsets().getAt(i)) {
 				return i;
 			}
 		}
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/sourceediting/RAssistInvocationContext.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/sourceediting/RAssistInvocationContext.java
index a5ba1bf..0b3f63a 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/sourceediting/RAssistInvocationContext.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/sourceediting/RAssistInvocationContext.java
@@ -137,7 +137,7 @@
 				return 0;
 			}
 			for (int argIdx= 0; argIdx < last; argIdx++) {
-				if (args.getSeparatorOffset(argIdx) >= offset) {
+				if (args.getSeparatorOffsets().getAt(argIdx) >= offset) {
 					return argIdx;
 				}
 			}
@@ -150,7 +150,7 @@
 			}
 			final int sep= (argIdx == 0) ?
 					this.node.getArgsOpenOffset() :
-					this.node.getArgsChild().getSeparatorOffset(argIdx - 1);
+					this.node.getArgsChild().getSeparatorOffsets().getAt(argIdx - 1);
 			return sep + 1;
 		}
 		
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/sourceediting/RAutoEditStrategy.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/sourceediting/RAutoEditStrategy.java
index 44e16f5..d4cdff7 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/sourceediting/RAutoEditStrategy.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/sourceediting/RAutoEditStrategy.java
@@ -98,7 +98,20 @@
 	
 	private static final char[] CURLY_BRACKETS= new char[] { '{', '}' };
 	
-	private static final StringParserInput DEFAULT_PARSER_INPUT= new StringParserInput();
+	
+	private static final StringParserInput DISPLAY_PARSER_INPUT= new StringParserInput();
+	
+	private static final StringParserInput getParserInput(final String text) {
+		return (Display.getCurrent() == Display.getDefault()) ?
+				DISPLAY_PARSER_INPUT.reset(text) : new StringParserInput(text);
+	}
+	
+	private static final RParser DISPLAY_R_PARSER= new RParser(AstInfo.LEVEL_MINIMAL);
+	
+	private static final RParser getRParser() {
+		return (Display.getCurrent() == Display.getDefault()) ?
+				DISPLAY_R_PARSER : new RParser(AstInfo.LEVEL_MINIMAL);
+	}
 	
 	
 	private class RealTypeListener implements VerifyKeyListener {
@@ -761,8 +774,7 @@
 		int dummyCoffset= c.offset-shift;
 		int dummyCend= dummyCoffset+c.text.length();
 		final AbstractDocument dummyDoc= new Document(text);
-		final TextParserInput parserInput= (Display.getCurrent() == Display.getDefault()) ?
-				DEFAULT_PARSER_INPUT.reset(text) : new StringParserInput(text);
+		final TextParserInput parserInput= getParserInput(text);
 		
 		// Lines to indent
 		int dummyFirstLine= dummyDoc.getLineOfOffset(dummyCoffset);
@@ -775,7 +787,7 @@
 		}
 		
 		// Compute indent
-		final RParser rParser= new RParser(AstInfo.LEVEL_MINIMAL);
+		final RParser rParser= getRParser();
 		final RAstNode rootNode= rParser.scanSourceUnit(parserInput.init());
 		final RSourceIndenter indenter= getIndenter();
 		indenter.setup(this.rCoreAccess);
diff --git a/rtm/org.eclipse.statet.rtm.base.ui/src/org/eclipse/statet/rtm/base/ui/rexpr/AlphaType.java b/rtm/org.eclipse.statet.rtm.base.ui/src/org/eclipse/statet/rtm/base/ui/rexpr/AlphaType.java
index 92cf18a..e775b3d 100644
--- a/rtm/org.eclipse.statet.rtm.base.ui/src/org/eclipse/statet/rtm/base/ui/rexpr/AlphaType.java
+++ b/rtm/org.eclipse.statet.rtm.base.ui/src/org/eclipse/statet/rtm/base/ui/rexpr/AlphaType.java
@@ -37,7 +37,6 @@
 import org.eclipse.statet.ecommons.ui.components.DoubleText;
 import org.eclipse.statet.ecommons.ui.components.ObjValueEvent;
 
-import org.eclipse.statet.ltk.ast.core.AstInfo;
 import org.eclipse.statet.r.core.model.RGraphicFunctions;
 import org.eclipse.statet.r.core.rsource.ast.RParser;
 import org.eclipse.statet.r.ui.graphics.RAlphaChooser;
@@ -87,7 +86,7 @@
 		Float newValue= null;
 		try {
 			if (newExpr != null && newExpr.getTypeKey() == RTypedExpr.R) {
-				final RParser rParser= new RParser(AstInfo.LEVEL_MODEL_DEFAULT);
+				final RParser rParser= RExprWidget.getDisplayRParser();
 				newValue= this.rGraphicFunctions.parseAlpha(rParser.scanExpr(
 						new StringParserInput(newExpr.getExpr()).init() ));
 			}
diff --git a/rtm/org.eclipse.statet.rtm.base.ui/src/org/eclipse/statet/rtm/base/ui/rexpr/ColorType.java b/rtm/org.eclipse.statet.rtm.base.ui/src/org/eclipse/statet/rtm/base/ui/rexpr/ColorType.java
index 2448b08..c854f7f 100644
--- a/rtm/org.eclipse.statet.rtm.base.ui/src/org/eclipse/statet/rtm/base/ui/rexpr/ColorType.java
+++ b/rtm/org.eclipse.statet.rtm.base.ui/src/org/eclipse/statet/rtm/base/ui/rexpr/ColorType.java
@@ -42,7 +42,6 @@
 import org.eclipse.statet.ecommons.ui.components.DoubleText;
 import org.eclipse.statet.ecommons.ui.components.ObjValueEvent;
 
-import org.eclipse.statet.ltk.ast.core.AstInfo;
 import org.eclipse.statet.r.core.model.RGraphicFunctions;
 import org.eclipse.statet.r.core.rsource.ast.RParser;
 import org.eclipse.statet.r.ui.graphics.RAlphaChooser;
@@ -92,7 +91,7 @@
 		ColorDef newValue= null;
 		if (newExpr != null && newExpr.getTypeKey() == RTypedExpr.R) {
 			try {
-				final RParser rParser= new RParser(AstInfo.LEVEL_MODEL_DEFAULT);
+				final RParser rParser= RExprWidget.getDisplayRParser();
 				newValue= this.rGraphicFunctions.parseColorDef(rParser.scanExpr(
 						new StringParserInput(newExpr.getExpr()).init() ));
 			}
diff --git a/rtm/org.eclipse.statet.rtm.base.ui/src/org/eclipse/statet/rtm/base/ui/rexpr/FontFamilyType.java b/rtm/org.eclipse.statet.rtm.base.ui/src/org/eclipse/statet/rtm/base/ui/rexpr/FontFamilyType.java
index c7f7b34..03be6c6 100644
--- a/rtm/org.eclipse.statet.rtm.base.ui/src/org/eclipse/statet/rtm/base/ui/rexpr/FontFamilyType.java
+++ b/rtm/org.eclipse.statet.rtm.base.ui/src/org/eclipse/statet/rtm/base/ui/rexpr/FontFamilyType.java
@@ -34,7 +34,6 @@
 
 import org.eclipse.statet.ecommons.ui.components.ObjValueEvent;
 
-import org.eclipse.statet.ltk.ast.core.AstInfo;
 import org.eclipse.statet.r.core.model.RGraphicFunctions;
 import org.eclipse.statet.r.core.rsource.ast.RParser;
 import org.eclipse.statet.r.ui.graphics.RFontFamilyChooser;
@@ -84,7 +83,7 @@
 		String newValue= null;
 		try {
 			if (newExpr != null && newExpr.getTypeKey() == RTypedExpr.R) {
-				final RParser rParser= new RParser(AstInfo.LEVEL_MODEL_DEFAULT);
+				final RParser rParser= RExprWidget.getDisplayRParser();
 				newValue= this.rGraphicFunctions.parseFontFamily(rParser.scanExpr(
 						new StringParserInput(newExpr.getExpr()).init() ));
 			}
diff --git a/rtm/org.eclipse.statet.rtm.base.ui/src/org/eclipse/statet/rtm/base/ui/rexpr/RExprWidget.java b/rtm/org.eclipse.statet.rtm.base.ui/src/org/eclipse/statet/rtm/base/ui/rexpr/RExprWidget.java
index 64cb146..ba71ffc 100644
--- a/rtm/org.eclipse.statet.rtm.base.ui/src/org/eclipse/statet/rtm/base/ui/rexpr/RExprWidget.java
+++ b/rtm/org.eclipse.statet.rtm.base.ui/src/org/eclipse/statet/rtm/base/ui/rexpr/RExprWidget.java
@@ -49,6 +49,8 @@
 import org.eclipse.statet.ecommons.ui.util.LayoutUtils;
 import org.eclipse.statet.ecommons.ui.util.MenuUtils;
 
+import org.eclipse.statet.ltk.ast.core.AstInfo;
+import org.eclipse.statet.r.core.rsource.ast.RParser;
 import org.eclipse.statet.rtm.base.ui.RtModelUIPlugin;
 import org.eclipse.statet.rtm.base.util.RExprType;
 import org.eclipse.statet.rtm.base.util.RExprTypes;
@@ -58,6 +60,13 @@
 public class RExprWidget extends Composite implements IObjValueWidget<RTypedExpr> {
 	
 	
+	private static final RParser DISPLAY_R_PARSER= new RParser(AstInfo.LEVEL_MODEL_DEFAULT);
+	
+	protected static final RParser getDisplayRParser() {
+		return DISPLAY_R_PARSER;
+	}
+	
+	
 	public static class TypeDef implements IObjValueListener<RTypedExpr> {
 		
 		
