Index: trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/formatter/EbnfFormatterVisitor.java
===================================================================
--- trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/formatter/EbnfFormatterVisitor.java	(revision 11)
+++ trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/formatter/EbnfFormatterVisitor.java	(revision 12)
@@ -3,6 +3,4 @@
 import org.eclipse.emf.common.util.EList;
 import org.eclipse.emf.ecore.EObject;
-
-import com.sun.xml.internal.bind.v2.schemagen.xmlschema.Import;
 
 import de.ugoe.cs.swe.bnftools.ebnf.Atom;
@@ -13,4 +11,5 @@
 import de.ugoe.cs.swe.bnftools.ebnf.GroupedSequence;
 import de.ugoe.cs.swe.bnftools.ebnf.HookCombinator;
+import de.ugoe.cs.swe.bnftools.ebnf.Import;
 import de.ugoe.cs.swe.bnftools.ebnf.MergeRule;
 import de.ugoe.cs.swe.bnftools.ebnf.OptionalSequence;
@@ -29,4 +28,6 @@
 	private FormatterConfig config;
 
+	int ruleCounter = 0;
+	
 	public EbnfFormatterVisitor(EObject rootNode, FormatterConfig config) {
 		super(rootNode);
@@ -67,7 +68,5 @@
 
 	protected void visitAfter(Term node) {
-		SingleDefinition parent = (SingleDefinition) node.eContainer();
-		int index = parent.getTerms().indexOf(node);
-		if ((parent.getTerms().size() > 0) && (index < parent.getTerms().size()-1))
+		if (!isLastElement())
 			buf.append(" ");
 	}
@@ -106,4 +105,5 @@
 
 	protected void visitBefore(Import node) {
+		buf.append("import \"" + node.getImportURI() + "\";\n");
 	}
 
@@ -118,16 +118,26 @@
 
 	protected void visitBefore(OptionalSequence node) {
+		buf.append("[");
 	}
 
 	protected void visitAfter(OptionalSequence node) {
+		buf.append("]");
 	}
 
 	protected void visitBefore(RepeatedSequence node) {
+		buf.append("{");
 	}
 
 	protected void visitAfter(RepeatedSequence node) {
+		buf.append("}");
+		if (node.isMorethanonce())
+			buf.append("+");
 	}
 
 	protected void visitBefore(Rule node) {
+		if (ruleCounter == 0)
+			buf.append("\n");
+		
+		ruleCounter++;
 		if (node.getRulenumber() > 0)
 			buf.append(node.getRulenumber() + ". ");
@@ -147,4 +157,5 @@
 
 	protected void visitBefore(RuleReference node) {
+		buf.append(node.getRuleref().getName());
 	}
 
@@ -162,4 +173,7 @@
 
 	protected void visitAfter(SingleDefinition node) {
+		if (!isLastElement())
+			buf.append(" | ");
+		
 	}
 
@@ -168,5 +182,5 @@
 			buf.append("\"" + node.getLiteral() + "\"");
 		else if (node.getColon() != null)
-			buf.append(" " + node.getColon());
+			buf.append("\"\"\"");
 	}
 
Index: trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/visitor/EbnfVisitor.java
===================================================================
--- trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/visitor/EbnfVisitor.java	(revision 11)
+++ trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/visitor/EbnfVisitor.java	(revision 12)
@@ -1,7 +1,7 @@
 package de.ugoe.cs.swe.bnftools.visitor;
 
+import java.util.Stack;
+
 import org.eclipse.emf.ecore.EObject;
-
-import com.sun.xml.internal.bind.v2.schemagen.xmlschema.Import;
 
 import de.ugoe.cs.swe.bnftools.ebnf.Atom;
@@ -12,4 +12,5 @@
 import de.ugoe.cs.swe.bnftools.ebnf.GroupedSequence;
 import de.ugoe.cs.swe.bnftools.ebnf.HookCombinator;
+import de.ugoe.cs.swe.bnftools.ebnf.Import;
 import de.ugoe.cs.swe.bnftools.ebnf.MergeRule;
 import de.ugoe.cs.swe.bnftools.ebnf.OptionalSequence;
@@ -26,5 +27,6 @@
 	
 	protected EObject rootNode = null;
-
+	protected Stack<Boolean> lastElementStack = new Stack<Boolean>();
+	
 	public EbnfVisitor() {
 	}
@@ -46,10 +48,24 @@
 
 	private void acceptInner(EObject node) {
+		Boolean lastElement = false;
+		if (node.eContents().size() == 0)
+			lastElement = true;
+		lastElementStack.push(lastElement);		
 		for (int i=0; i < node.eContents().size(); i++) {
 			EObject currentNode = (EObject) node.eContents().get(i);
+			if (i == node.eContents().size()-1) {
+				lastElement = true;
+				lastElementStack.pop();
+				lastElementStack.push(lastElement);
+			}
 			dispatcherBefore(currentNode);
 			acceptInner(currentNode);
 			dispatcherAfter(currentNode);
 		}
+		lastElementStack.pop();
+	}
+	
+	protected boolean isLastElement() {
+		return lastElementStack.peek();
 	}
 	
