diff --git a/org.eclipse.vex.core.tests/src/org/eclipse/vex/core/internal/widget/VexWidgetTest.java b/org.eclipse.vex.core.tests/src/org/eclipse/vex/core/internal/widget/VexWidgetTest.java
index 7e699d0..58e541e 100644
--- a/org.eclipse.vex.core.tests/src/org/eclipse/vex/core/internal/widget/VexWidgetTest.java
+++ b/org.eclipse.vex.core.tests/src/org/eclipse/vex/core/internal/widget/VexWidgetTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2010, Florian Thienel and others.
+ * Copyright (c) 2010, 2016 Florian Thienel and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -39,15 +39,22 @@
 	public static final QualifiedName PRE = new QualifiedName(null, "pre");
 
 	private IDocumentEditor editor;
+	private FakeCursor cursor;
 
 	@Before
 	public void setUp() throws Exception {
-		editor = new BaseVexWidget(new MockHostComponent());
+		cursor = new FakeCursor(null);
+		editor = new DocumentEditor(cursor);
+	}
+
+	private void useDocument(final IDocument document) {
+		cursor.setDocument(document);
+		editor.setDocument(document);
 	}
 
 	@Test
 	public void provideOnlyAllowedElementsFromDtd() throws Exception {
-		editor.setDocument(createDocumentWithDTD(TEST_DTD, "section"));
+		useDocument(createDocumentWithDTD(TEST_DTD, "section"));
 		assertCanInsertOnly(editor, "title", "para");
 		editor.insertElement(new QualifiedName(null, "title"));
 		assertCanInsertOnly(editor);
@@ -60,7 +67,7 @@
 
 	@Test
 	public void provideOnlyAllowedElementsFromSimpleSchema() throws Exception {
-		editor.setDocument(createDocument(CONTENT_NS, "p"));
+		useDocument(createDocument(CONTENT_NS, "p"));
 		assertCanInsertOnly(editor, "b", "i");
 		editor.insertElement(new QualifiedName(CONTENT_NS, "b"));
 		assertCanInsertOnly(editor, "b", "i");
@@ -70,7 +77,7 @@
 
 	@Test
 	public void provideOnlyAllowedElementFromComplexSchema() throws Exception {
-		editor.setDocument(createDocument(STRUCTURE_NS, "chapter"));
+		useDocument(createDocument(STRUCTURE_NS, "chapter"));
 		assertCanInsertOnly(editor, "title", "chapter", "p");
 		editor.insertElement(new QualifiedName(STRUCTURE_NS, "title"));
 		assertCanInsertOnly(editor);
@@ -85,8 +92,7 @@
 
 	@Test
 	public void provideNoAllowedElementsForInsertionInComment() throws Exception {
-		final IDocument document = createDocument(STRUCTURE_NS, "chapter");
-		editor.setDocument(document);
+		useDocument(createDocument(STRUCTURE_NS, "chapter"));
 		editor.insertElement(new QualifiedName(STRUCTURE_NS, "title"));
 		editor.moveBy(1);
 		editor.insertElement(new QualifiedName(CONTENT_NS, "p"));
@@ -97,7 +103,7 @@
 
 	@Test
 	public void undoRemoveCommentTag() throws Exception {
-		editor.setDocument(createDocument(STRUCTURE_NS, "chapter"));
+		useDocument(createDocument(STRUCTURE_NS, "chapter"));
 		editor.insertElement(new QualifiedName(CONTENT_NS, "p"));
 		editor.insertText("1text before comment1");
 		final INode comment = editor.insertComment();
@@ -143,18 +149,6 @@
 		assertEquals("first position", 31, firstPositionInSecondLine.getOffset());
 	}
 
-	@Test
-	public void whenMovingCursorUp_shouldNotGetStuckInHigherLevelElement() throws Exception {
-		final IDocument document = createDocument(STRUCTURE_NS, "chapter");
-		editor.setDocument(document);
-		editor.insertElement(new QualifiedName(CONTENT_NS, "p"));
-		editor.insertText("para 1");
-		editor.moveTo(new ContentPosition(document, 1));
-
-		editor.moveToNextLine(false);
-		assertEquals(2, editor.getCaretPosition().getOffset());
-	}
-
 	public static IDocument createDocumentWithDTD(final String dtdIdentifier, final String rootElementName) {
 		final IValidator validator = new WTPVEXValidator(dtdIdentifier);
 		final Document document = new Document(new QualifiedName(null, rootElementName));
