diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentassist/JSPDummyContentAssistProcessor.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentassist/JSPDummyContentAssistProcessor.java
index 8e075fa..cbab2b8 100644
--- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentassist/JSPDummyContentAssistProcessor.java
+++ b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentassist/JSPDummyContentAssistProcessor.java
@@ -10,8 +10,6 @@
  *******************************************************************************/
 package org.eclipse.jst.jsp.ui.internal.contentassist;
 
-
-
 import java.util.List;
 import java.util.Properties;
 import java.util.Vector;
@@ -27,7 +25,6 @@
 import org.eclipse.wst.xml.core.internal.contentmodel.CMElementDeclaration;
 import org.eclipse.wst.xml.core.internal.contentmodel.CMNamedNodeMap;
 import org.eclipse.wst.xml.core.internal.contentmodel.CMNode;
-import org.eclipse.wst.xml.core.internal.contentmodel.modelquery.ModelQuery;
 import org.eclipse.wst.xml.core.internal.provisional.document.IDOMNode;
 import org.eclipse.wst.xml.ui.internal.contentassist.AbstractContentAssistProcessor;
 import org.eclipse.wst.xml.ui.internal.contentassist.ContentAssistRequest;
@@ -46,7 +43,6 @@
 		super.addAttributeNameProposals(contentAssistRequest);
 	}
 
-
 	protected void addAttributeValueProposals(ContentAssistRequest contentAssistRequest) {
 		super.addAttributeValueProposals(contentAssistRequest);
 	}
@@ -156,18 +152,20 @@
 		return super.computeContentProposals(documentPosition, matchString, completionRegion, nodeAtOffset, node);
 	}
 
+
 	/**
-	 * @see org.eclipse.jface.text.contentassist.IContentAssistProcessor#computeContextInformation(org.eclipse.jface.text.ITextViewer, int)
+	 * @see org.eclipse.jface.text.contentassist.IContentAssistProcessor#computeContextInformation(org.eclipse.jface.text.ITextViewer,
+	 *      int)
 	 */
 	public IContextInformation[] computeContextInformation(ITextViewer viewer, int documentOffset) {
 		return super.computeContextInformation(viewer, documentOffset);
 	}
 
-
 	protected ContentAssistRequest computeEndTagOpenProposals(int documentPosition, String matchString, ITextRegion completionRegion, IDOMNode nodeAtOffset, IDOMNode node) {
 		return super.computeEndTagOpenProposals(documentPosition, matchString, completionRegion, nodeAtOffset, node);
 	}
 
+
 	protected ICompletionProposal[] computeEntityReferenceProposals(int documentPosition, ITextRegion completionRegion, IDOMNode treeNode) {
 		return super.computeEntityReferenceProposals(documentPosition, completionRegion, treeNode);
 	}
@@ -247,7 +245,6 @@
 		return super.getMatchString(parent, aRegion, offset);
 	}
 
-
 	protected ITextRegion getNameRegion(IStructuredDocumentRegion flatNode) {
 		return super.getNameRegion(flatNode);
 	}
@@ -257,6 +254,7 @@
 		return super.getPossibleDataTypeValues(node, ad);
 	}
 
+
 	protected String getRequiredName(Node parentOrOwner, CMNode cmnode) {
 		return super.getRequiredName(parentOrOwner, cmnode);
 	}
@@ -269,6 +267,10 @@
 		return super.getRequiredText(parentOrOwner, elementDecl);
 	}
 
+	protected List getValidChildElementDeclarations(Element parent, int childPosition, int kindOfAction) {
+		return super.getValidChildElementDeclarations(parent, childPosition, kindOfAction);
+	}
+
 	protected void init() {
 		super.init();
 	}
@@ -289,16 +291,16 @@
 		return super.mapToProperties(map);
 	}
 
-	protected void setErrorMessage(String errorMessage, String prepend, String append) {
-		super.setErrorMessage(errorMessage, prepend, append);
+	public void setErrorMessage(String errorMessage) {
+		super.setErrorMessage(errorMessage);
 	}
 
 	protected void setErrorMessage(String errorMessage, String append) {
 		super.setErrorMessage(errorMessage, append);
 	}
 
-	public void setErrorMessage(String errorMessage) {
-		super.setErrorMessage(errorMessage);
+	protected void setErrorMessage(String errorMessage, String prepend, String append) {
+		super.setErrorMessage(errorMessage, prepend, append);
 	}
 
 	protected boolean stringsEqual(String a, String b) {
