diff --git a/tests/org.eclipse.jst.jsp.ui.tests/src/org/eclipse/jst/jsp/ui/tests/JSPUITestSuite.java b/tests/org.eclipse.jst.jsp.ui.tests/src/org/eclipse/jst/jsp/ui/tests/JSPUITestSuite.java
index 6cce0fa..0dcd911 100644
--- a/tests/org.eclipse.jst.jsp.ui.tests/src/org/eclipse/jst/jsp/ui/tests/JSPUITestSuite.java
+++ b/tests/org.eclipse.jst.jsp.ui.tests/src/org/eclipse/jst/jsp/ui/tests/JSPUITestSuite.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2006 IBM Corporation and others.
+ * Copyright (c) 2004, 2009 IBM Corporation 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
@@ -26,6 +26,7 @@
 import org.eclipse.jst.jsp.ui.tests.partitioning.TestStructuredPartitionerJSP;
 import org.eclipse.jst.jsp.ui.tests.registry.AdapterFactoryRegistryTest;
 import org.eclipse.jst.jsp.ui.tests.validation.JSPHTMLValidatorTest;
+import org.eclipse.jst.jsp.ui.tests.validation.TestJSPMarkupValidator;
 import org.eclipse.jst.jsp.ui.tests.viewer.TestViewerConfigurationJSP;
 
 
@@ -62,6 +63,7 @@
 
 		addTest(new TestSuite(TestContentDescription.class, "Content Description Tests"));
 		addTest(new TestSuite(JSPHTMLValidatorTest.class, "JSPHTMLValidatorTest"));
+		addTest(new TestSuite(TestJSPMarkupValidator.class, "TestJSPMarkupValidator"));
 		// pa_TODO fix this test
 		//addTest(new TestSuite(JSPSearchTests.class));
 	}
diff --git a/tests/org.eclipse.jst.jsp.ui.tests/src/org/eclipse/jst/jsp/ui/tests/validation/TestJSPMarkupValidator.java b/tests/org.eclipse.jst.jsp.ui.tests/src/org/eclipse/jst/jsp/ui/tests/validation/TestJSPMarkupValidator.java
new file mode 100644
index 0000000..614fa2a
--- /dev/null
+++ b/tests/org.eclipse.jst.jsp.ui.tests/src/org/eclipse/jst/jsp/ui/tests/validation/TestJSPMarkupValidator.java
@@ -0,0 +1,111 @@
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jst.jsp.ui.tests.validation;
+
+import junit.framework.TestCase;
+
+import org.eclipse.jface.text.Region;
+import org.eclipse.jst.jsp.ui.internal.validation.JSPMarkupValidator;
+import org.eclipse.wst.sse.core.StructuredModelManager;
+import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument;
+import org.eclipse.wst.sse.ui.internal.reconcile.validator.IncrementalReporter;
+import org.eclipse.wst.validation.internal.provisional.core.IReporter;
+import org.eclipse.wst.xml.ui.internal.validation.MarkupValidator;
+
+public class TestJSPMarkupValidator extends TestCase {
+	private MarkupValidator fValidator;
+	private IReporter fReporter;
+	private IStructuredDocument fDocument;
+
+	/**
+	 * Validates document
+	 * 
+	 * @param contents
+	 *            contents to set in document
+	 * @return true if there was a validation error false otherwise
+	 */
+	private boolean validateError(String contents) {
+		fDocument.set(contents);
+		fValidator.validate(new Region(0, fDocument.getLength()), null, fReporter);
+		return fReporter.getMessages().isEmpty();
+	}
+
+	protected void setUp() throws Exception {
+		// just create once
+		if (fValidator == null)
+			fValidator = new JSPMarkupValidator();
+		if (fReporter == null)
+			fReporter = new IncrementalReporter(null);
+		if (fDocument == null)
+			fDocument = StructuredModelManager.getModelManager().createStructuredDocumentFor("onfire.xml", "", null);
+
+		fValidator.connect(fDocument);
+	}
+
+	protected void tearDown() throws Exception {
+		fValidator.disconnect(fDocument);
+	}
+
+	public void testAttributesInEndTag() {
+		// test for error
+		assertTrue("Should get attributes in end tag error", !validateError("<stop></stop drop=\"roll\">"));
+
+		// test for no error
+		assertTrue("Should not get attributes in end tag error", validateError("<stop></stop>"));
+	}
+
+	public void testClosingBracket() {
+		// test for error
+		assertTrue("Should get closing bracket error", !validateError("<stop </stop>"));
+
+		// test for no error
+		assertTrue("Should not get closing bracket error", validateError("<stop></stop>"));
+	}
+
+	public void testEmptyTag() {
+		// test for error
+		assertTrue("Should get empty tag error", !validateError("<>"));
+
+		// test for no error
+		assertTrue("Should not get empty tag error", validateError("<stop></stop>"));
+	}
+
+	public void testAttributeValue() {
+		// test for error
+		assertTrue("Should get attribute missing value error", !validateError("<stop drop=></stop>"));
+
+		// test for no error
+		assertTrue("Should not get attribute has no value error", validateError("<stop drop></stop>"));
+		assertTrue("Should not get attribute missing value error", validateError("<stop drop=\"roll\"></stop>"));
+	}
+
+	public void testSpaceBeforeName() {
+		// test for error
+		assertTrue("Should get tag has space before name error", !validateError("<    stop></stop>"));
+
+		// test for no error
+		assertTrue("Should not get tag has space before name error", validateError("<stop></stop>"));
+	}
+
+	public void testQuotesForAttributeValues() {
+		// test for error
+		assertTrue("Should get missing end quote error", !validateError("<stop drop=\"></stop>"));
+		assertTrue("Should get missing end quote error", !validateError("<stop drop=\"roll></stop>"));
+		assertTrue("Should get missing end quote error", !validateError("<stop drop=\'></stop>"));
+
+		// test for no error
+		assertTrue("Should not get missing quotes error", validateError("<stop drop=roll></stop>"));
+		assertTrue("Should not get missing end quote error", validateError("<stop drop=\"\"></stop>"));
+		assertTrue("Should not get missing end quote error", validateError("<stop drop=\"roll\"></stop>"));
+		assertTrue("Should not get missing end quote error", validateError("<stop drop=\'\'></stop>"));
+		assertTrue("Should not get missing quotes error", validateError("<stop drop=\'roll\'></stop>"));
+	}
+}
