diff --git a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/css/Styles.java b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/css/Styles.java
index cee1f51..2840bda 100644
--- a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/css/Styles.java
+++ b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/css/Styles.java
@@ -197,7 +197,7 @@
 	 */
 	public List<String> getTextualContent(final INode node) {
 		final List<String> content = new ArrayList<String>();
-		for (LexicalUnit lexicalUnit : contentLexicalUnits) {
+		for (final LexicalUnit lexicalUnit : contentLexicalUnits) {
 			switch (lexicalUnit.getLexicalUnitType()) {
 			case LexicalUnit.SAC_STRING_VALUE:
 				// content: "A String"
@@ -224,19 +224,17 @@
 				});
 				break;
 			}
-			lexicalUnit = lexicalUnit.getNextLexicalUnit();
 		}
 		return content;
 	}
 
 	public List<IPropertyContent> getAllContent(final INode node) {
 		final List<IPropertyContent> allContent = new ArrayList<IPropertyContent>();
-		for (LexicalUnit lexicalUnit : contentLexicalUnits) {
+		for (final LexicalUnit lexicalUnit : contentLexicalUnits) {
 			final IPropertyContent content = getContent(lexicalUnit, node);
 			if (content != null) {
 				allContent.add(content);
 			}
-			lexicalUnit = lexicalUnit.getNextLexicalUnit();
 		}
 		return allContent;
 	}
diff --git a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/visualization/CssBasedBoxModelBuilder.java b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/visualization/CssBasedBoxModelBuilder.java
index 0ac6a4b..cfc17ef 100644
--- a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/visualization/CssBasedBoxModelBuilder.java
+++ b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/visualization/CssBasedBoxModelBuilder.java
@@ -248,7 +248,7 @@
 	}
 
 	private IStructuralBox visualizeStructuralElementWithNoContentAllowed(final Styles styles, final IElement element) {
-		return paragraph(styles, nodeTag(element, styles));
+		return paragraph(styles, visualizeInlineElementWithNoContentAllowed(element, styles));
 	}
 
 	private <P extends IParentBox<IStructuralBox>> P visualizeChildrenAsStructure(final INode node, final Styles styles, final Iterable<VisualizeResult> childrenResults, final P parentBox) {
@@ -361,7 +361,7 @@
 			public IInlineBox visit(final IElement element) {
 				if (isElementWithNoContentAllowed(element)) {
 					return nodeReference(element,
-							frame(surroundWithInlinePseudoElements(inlineContainer(visualizeEmptyInlineElementWithNoContentAllowed(element, styles)), element, styles), styles));
+							frame(surroundWithInlinePseudoElements(inlineContainer(visualizeInlineElementWithNoContentAllowed(element, styles)), element, styles), styles));
 				}
 
 				final InlineContainer inlineElementContent = surroundWithInlineMarkers(element, styles,
@@ -423,8 +423,11 @@
 		}
 	}
 
-	private static IInlineBox visualizeEmptyInlineElementWithNoContentAllowed(final INode node, final Styles styles) {
-		return nodeTag(node, styles);
+	private static IInlineBox visualizeInlineElementWithNoContentAllowed(final INode node, final Styles styles) {
+		if (!styles.isContentDefined()) {
+			return nodeTag(node, styles);
+		}
+		return visualizeContentProperty(node, styles, inlineContainer());
 	}
 
 	private static IInlineBox visualizeText(final IContent content, final ContentRange textRange, final INode parentNode, final Styles styles) {
diff --git a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/widget/VisualizationController.java b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/widget/VisualizationController.java
index 373b199..f1cfa4c 100644
--- a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/widget/VisualizationController.java
+++ b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/widget/VisualizationController.java
@@ -31,6 +31,7 @@
 	private final IDocumentListener documentListener = new IDocumentListener() {
 		@Override
 		public void attributeChanged(final AttributeChangeEvent event) {
+			visualization.rebuildContentRange(event.getParent(), event.getParent().getRange());
 		}
 
 		@Override
diff --git a/org.eclipse.vex.ui/src/org/eclipse/vex/ui/boxview/BoxDemoView.java b/org.eclipse.vex.ui/src/org/eclipse/vex/ui/boxview/BoxDemoView.java
index 593ca3b..4253f81 100644
--- a/org.eclipse.vex.ui/src/org/eclipse/vex/ui/boxview/BoxDemoView.java
+++ b/org.eclipse.vex.ui/src/org/eclipse/vex/ui/boxview/BoxDemoView.java
@@ -58,6 +58,7 @@
 import org.eclipse.vex.core.provisional.dom.ContentRange;
 import org.eclipse.vex.core.provisional.dom.IContent;
 import org.eclipse.vex.core.provisional.dom.IDocument;
+import org.eclipse.vex.core.provisional.dom.IElement;
 import org.w3c.css.sac.CSSException;
 import org.w3c.css.sac.InputSource;
 
@@ -247,7 +248,8 @@
 	}
 
 	public void insertAnchor() {
-		boxWidget.insertElement(ANCHOR);
+		final IElement anchor = boxWidget.insertElement(ANCHOR);
+		anchor.setAttribute("id", Double.toHexString(Math.random()));
 	}
 
 	public void insertComment() {
