* expression and statement classes are not used in ruby now at all
* unused and specific ast nodes are moved to python (where they are really used only)
diff --git a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/ASTListNode.java b/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/ASTListNode.java
new file mode 100644
index 0000000..b44dc18
--- /dev/null
+++ b/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/ASTListNode.java
@@ -0,0 +1,76 @@
+package org.eclipse.dltk.ast;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+public class ASTListNode extends ASTNode {
+
+	private final List nodes;
+
+	public ASTListNode(int start, int end, List nodes) {
+		super(start, end);
+		this.nodes = nodes;
+	}
+
+	public ASTListNode(int start, int end) {
+		super(start, end);
+		this.nodes = new ArrayList();
+	}
+
+	public ASTListNode() {
+		super(0, -1);
+		this.nodes = new ArrayList();
+	}
+
+	public void addNode(ASTNode s) {
+		if (s != null) {
+			nodes.add(s);
+		}
+	}
+
+	public List getChilds() {
+		return nodes;
+	}
+
+	/**
+	 * 
+	 * @deprecated use getChilds(), this method are present only for compatiblity
+	 *             with old code
+	 */
+	public List getExpressions() {
+		return nodes;
+	}
+
+	/**
+	 * 
+	 * @deprecated use getChilds(), this method are present only for compatiblity
+	 *             with old code
+	 */
+	public List getStatements() {
+		return nodes;
+	}
+
+	public void setChilds(List l) {
+		this.nodes.clear();
+		this.nodes.addAll(l);
+	}
+
+	public int getKind() {
+		// TODO Auto-generated method stub
+		return 0;
+	}
+
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
+			if (nodes != null) {
+				for (Iterator iter = nodes.iterator(); iter.hasNext();) {
+					ASTNode s = (ASTNode) iter.next();
+					s.traverse(visitor);
+				}
+			}
+			visitor.endvisit(this);
+		}
+	}
+
+}
diff --git a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/ASTNode.java b/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/ASTNode.java
index 0927223..b56b03c 100644
--- a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/ASTNode.java
+++ b/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/ASTNode.java
@@ -129,9 +129,11 @@
 		this.sourceEnd = end;
 	}
 
-	public abstract void traverse(ASTVisitor pVisitor) throws Exception;
+	public abstract void traverse(ASTVisitor visitor) throws Exception;
 
-	public abstract void printNode(CorePrinter output);
+	public void printNode(CorePrinter output) {
+		output.println ("This node("+ this.getClass() +") doesn't support printing\n" );
+	}
 	
 	protected ISourceRange getSourceRange () {
 		return new SourceRange(this.sourceStart(), this.sourceEnd() - this.sourceStart() + 1);
diff --git a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/ASTVisitor.java b/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/ASTVisitor.java
index 1891a5c..173a4ee 100644
--- a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/ASTVisitor.java
+++ b/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/ASTVisitor.java
@@ -67,4 +67,13 @@
 		return false;
 	}
 	
+	public boolean visit (ASTNode s) throws Exception {
+		return visitGeneral(s);		
+	}
+	
+	public boolean endvisit (ASTNode s) throws Exception {
+		endvisitGeneral(s);
+		return false;
+	}
+	
 }
diff --git a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/declarations/Argument.java b/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/declarations/Argument.java
index ec69c08..9d4f0a9 100644
--- a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/declarations/Argument.java
+++ b/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/declarations/Argument.java
@@ -4,23 +4,22 @@
 
 package org.eclipse.dltk.ast.declarations;
 
+import org.eclipse.dltk.ast.ASTNode;
 import org.eclipse.dltk.ast.ASTVisitor;
 import org.eclipse.dltk.ast.DLTKToken;
-import org.eclipse.dltk.ast.expressions.Expression;
 import org.eclipse.dltk.ast.references.SimpleReference;
-import org.eclipse.dltk.ast.statements.Statement;
 import org.eclipse.dltk.utils.CorePrinter;
 
 public class Argument extends Declaration {
 
-	protected Statement initialization;
+	protected ASTNode initialization;
 
-	public Argument(DLTKToken name, int start, int end, Expression init) {
+	public Argument(DLTKToken name, int start, int end, ASTNode init) {
 		super(name, start, end);
 		this.initialization = init;
 	}
 
-	public Argument(SimpleReference name, int start, Statement init, int mods) {
+	public Argument(SimpleReference name, int start, ASTNode init, int mods) {
 		super(start, 0);
 
 		if (name != null) {
@@ -34,7 +33,7 @@
 		}
 	}
 	
-	public Argument(SimpleReference name, int start, int end, Expression init, int mods) {
+	public Argument(SimpleReference name, int start, int end, ASTNode init, int mods) {
 		super(start, 0);
 
 		if (name != null) {
@@ -62,18 +61,18 @@
 	 * Please don't use this function. Helper method for initializing Argument
 	 * 
 	 */
-	public final void set(SimpleReference mn, Expression initialization) {
+	public final void set(SimpleReference mn, ASTNode initialization) {
 		this.initialization = initialization;
 		this.setName(mn.getName());
 		this.setStart(mn.sourceStart());
 		this.setEnd(mn.sourceEnd());
 	}
 
-	public final Statement getInitialization() {
+	public final ASTNode getInitialization() {
 		return initialization;
 	}
 
-	public final void setInitializationExpression(Expression initialization) {
+	public final void setInitializationExpression(ASTNode initialization) {
 		this.initialization = initialization;
 	}
 
diff --git a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/declarations/MethodDeclaration.java b/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/declarations/MethodDeclaration.java
index 30f4423..be2593e 100644
--- a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/declarations/MethodDeclaration.java
+++ b/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/declarations/MethodDeclaration.java
@@ -10,8 +10,8 @@
 
 import org.eclipse.dltk.ast.ASTVisitor;
 import org.eclipse.dltk.ast.DLTKToken;
+import org.eclipse.dltk.ast.ASTListNode;
 import org.eclipse.dltk.ast.statements.Block;
-import org.eclipse.dltk.ast.statements.CompoundStatement;
 import org.eclipse.dltk.internal.compiler.lookup.MethodScope;
 import org.eclipse.dltk.utils.CorePrinter;
 
@@ -106,9 +106,9 @@
 		acceptBody(block, true);
 	}
 	
-	public void setBody (CompoundStatement statement) {
+	public void setBody (ASTListNode statement) {
 		Block b = new Block (statement.sourceStart(), statement.sourceEnd());
-		b.acceptStatements(statement.getStatements());
+		b.acceptStatements(statement.getChilds());
 		acceptBody(b, true);
 	}
 
diff --git a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/declarations/TypeDeclaration.java b/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/declarations/TypeDeclaration.java
index ad313c3..7c704cd 100644
--- a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/declarations/TypeDeclaration.java
+++ b/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/declarations/TypeDeclaration.java
@@ -7,26 +7,21 @@
 import java.util.Iterator;
 import java.util.List;
 
+import org.eclipse.dltk.ast.ASTListNode;
 import org.eclipse.dltk.ast.ASTNode;
 import org.eclipse.dltk.ast.ASTVisitor;
 import org.eclipse.dltk.ast.DLTKToken;
 import org.eclipse.dltk.ast.Modifiers;
-import org.eclipse.dltk.ast.expressions.Expression;
-import org.eclipse.dltk.ast.expressions.ExpressionList;
-import org.eclipse.dltk.ast.references.ExtendedVariableReference;
+import org.eclipse.dltk.ast.references.Reference;
 import org.eclipse.dltk.ast.references.SimpleReference;
 import org.eclipse.dltk.ast.statements.Block;
-import org.eclipse.dltk.ast.statements.CompoundStatement;
-import org.eclipse.dltk.ast.statements.Statement;
 import org.eclipse.dltk.ast.utils.ASTUtil;
 import org.eclipse.dltk.utils.CorePrinter;
 
-
 /**
- * Used to represent types or classes. 
+ * Used to represent types or classes.
  */
-public class TypeDeclaration extends Declaration
-{
+public class TypeDeclaration extends Declaration {
 	/**
 	 * Body start position in associated file.
 	 */
@@ -48,133 +43,143 @@
 	protected int parentStart;
 
 	/**
-	 * List of all super classes. Expression may be complex such as templates or other constructions.
+	 * List of all super classes. Expression may be complex such as templates or
+	 * other constructions.
 	 */
-	protected CompoundStatement fSuperClasses;
-	
+	protected ASTListNode fSuperClasses;
+
 	/**
 	 * List of body statements.
 	 */
 	protected Block fBody;
-	
+
 	protected List fMethods;
-	
+
 	protected List fTypes;
-	
+
 	protected List fVariables;
-	
+
 	protected String enclosingTypeName;
-		
-	public TypeDeclaration( DLTKToken name, int start, int end ) {
 
-		super( name, start, end );
+	public TypeDeclaration(DLTKToken name, int start, int end) {
+
+		super(name, start, end);
 	}
-	
-	/**
-	 * Creates new type declaration from type name ANTLR token, start and end position.
-	 * @param name - type name ANTLR token.
-	 * @param start - type start position in associated file.
-	 * @param end - type end position in associated file.
-	 */
-	public TypeDeclaration( String name, int nameStart, int nameEnd, int start, int end ) {
 
-		super( start, end );
+	/**
+	 * Creates new type declaration from type name ANTLR token, start and end
+	 * position.
+	 * 
+	 * @param name -
+	 *            type name ANTLR token.
+	 * @param start -
+	 *            type start position in associated file.
+	 * @param end -
+	 *            type end position in associated file.
+	 */
+	public TypeDeclaration(String name, int nameStart, int nameEnd, int start,
+			int end) {
+
+		super(start, end);
 		setName(name);
 		setNameStart(nameStart);
 		setNameEnd(nameEnd);
 		this.enclosingTypeName = "";
-	}	
-	
+	}
+
 	public void setEnclosingTypeName(String name) {
-		if( name.startsWith("$")) {
+		if (name.startsWith("$")) {
 			name = name.substring(1);
 		}
 		if (name != null && name.length() > 0) {
 			this.enclosingTypeName = name;
 		}
 	}
-	
+
 	public String getEnclosingTypeName() {
 		return this.enclosingTypeName;
 	}
 
 	/**
 	 * Creates type declaration from name token.
-	 * @param name - name ANTRL token.
+	 * 
+	 * @param name -
+	 *            name ANTRL token.
 	 */
-	public TypeDeclaration( DLTKToken name ) {
+	public TypeDeclaration(DLTKToken name) {
 
-		super( );
-		this.setName( name.getText( ) );
-	}	
+		super();
+		this.setName(name.getText());
+	}
 
 	/**
-	 * Used to walk on tree.
-	 * traverse order:
-	 * superclasses,
-	 * body.
+	 * Used to walk on tree. traverse order: superclasses, body.
 	 */
-	public void traverse( ASTVisitor visitor ) throws Exception {
+	public void traverse(ASTVisitor visitor) throws Exception {
 
-		if( visitor.visit( this ) ) {
-			if( this.getSuperClasses() != null ) {
-				this.getSuperClasses().traverse( visitor );
+		if (visitor.visit(this)) {
+			if (this.getSuperClasses() != null) {
+				this.getSuperClasses().traverse(visitor);
 			}
-			if( this.fBody != null ) {
-				fBody.traverse( visitor );
+			if (this.fBody != null) {
+				fBody.traverse(visitor);
 			}
-			visitor.endvisit( this );
+			visitor.endvisit(this);
 		}
 	}
 
 	/**
 	 * Return list of superclass declaration expressions.
+	 * 
 	 * @return
 	 */
-	public CompoundStatement getSuperClasses( ) {
+	public ASTListNode getSuperClasses() {
 
 		return this.fSuperClasses;
 	}
 
 	/**
 	 * Set superclases expression list.
+	 * 
 	 * @param exprList
-	 */	
-	public void setSuperClasses( CompoundStatement exprList ) {
+	 */
+	public void setSuperClasses(ASTListNode exprList) {
 
 		this.fSuperClasses = exprList;
 	}
 
 	/**
-	 * Add superclass expression to list of superclasses.
-	 * List would be created if not yet.
+	 * Add superclass expression to list of superclasses. List would be created
+	 * if not yet.
+	 * 
 	 * @param expression
 	 */
-	public void addSuperClass( Statement expression ) {
+	public void addSuperClass(ASTNode expression) {
 
-		if( this.fSuperClasses == null ) {
-			this.fSuperClasses = new CompoundStatement( );
+		if (this.fSuperClasses == null) {
+			this.fSuperClasses = new ASTListNode();
 		}
 
-		this.fSuperClasses.addStatement( expression );
+		this.fSuperClasses.addNode(expression);
 
 	}
-	
+
 	/**
 	 * Return TypeDeclaration kind.
 	 */
-	
-	public int getKind( ) {
+
+	public int getKind() {
 
 		return D_CLASS;
 	}
-	
+
 	/**
 	 * Return body end position in associated file.
+	 * 
 	 * @return
 	 */
-	public int getBodyEnd( ) {		
-		if( getBody() != null ) {
+	public int getBodyEnd() {
+		if (getBody() != null) {
 			return getBody().sourceEnd();
 		}
 		return bodyEnd;
@@ -182,19 +187,21 @@
 
 	/**
 	 * Sets body end position in associated file.
+	 * 
 	 * @param bodyEnd
 	 */
-	protected void setBodyEnd( int bodyEnd ) {
+	protected void setBodyEnd(int bodyEnd) {
 
 		this.bodyEnd = bodyEnd;
 	}
 
 	/**
 	 * Return body start position in associated file.
+	 * 
 	 * @return
 	 */
-	public int getBodyStart( ) {
-		if( getBody() != null ) {
+	public int getBodyStart() {
+		if (getBody() != null) {
 			return getBody().sourceStart();
 		}
 		return bodyStart;
@@ -203,233 +210,223 @@
 	/**
 	 * Set body start position in associated file.
 	 */
-	protected void setBodyStart( int bodyStart ) {
+	protected void setBodyStart(int bodyStart) {
 
 		this.bodyStart = bodyStart;
 	}
 
 	/**
 	 * Use sourceEnd() instead.
+	 * 
 	 * @return
 	 * @deprecated
 	 */
-	
-	public int getDeclarationSourceEnd( ) {
+
+	public int getDeclarationSourceEnd() {
 
 		return this.sourceEnd();
 	}
 
 	/**
 	 * Use setEnd instead
+	 * 
 	 * @param declarationSourceEnd
 	 * @deprecated
 	 */
-	
-	protected void setDeclarationSourceEnd( int declarationSourceEnd ) {
-		this.setEnd(declarationSourceEnd);		
+
+	protected void setDeclarationSourceEnd(int declarationSourceEnd) {
+		this.setEnd(declarationSourceEnd);
 	}
 
 	/**
 	 * Use sourceStart instead.
+	 * 
 	 * @return
 	 * @deprecated
 	 */
-	
-	public int getDeclarationSourceStart( ) {
+
+	public int getDeclarationSourceStart() {
 
 		return this.sourceStart();
 	}
 
 	/**
 	 * Used setStart instead
+	 * 
 	 * @param declarationSourceStart
 	 * @deprecated
 	 */
-	
-	protected void setDeclarationSourceStart( int declarationSourceStart ) {
+
+	protected void setDeclarationSourceStart(int declarationSourceStart) {
 
 		this.setStart(declarationSourceStart);
 	}
 
 	/**
 	 * Return parents end position in associated file.
+	 * 
 	 * @return
 	 */
-	public int getParentEnd( ) {
+	public int getParentEnd() {
 
 		return parentEnd;
 	}
-	
+
 	/**
 	 * Sets parents end position in associated file.
+	 * 
 	 * @param parentEnd
 	 */
-	protected void setParentEnd( int parentEnd ) {
+	protected void setParentEnd(int parentEnd) {
 
 		this.parentEnd = parentEnd;
 	}
 
 	/**
 	 * Return parents start position in associated file.
+	 * 
 	 * @return
 	 */
-	public int getParentStart( ) {
+	public int getParentStart() {
 
 		return parentStart;
 	}
 
 	/**
 	 * Sets parents start position in associated file.
+	 * 
 	 * @param parentStart
 	 */
-	protected void setParentStart( int parentStart ) {
+	protected void setParentStart(int parentStart) {
 
 		this.parentStart = parentStart;
 	}
 
 	/**
 	 * Set inner statements.
+	 * 
 	 * @param body
 	 */
-	public void setBody( Block body ) {
+	public void setBody(Block body) {
 
 		this.fBody = body;
-		if( body != null ) {
+		if (body != null) {
 			this.bodyStart = body.sourceStart();
 			this.bodyEnd = body.sourceEnd();
-			//this.setEnd(body.sourceEnd()); //XXX: why?
+			// this.setEnd(body.sourceEnd()); //XXX: why?
 		}
 	}
+
 	public Block getBody() {
 		return this.fBody;
 	}
 
 	/**
 	 * Set inner statements with start and end position in associated file.
-	 * @param startBody - start position. 
-	 * @param body - inner statements.
-	 * @param endBody - end position.
+	 * 
+	 * @param startBody -
+	 *            start position.
+	 * @param body -
+	 *            inner statements.
+	 * @param endBody -
+	 *            end position.
 	 */
-	public void setBody( int startBody, Block body, int endBody ) {
+	public void setBody(int startBody, Block body, int endBody) {
 
-		this.setBody( body );
-		this.setBodyStart( startBody );
-		this.setBodyEnd( endBody );
+		this.setBody(body);
+		this.setBodyStart(startBody);
+		this.setBodyEnd(endBody);
 	}
-	
+
 	/**
-	 * Return super class names. 
+	 * Return super class names.
+	 * 
 	 * @return
 	 */
-	public List/*<String>*/ getSuperClassNames()
-	{
-		List/*< String >*/ names = new ArrayList/*< String >*/();		
-		if( this.fSuperClasses != null ) {
-			List/*< Expression >*/ superClasseExpressions = this.fSuperClasses.getStatements();
+	public List/* <String> */getSuperClassNames() {
+		List/* < String > */names = new ArrayList/* < String > */();
+		if (this.fSuperClasses != null) {
+			List/* < Expression > */superClasseExpressions = this.fSuperClasses
+					.getChilds();
 			Iterator i = superClasseExpressions.iterator();
-			while( i.hasNext() ) {
-				Expression expr = (Expression)i.next();
-				if( expr instanceof SimpleReference ) {
-					names.add( ((SimpleReference)expr ).getName() ); 
+			while (i.hasNext()) {
+				ASTNode expr = (ASTNode) i.next();
+				if (expr instanceof Reference) {
+					names.add(((SimpleReference) expr).getName());
 				}
-				else if( expr instanceof ExtendedVariableReference ) {
-					// TODO: Add correct solution here.
-					ExtendedVariableReference ref = (ExtendedVariableReference)expr; 
-					List/*< Expression >*/ exprs = ref.getExpressions();
-					boolean notAllSR = false;
-					Iterator j = exprs.iterator();
-					while( j.hasNext()) {
-						Expression ex = (Expression)j.next();
-						if( !( ex instanceof SimpleReference ) ) {
-							notAllSR = true;
-						}
-					}
-					if( notAllSR == false ) {
-						String name = "";
-						boolean bFirst = true;
-						Iterator j2 = exprs.iterator();
-						while( j2.hasNext()) {
-							Expression ex = (Expression)j2.next();
-							if( bFirst ) {
-								bFirst = false;
-							}
-							else {
-								name += ".";
-							}
-							name += ( (SimpleReference)ex ).getName();
-						}
-						names.add( ref.getStringRepresentation() );
-					}
-				}
+
 			}
 		}
 		return names;
 	}
 
 	/**
-	 * Testing purpose only.
-	 * Prints type and all inner statements to printer.
+	 * Testing purpose only. Prints type and all inner statements to printer.
 	 */
-	public void printNode( CorePrinter output ) {
+	public void printNode(CorePrinter output) {
 
-		output.formatPrintLn( "Type" + this.getSourceRange().toString()+ this.getNameSourceRange().toString() +":" );
-		String name = this.getName( );
-		if( name != null ) {
-			output.formatPrintLn( name );
+		output.formatPrintLn("Type" + this.getSourceRange().toString()
+				+ this.getNameSourceRange().toString() + ":");
+		String name = this.getName();
+		if (name != null) {
+			output.formatPrintLn(name);
 		}
-		if( this.fSuperClasses != null ) {
-			output.formatPrintLn( "(" );
-			this.fSuperClasses.printNode( output );
-			output.formatPrintLn( ")" );
+		if (this.fSuperClasses != null) {
+			output.formatPrintLn("(");
+			this.fSuperClasses.printNode(output);
+			output.formatPrintLn(")");
 		}
-		if( this.fBody != null ) {
-			this.fBody.printNode( output );
+		if (this.fBody != null) {
+			this.fBody.printNode(output);
 		}
-	}	
-	public MethodDeclaration[] getMethods() {
-		if( this.fMethods == null ) {
-			initInners();
-		}		
-		return ASTUtil.getMethods(this.getStatements(), this.fMethods );
 	}
-	
-	public TypeDeclaration[] getTypes() {
-		if( this.fTypes == null ) {
+
+	public MethodDeclaration[] getMethods() {
+		if (this.fMethods == null) {
 			initInners();
 		}
-		return ASTUtil.getTypes(this.getStatements(), this.fTypes );
-	}	
+		return ASTUtil.getMethods(this.getStatements(), this.fMethods);
+	}
+
+	public TypeDeclaration[] getTypes() {
+		if (this.fTypes == null) {
+			initInners();
+		}
+		return ASTUtil.getTypes(this.getStatements(), this.fTypes);
+	}
 
 	private void initInners() {
 		this.fMethods = new ArrayList();
 		this.fTypes = new ArrayList();
 		this.fVariables = new ArrayList();
 	}
+
 	public List getStatements() {
-		if( this.fBody == null ) {
+		if (this.fBody == null) {
 			this.fBody = new Block(this.sourceStart(), this.sourceEnd(), null);
-		}		
+		}
 		return this.fBody.getStatements();
 	}
 
-	public ASTNode[] getNonTypeOrMethodNode() {		
+	public ASTNode[] getNonTypeOrMethodNode() {
 		List statements = getStatements();
-		if( statements != null ) {
+		if (statements != null) {
 			Iterator i = statements.iterator();
 			List results = new ArrayList();
-			while( i.hasNext() ) {
-				ASTNode node = (ASTNode)i.next();
-				if( !(node instanceof TypeDeclaration) && !(node instanceof MethodDeclaration) ) {
+			while (i.hasNext()) {
+				ASTNode node = (ASTNode) i.next();
+				if (!(node instanceof TypeDeclaration)
+						&& !(node instanceof MethodDeclaration)) {
 					results.add(node);
 				}
 			}
-			return (ASTNode[])results.toArray(new ASTNode[results.size()]);
+			return (ASTNode[]) results.toArray(new ASTNode[results.size()]);
 		}
 		return null;
 	}
 
 	public FieldDeclaration[] getVariables() {
-		if( this.fVariables == null ) {
+		if (this.fVariables == null) {
 			initInners();
 		}
 		return ASTUtil.getVariables(this.getStatements(), this.fVariables);
@@ -441,7 +438,5 @@
 			prev += "(module)";
 		return prev;
 	}
-	
-	
-	
+
 }
diff --git a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/expressions/Assignment.java b/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/expressions/Assignment.java
deleted file mode 100644
index 9995933..0000000
--- a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/expressions/Assignment.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * (c) 2002, 2005 xored software and others all rights reserved. http://www.xored.com
- */
-package org.eclipse.dltk.ast.expressions;
-
-import org.eclipse.dltk.ast.statements.Statement;
-import org.eclipse.dltk.utils.CorePrinter;
-
-/**
- * Assignment expression used to hold a = b expressions.
- */
-public class Assignment extends BinaryExpression
-{
-	
-	public static final Assignment[] EMPTY_ARRAY = new Assignment[0];
-
-	/**
-	 * Construct from left, right and type expression. Used to construct NotStrictAssignment class.
-	 * 
-	 * @param left
-	 * @param type
-	 * @param right
-	 */
-	protected Assignment( Statement left, int type, Statement right ) {
-
-		super( left, type, right );
-	}
-
-	/**
-	 * Construct default strict assignment.
-	 * 
-	 * @param left
-	 * @param right
-	 */
-	public Assignment( Statement left, Statement right ) {
-
-		super( left, E_ASSIGN, right );
-	}
-
-	/**
-	 * Convert to string in pettern: "left = right"
-	 */
-	public String toString( ) {
-		return getLeft().toString( ) + '=' + getRight().toString( );
-	}
-
-	/**
-	 * Testing purposes only. Used to print expression.
-	 */
-	public void printNode( CorePrinter output ) {
-
-		if( getLeft() != null ) {
-			getLeft().printNode( output );
-		}
-		output.formatPrintLn( " = " );
-		if( getRight() != null ) {
-			getRight().printNode( output );
-		}
-	}
-}
diff --git a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/expressions/BinaryExpression.java b/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/expressions/BinaryExpression.java
deleted file mode 100644
index b7554ae..0000000
--- a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/expressions/BinaryExpression.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * (c) 2002, 2005 xored software and others all rights reserved. http://www.xored.com
- */
-package org.eclipse.dltk.ast.expressions;
-
-import org.eclipse.dltk.ast.ASTVisitor;
-import org.eclipse.dltk.ast.statements.Statement;
-import org.eclipse.dltk.utils.CorePrinter;
-
-/**
- * Base binary class for binary Expressions.
- */
-public class BinaryExpression extends Expression {
-	private Statement left;
-	private Statement right;
-	
-	protected int kind;
-
-	public BinaryExpression(Statement left, int kind, Statement right) {
-		if (left != null) {
-			this.setStart(left.sourceStart());
-		}
-
-		if (right != null) {
-			this.setEnd(right.sourceEnd());
-		}
-
-		this.kind = kind;
-		this.left = left;
-		this.right = right;
-	}
-
-	public Statement getLeft() {
-		return left;
-	}
-
-	public Statement getRight() {
-		return right;
-	}
-
-	public void traverse(ASTVisitor pVisitor) throws Exception {
-		if (pVisitor.visit(this)) {
-			if (left != null) {
-				left.traverse(pVisitor);
-			}
-
-			if (right != null) {
-				right.traverse(pVisitor);
-			}
-
-			pVisitor.endvisit(this);
-		}
-	}
-
-	public String toString() {
-		String out = "";
-		if (left != null) {
-			out += left.toString();
-		}
-
-		out += this.getOperator();
-		if (right != null) {
-			out += this.right.toString();
-		}
-
-		return out;
-	}
-
-	public int getKind() {
-		return kind;
-	}
-
-	public void printNode(CorePrinter output) {
-		if (this.left != null) {
-			this.left.printNode(output);
-		}
-
-		output.formatPrintLn(this.getOperator());
-
-		if (this.right != null) {
-			this.right.printNode(output);
-		}
-	}
-}
diff --git a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/expressions/CallArgumentsList.java b/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/expressions/CallArgumentsList.java
index 57421f2..1b00aab 100644
--- a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/expressions/CallArgumentsList.java
+++ b/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/expressions/CallArgumentsList.java
@@ -2,14 +2,17 @@
 
 import java.util.List;
 
-public class CallArgumentsList extends ExpressionList {
+import org.eclipse.dltk.ast.ASTNode;
+import org.eclipse.dltk.ast.ASTListNode;
+
+public class CallArgumentsList extends ASTListNode {
 	public static final CallArgumentsList EMPTY = new CallArgumentsList() {
 
-		public void addExpression(Expression ex) {
+		public void addNode(ASTNode s) {
 			throw new IllegalStateException("This object is unmodifiable");
 		}
 
-		public void setExpresssions(List exs) {
+		public void setChilds(List l) {
 			throw new IllegalStateException("This object is unmodifiable");
 		}
 
diff --git a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/expressions/CallExpression.java b/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/expressions/CallExpression.java
index 97a36c9..f01fa71 100644
--- a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/expressions/CallExpression.java
+++ b/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/expressions/CallExpression.java
@@ -1,16 +1,16 @@
 package org.eclipse.dltk.ast.expressions;
 
+import org.eclipse.dltk.ast.ASTNode;
 import org.eclipse.dltk.ast.ASTVisitor;
-import org.eclipse.dltk.ast.statements.Statement;
 import org.eclipse.dltk.utils.CorePrinter;
 
 public class CallExpression extends Expression {
-	private Statement receiver;
+	private ASTNode receiver;
 	private String name;
 	
 	private CallArgumentsList args;
 	
-	public CallExpression(int start, int end, Statement receiver, String name, CallArgumentsList args) {
+	public CallExpression(int start, int end, ASTNode receiver, String name, CallArgumentsList args) {
 		super(start, end);
 		if (name == null){
 			throw new IllegalArgumentException();
@@ -25,7 +25,7 @@
 		this.name = name;
 		this.args = args;
 	}
-	public CallExpression(Statement receiver, String name, CallArgumentsList args) {
+	public CallExpression(ASTNode receiver, String name, CallArgumentsList args) {
 		this(0, 0, receiver, name, args );
 	}
 
@@ -46,7 +46,7 @@
 		}
 	}
 	
-	public Statement getReceiver() {
+	public ASTNode getReceiver() {
 		return receiver;
 	}
 	
diff --git a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/expressions/EmptyExpression.java b/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/expressions/EmptyExpression.java
deleted file mode 100644
index c7f816a..0000000
--- a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/expressions/EmptyExpression.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package org.eclipse.dltk.ast.expressions;
-
-import org.eclipse.dltk.ast.ASTVisitor;
-
-/**
- * Empty Expression node. May be used as void return type.
- */
-public class EmptyExpression extends Expression {
-	public EmptyExpression() {
-	}
-
-	public int getKind() {
-		return E_EMPTY;
-	}
-
-	public void traverse(ASTVisitor pVisitor) throws Exception {
-		if (pVisitor.visit(this)) {
-			pVisitor.endvisit(this);
-		}
-	}
-}
diff --git a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/expressions/Expression.java b/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/expressions/Expression.java
index 93b5e3e..a699cda 100644
--- a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/expressions/Expression.java
+++ b/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/expressions/Expression.java
@@ -9,6 +9,7 @@
 
 /**
  * Base class for all expressions.
+ * 
  */
 public abstract class Expression extends Statement implements
 		ExpressionConstants {
diff --git a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/expressions/ExpressionList.java b/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/expressions/ExpressionList.java
index 05b1938..0d8f2af 100644
--- a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/expressions/ExpressionList.java
+++ b/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/expressions/ExpressionList.java
@@ -13,6 +13,7 @@
 
 /**
  * Holds list of expressions.
+ * @deprecated
  */
 public class ExpressionList extends Expression {
 	private List fExpressions = new ArrayList();
diff --git a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/expressions/InstanceOfExpression.java b/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/expressions/InstanceOfExpression.java
deleted file mode 100644
index e2fc4f3..0000000
--- a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/expressions/InstanceOfExpression.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * (c) 2002, 2005 xored software and others all rights reserved. http://www.xored.com
- */
-package org.eclipse.dltk.ast.expressions;
-
-/**
- * Instanceof expression.
- */
-public class InstanceOfExpression extends BinaryExpression {
-
-	/**
-	 * Constructs from expression of variable and expression of type.
-	 * 
-	 * @param variable
-	 * @param type
-	 */
-	public InstanceOfExpression(Expression variable, Expression type) {
-		super(variable, E_INSTANSEOF, type);
-	}
-}
diff --git a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/expressions/NotStrictAssignment.java b/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/expressions/NotStrictAssignment.java
deleted file mode 100644
index cf166a7..0000000
--- a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/expressions/NotStrictAssignment.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * (c) 2002, 2005 xored software and others all rights reserved. http://www.xored.com
- */
-package org.eclipse.dltk.ast.expressions;
-
-import org.eclipse.dltk.ast.statements.Statement;
-import org.eclipse.dltk.utils.CorePrinter;
-
-/**
- * NonStrict Assignment representation. Used to hold assignments such as +=, -=
- * etc.
- * 
- */
-public class NotStrictAssignment extends Assignment {
-
-	/**
-	 * Construct from Expression and expression type.
-	 * 
-	 * @param left -
-	 *            left expression.
-	 * @param type -
-	 *            expression type.
-	 * @param right -
-	 *            right expression.
-	 */
-	public NotStrictAssignment(Statement left, int type, Statement right) {
-		super(left, type, right);
-	}
-
-	/**
-	 * Testing purposes only. Used to print expression.
-	 */
-
-	public void printNode(CorePrinter output) {
-		if (getLeft() != null) {
-			getLeft().printNode(output);
-		}
-		output.formatPrintLn(this.getOperator());
-		if (getRight() != null) {
-			getRight().printNode(output);
-		}
-	}
-}
diff --git a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/expressions/ParenExpression.java b/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/expressions/ParenExpression.java
deleted file mode 100644
index d2b0913..0000000
--- a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/expressions/ParenExpression.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * (c) 2002, 2005 xored software and others all rights reserved. http://www.xored.com
- */
-package org.eclipse.dltk.ast.expressions;
-
-/**
- * ( x ) expression.
- */
-public class ParenExpression extends UnaryExpression {
-
-	/**
-	 * Construct from position bindings.
-	 * 
-	 * @param start -
-	 *            start position in associated file.
-	 * @param end -
-	 *            end position in associated file.
-	 * @param parenExpression
-	 */
-	public ParenExpression(int start, int end, Expression parenExpression) {
-		super(start, end, E_PAREN, parenExpression);
-	}
-}
diff --git a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/expressions/PrintExpression.java b/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/expressions/PrintExpression.java
deleted file mode 100644
index ddbf8fc..0000000
--- a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/expressions/PrintExpression.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * (c) 2002, 2005 xored software and others all rights reserved. http://www.xored.com
- */
-package org.eclipse.dltk.ast.expressions;
-
-import org.eclipse.dltk.ast.DLTKToken;
-import org.eclipse.dltk.ast.statements.Statement;
-import org.eclipse.dltk.utils.CorePrinter;
-
-/**
- * Print expression.
- */
-public class PrintExpression extends UnaryExpression {
-
-	/**
-	 * Construct from ANTLR token and right expression.
-	 * 
-	 * @param p
-	 * @param right
-	 */
-	public PrintExpression(DLTKToken p, Expression right) {
-		super(p, E_PRINT, right);
-
-		if (right != null) {
-			this.setEnd(right.sourceEnd());
-		}
-	}
-
-	/**
-	 * Testing purposes only. Print "print" expression.
-	 */
-	public void printNode(CorePrinter output) {
-		output.formatPrintLn("print ");
-		Statement expr = this.getExpression();
-		if (expr != null) {
-			expr.printNode(output);
-		}
-	}
-
-}
diff --git a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/expressions/SuperExpression.java b/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/expressions/SuperExpression.java
deleted file mode 100644
index d92bdcd..0000000
--- a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/expressions/SuperExpression.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package org.eclipse.dltk.ast.expressions;
-
-import org.eclipse.dltk.ast.ASTVisitor;
-
-public class SuperExpression extends Expression {
-
-	private CallArgumentsList args;
-
-	public SuperExpression(int start, int end, CallArgumentsList args) {
-		super(start, end);
-		this.args = args;
-	}
-
-	public CallArgumentsList getArgs() {
-		return args;
-	}
-
-	public void setArgs(CallArgumentsList args) {
-		this.args = args;
-	}
-
-	public int getKind() {
-		// TODO Auto-generated method stub
-		return 0;
-	}
-
-	public void traverse(ASTVisitor visitor) throws Exception {
-		if( visitor.visit( this ) ) {
-			if( args != null ) {
-				args.traverse( visitor );
-			}
-			
-			visitor.endvisit( this );
-		}
-	}
-
-}
diff --git a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/expressions/UnaryExpression.java b/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/expressions/UnaryExpression.java
deleted file mode 100644
index a8fbff2..0000000
--- a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/expressions/UnaryExpression.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * Created on 06.06.2004
- * 
- * TODO To change the template for this generated file go to Window - Preferences - Script - Code Style - Code Templates
- */
-package org.eclipse.dltk.ast.expressions;
-
-import org.eclipse.dltk.ast.ASTVisitor;
-import org.eclipse.dltk.ast.DLTKToken;
-import org.eclipse.dltk.ast.statements.Statement;
-import org.eclipse.dltk.utils.CorePrinter;
-
-/**
- * Unary expression.
- * 
- * Such as ++x, --x, +x, -x and other.
- * 
- */
-public class UnaryExpression extends Expression {
-
-	/**
-	 * Expression.
-	 */
-	protected Statement expression;
-
-	/**
-	 * Unary kind.
-	 */
-	protected int kind;
-
-	/**
-	 * Construct from position information, kind and expression.
-	 * 
-	 * @param start -
-	 *            start position.
-	 * @param end -
-	 *            end position.
-	 * @param knd -
-	 *            unary kind.
-	 * @see ExpressionConstants.
-	 * @param expression -
-	 *            expression.
-	 */
-	public UnaryExpression(int start, int end, int knd, Statement expression) {
-		super(start, end);
-		this.kind = knd;
-		this.expression = expression;
-	}
-
-	/**
-	 * Construct from ANTLR token, kind and expression.
-	 * 
-	 * @param t -
-	 *            ANTLR token.
-	 * @param knd -
-	 *            unary expression lind.
-	 * @see ExpresionConstants.
-	 * @param expression -
-	 *            expression.
-	 */
-	public UnaryExpression(DLTKToken t, int knd, Expression expression) {
-		super(t);
-		if (expression != null) {
-			this.setEnd(expression.sourceEnd());
-		}
-		this.kind = knd;
-		this.expression = expression;
-	}
-
-	/**
-	 * Traverse.
-	 */
-	public void traverse(ASTVisitor pVisitor) throws Exception {
-		if (pVisitor.visit(this)) {
-			if (expression != null) {
-				expression.traverse(pVisitor);
-			}
-			pVisitor.endvisit(this);
-		}
-	}
-
-	/**
-	 * Return unary expression kind.
-	 */
-
-	public int getKind() {
-		return kind;
-	}
-
-	/**
-	 * Return expression.
-	 * 
-	 * @return
-	 */
-	public Statement getExpression() {
-		return this.expression;
-	}
-
-	/**
-	 * Testing purposes only. Used to print unary expression.
-	 */
-	public void printNode(CorePrinter output) {
-		output.formatPrintLn(this.getOperator());
-		if (this.expression != null) {
-			this.expression.printNode(output);
-		}
-	}
-}
diff --git a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/expressions/UnaryNotExpression.java b/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/expressions/UnaryNotExpression.java
deleted file mode 100644
index bc37ccc..0000000
--- a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/expressions/UnaryNotExpression.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package org.eclipse.dltk.ast.expressions;
-
-public class UnaryNotExpression extends UnaryExpression {
-
-	public UnaryNotExpression(int start, int end, Expression expression) {
-		super(start, end, E_BNOT, expression);
-	}
-
-}
diff --git a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/references/CallHolder.java b/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/references/CallHolder.java
deleted file mode 100644
index 5530480..0000000
--- a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/references/CallHolder.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package org.eclipse.dltk.ast.references;
-
-import org.eclipse.dltk.ast.ASTVisitor;
-import org.eclipse.dltk.ast.expressions.Expression;
-import org.eclipse.dltk.utils.CorePrinter;
-
-/**
- * Holds call arguments. Used to ExtendedVariableReference holding.
- * 
- * @author haiodo
- * 
- */
-public class CallHolder extends Expression {
-	/**
-	 * Can be EmptyExpression if no arguments are specified. Overwise it
-	 * possible list of expressions, if only one argument too.
-	 */
-	private Expression fArguments = null;
-
-	public CallHolder(int start, int end, Expression arguments) {
-
-		super(start, end);
-		this.fArguments = arguments;
-	}
-
-	public int getKind() {
-		return Expression.E_CALL;
-	}
-
-	public void traverse(ASTVisitor pVisitor) throws Exception {
-		if (pVisitor.visit(this)) {
-			if (this.fArguments != null) {
-				this.fArguments.traverse(pVisitor);
-			}
-			pVisitor.endvisit(this);
-		}
-	}
-
-	public Expression getArguments() {
-		return fArguments;
-	}
-
-	public void printNode(CorePrinter output) {
-		output.formatPrintLn("( ");
-		if (this.fArguments != null) {
-			this.fArguments.printNode(output);
-		}
-		output.formatPrintLn(" )");
-	}
-}
diff --git a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/references/Curly.java b/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/references/Curly.java
deleted file mode 100644
index 42bb811..0000000
--- a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/references/Curly.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package org.eclipse.dltk.ast.references;
-
-import org.eclipse.dltk.ast.expressions.Expression;
-import org.eclipse.dltk.ast.expressions.UnaryExpression;
-import org.eclipse.dltk.utils.CorePrinter;
-
-/**
- * Curly expression.
- */
-public class Curly extends UnaryExpression {
-	/**
-	 * Construct curly.
-	 * 
-	 * @param start
-	 * @param end
-	 * @param e
-	 */
-	public Curly(int start, int end, Expression e) {
-		super(start, end, E_CURLY, e);
-	}
-
-	/**
-	 * Testing purposes only. Print curly with expression.
-	 */
-	public void printNode(CorePrinter output) {
-		output.formatPrintLn(" { ");
-		if (this.expression != null) {
-			this.expression.printNode(output);
-		}
-		output.formatPrintLn(" } ");
-	}
-}
diff --git a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/references/ExtendedVariableReference.java b/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/references/ExtendedVariableReference.java
deleted file mode 100644
index b08bcaf..0000000
--- a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/references/ExtendedVariableReference.java
+++ /dev/null
@@ -1,237 +0,0 @@
-/*
- * (c) 2002, 2005 xored software and others all rights reserved. http://www.xored.com
- */
-
-package org.eclipse.dltk.ast.references;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.dltk.ast.expressions.Expression;
-import org.eclipse.dltk.utils.CorePrinter;
-
-/**
- * Holds extended variables as list of VariableReference, CallHolder,
- * IndexHolder.. Example: 1) z.a.f() it is be: ( VariableReference,
- * VariableReference, VariableReference, CallHolder ) 2) a.f().q[2] it is be: (
- * VariableReference, VariableReference, CallHolder, VariableReference,
- * IndexHolder )
- */
-// TODO: May be needed add traverse for index and calls?
-public class ExtendedVariableReference extends Reference {
-	/**
-	 * List of expressions.
-	 */
-	private List fExpressions = new ArrayList();
-
-	/**
-	 * @param expr -
-	 *            logically expr should be instance of VariableReference.
-	 */
-	public ExtendedVariableReference(Expression expr) {
-		if (expr != null) {
-			this.addExpression(expr);
-			this.setStart(expr.sourceStart());
-			this.setEnd(expr.sourceEnd());
-		}
-	}
-
-	/**
-	 * Return Identifier Kind.
-	 */
-	public int getKind() {
-		return E_IDENTIFIER;
-	}
-
-	/**
-	 * Adding expression to extended variable. Use only in parsers then
-	 * construct.
-	 * 
-	 * @param expr
-	 */
-	public void addExpression(Expression expr) {
-		if (expr != null) {
-			this.fExpressions.add(expr);
-			if (expr.sourceEnd() > this.sourceEnd()) {
-				setEnd(expr.sourceEnd());
-			}
-		}
-	}
-
-	/**
-	 * Set Expressions. Use only in parsers then construct.
-	 * 
-	 * @param exprs
-	 */
-	public void setExpresssions(List exprs) {
-		this.fExpressions = exprs;
-	}
-
-	/**
-	 * Return expressions.
-	 * 
-	 * @return
-	 */
-	public List getExpressions() {
-		return this.fExpressions;
-	}
-
-	// Checkers
-
-	/**
-	 * tests for next element of index is call
-	 */
-	public boolean isCall(int index) {
-		List expressions = this.getExpressions();
-		if (expressions == null) {
-			return false;
-		}
-
-		if (index < expressions.size() - 1) {
-			Expression afterIndexExpression = (Expression) expressions
-					.get(index + 1);
-
-			if (afterIndexExpression instanceof CallHolder) {
-				return true;
-			}
-
-		}
-		return false;
-	}
-
-	/**
-	 * tests for next element of index is index
-	 */
-	public boolean isIndex(int index) {
-		List expressions = this.getExpressions();
-		if (expressions == null) {
-			return false;
-		}
-		if (index < expressions.size() - 1) {
-			Expression afterIndexExpression = (Expression) expressions
-					.get(index + 1);
-			if (afterIndexExpression instanceof IndexHolder) {
-				return true;
-			}
-
-		}
-		return false;
-	}
-
-	/**
-	 * tests for next element of index is dot
-	 */
-	public boolean isDot(int index) {
-		List expressions = this.getExpressions();
-		if (expressions == null) {
-			return false;
-		}
-		if (index < expressions.size() - 1) {
-			Expression afterIndexExpression = (Expression) expressions
-					.get(index + 1);
-			if (!(afterIndexExpression instanceof CallHolder)
-					&& !(afterIndexExpression instanceof IndexHolder)) {
-				return true;
-			}
-		}
-		return false;
-	}
-
-	/**
-	 * Used to get name of this variable from sub names.
-	 */
-
-	// TODO: FIX MY PERFOMANCE
-	public String getStringRepresentation() {
-		StringBuffer b = new StringBuffer();
-		Iterator i = this.fExpressions.iterator();
-		while (i.hasNext()) {
-			Expression e = (Expression) i.next();
-			switch (e.getKind()) {
-			case E_IDENTIFIER:
-				Reference s = (Reference) e;
-				b.append(s.getStringRepresentation());
-
-				// TODO: Add to check for next is CallHolder, or next in
-				// IndexHolder.
-				b.append('.');
-				break;
-			// assuming that such shit is not changing type;
-			// (often true)
-			case E_INDEX:
-				b.append("[]");
-				break;
-			case E_CALL:
-				b.append("()");
-				break;
-			case E_CURLY:
-				b.append("{}");
-				break;
-			}
-		}
-		return b.toString();
-	}
-
-	/**
-	 * Return i'th expression. No index checking.
-	 * 
-	 * @param i
-	 * @return expression on i' position.
-	 */
-	public Expression getExpression(int i) {
-		if (this.fExpressions != null) {
-			return (Expression) fExpressions.get(i);
-		}
-		return null;
-	}
-
-	/**
-	 * Return expressions count.
-	 * 
-	 * @return
-	 */
-	public int getExpressionCount() {
-		if (this.fExpressions != null) {
-			return fExpressions.size();
-		}
-		return 0;
-	}
-
-	/**
-	 * Return true then index == this.fExpressions.size() - 1
-	 * 
-	 * @param index
-	 * @return
-	 */
-	public boolean isLast(int index) {
-		if (this.fExpressions != null) {
-			return this.fExpressions.size() - 1 == index;
-		}
-		return false;
-	}
-
-	/**
-	 * Testing purposes only. Print extended variable.
-	 */
-	public void printNode(CorePrinter output) {
-		List expressions = this.getExpressions();
-		boolean bFirst = true;
-
-		if (expressions != null) {
-			Iterator i = expressions.iterator();
-			while (i.hasNext()) {
-				Expression expr = (Expression) i.next();
-				if (bFirst) {
-					bFirst = false;
-				} else {
-					if (!(expr instanceof CallHolder)
-							&& !(expr instanceof IndexHolder)) {
-						output.formatPrintLn(".");
-					}
-				}
-				expr.printNode(output);
-			}
-		}
-	}
-}
diff --git a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/references/IndexHolder.java b/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/references/IndexHolder.java
deleted file mode 100644
index b2ecff7..0000000
--- a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/references/IndexHolder.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package org.eclipse.dltk.ast.references;
-
-import org.eclipse.dltk.ast.ASTVisitor;
-import org.eclipse.dltk.ast.expressions.Expression;
-import org.eclipse.dltk.utils.CorePrinter;
-
-/**
- * Used to hold index expression in ExtendedVariables.
- * 
- * @author haiodo
- * 
- */
-public class IndexHolder extends Expression {
-	private Expression fIndex;
-
-	public IndexHolder(int start, int end, Expression indexExpression) {
-		super(start, end);
-		this.fIndex = indexExpression;
-	}
-
-	public int getKind() {
-		return Expression.E_INDEX;
-	}
-
-	public void traverse(ASTVisitor pVisitor) throws Exception {
-		if (pVisitor.visit(this)) {
-			if (this.fIndex != null) {
-				this.fIndex.traverse(pVisitor);
-			}
-			pVisitor.endvisit(this);
-		}
-	}
-
-	public void printNode(CorePrinter output) {
-		output.formatPrintLn("[");
-		if (this.fIndex != null) {
-			this.fIndex.printNode(output);
-		}
-		output.formatPrintLn("]");
-	}
-}
diff --git a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/statements/Block.java b/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/statements/Block.java
index 7ccf79a..909fed9 100644
--- a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/statements/Block.java
+++ b/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/statements/Block.java
@@ -4,6 +4,7 @@
 import java.util.Iterator;
 import java.util.List;
 
+import org.eclipse.dltk.ast.ASTNode;
 import org.eclipse.dltk.ast.ASTVisitor;
 import org.eclipse.dltk.ast.expressions.Expression;
 import org.eclipse.dltk.utils.CorePrinter;
@@ -30,7 +31,7 @@
 		if (visitor.visit(this)) {
 			Iterator it = statements.iterator();
 			while (it.hasNext()) {
-				((Statement) it.next()).traverse(visitor);
+				((ASTNode) it.next()).traverse(visitor);
 			}
 			visitor.endvisit(this);
 		}
@@ -52,7 +53,7 @@
 		return statements;
 	}
 
-	public void addStatement(Statement statem) {
+	public void addStatement(ASTNode statem) {
 		if (statem == null) {
 			throw new IllegalArgumentException();
 		}
@@ -64,7 +65,7 @@
 		output.indent();
 		Iterator it = statements.iterator();
 		while (it.hasNext()) {
-			((Statement) it.next()).printNode(output);
+			((ASTNode) it.next()).printNode(output);
 			output.formatPrint("");
 		}
 		output.formatPrint("");
diff --git a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/statements/BreakStatement.java b/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/statements/BreakStatement.java
deleted file mode 100644
index 323b438..0000000
--- a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/statements/BreakStatement.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package org.eclipse.dltk.ast.statements;
-
-import org.eclipse.dltk.ast.DLTKToken;
-import org.eclipse.dltk.ast.expressions.Expression;
-import org.eclipse.dltk.ast.references.SimpleReference;
-import org.eclipse.dltk.utils.CorePrinter;
-
-public class BreakStatement extends SimpleStatement {
-	public BreakStatement(DLTKToken breakToken, DLTKToken label, int end) {
-		super(breakToken.getColumn(), end, null);
-		if (label != null) {
-			this.fExpression = new SimpleReference(label);
-			this.setEnd(fExpression.sourceEnd());
-		}
-	}
-
-	public int getKind() {
-		return S_BREAK;
-	}
-
-	public void printNode(CorePrinter output) {
-		output.formatPrintLn("break ");
-
-		Expression expression = this.getExpression();
-		if (expression != null) {
-			expression.printNode(output);
-		}
-	}
-}
diff --git a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/statements/CaseStatement.java b/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/statements/CaseStatement.java
deleted file mode 100644
index 04f89e9..0000000
--- a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/statements/CaseStatement.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package org.eclipse.dltk.ast.statements;
-
-import org.eclipse.dltk.ast.DLTKToken;
-import org.eclipse.dltk.ast.expressions.Expression;
-import org.eclipse.dltk.utils.CorePrinter;
-
-/**
- * C like switch case conception. this is switch ( x ) { case A: case B: case C: }
- * only case and expression of case.
- */
-public class CaseStatement extends SimpleStatement {
-	public CaseStatement(DLTKToken caseToken, Expression caseExpression) {
-		super(caseToken, caseExpression);
-	}
-
-	public CaseStatement(DLTKToken defaultToken) {
-		super(defaultToken.getColumn(), defaultToken.getColumn()
-				+ defaultToken.getText().length(), null);
-	}
-
-	public int getKind() {
-		return S_CASE;
-	}
-
-	public void printNode(CorePrinter output) {
-		output.formatPrintLn("case: ");
-		output.indent();
-		Expression expression = this.getExpression();
-		if (expression != null) {
-			expression.printNode(output);
-		}
-		output.dedent();
-	}
-}
diff --git a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/statements/ClassicalForStatement.java b/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/statements/ClassicalForStatement.java
deleted file mode 100644
index 78acc9f..0000000
--- a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/statements/ClassicalForStatement.java
+++ /dev/null
@@ -1,110 +0,0 @@
-package org.eclipse.dltk.ast.statements;
-
-import org.eclipse.dltk.ast.ASTVisitor;
-import org.eclipse.dltk.ast.DLTKToken;
-import org.eclipse.dltk.ast.expressions.Expression;
-import org.eclipse.dltk.utils.CorePrinter;
-
-/**
- * For Statement.
- * @deprecated
- */
-public class ClassicalForStatement extends Statement {
-
-	private Expression fInitialization;
-
-	private Expression fCondition;
-
-	private Expression fIncrement;
-
-	private Statement fAction;
-
-	/**
-	 * Construct from dltk token, initialization, condition, increment
-	 * expressions and action statement
-	 * 
-	 * @param forToken -
-	 *            dltk token.
-	 * @param initialization -
-	 *            initialization expression.
-	 * @param condition -
-	 *            condition expression.
-	 * @param increment -
-	 *            increment expression.
-	 * @param action -
-	 *            action statement.
-	 */
-	public ClassicalForStatement(DLTKToken forToken, Expression initialization,
-			Expression condition, Expression increment, Statement action) {
-
-		this.fInitialization = initialization;
-		this.fCondition = condition;
-		this.fIncrement = increment;
-		this.fAction = action;
-		this.setStart(forToken.getColumn());
-		if (action != null) {
-			this.setEnd(action.sourceEnd());
-		}
-	}
-
-	public void traverse(ASTVisitor pVisitor) throws Exception {
-
-		if (pVisitor.visit(this)) {
-			if (fInitialization != null) {
-				fInitialization.traverse(pVisitor);
-			}
-			if (fCondition != null) {
-				fCondition.traverse(pVisitor);
-			}
-			if (fIncrement != null) {
-				fIncrement.traverse(pVisitor);
-			}
-			if (fAction != null) {
-				fAction.traverse(pVisitor);
-			}
-			pVisitor.endvisit(this);
-		}
-	}
-
-	public int getKind() {
-		return S_FOR;
-	}
-
-	public Statement getAction() {
-		return fAction;
-	}
-
-	public Expression getCondition() {
-		return fCondition;
-	}
-
-	public Expression getIncrement() {
-		return fIncrement;
-	}
-
-	public Expression getInitialization() {
-		return fInitialization;
-	}
-
-	public void printNode(CorePrinter output) {
-		output.formatPrintLn("for:");
-		if (this.fCondition != null) {
-			output.formatPrintLn("condition:");
-			this.fCondition.printNode(output);
-		}
-		if (this.fIncrement != null) {
-			output.formatPrintLn("increment:");
-			this.fIncrement.printNode(output);
-		}
-		if (this.fInitialization != null) {
-			output.formatPrintLn("initialization:");
-			this.fInitialization.printNode(output);
-		}
-		if (this.fAction != null) {
-			output.indent();
-			this.fAction.printNode(output);
-			output.dedent();
-		}
-
-	}
-}
diff --git a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/statements/CompoundStatement.java b/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/statements/CompoundStatement.java
deleted file mode 100644
index 4e353cc..0000000
--- a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/statements/CompoundStatement.java
+++ /dev/null
@@ -1,72 +0,0 @@
-package org.eclipse.dltk.ast.statements;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.dltk.ast.ASTVisitor;
-import org.eclipse.dltk.ast.expressions.Expression;
-import org.eclipse.dltk.utils.CorePrinter;
-
-public class CompoundStatement extends Statement {
-
-	private final List statements;
-
-	public CompoundStatement(int start, int end, List statements) {
-		super(start, end);
-		this.statements = statements;
-	}
-	
-	public CompoundStatement(int start, int end) {
-		super(start, end);
-		this.statements = new ArrayList();
-	}
-	
-	public CompoundStatement() {
-		super(0, -1);
-		this.statements = new ArrayList ();
-	}
-
-	public void addStatement(Statement s) {
-		if (s != null) {
-			statements.add(s);
-		}
-	}
-	
-	public void addExpression(Expression ex) {
-		if (ex != null) {
-			statements.add(ex);
-		}
-	}
-
-	public List getStatements() {
-		return statements;
-	}
-	
-	public void setStatements(List l) {
-		this.statements.clear();
-		this.statements.addAll(l);
-	}
-
-	public int getKind() {
-		// TODO Auto-generated method stub
-		return 0;
-	}
-
-	public void printNode(CorePrinter output) {
-		// TODO Auto-generated method stub
-	}
-
-	public void traverse(ASTVisitor visitor) throws Exception {
-		if (visitor.visit(this)) {
-			if (statements != null) {
-				for (Iterator iter = statements.iterator(); iter.hasNext();) {
-					Statement s = (Statement) iter.next();
-					s.traverse(visitor);				
-				}
-			}
-			visitor.endvisit(this);
-		}
-	}
-
-}
diff --git a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/statements/ContinueStatement.java b/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/statements/ContinueStatement.java
deleted file mode 100644
index 4e9a102..0000000
--- a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/statements/ContinueStatement.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package org.eclipse.dltk.ast.statements;
-
-import org.eclipse.dltk.ast.DLTKToken;
-import org.eclipse.dltk.ast.expressions.Expression;
-import org.eclipse.dltk.ast.references.SimpleReference;
-import org.eclipse.dltk.utils.CorePrinter;
-
-public class ContinueStatement extends SimpleStatement {
-
-	public ContinueStatement(DLTKToken continueToken, DLTKToken labelToken,
-			int end) {
-		super(continueToken.getColumn(), end, null);
-		if (labelToken != null) {
-			this.fExpression = new SimpleReference(labelToken);
-			this.setEnd(fExpression.sourceEnd());
-		}
-	}
-
-	public int getKind() {
-		return S_CONTINUE;
-	}
-
-	public void printNode(CorePrinter output) {
-		output.formatPrintLn("continue ");
-
-		Expression expression = this.getExpression();
-		if (expression != null) {
-			expression.printNode(output);
-		}
-	}
-}
diff --git a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/statements/DoWhileStatement.java b/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/statements/DoWhileStatement.java
deleted file mode 100644
index b167ea7..0000000
--- a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/statements/DoWhileStatement.java
+++ /dev/null
@@ -1,104 +0,0 @@
-package org.eclipse.dltk.ast.statements;
-
-import org.eclipse.dltk.ast.ASTVisitor;
-import org.eclipse.dltk.ast.DLTKToken;
-import org.eclipse.dltk.ast.expressions.Expression;
-import org.eclipse.dltk.utils.CorePrinter;
-
-/**
- * Do while statement.
- * 
- * 
- */
-public class DoWhileStatement extends Statement {
-
-	/**
-	 * while condition.
-	 */
-	private Expression fCondition;
-
-	/**
-	 * Action Statement.
-	 */
-	private Statement fAction;
-
-	/**
-	 * Construct Do While statement from doToken, action, condition and final
-	 * position.
-	 * 
-	 * @param doToken -
-	 *            do ANTLR token.
-	 * @param action -
-	 *            action.
-	 * @param condition -
-	 *            condition.
-	 * @param endPosition -
-	 *            end position.
-	 */
-	public DoWhileStatement(DLTKToken doToken, Statement action,
-			Expression condition, int endPosition) {
-		super(doToken.getColumn(), endPosition);
-		this.fAction = action;
-		this.fCondition = condition;
-	}
-
-	/**
-	 * Traverse
-	 */
-	public void traverse(ASTVisitor pVisitor) throws Exception {
-		if (pVisitor.visit(this)) {
-			if (fAction != null) {
-				fAction.traverse(pVisitor);
-			}
-			if (fCondition != null) {
-				fCondition.traverse(pVisitor);
-			}
-
-			pVisitor.endvisit(this);
-		}
-	}
-
-	/**
-	 * Return Do While Kind.
-	 */
-
-	public int getKind() {
-		return S_DOWHILE;
-	}
-
-	/**
-	 * return Action.
-	 * 
-	 * @return - action statement.
-	 */
-	public Statement getAction() {
-		return fAction;
-	}
-
-	/**
-	 * Return condition.
-	 * 
-	 * @return - condition expression.
-	 */
-	public Expression getCondition() {
-		return fCondition;
-	}
-
-	/**
-	 * Testing purpose only. Print do while expression.
-	 */
-
-	public void printNode(CorePrinter output) {
-		output.formatPrintLn("do:");
-		output.indent();
-
-		if (this.fAction != null) {
-			this.fAction.printNode(output);
-		}
-		output.dedent();
-		if (fCondition != null) {
-			output.formatPrintLn("while: ");
-			this.fCondition.printNode(output);
-		}
-	}
-}
diff --git a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/statements/EmptyStatement.java b/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/statements/EmptyStatement.java
deleted file mode 100644
index 378ee6e..0000000
--- a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/statements/EmptyStatement.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package org.eclipse.dltk.ast.statements;
-
-import org.eclipse.dltk.ast.ASTVisitor;
-import org.eclipse.dltk.ast.DLTKToken;
-import org.eclipse.dltk.utils.CorePrinter;
-
-/**
- * Empty Statement.
- * 
- */
-public class EmptyStatement extends Statement {
-
-	public EmptyStatement(int start, int end) {
-		super(start, end);
-	}
-
-	public EmptyStatement(DLTKToken token) {
-		super(token);
-	}
-
-	public int getKind() {
-		return S_EMPTY;
-	}
-
-	public void traverse(ASTVisitor pVisitor) throws Exception {
-		if (pVisitor.visit(this)) {
-			pVisitor.endvisit(this);
-		}
-	}
-
-	public void printNode(CorePrinter output) {
-	}
-}
diff --git a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/statements/ForEachStatement.java b/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/statements/ForEachStatement.java
deleted file mode 100644
index c80920d..0000000
--- a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/statements/ForEachStatement.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package org.eclipse.dltk.ast.statements;
-
-import org.eclipse.dltk.ast.DLTKToken;
-import org.eclipse.dltk.ast.expressions.Expression;
-import org.eclipse.dltk.utils.CorePrinter;
-
-/**
- * For each statement.
- * 
- */
-public class ForEachStatement extends ClassicalForStatement {
-
-	/**
-	 * Construct foreach from ANTLR token, initialization, condition, increment
-	 * expressions and action statement. foreach( A, C, I ) { Action. }
-	 * 
-	 * @param forToken -
-	 *            ANTLR token.
-	 * @param initialization -
-	 *            initalization expression.
-	 * @param condition -
-	 *            condition expression.
-	 * @param increment -
-	 *            increment expression.
-	 * @param action -
-	 *            action statement.
-	 */
-	public ForEachStatement(DLTKToken forToken, Expression initialization,
-			Expression condition, Expression increment, Statement action) {
-		super(forToken, initialization, condition, increment, action);
-	}
-
-	/**
-	 * Testing purposes only. Print foreach statement.
-	 */
-	public void printNode(CorePrinter output) {
-		output.formatPrintLn("foreach: ");
-
-		Expression condition = this.getCondition();
-		Expression increment = this.getIncrement();
-		Expression intialization = this.getInitialization();
-		Statement action = this.getAction();
-
-		if (condition != null) {
-			output.formatPrintLn("condition:");
-			condition.printNode(output);
-		}
-		if (increment != null) {
-			output.formatPrintLn("increment:");
-			increment.printNode(output);
-		}
-		if (intialization != null) {
-			output.formatPrintLn("initialization:");
-			intialization.printNode(output);
-		}
-		if (action != null) {
-			output.indent();
-			action.printNode(output);
-			output.dedent();
-		}
-	}
-}
diff --git a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/statements/ForStatement.java b/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/statements/ForStatement.java
deleted file mode 100644
index 3705fbb..0000000
--- a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/statements/ForStatement.java
+++ /dev/null
@@ -1,104 +0,0 @@
-package org.eclipse.dltk.ast.statements;
-
-import org.eclipse.dltk.ast.ASTVisitor;
-import org.eclipse.dltk.ast.expressions.ExpressionList;
-import org.eclipse.dltk.utils.CorePrinter;
-
-/**
- * For Statement.
- *  for <target> in <list> do 
- *  	<action>
- *  end
- */
-public class ForStatement extends Statement {
-
-	private Statement fTarget;
-	private ExpressionList fList;
-	private Statement fAction;
-	
-	
-	public ForStatement(int start, int end, Statement target,
-			ExpressionList list, Statement action) {
-		super(start, end);
-		fTarget = target;
-		fList = list;
-		fAction = action;
-	}
-	
-	
-
-	public ForStatement(int start, int end) {
-		super(start, end);
-	}
-
-
-
-	public void setTarget(Statement target) {
-		fTarget = target;
-	}
-
-
-
-	public void setList(ExpressionList list) {
-		fList = list;
-	}
-
-
-
-	public void setAction(Statement action) {
-		fAction = action;
-	}
-
-
-
-	public void traverse(ASTVisitor pVisitor) throws Exception {
-
-		if (pVisitor.visit(this)) {
-			if (fTarget != null) {
-				fTarget.traverse(pVisitor);
-			}
-			if (fList != null) {
-				fList.traverse(pVisitor);
-			}			
-			if (fAction != null) {
-				fAction.traverse(pVisitor);
-			}
-			pVisitor.endvisit(this);
-		}
-	}
-
-	public int getKind() {
-		return S_FOR;
-	}
-
-	public Statement getAction() {
-		return fAction;
-	}
-
-	
-	public Statement getTarget() {
-		return fTarget;
-	}
-
-	public ExpressionList getList() {
-		return fList;
-	}
-
-	public void printNode(CorePrinter output) {
-		output.formatPrintLn("for:");
-		if (this.fTarget != null) {
-			output.formatPrintLn("target:");
-			this.fTarget.printNode(output);
-		}
-		if (this.fList != null) {
-			output.formatPrintLn("list:");
-			this.fList.printNode(output);
-		}
-		if (this.fAction != null) {
-			output.indent();
-			this.fAction.printNode(output);
-			output.dedent();
-		}
-
-	}
-}
diff --git a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/statements/IfStatement.java b/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/statements/IfStatement.java
deleted file mode 100644
index 8518e0b..0000000
--- a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/statements/IfStatement.java
+++ /dev/null
@@ -1,123 +0,0 @@
-package org.eclipse.dltk.ast.statements;
-
-import org.eclipse.dltk.ast.ASTVisitor;
-import org.eclipse.dltk.ast.DLTKToken;
-import org.eclipse.dltk.utils.CorePrinter;
-
-/**
- * If statement.
- */
-public class IfStatement extends Statement {
-	/**
-	 * Condition expression.
-	 */
-	private Statement fCondition;
-
-	/**
-	 * Then statement of if.
-	 */
-	private Statement fThenStatement;
-
-	/**
-	 * Else statement of if. Can be null, or possible EmptyStatement..
-	 */
-	private Statement fElseStatement;
-
-	public IfStatement(DLTKToken ifToken, Statement condition,
-			Statement thenStatement) {
-
-		super(ifToken);
-		this.fCondition = condition;
-		this.fThenStatement = thenStatement;
-	}
-	
-	public IfStatement(Statement condition, Statement thenStatement, Statement elseStatement) {
-		this.fCondition = condition;
-		this.fThenStatement = thenStatement;
-		this.fElseStatement = elseStatement;
-	}
-
-	public void traverse(ASTVisitor pVisitor) throws Exception {
-
-		if (pVisitor.visit(this)) {
-			if (fCondition != null) {
-				fCondition.traverse(pVisitor);
-			}
-			if (fThenStatement != null) {
-				fThenStatement.traverse(pVisitor);
-			}
-			if (fElseStatement != null) {
-				fElseStatement.traverse(pVisitor);
-			}
-			pVisitor.endvisit(this);
-		}
-	}
-
-	public int getKind() {
-		return S_IF;
-	}
-
-	// TODO: Replace to acceptElse for similarity.
-	/**
-	 * @deprecated
-	 */
-	public void setElse(Statement elses) {
-		this.acceptElse(elses);
-	}
-
-	/**
-	 * Acccept Else statement.
-	 * 
-	 * @param elseStatement
-	 */
-	public void acceptElse(Statement elseStatement) {
-		this.fElseStatement = elseStatement;
-		if (this.fElseStatement != null) {
-			this.setEnd(this.fElseStatement.sourceEnd());
-		}
-	}
-
-	/**
-	 * Return else statement.
-	 * 
-	 * @return - else statement. Be aware can be null.
-	 */
-	public Statement getElse() {
-		return fElseStatement;
-	}
-
-	public Statement getThen() {
-		return fThenStatement;
-	}
-
-	public Statement getCondition() {
-		return this.fCondition;
-	}
-
-	public void printNode(CorePrinter output) {
-		output.formatPrintLn("if: ");
-		if (this.fCondition != null) {
-			this.fCondition.printNode(output);
-		}
-		if (this.fThenStatement != null) {
-			if (!(this.fThenStatement instanceof Block)) {
-				output.indent();
-			}
-			this.fThenStatement.printNode(output);
-			if (!(this.fThenStatement instanceof Block)) {
-				output.dedent();
-			}
-		}
-		if (this.fElseStatement != null) {
-			output.formatPrintLn("else:");
-			if (!(this.fElseStatement instanceof Block)) {
-				output.indent();
-			}
-			this.fElseStatement.printNode(output);
-			if (!(this.fElseStatement instanceof Block)) {
-				output.dedent();
-			}
-		}
-
-	}
-}
diff --git a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/statements/ReturnStatement.java b/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/statements/ReturnStatement.java
deleted file mode 100644
index ed10ffc..0000000
--- a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/statements/ReturnStatement.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package org.eclipse.dltk.ast.statements;
-
-import org.eclipse.dltk.ast.DLTKToken;
-import org.eclipse.dltk.ast.expressions.Expression;
-import org.eclipse.dltk.utils.CorePrinter;
-
-/**
- * Return statement.
- */
-public class ReturnStatement extends SimpleStatement {
-	public ReturnStatement(DLTKToken rt, Expression exp, int end) {
-		super(rt.getColumn(), end, exp);
-	}
-
-	
-
-	public int getKind() {
-		return S_RETURN;
-	}
-
-	public void printNode(CorePrinter output) {
-		output.formatPrintLn("return ");
-
-		Expression expression = this.getExpression();
-		if (expression != null) {
-			expression.printNode(output);
-		}
-	}
-}
diff --git a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/statements/SimpleStatement.java b/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/statements/SimpleStatement.java
deleted file mode 100644
index 0efff5a..0000000
--- a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/statements/SimpleStatement.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package org.eclipse.dltk.ast.statements;
-
-import org.eclipse.dltk.ast.ASTVisitor;
-import org.eclipse.dltk.ast.DLTKToken;
-import org.eclipse.dltk.ast.expressions.Expression;
-
-/**
- * Abstract superclass for all simple statement;
- */
-public abstract class SimpleStatement extends Statement {
-
-	protected Expression fExpression;
-
-	protected SimpleStatement(int start, int end, Expression expression) {
-		super(start, end);
-		this.fExpression = expression;
-	}
-
-	public SimpleStatement(DLTKToken token, Expression expression) {
-		super(token);
-		this.fExpression = expression;
-	}
-
-	public void traverse(ASTVisitor pVisitor) throws Exception {
-		if (pVisitor.visit(this)) {
-			if (fExpression != null) {
-				fExpression.traverse(pVisitor);
-			}
-			pVisitor.endvisit(this);
-		}
-	}
-
-	public Expression getExpression() {
-		return fExpression;
-	}
-}
diff --git a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/statements/Statement.java b/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/statements/Statement.java
index f1705d5..08e8e7d 100644
--- a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/statements/Statement.java
+++ b/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/statements/Statement.java
@@ -5,6 +5,7 @@
 
 /**
  * Base class for all statements.
+ * 
  */
 public abstract class Statement extends ASTNode implements StatementConstants {
 	protected Statement(int start, int end) {
diff --git a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/statements/SwitchStatement.java b/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/statements/SwitchStatement.java
deleted file mode 100644
index e778222..0000000
--- a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/statements/SwitchStatement.java
+++ /dev/null
@@ -1,122 +0,0 @@
-package org.eclipse.dltk.ast.statements;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.dltk.ast.ASTVisitor;
-import org.eclipse.dltk.ast.DLTKToken;
-import org.eclipse.dltk.ast.expressions.Expression;
-import org.eclipse.dltk.utils.CorePrinter;
-
-/**
- * Switch statement.
- */
-/*
- * TODO: Concept need be fixed. Where are statements?
- * 
- * 
- * Where echo is holding in this model?
- */
-public class SwitchStatement extends Statement {
-	/**
-	 * expression.
-	 */
-	private Expression fExpression;
-
-	/**
-	 * List of statements.
-	 */
-	private ArrayList fStatements = new ArrayList();
-
-	/**
-	 * Construct from ANTLR token for position binsings and expression.
-	 * 
-	 * @param switchToken
-	 * @param exp
-	 */
-	public SwitchStatement(DLTKToken switchToken, Expression exp) {
-
-		super(switchToken.getColumn(), -1);
-		this.fExpression = exp;
-		if (this.fExpression != null) {
-			this.setEnd(this.fExpression.sourceEnd());
-		}
-	}
-
-	/**
-	 * Traverse.
-	 */
-	public void traverse(ASTVisitor pVisitor) throws Exception {
-
-		if (pVisitor.visit(this)) {
-
-			if (fExpression != null) {
-				fExpression.traverse(pVisitor);
-			}
-			if (this.fStatements != null) {
-				Iterator i = this.fStatements.iterator();
-				while (i.hasNext()) {
-					Statement statement = (Statement) i.next();
-					statement.traverse(pVisitor);
-				}
-			}
-			pVisitor.endvisit(this);
-		}
-
-	}
-
-	/**
-	 * Return switch Kind.
-	 */
-
-	public int getKind() {
-		return S_SWITCH;
-	}
-
-	/**
-	 * Accept case statements group.
-	 */
-	public void acceptGroup(List l) {
-
-		fStatements.addAll(l);
-	}
-
-	/**
-	 * Return expression.
-	 * 
-	 * @return
-	 */
-	public Expression getExpression() {
-		return fExpression;
-	}
-
-	/**
-	 * Return list of case statements.
-	 * 
-	 * @return
-	 */
-	public List getStatements() {
-		return fStatements;
-	}
-
-	/**
-	 * Testing purpose only. Print switch statement.
-	 */
-	public void printNode(CorePrinter output) {
-		output.formatPrintLn("switch:");
-		if (this.fExpression != null) {
-			this.fExpression.printNode(output);
-		}
-		if (this.fStatements != null) {
-			output.indent();
-			Iterator i = this.fStatements.iterator();
-			while (i.hasNext()) {
-				Statement statement = (Statement) i.next();
-				statement.printNode(output);
-				output.formatPrint("");
-			}
-			output.dedent();
-		}
-	}
-}
diff --git a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/statements/ThrowStatement.java b/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/statements/ThrowStatement.java
deleted file mode 100644
index b1a2eba..0000000
--- a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/statements/ThrowStatement.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package org.eclipse.dltk.ast.statements;
-
-import org.eclipse.dltk.ast.DLTKToken;
-import org.eclipse.dltk.ast.expressions.Expression;
-import org.eclipse.dltk.utils.CorePrinter;
-
-/**
- * Throw statement. Exception throwing.
- */
-public class ThrowStatement extends SimpleStatement {
-	public ThrowStatement(DLTKToken throwToken, Expression expression) {
-		super(throwToken.getColumn(), -1, expression);
-		if (expression != null) {
-			this.setEnd(expression.sourceEnd());
-		}
-	}
-
-	public int getKind() {
-		return S_THROW;
-	}
-
-	public void printNode(CorePrinter output) {
-		output.formatPrintLn("throw: ");
-		Expression expression = this.getExpression();
-		if (expression != null) {
-			expression.printNode(output);
-		}
-	}
-}
diff --git a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/statements/TryCatchStatement.java b/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/statements/TryCatchStatement.java
deleted file mode 100644
index dab9443..0000000
--- a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/statements/TryCatchStatement.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package org.eclipse.dltk.ast.statements;
-
-import org.eclipse.dltk.ast.ASTVisitor;
-import org.eclipse.dltk.ast.DLTKToken;
-import org.eclipse.dltk.ast.expressions.Expression;
-import org.eclipse.dltk.utils.CorePrinter;
-
-/**
- * Try catch statement.
- */
-public class TryCatchStatement extends Statement {
-	private Block fBody;
-
-	private Expression fExpression;
-
-	public TryCatchStatement(DLTKToken catchToken,
-			Expression exceptionExpression, Block body) {
-		super(catchToken);
-		this.fExpression = exceptionExpression;
-		this.fBody = body;
-	}
-
-	public int getKind() {
-		return Statement.S_TRY_CATCH;
-	}
-
-	public void traverse(ASTVisitor pVisitor) throws Exception {
-		if (pVisitor.visit(this)) {
-			if (this.fExpression != null) {
-				this.fExpression.traverse(pVisitor);
-			}
-			if (this.fBody != null) {
-				this.fBody.traverse(pVisitor);
-			}
-			pVisitor.endvisit(this);
-		}
-	}
-
-	public Expression getExpression() {
-		return this.fExpression;
-	}
-
-	public Block getBody() {
-		return this.fBody;
-	}
-
-	public void printNode(CorePrinter output) {
-		output.formatPrintLn("catch:");
-		if (this.fExpression != null) {
-			this.fExpression.printNode(output);
-		}
-		if (this.fBody != null) {
-			this.fBody.printNode(output);
-		}
-	}
-}
diff --git a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/statements/TryFinallyStatement.java b/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/statements/TryFinallyStatement.java
deleted file mode 100644
index dd38623..0000000
--- a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/statements/TryFinallyStatement.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package org.eclipse.dltk.ast.statements;
-
-import org.eclipse.dltk.ast.ASTVisitor;
-import org.eclipse.dltk.ast.DLTKToken;
-import org.eclipse.dltk.utils.CorePrinter;
-
-/**
- * Try Finally statement.
- */
-public class TryFinallyStatement extends Statement {
-	private Block fBody;
-
-	public TryFinallyStatement(DLTKToken token, Block body) {
-		super(token);
-		this.fBody = body;
-	}
-
-	public int getKind() {
-		return Statement.S_TRY_FINALLY;
-	}
-
-	public void traverse(ASTVisitor pVisitor) throws Exception {
-		if (pVisitor.visit(this)) {
-			if (this.fBody != null) {
-				this.fBody.traverse(pVisitor);
-			}
-			pVisitor.endvisit(this);
-		}
-
-	}
-
-	public void printNode(CorePrinter output) {
-		output.formatPrintLn("finally:");
-		if (this.fBody != null) {
-			this.fBody.printNode(output);
-		}
-	}
-}
diff --git a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/statements/TryStatement.java b/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/statements/TryStatement.java
deleted file mode 100644
index 5dc179b..0000000
--- a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/statements/TryStatement.java
+++ /dev/null
@@ -1,71 +0,0 @@
-package org.eclipse.dltk.ast.statements;
-
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.dltk.ast.ASTVisitor;
-import org.eclipse.dltk.ast.DLTKToken;
-import org.eclipse.dltk.utils.CorePrinter;
-
-/**
- * Try statement.
- */
-public class TryStatement extends Statement {
-	private Block body;
-
-	private List catchFinallyStatements;
-
-	protected TryStatement(int start, int end) {
-		super(start, end);
-	}
-
-	public TryStatement(DLTKToken tryToken, Block body, List catchFin) {
-
-		super(tryToken);
-		this.body = body;
-		this.catchFinallyStatements = catchFin;
-	}
-
-	public void traverse(ASTVisitor pVisitor) throws Exception {
-		if (pVisitor.visit(this)) {
-			if (this.body != null) {
-				this.body.traverse(pVisitor);
-			}
-			if (this.catchFinallyStatements != null) {
-				Iterator i = this.catchFinallyStatements.iterator();
-				while (i.hasNext()) {
-					Statement st = (Statement) i.next();
-					st.traverse(pVisitor);
-				}
-			}
-			pVisitor.endvisit(this);
-		}
-	}
-
-	public int getKind() {
-		return S_TRY;
-	}
-
-	public Block getBody() {
-		return body;
-	}
-
-	public List getCatchFinallyStatements() {
-		return catchFinallyStatements;
-	}
-
-	public void printNode(CorePrinter output) {
-		output.formatPrint("try:");
-		if (this.body != null) {
-			this.body.printNode(output);
-		}
-		if (this.catchFinallyStatements != null) {
-			Iterator i = this.catchFinallyStatements.iterator();
-			while (i.hasNext()) {
-				Statement st = (Statement) i.next();
-				st.printNode(output);
-				output.println("");
-			}
-		}
-	}
-}
diff --git a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/statements/UntilStatement.java b/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/statements/UntilStatement.java
deleted file mode 100644
index e38d1a8..0000000
--- a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/statements/UntilStatement.java
+++ /dev/null
@@ -1,67 +0,0 @@
-package org.eclipse.dltk.ast.statements;
-
-import org.eclipse.dltk.ast.ASTVisitor;
-import org.eclipse.dltk.ast.DLTKToken;
-import org.eclipse.dltk.ast.expressions.Expression;
-import org.eclipse.dltk.utils.CorePrinter;
-
-/**
- * While statement.
- */
-public class UntilStatement extends Statement {
-	private Statement fCondition;
-	private Statement fAction;
-
-	public UntilStatement(DLTKToken token) {
-		super(token);
-	}
-
-	public UntilStatement(DLTKToken whileToken, Expression condition,
-			Statement action) {
-		this.setStart(whileToken.getColumn());
-		this.fCondition = condition;
-		this.fAction = action;
-	}
-	
-	public UntilStatement(Statement condition, Statement action) {
-		this.fCondition = condition;
-		this.fAction = action;
-	}
-
-	public void traverse(ASTVisitor pVisitor) throws Exception {
-		if (pVisitor.visit(this)) {
-			if (fCondition != null) {
-				fCondition.traverse(pVisitor);
-			}
-			if (fAction != null) {
-				fAction.traverse(pVisitor);
-			}
-			pVisitor.endvisit(this);
-		}
-	}
-
-	public int getKind() {
-		return S_UNTIL;
-	}
-
-	public Statement getCondition() {
-		return fCondition;
-	}
-
-	public Statement getAction() {
-		return fAction;
-	}
-
-	public void printNode(CorePrinter output) {
-		output.formatPrintLn("while");
-		if (this.fCondition != null) {
-			this.fCondition.printNode(output);
-		}
-		if (this.fAction != null) {
-			output.indent();
-			this.fAction.printNode(output);
-			output.dedent();
-		}
-		output.formatPrint("");
-	}
-}
diff --git a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/statements/WhileStatement.java b/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/statements/WhileStatement.java
deleted file mode 100644
index 1bb321f..0000000
--- a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/statements/WhileStatement.java
+++ /dev/null
@@ -1,67 +0,0 @@
-package org.eclipse.dltk.ast.statements;
-
-import org.eclipse.dltk.ast.ASTVisitor;
-import org.eclipse.dltk.ast.DLTKToken;
-import org.eclipse.dltk.ast.expressions.Expression;
-import org.eclipse.dltk.utils.CorePrinter;
-
-/**
- * While statement.
- */
-public class WhileStatement extends Statement {
-	private Statement fCondition;
-	private Statement fAction;
-
-	public WhileStatement(DLTKToken token) {
-		super(token);
-	}
-
-	public WhileStatement(DLTKToken whileToken, Expression condition,
-			Statement action) {
-		this.setStart(whileToken.getColumn());
-		this.fCondition = condition;
-		this.fAction = action;
-	}
-	
-	public WhileStatement(Statement condition, Statement action) {
-		this.fCondition = condition;
-		this.fAction = action;
-	}
-
-	public void traverse(ASTVisitor pVisitor) throws Exception {
-		if (pVisitor.visit(this)) {
-			if (fCondition != null) {
-				fCondition.traverse(pVisitor);
-			}
-			if (fAction != null) {
-				fAction.traverse(pVisitor);
-			}
-			pVisitor.endvisit(this);
-		}
-	}
-
-	public int getKind() {
-		return S_WHILE;
-	}
-
-	public Statement getCondition() {
-		return fCondition;
-	}
-
-	public Statement getAction() {
-		return fAction;
-	}
-
-	public void printNode(CorePrinter output) {
-		output.formatPrintLn("while");
-		if (this.fCondition != null) {
-			this.fCondition.printNode(output);
-		}
-		if (this.fAction != null) {
-			output.indent();
-			this.fAction.printNode(output);
-			output.dedent();
-		}
-		output.formatPrint("");
-	}
-}
diff --git a/core/plugins/org.eclipse.dltk.core/compiler/org/eclipse/dltk/compiler/SourceElementRequestVisitor.java b/core/plugins/org.eclipse.dltk.core/compiler/org/eclipse/dltk/compiler/SourceElementRequestVisitor.java
index 0d5b4b6..48371eb 100644
--- a/core/plugins/org.eclipse.dltk.core/compiler/org/eclipse/dltk/compiler/SourceElementRequestVisitor.java
+++ b/core/plugins/org.eclipse.dltk.core/compiler/org/eclipse/dltk/compiler/SourceElementRequestVisitor.java
@@ -3,6 +3,7 @@
 import java.util.List;
 import java.util.Stack;
 
+import org.eclipse.dltk.ast.ASTNode;
 import org.eclipse.dltk.ast.ASTVisitor;
 import org.eclipse.dltk.ast.declarations.Argument;
 import org.eclipse.dltk.ast.declarations.MethodDeclaration;
@@ -11,7 +12,6 @@
 import org.eclipse.dltk.ast.expressions.Expression;
 import org.eclipse.dltk.ast.expressions.Literal;
 import org.eclipse.dltk.ast.expressions.StringLiteral;
-import org.eclipse.dltk.ast.references.ExtendedVariableReference;
 import org.eclipse.dltk.ast.statements.Statement;
 
 public class SourceElementRequestVisitor extends ASTVisitor {
@@ -34,7 +34,7 @@
 		return fCurrentMethod;
 	}
 
-	protected String makeLanguageDependentValue(Expression expr) {
+	protected String makeLanguageDependentValue(ASTNode expr) {
 		return "";
 	}
 
@@ -72,25 +72,21 @@
 	 * @param expr
 	 * @return
 	 */
-	protected String makeValue(Statement stmt) {
-		if (!(stmt instanceof Expression))
-			return null;
+	protected String makeValue(ASTNode stmt) {
+//		if (!(stmt instanceof Expression))
+//			return null;
 
-		Expression expr = (Expression) stmt;
-
-		if (expr == null) {
-			return null;
-		}
+		
 
 		String value = "";
-		if (expr instanceof StringLiteral) {
-			value = "\"" + ((StringLiteral) expr).getValue() + "\"";
-		} else if (expr instanceof Literal) {
-			value = ((Literal) expr).getValue();
-		} else if (expr instanceof ExtendedVariableReference) {
+		if (stmt instanceof StringLiteral) {
+			value = "\"" + ((StringLiteral) stmt).getValue() + "\"";
+		} else if (stmt instanceof Literal) {
+			value = ((Literal) stmt).getValue();
+		} else /*if (stmt instanceof ExtendedVariableReference) */{
 			// If it is Dot.
 			// Lets make recursive value parsing in this case.
-			value += makeLanguageDependentValue(expr);
+			value += makeLanguageDependentValue(stmt);
 		}
 
 		return value;
diff --git a/core/plugins/org.eclipse.dltk.core/search/org/eclipse/dltk/core/search/matching/MatchLocator.java b/core/plugins/org.eclipse.dltk.core/search/org/eclipse/dltk/core/search/matching/MatchLocator.java
index 4bd3380..58de88f 100644
--- a/core/plugins/org.eclipse.dltk.core/search/org/eclipse/dltk/core/search/matching/MatchLocator.java
+++ b/core/plugins/org.eclipse.dltk.core/search/org/eclipse/dltk/core/search/matching/MatchLocator.java
@@ -28,7 +28,6 @@
 import org.eclipse.dltk.ast.declarations.MethodDeclaration;
 import org.eclipse.dltk.ast.declarations.ModuleDeclaration;
 import org.eclipse.dltk.ast.declarations.TypeDeclaration;
-import org.eclipse.dltk.ast.references.ExtendedVariableReference;
 import org.eclipse.dltk.compiler.env.INameEnvironment;
 import org.eclipse.dltk.compiler.env.ISourceType;
 import org.eclipse.dltk.compiler.env.lookup.Scope;
@@ -1218,85 +1217,85 @@
 		// report(match);
 	}
 
-	/**
-	 * Finds the accurate positions of each valid token in the source and
-	 * reports a reference to this token to the search requestor. A token is
-	 * valid if it has an accuracy which is not -1.
-	 */
-	protected void reportAccurateFieldReference(SearchMatch[] matches,
-			ExtendedVariableReference qNameRef) throws CoreException {
-		if (matches == null)
-			return; // there's nothing to accurate in this case
-		// int matchesLength = matches.length;
-		// int sourceStart = qNameRef.sourceStart;
-		// int sourceEnd = qNameRef.sourceEnd;
-		// char[][] tokens = qNameRef.tokens;
-		// // compute source positions of the qualified reference
-		// Scanner scanner = this.parser.scanner;
-		// scanner.setSource(this.currentPossibleMatch.getContents());
-		// scanner.resetTo(sourceStart, sourceEnd);
-		// int sourceLength = sourceEnd - sourceStart + 1;
-		// int refSourceStart = -1, refSourceEnd = -1;
-		// int length = tokens.length;
-		// int token = -1;
-		// int previousValid = -1;
-		// int i = 0;
-		// int index = 0;
-		// do {
-		// int currentPosition = scanner.currentPosition;
-		// // read token
-		// try {
-		// token = scanner.getNextToken();
-		// } catch (InvalidInputException e) {
-		// // ignore
-		// }
-		// if (token != TerminalTokens.TokenNameEOF) {
-		// char[] currentTokenSource = scanner.getCurrentTokenSource();
-		// boolean equals = false;
-		// while (i < length && !(equals =
-		// this.pattern.matchesName(tokens[i++],
-		// currentTokenSource))) {/* empty */
-		// }
-		// if (equals && (previousValid == -1 || previousValid == i - 2)) {
-		// previousValid = i - 1;
-		// if (refSourceStart == -1)
-		// refSourceStart = currentPosition;
-		// refSourceEnd = scanner.currentPosition - 1;
-		// } else {
-		// i = 0;
-		// refSourceStart = -1;
-		// previousValid = -1;
-		// }
-		// // read '.'
-		// try {
-		// token = scanner.getNextToken();
-		// } catch (InvalidInputException e) {
-		// // ignore
-		// }
-		// }
-		// SearchMatch match = matches[index];
-		// if (match != null && match.getRule() != 0) {
-		// if (!encloses((IModelElement) match.getElement()))
-		// return;
-		// // accept reference
-		// if (refSourceStart != -1) {
-		// match.setOffset(refSourceStart);
-		// match.setLength(refSourceEnd - refSourceStart + 1);
-		// report(match);
-		// } else {
-		// match.setOffset(sourceStart);
-		// match.setLength(sourceLength);
-		// report(match);
-		// }
-		// i = 0;
-		// }
-		// refSourceStart = -1;
-		// previousValid = -1;
-		// if (index < matchesLength - 1) {
-		// index++;
-		// }
-		// } while (token != TerminalTokens.TokenNameEOF);
-	}
+//	/**
+//	 * Finds the accurate positions of each valid token in the source and
+//	 * reports a reference to this token to the search requestor. A token is
+//	 * valid if it has an accuracy which is not -1.
+//	 */
+//	protected void reportAccurateFieldReference(SearchMatch[] matches,
+//			ExtendedVariableReference qNameRef) throws CoreException {
+//		if (matches == null)
+//			return; // there's nothing to accurate in this case
+//		// int matchesLength = matches.length;
+//		// int sourceStart = qNameRef.sourceStart;
+//		// int sourceEnd = qNameRef.sourceEnd;
+//		// char[][] tokens = qNameRef.tokens;
+//		// // compute source positions of the qualified reference
+//		// Scanner scanner = this.parser.scanner;
+//		// scanner.setSource(this.currentPossibleMatch.getContents());
+//		// scanner.resetTo(sourceStart, sourceEnd);
+//		// int sourceLength = sourceEnd - sourceStart + 1;
+//		// int refSourceStart = -1, refSourceEnd = -1;
+//		// int length = tokens.length;
+//		// int token = -1;
+//		// int previousValid = -1;
+//		// int i = 0;
+//		// int index = 0;
+//		// do {
+//		// int currentPosition = scanner.currentPosition;
+//		// // read token
+//		// try {
+//		// token = scanner.getNextToken();
+//		// } catch (InvalidInputException e) {
+//		// // ignore
+//		// }
+//		// if (token != TerminalTokens.TokenNameEOF) {
+//		// char[] currentTokenSource = scanner.getCurrentTokenSource();
+//		// boolean equals = false;
+//		// while (i < length && !(equals =
+//		// this.pattern.matchesName(tokens[i++],
+//		// currentTokenSource))) {/* empty */
+//		// }
+//		// if (equals && (previousValid == -1 || previousValid == i - 2)) {
+//		// previousValid = i - 1;
+//		// if (refSourceStart == -1)
+//		// refSourceStart = currentPosition;
+//		// refSourceEnd = scanner.currentPosition - 1;
+//		// } else {
+//		// i = 0;
+//		// refSourceStart = -1;
+//		// previousValid = -1;
+//		// }
+//		// // read '.'
+//		// try {
+//		// token = scanner.getNextToken();
+//		// } catch (InvalidInputException e) {
+//		// // ignore
+//		// }
+//		// }
+//		// SearchMatch match = matches[index];
+//		// if (match != null && match.getRule() != 0) {
+//		// if (!encloses((IModelElement) match.getElement()))
+//		// return;
+//		// // accept reference
+//		// if (refSourceStart != -1) {
+//		// match.setOffset(refSourceStart);
+//		// match.setLength(refSourceEnd - refSourceStart + 1);
+//		// report(match);
+//		// } else {
+//		// match.setOffset(sourceStart);
+//		// match.setLength(sourceLength);
+//		// report(match);
+//		// }
+//		// i = 0;
+//		// }
+//		// refSourceStart = -1;
+//		// previousValid = -1;
+//		// if (index < matchesLength - 1) {
+//		// index++;
+//		// }
+//		// } while (token != TerminalTokens.TokenNameEOF);
+//	}
 
 	protected void reportBinaryMemberDeclaration(IResource resource,
 			IMember binaryMember, int accuracy) throws CoreException {
diff --git a/core/plugins/org.eclipse.dltk.core/typeinference/org/eclipse/dltk/ti/goals/ExpressionTypeGoal.java b/core/plugins/org.eclipse.dltk.core/typeinference/org/eclipse/dltk/ti/goals/ExpressionTypeGoal.java
index b17e53e..23ec29d 100644
--- a/core/plugins/org.eclipse.dltk.core/typeinference/org/eclipse/dltk/ti/goals/ExpressionTypeGoal.java
+++ b/core/plugins/org.eclipse.dltk.core/typeinference/org/eclipse/dltk/ti/goals/ExpressionTypeGoal.java
@@ -1,18 +1,18 @@
 package org.eclipse.dltk.ti.goals;
 
-import org.eclipse.dltk.ast.statements.Statement;
+import org.eclipse.dltk.ast.ASTNode;
 import org.eclipse.dltk.ti.IContext;
 
 public class ExpressionTypeGoal extends AbstractTypeGoal {
 
-	private final Statement expression;
+	private final ASTNode expression;
 
-	public ExpressionTypeGoal(IContext context, Statement expression) {
+	public ExpressionTypeGoal(IContext context, ASTNode expression) {
 		super(context);
 		this.expression = expression;
 	}
 
-	public Statement getExpression() {
+	public ASTNode getExpression() {
 		return expression;
 	}