diff --git a/org.eclipse.core.filebuffers/build.properties b/org.eclipse.core.filebuffers/build.properties
index ee56c88..95c07de 100644
--- a/org.eclipse.core.filebuffers/build.properties
+++ b/org.eclipse.core.filebuffers/build.properties
@@ -12,4 +12,6 @@
                plugin.xml,\
                *.jar,\
                about.html
-source.filebuffers.jar = src/
\ No newline at end of file
+src.includes = about.html,\
+               schema/
+source.filebuffers.jar = src/
diff --git a/org.eclipse.ui.editors/src/org/eclipse/ui/editors/text/TextEditor.java b/org.eclipse.ui.editors/src/org/eclipse/ui/editors/text/TextEditor.java
index 96c2492..37add2c 100644
--- a/org.eclipse.ui.editors/src/org/eclipse/ui/editors/text/TextEditor.java
+++ b/org.eclipse.ui.editors/src/org/eclipse/ui/editors/text/TextEditor.java
@@ -82,7 +82,6 @@
 	 * Initializes this editor.
 	 */
 	protected void initializeEditor() {
-		super.initializeEditor();
 		setEditorContextMenuId("#TextEditorContext"); //$NON-NLS-1$
 		setRulerContextMenuId("#TextRulerContext"); //$NON-NLS-1$
 		setHelpContextId(ITextEditorHelpContextIds.TEXT_EDITOR);
diff --git a/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/ExtendedTextEditor.java b/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/ExtendedTextEditor.java
index badf08d..ff3f76f 100644
--- a/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/ExtendedTextEditor.java
+++ b/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/ExtendedTextEditor.java
@@ -152,6 +152,8 @@
 	 */
 	public ExtendedTextEditor() {
 		super();
+		fAnnotationPreferences= new MarkerAnnotationPreferences();
+		setRangeIndicator(new DefaultRangeIndicator());
 		initializeKeyBindingScopes();
 		initializeEditor();
 	}
@@ -160,8 +162,6 @@
 	 * Initializes this editor.
 	 */
 	protected void initializeEditor() {
-		fAnnotationPreferences= new MarkerAnnotationPreferences();
-		setRangeIndicator(new DefaultRangeIndicator());
 		setPreferenceStore(TextEditorPlugin.getDefault().getPreferenceStore());
 	}
 
@@ -204,7 +204,7 @@
 		fAnnotationAccess= createAnnotationAccess();
 		fOverviewRuler= createOverviewRuler(getSharedColors());
 		
-		ISourceViewer viewer= new SourceViewer(parent, ruler, getOverviewRuler(), isPrefOverviewRulerVisible(), styles);
+		ISourceViewer viewer= new SourceViewer(parent, ruler, getOverviewRuler(), isOverviewRulerVisible(), styles);
 		// ensure decoration support has been created and configured.
 		getSourceViewerDecorationSupport(viewer);
 		
@@ -267,7 +267,7 @@
 	/**
 	 * Tells whether the overview ruler is visible.
 	 */
-	protected boolean isPrefOverviewRulerVisible() {
+	protected boolean isOverviewRulerVisible() {
 		IPreferenceStore store= getPreferenceStore();
 		return store != null ? store.getBoolean(OVERVIEW_RULER) : false;
 	}
@@ -313,7 +313,7 @@
 	 * a separate change ruler gets displayed.
 	 */
 	private void ensureChangeInfoCanBeDisplayed() {
-		if (isPrefLineNumberRulerVisible()) {
+		if (isLineNumberRulerVisible()) {
 			if (!(fLineNumberRulerColumn instanceof IChangeRulerColumn)) {
 				hideLineNumberRuler();
 				// HACK: set state already so a change ruler is created. Not needed once always a change line number bar gets installed
@@ -435,7 +435,7 @@
 	 * 
 	 * @return <code>true</code> if the line numbers should be visible
 	 */
-	protected boolean isPrefLineNumberRulerVisible() {
+	protected boolean isLineNumberRulerVisible() {
 		IPreferenceStore store= getPreferenceStore();
 		return store != null ? store.getBoolean(LINE_NUMBER_RULER) : false;
 	}
@@ -613,7 +613,7 @@
 		CompositeRuler ruler= new CompositeRuler();
 		ruler.addDecorator(0, new AnnotationRulerColumn(VERTICAL_RULER_WIDTH));
 		
-		if (isPrefLineNumberRulerVisible())
+		if (isLineNumberRulerVisible())
 			ruler.addDecorator(1, createLineNumberRulerColumn());
 		else if (isPrefQuickDiffAlwaysOn())
 			ruler.addDecorator(1, createChangeRulerColumn());
@@ -635,7 +635,7 @@
 			String property= event.getProperty();	
 			
 			if (fSourceViewerDecorationSupport != null && fOverviewRuler != null && OVERVIEW_RULER.equals(property))  {
-				if (isPrefOverviewRulerVisible())
+				if (isOverviewRulerVisible())
 					showOverviewRuler();
 				else
 					hideOverviewRuler();
@@ -643,7 +643,7 @@
 			}
 			
 			if (LINE_NUMBER_RULER.equals(property)) {
-				if (isPrefLineNumberRulerVisible())
+				if (isLineNumberRulerVisible())
 					showLineNumberRuler();
 				else
 					hideLineNumberRuler();
