Index: trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/actions/GenerateCompositeBNFAction.java
===================================================================
--- trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/actions/GenerateCompositeBNFAction.java	(revision 13)
+++ trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/actions/GenerateCompositeBNFAction.java	(revision 17)
@@ -93,5 +93,5 @@
 				   	String coreName = null;
 				   	// get the core grammar
-				   	EList<Import> imports = ((EtsiBnfImpl) xtextResource.getParseResult().getRootNode().getElement()).getImports();
+				   	EList<Import> imports = ((EtsiBnfImpl) xtextResource.getParseResult().getRootNode().getElement()).getImportSection().getImports();
 				   	for(int j=0; j< imports.size(); j++) {
 				   		if(imports.get(j).getGrammarType().equals("core"))
@@ -113,5 +113,5 @@
 					packageGrammars = new LinkedList<XtextResource>();
 					deltas = new LinkedList<URI>();
-				    EList<Import> packages = ((EtsiBnfImpl) xtextResource.getParseResult().getRootNode().getElement()).getImports();
+				    EList<Import> packages = ((EtsiBnfImpl) xtextResource.getParseResult().getRootNode().getElement()).getImportSection().getImports();
 				   	for(int j=0; j<packages.size(); j++) {
 				   		if(packages.get(j).getGrammarType().equals("package")) {
Index: trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/actions/PackageConsistencyCheckerAction.java
===================================================================
--- trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/actions/PackageConsistencyCheckerAction.java	(revision 13)
+++ trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/actions/PackageConsistencyCheckerAction.java	(revision 17)
@@ -65,5 +65,5 @@
 				Resource coreRes = null;
 				Resource updatedRes = null;
-				EList<Import> imports = ((EtsiBnfImpl) xtextResource.getParseResult().getRootNode().getElement()).getImports();
+				EList<Import> imports = ((EtsiBnfImpl) xtextResource.getParseResult().getRootNode().getElement()).getImportSection().getImports();
 				
 				for(int j=0; j<imports.size(); j++) {
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 13)
+++ trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/formatter/EbnfFormatterVisitor.java	(revision 17)
@@ -32,4 +32,6 @@
 	private FormatterConfig config;
 
+	private boolean lastWasSectionHeading=false;
+	
 	public EbnfFormatterVisitor(EObject rootNode, FormatterConfig config) {
 		super(rootNode);
@@ -164,4 +166,9 @@
 
 	protected void visitBefore(Rule node) {
+		if (lastWasSectionHeading)
+			buf.append("\n");
+		
+		lastWasSectionHeading=false;
+
 		if (node.getRulenumber() > 0)
 			buf.append(node.getRulenumber() + ". ");
@@ -188,12 +195,17 @@
 
 	protected void visitBefore(SectionHeading node) {
-		if (!buf.substring(buf.length()-2).equals("\n\n"))
+		if (!lastWasSectionHeading && !buf.substring(buf.length()-2).equals("\n\n"))
 			buf.append("\n");
 		
+		lastWasSectionHeading=true;
+//		if (!lastWasSectionHeading || !buf.substring(buf.length()-2).equals("\n\n"))
+//		if (!buf.substring(buf.length()-2).equals("\n\n"))
+//			buf.append("\n");
+		
 		buf.append(node.getSectionHeader());
 	}
 
 	protected void visitAfter(SectionHeading node) {
-		buf.append("\n");
+//		buf.append("\n");
 	}
 
Index: trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/refactoring/rename/RenameRefactoringHandler.java
===================================================================
--- trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/refactoring/rename/RenameRefactoringHandler.java	(revision 13)
+++ trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/refactoring/rename/RenameRefactoringHandler.java	(revision 17)
@@ -72,5 +72,5 @@
 					"Error while applying refactoring to workbench/wizard: "
 							+ e.getMessage());
-			e.printStackTrace();
+			//e.printStackTrace();
 		}
 		return null;
Index: trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/utils/Utils.java
===================================================================
--- trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/utils/Utils.java	(revision 13)
+++ trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/utils/Utils.java	(revision 17)
@@ -4,5 +4,4 @@
 import java.util.List;
 
-import org.eclipse.emf.common.util.EList;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.jface.text.BadLocationException;
@@ -22,5 +21,8 @@
 import com.google.common.collect.Iterables;
 
+import de.ugoe.cs.swe.bnftools.ebnf.BnfEntry;
+import de.ugoe.cs.swe.bnftools.ebnf.DeltaEntry;
 import de.ugoe.cs.swe.bnftools.ebnf.EtsiBnf;
+import de.ugoe.cs.swe.bnftools.ebnf.MergeEntry;
 import de.ugoe.cs.swe.bnftools.ebnf.Rule;
 
@@ -29,19 +31,55 @@
 	static public NodeAdapter findNodeFromSelection(
 			final XtextEditor xtextEditor, ITextSelection mySelection) {
-		NodeAdapter node = null;
 		if ((xtextEditor == null) || (xtextEditor.getDocument() == null))
 			return null;
 		EtsiBnf root = (EtsiBnf) xtextEditor.getDocument().readOnly(
 				new RootEObjectFinder());
-		EList<Rule> rules = root.getRule();
-		for (int i = 0; i < rules.size(); i++) {
-			node = NodeUtil.getNodeAdapter(rules.get(i));
-			if ((node.getParserNode().getOffset() <= mySelection.getOffset())
-					&& (mySelection.getOffset() <= node.getParserNode()
-							.getOffset()
-							+ node.getParserNode().getLength())) {
-				return node;
+		
+		NodeAdapter resultNode = null;
+		if (root.getBnfEntry() != null) {
+			System.out.println("bnf grammar!");
+			for (int i=0; i < root.getBnfEntry().size(); i++) {
+				BnfEntry entry = root.getBnfEntry().get(i);
+				if (entry.getRule() != null) {
+					resultNode = findNodeInRule(entry.getRule(), mySelection);
+					if (resultNode != null)
+						return resultNode;
+				}
+			}
+		} else if (root.getDeltaEntry() != null) {
+			for (int i=0; i < root.getDeltaEntry().size(); i++) {
+				DeltaEntry entry = root.getDeltaEntry().get(i);
+				if (entry.getRule() != null) {
+					resultNode = findNodeInRule(entry.getRule(), mySelection);
+					if (resultNode != null)
+						return resultNode;
+				}
+			}
+		} else if (root.getMergeEntry() != null) {
+			for (int i=0; i < root.getMergeEntry().size(); i++) {
+				MergeEntry entry = root.getMergeEntry().get(i);
+				if (entry.getMergeRule() != null) {
+					// TODO: doesn't work here...
+//					resultNode = findNodeInRule(entry.getgetRule(), mySelection);
+//					if (resultNode != null)
+//						return resultNode;
+				}
 			}
 		}
+		
+		return resultNode;
+	}
+	
+	// --------------------------------------------------------------------------------
+
+	static private NodeAdapter findNodeInRule(Rule rule, ITextSelection mySelection) {
+		NodeAdapter node = NodeUtil.getNodeAdapter(rule);
+		if ((node.getParserNode().getOffset() <= mySelection.getOffset())
+				&& (mySelection.getOffset() <= node.getParserNode()
+						.getOffset()
+						+ node.getParserNode().getLength())) {
+			return node;
+		}
+		
 		return null;
 	}
