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 0a0d1ea..773158a 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
@@ -287,11 +287,29 @@
 			return null;
 		}
 
+		return frame(visualizeContentProperty(node, pseudoElementStyles, paragraph(pseudoElementStyles)), pseudoElementStyles);
+	}
+
+	private static IInlineBox visualizePseudoElementInline(final Styles styles, final INode node, final PseudoElement pseudoElement) {
+		if (!styles.hasPseudoElement(pseudoElement)) {
+			return null;
+		}
+
+		final Styles pseudoElementStyles = styles.getPseudoElementStyles(pseudoElement);
+		if (!isDisplayedInline(pseudoElementStyles)) {
+			return null;
+		}
+
+		return frame(visualizeContentProperty(node, pseudoElementStyles, inlineContainer()), pseudoElementStyles);
+	}
+
+	private static <P extends IParentBox<IInlineBox>> P visualizeContentProperty(final INode node, final Styles styles, final P parent) {
 		final StringBuilder content = new StringBuilder();
-		for (final IPropertyContent part : pseudoElementStyles.getAllContent(node)) {
+		for (final IPropertyContent part : styles.getAllContent(node)) {
 			content.append(part);
 		}
-		return frame(paragraph(pseudoElementStyles, staticText(content.toString(), pseudoElementStyles)), pseudoElementStyles);
+		parent.appendChild(staticText(content.toString(), styles));
+		return parent;
 	}
 
 	private static boolean containsInlineContent(final Collection<VisualizeResult> visualizeResults) {
@@ -430,23 +448,6 @@
 		return parent;
 	}
 
-	private static IInlineBox visualizePseudoElementInline(final Styles styles, final INode node, final PseudoElement pseudoElement) {
-		if (!styles.hasPseudoElement(pseudoElement)) {
-			return null;
-		}
-
-		final Styles pseudoElementStyles = styles.getPseudoElementStyles(pseudoElement);
-		if (!isDisplayedInline(pseudoElementStyles)) {
-			return null;
-		}
-
-		final StringBuilder content = new StringBuilder();
-		for (final IPropertyContent part : pseudoElementStyles.getAllContent(node)) {
-			content.append(part);
-		}
-		return frame(inlineContainer(staticText(content.toString(), pseudoElementStyles)), pseudoElementStyles);
-	}
-
 	private static <P extends IParentBox<IInlineBox>> P placeholderForEmptyNode(final INode node, final Styles styles, final P parent) {
 		parent.appendChild(endOffsetPlaceholder(node, styles));
 		//		if (false) { // TODO allow to provide a placeholder text in the CSS
