Index: /trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/formatter/EbnfHtmlFormatterVisitor.java
===================================================================
--- /trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/formatter/EbnfHtmlFormatterVisitor.java	(revision 42)
+++ /trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/formatter/EbnfHtmlFormatterVisitor.java	(revision 43)
@@ -10,4 +10,5 @@
 import org.eclipse.xtext.parsetree.NodeUtil;
 
+import de.ugoe.cs.swe.bnftools.ebnf.DefinitionList;
 import de.ugoe.cs.swe.bnftools.ebnf.EtsiBnf;
 import de.ugoe.cs.swe.bnftools.ebnf.Import;
@@ -15,4 +16,5 @@
 import de.ugoe.cs.swe.bnftools.ebnf.RuleReference;
 import de.ugoe.cs.swe.bnftools.ebnf.SectionHeading;
+import de.ugoe.cs.swe.bnftools.ebnf.SingleDefinition;
 import de.ugoe.cs.swe.bnftools.ebnf.StringRule;
 
@@ -193,5 +195,6 @@
 			isParagraphOpen = false;
 		}
-		
+		openParagraph();
+
 		if ((ruleSpacingStack != null) && (!ruleSpacingStack.empty())) {
 			newLineOffsetCounter = ruleSpacingStack.peek();
@@ -215,4 +218,32 @@
 		metaText("</span>");
 	}
+	
+	protected void wrap() {
+		if ((config.isWrapAfterThreshold()) && (newLineOffsetCounter > config.getWrapThreshold())) {
+			char last = buf.toString().charAt(buf.toString().length()-1);
+			if (!((last == '(' || last == '[' || last == '{' ))) {
+				newLine();
+				newLine();
+				if (ruleSpacingStack.size() > 1)
+					spaces(ruleSpacingStack.peek() + 1);
+				else
+					spaces(ruleSpacingStack.peek());
+			}
+		}
+	}
+	
+	private void closeOpenParagraph() {
+		if (isParagraphOpen) {
+			metaText("\n</p>\n");
+			isParagraphOpen = false;
+		}
+	}
+
+	private void openParagraph() {
+		if (!isParagraphOpen) {
+			metaText("\n<p class=PL style='mso-pagination:widow-orphan lines-together;page-break-after: avoid'>\n");
+			isParagraphOpen = true;
+		}
+	}
 	// -----------------------------------------------------------------------------
 	
@@ -223,10 +254,11 @@
 		originalTextNoWhitespaces = originalText.replaceAll("[ \t\n\r]", "");
 		
-		textTransformed("grammar " + node.getName(),"");
+		textTransformed("grammar " + node.getName(), "");
 		if (node.getType() != null)
-			textTransformed(node.getType(),"");
-		textTransformed(";","");
-		metaText("<body lang=EN-US link=blue vlink=purple style='tab-interval:14.15pt'>\n");
-		metaText("<div class=WordSection1>\n");
+			textTransformed(node.getType(), "");
+		textTransformed(";", "");
+//		metaText("<body lang=EN-US link=blue vlink=purple style='tab-interval:14.15pt'>");
+//		metaText("<div class=WordSection1>");
+//		System.out.println("call!!!");
 		
 //		newLine();
@@ -235,4 +267,6 @@
 	
 	protected void visitAfter(EtsiBnf node) {
+		closeOpenParagraph();
+		
 		metaText("</div>\n");
 		metaText("</body>\n");
@@ -268,12 +302,13 @@
 
 	protected void visitAfter(SectionHeading node) {
-	}
-	
+//		newLine();
+		closeOpenParagraph();
+	}
+
 	protected void visitBefore(RuleReference node) {
 		wrap();
 		
-		metaText("<u><span style='color:blue'><a href=\"#T" + node.getRuleref().getName() + "\">");
-		text(node.getRuleref().getName());
-		metaText("</a></span></u>");
+		metaText("<u><span style='color:blue'><a href=\"#T" + node.getRuleref().getName().replaceAll("[ \t\n\r]","") + "\">");
+		textTransformed(node.getRuleref().getName(), node.getRuleref().getName().replaceAll("[ \t\n\r]", "") + "</a></span></u>");
 	}
 
@@ -283,5 +318,6 @@
 	protected void visitBefore(Rule node) {
 //		if (lastWasSectionHeading)
-			newLine();
+		
+		newLine();
 		
 		lastWasSectionHeading=false;
@@ -292,5 +328,6 @@
 			text(node.getRulenumber() + ". ");
 
-		metaText("<span lang=EN-GB style='mso-no-proof:no'>\n<a name=\"#T" + node.getName() + "\">");
+		metaText("<span lang=EN-GB style='mso-no-proof:no'>");
+		metaText("<a name=\"T" + node.getName() + "\">");
 		textTransformed(node.getName(), node.getName().replaceAll("[ \t\r\n]", ""));
 		metaText("</a>");
Index: /trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/formatter/HtmlFormatterHandler.java
===================================================================
--- /trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/formatter/HtmlFormatterHandler.java	(revision 42)
+++ /trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/formatter/HtmlFormatterHandler.java	(revision 43)
@@ -1,6 +1,4 @@
 package de.ugoe.cs.swe.bnftools.ui.formatter;
 
-import java.io.BufferedInputStream;
-import java.io.BufferedReader;
 import java.io.BufferedWriter;
 import java.io.File;
@@ -8,6 +6,4 @@
 import java.io.FileWriter;
 import java.io.IOException;
-import java.net.URISyntaxException;
-import java.net.URL;
 
 import org.eclipse.core.commands.AbstractHandler;
@@ -15,8 +11,4 @@
 import org.eclipse.core.commands.ExecutionException;
 import org.eclipse.core.resources.IContainer;
-import org.eclipse.core.resources.IWorkspace;
-import org.eclipse.core.resources.IWorkspaceRoot;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.emf.ecore.EObject;
@@ -63,7 +55,9 @@
 		result = result + visitor.getBuf();
 		
-		System.out.println(visitor.getBuf());
+//		System.out.println(visitor.getBuf());
 		
-		writeFile(result, editor.getResource().getLocation().toPortableString().toString() + ".html");
+		String filename = editor.getResource().getLocation().toPortableString().toString() + ".html";
+//		System.out.println(filename);
+		writeFile(result, filename);
 		
 		return null;
