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 12)
+++ trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/formatter/EbnfFormatterVisitor.java	(revision 13)
@@ -5,5 +5,7 @@
 
 import de.ugoe.cs.swe.bnftools.ebnf.Atom;
+import de.ugoe.cs.swe.bnftools.ebnf.BnfEntry;
 import de.ugoe.cs.swe.bnftools.ebnf.DefinitionList;
+import de.ugoe.cs.swe.bnftools.ebnf.DeltaEntry;
 import de.ugoe.cs.swe.bnftools.ebnf.EtsiBnf;
 import de.ugoe.cs.swe.bnftools.ebnf.ExtRule;
@@ -12,4 +14,6 @@
 import de.ugoe.cs.swe.bnftools.ebnf.HookCombinator;
 import de.ugoe.cs.swe.bnftools.ebnf.Import;
+import de.ugoe.cs.swe.bnftools.ebnf.ImportSection;
+import de.ugoe.cs.swe.bnftools.ebnf.MergeEntry;
 import de.ugoe.cs.swe.bnftools.ebnf.MergeRule;
 import de.ugoe.cs.swe.bnftools.ebnf.OptionalSequence;
@@ -28,6 +32,4 @@
 	private FormatterConfig config;
 
-	int ruleCounter = 0;
-	
 	public EbnfFormatterVisitor(EObject rootNode, FormatterConfig config) {
 		super(rootNode);
@@ -52,5 +54,5 @@
 			buf.append(node.getType());
 		buf.append(";");
-		buf.append("\n\n");
+		buf.append("\n");
 	}
 
@@ -58,4 +60,30 @@
 	}
 
+	protected void visitBefore(ImportSection node) {
+		buf.append("\n");
+	}
+
+	protected void visitAfter(ImportSection node) {
+		buf.append("\n");
+	}
+
+	protected void visitBefore(BnfEntry node) {
+	}
+
+	protected void visitAfter(BnfEntry node) {
+	}
+	
+	protected void visitBefore(DeltaEntry node) {
+	}
+
+	protected void visitAfter(DeltaEntry node) {
+	}
+	
+	protected void visitBefore(MergeEntry node) {
+	}
+
+	protected void visitAfter(MergeEntry node) {
+	}
+	
 	protected void visitBefore(Atom node) {
 	}
@@ -136,8 +164,4 @@
 
 	protected void visitBefore(Rule node) {
-		if (ruleCounter == 0)
-			buf.append("\n");
-		
-		ruleCounter++;
 		if (node.getRulenumber() > 0)
 			buf.append(node.getRulenumber() + ". ");
@@ -164,7 +188,12 @@
 
 	protected void visitBefore(SectionHeading node) {
+		if (!buf.substring(buf.length()-2).equals("\n\n"))
+			buf.append("\n");
+		
+		buf.append(node.getSectionHeader());
 	}
 
 	protected void visitAfter(SectionHeading node) {
+		buf.append("\n");
 	}
 
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 12)
+++ trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/visitor/EbnfVisitor.java	(revision 13)
@@ -6,5 +6,7 @@
 
 import de.ugoe.cs.swe.bnftools.ebnf.Atom;
+import de.ugoe.cs.swe.bnftools.ebnf.BnfEntry;
 import de.ugoe.cs.swe.bnftools.ebnf.DefinitionList;
+import de.ugoe.cs.swe.bnftools.ebnf.DeltaEntry;
 import de.ugoe.cs.swe.bnftools.ebnf.EtsiBnf;
 import de.ugoe.cs.swe.bnftools.ebnf.ExtRule;
@@ -13,4 +15,6 @@
 import de.ugoe.cs.swe.bnftools.ebnf.HookCombinator;
 import de.ugoe.cs.swe.bnftools.ebnf.Import;
+import de.ugoe.cs.swe.bnftools.ebnf.ImportSection;
+import de.ugoe.cs.swe.bnftools.ebnf.MergeEntry;
 import de.ugoe.cs.swe.bnftools.ebnf.MergeRule;
 import de.ugoe.cs.swe.bnftools.ebnf.OptionalSequence;
@@ -74,4 +78,12 @@
 		if (node instanceof EtsiBnf) {
 			visitBefore((EtsiBnf) node);
+		} else if (node instanceof ImportSection) {
+			visitBefore((ImportSection) node);
+		} else if (node instanceof BnfEntry) {
+			visitBefore((BnfEntry) node);
+		} else if (node instanceof DeltaEntry) {
+			visitBefore((DeltaEntry) node);
+		} else if (node instanceof MergeEntry) {
+			visitBefore((MergeEntry) node);
 		} else if (node instanceof Atom) {
 			visitBefore((Atom) node);
@@ -115,4 +127,12 @@
 		if (node instanceof EtsiBnf) {
 			visitAfter((EtsiBnf) node);
+		} else if (node instanceof ImportSection) {
+			visitAfter((ImportSection) node);
+		} else if (node instanceof BnfEntry) {
+			visitAfter((BnfEntry) node);
+		} else if (node instanceof DeltaEntry) {
+			visitAfter((DeltaEntry) node);
+		} else if (node instanceof MergeEntry) {
+			visitAfter((MergeEntry) node);
 		} else if (node instanceof Atom) {
 			visitAfter((Atom) node);
@@ -158,4 +178,28 @@
 	}
 
+	protected void visitBefore(ImportSection node) {
+	}
+
+	protected void visitAfter(ImportSection node) {
+	}
+
+	protected void visitBefore(BnfEntry node) {
+	}
+
+	protected void visitAfter(BnfEntry node) {
+	}
+	
+	protected void visitBefore(DeltaEntry node) {
+	}
+
+	protected void visitAfter(DeltaEntry node) {
+	}
+	
+	protected void visitBefore(MergeEntry node) {
+	}
+
+	protected void visitAfter(MergeEntry node) {
+	}
+
 	protected void visitBefore(Atom node) {
 	}
