diff --git a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/Document.java b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/Document.java
index e592655..ebe2fa2 100644
--- a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/Document.java
+++ b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/Document.java
@@ -74,6 +74,10 @@
 		addChild(rootElement);
 	}
 
+	/*
+	 * Node
+	 */
+
 	@Override
 	public int getStartOffset() {
 		return 0;
@@ -99,6 +103,10 @@
 		return getDocumentURI();
 	}
 
+	/*
+	 * Document
+	 */
+
 	public void setDocumentURI(final String documentURI) {
 		this.documentURI = documentURI;
 	}
@@ -143,22 +151,6 @@
 		return rootElement;
 	}
 
-	public boolean isUndoEnabled() {
-		return undoEnabled;
-	}
-
-	public void setUndoEnabled(final boolean undoEnabled) {
-		this.undoEnabled = undoEnabled;
-	}
-
-	public void addDocumentListener(final DocumentListener listener) {
-		listeners.add(listener);
-	}
-
-	public void removeDocumentListener(final DocumentListener listener) {
-		listeners.remove(listener);
-	}
-
 	public int getLength() {
 		return getContent().length();
 	}
@@ -167,6 +159,10 @@
 		return getContent().createPosition(offset);
 	}
 
+	/*
+	 * L1 Operations
+	 */
+
 	private boolean canInsertAt(final Element insertionParent, final int offset, final QualifiedName... nodeNames) {
 		return canInsertAt(insertionParent, offset, Arrays.asList(nodeNames));
 	}
@@ -372,6 +368,10 @@
 		fireContentDeleted(new DocumentEvent(this, surroundingElement, range.getStartOffset(), range.length(), edit));
 	}
 
+	/*
+	 * Miscellaneous
+	 */
+
 	public char getCharacterAt(final int offset) {
 		final String text = getContent().getText(new Range(offset, offset));
 		if (text.length() == 0) {
@@ -406,17 +406,17 @@
 	}
 
 	public Element getElementAt(final int offset) {
-		return getContainerElement(getChildNodeAt(offset));
+		return getParentElement(getChildNodeAt(offset));
 	}
 
-	private static Element getContainerElement(final Node node) {
+	private static Element getParentElement(final Node node) {
 		if (node == null) {
 			return null;
 		}
 		if (node instanceof Element) {
 			return (Element) node;
 		}
-		return getContainerElement(node.getParent());
+		return getParentElement(node.getParent());
 	}
 
 	public boolean isElementAt(final int offset) {
@@ -445,6 +445,18 @@
 		return getParentOfRange(range).getChildNodes(range);
 	}
 
+	/*
+	 * Events
+	 */
+
+	public void addDocumentListener(final DocumentListener listener) {
+		listeners.add(listener);
+	}
+
+	public void removeDocumentListener(final DocumentListener listener) {
+		listeners.remove(listener);
+	}
+
 	public void fireAttributeChanged(final DocumentEvent e) {
 		listeners.fireEvent("attributeChanged", e);
 	}
@@ -469,7 +481,17 @@
 		listeners.fireEvent("contentInserted", e);
 	}
 
-	// TODO move undoable edits int L2
+	/*
+	 * Edits
+	 */
+
+	public boolean isUndoEnabled() {
+		return undoEnabled;
+	}
+
+	public void setUndoEnabled(final boolean undoEnabled) {
+		this.undoEnabled = undoEnabled;
+	}
 
 	private class DeleteEdit implements IUndoableEdit {
 
diff --git a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/Element.java b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/Element.java
index 18b0fb2..e34fe5c 100644
--- a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/Element.java
+++ b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/Element.java
@@ -31,7 +31,7 @@
  */
 public class Element extends Parent {
 
-	/**
+	/*
 	 * The xml:base attribute re-defines the base URI for a part of an XML document, according to the XML Base
 	 * Recommendation.
 	 * 
@@ -52,6 +52,23 @@
 		name = qualifiedName;
 	}
 
+	/*
+	 * Node
+	 */
+
+	@Override
+	public String getBaseURI() {
+		final Attribute baseAttribute = getAttribute(XML_BASE_ATTRIBUTE);
+		if (baseAttribute != null) {
+			return baseAttribute.getValue();
+		}
+		return super.getBaseURI();
+	}
+
+	public void setBaseURI(final String baseURI) {
+		setAttribute(XML_BASE_ATTRIBUTE, baseURI);
+	}
+
 	@Override
 	public boolean isKindOf(final Node node) {
 		if (!(node instanceof Element)) {
@@ -70,6 +87,34 @@
 		return visitor.visit(this);
 	}
 
+	/*
+	 * Element Name
+	 */
+
+	public QualifiedName getQualifiedName() {
+		return name;
+	}
+
+	public String getLocalName() {
+		return name.getLocalName();
+	}
+
+	public String getPrefix() {
+		return getNamespacePrefix(name.getQualifier());
+	}
+
+	public String getPrefixedName() {
+		final String prefix = getPrefix();
+		if (prefix == null) {
+			return getLocalName();
+		}
+		return prefix + ":" + getLocalName();
+	}
+
+	/*
+	 * Attributes
+	 */
+
 	public Attribute getAttribute(final String localName) {
 		return getAttribute(qualify(localName));
 	}
@@ -165,71 +210,9 @@
 		return result;
 	}
 
-	public List<Element> getChildElements() {
-		final List<Node> nodes = getChildNodes();
-		final List<Element> elements = new ArrayList<Element>();
-		for (final Node node : nodes) {
-			node.accept(new BaseNodeVisitor() {
-				@Override
-				public void visit(final Element element) {
-					elements.add(element);
-				}
-			});
-		}
-		return elements;
-	}
-
-	public String getLocalName() {
-		return name.getLocalName();
-	}
-
-	public QualifiedName getQualifiedName() {
-		return name;
-	}
-
-	public String getPrefix() {
-		return getNamespacePrefix(name.getQualifier());
-	}
-
-	public String getPrefixedName() {
-		final String prefix = getPrefix();
-		if (prefix == null) {
-			return getLocalName();
-		}
-		return prefix + ":" + getLocalName();
-	}
-
-	public boolean isEmpty() {
-		return getStartOffset() + 1 == getEndOffset();
-	}
-
-	@Override
-	public String toString() {
-
-		final StringBuffer sb = new StringBuffer();
-		sb.append("<");
-		sb.append(getPrefixedName().toString());
-
-		for (final Attribute attribute : getAttributes()) {
-			sb.append(" ");
-			sb.append(attribute.getPrefixedName());
-			sb.append("=\"");
-			sb.append(attribute.getValue());
-			sb.append("\"");
-		}
-
-		sb.append("> (");
-		if (isAssociated()) {
-			sb.append(getStartOffset());
-			sb.append(",");
-			sb.append(getEndOffset());
-		} else {
-			sb.append("n/a");
-		}
-		sb.append(")");
-
-		return sb.toString();
-	}
+	/*
+	 * Element Structure
+	 */
 
 	public Element getParentElement() {
 		return getParentElement(this);
@@ -246,6 +229,24 @@
 		return getParentElement(parent);
 	}
 
+	public List<Element> getChildElements() {
+		final List<Node> nodes = getChildNodes();
+		final List<Element> elements = new ArrayList<Element>();
+		for (final Node node : nodes) {
+			node.accept(new BaseNodeVisitor() {
+				@Override
+				public void visit(final Element element) {
+					elements.add(element);
+				}
+			});
+		}
+		return elements;
+	}
+
+	/*
+	 * Namespaces
+	 */
+
 	public String getNamespaceURI(final String namespacePrefix) {
 		if (namespaceDeclarations.containsKey(namespacePrefix)) {
 			return namespaceDeclarations.get(namespacePrefix);
@@ -352,15 +353,46 @@
 		removeNamespace(null);
 	}
 
-	@Override
-	public String getBaseURI() {
-		final Attribute baseAttribute = getAttribute(XML_BASE_ATTRIBUTE);
-		if (baseAttribute != null) {
-			return baseAttribute.getValue();
-		}
-		return super.getBaseURI();
+	/*
+	 * Miscellaneous
+	 */
+
+	public boolean isEmpty() {
+		return getStartOffset() + 1 == getEndOffset();
 	}
 
+	@Override
+	public String toString() {
+
+		final StringBuffer sb = new StringBuffer();
+		sb.append("<");
+		sb.append(getPrefixedName().toString());
+
+		for (final Attribute attribute : getAttributes()) {
+			sb.append(" ");
+			sb.append(attribute.getPrefixedName());
+			sb.append("=\"");
+			sb.append(attribute.getValue());
+			sb.append("\"");
+		}
+
+		sb.append("> (");
+		if (isAssociated()) {
+			sb.append(getStartOffset());
+			sb.append(",");
+			sb.append(getEndOffset());
+		} else {
+			sb.append("n/a");
+		}
+		sb.append(")");
+
+		return sb.toString();
+	}
+
+	/*
+	 * Edits
+	 */
+
 	private class AttributeChangeEdit implements IUndoableEdit {
 
 		private final QualifiedName name;
