new batch
diff --git a/ui/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/AbstractEditingModel.java b/ui/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/AbstractEditingModel.java
index a653093..530675d 100644
--- a/ui/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/AbstractEditingModel.java
+++ b/ui/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/AbstractEditingModel.java
@@ -95,6 +95,15 @@
 	public boolean isLoaded() {
 		return fLoaded;
 	}
+	
+	/**
+	 * @param loaded
+	 */
+	public void setLoaded(boolean loaded) {
+		// TODO: MP: TEO: Set as API?
+		fLoaded = loaded;
+	}
+	
 	/* (non-Javadoc)
 	 * @see org.eclipse.pde.core.IModel#isInSync()
 	 */
diff --git a/ui/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/DocumentObject.java b/ui/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/DocumentObject.java
index 285d4a7..e5a8d54 100644
--- a/ui/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/DocumentObject.java
+++ b/ui/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/DocumentObject.java
@@ -206,44 +206,52 @@
 		}
 	}		
 	
-	/* (non-Javadoc)
-	 * @see org.eclipse.pde.internal.core.text.plugin.PluginDocumentNode#addChildNode(org.eclipse.pde.internal.core.text.IDocumentNode, int)
+	/**
+	 * @param child
+	 * @param position
+	 * @param fireEvent
 	 */
-	public void addChildNode(IDocumentNode child, int position) {
+	protected void addChildNode(IDocumentNode child, int position, boolean fireEvent) {
 		super.addChildNode(child, position);
 		// Fire event
-		if (shouldFireEvent()) {
+		if (fireEvent && shouldFireEvent()) {
 			fireStructureChanged(child, IModelChangedEvent.INSERT);
 		}		
 	}
 	
-	/* (non-Javadoc)
-	 * @see org.eclipse.pde.internal.core.text.plugin.PluginDocumentNode#addChildNode(org.eclipse.pde.internal.core.text.IDocumentNode)
+	/**
+	 * @param child
+	 * @param fireEvent
 	 */
-	public void addChildNode(IDocumentNode child) {
+	protected void addChildNode(IDocumentNode child, boolean fireEvent) {
 		super.addChildNode(child);
 		// Fire event
-		if (shouldFireEvent()) {
+		if (fireEvent && shouldFireEvent()) {
 			fireStructureChanged(child, IModelChangedEvent.INSERT);
 		}		
 	}
 	
-	/* (non-Javadoc)
-	 * @see org.eclipse.pde.internal.core.text.plugin.PluginDocumentNode#removeChildNode(org.eclipse.pde.internal.core.text.IDocumentNode)
+	/**
+	 * @param child
+	 * @param fireEvent
+	 * @return
 	 */
-	public IDocumentNode removeChildNode(IDocumentNode child) {
+	protected IDocumentNode removeChildNode(IDocumentNode child, boolean fireEvent) {
 		IDocumentNode node = super.removeChildNode(child);
 		// Fire event
-		if (shouldFireEvent()) {
+		if (fireEvent && shouldFireEvent()) {
 			fireStructureChanged(child, IModelChangedEvent.REMOVE);
 		}	
 		return node;
 	}
 	
-	/* (non-Javadoc)
-	 * @see org.eclipse.pde.internal.core.text.plugin.PluginDocumentNode#removeChildNode(int)
+	/**
+	 * @param index
+	 * @param clazz
+	 * @param fireEvent
+	 * @return
 	 */
-	public IDocumentNode removeChildNode(int index, Class clazz) {
+	protected IDocumentNode removeChildNode(int index, Class clazz, boolean fireEvent) {
 		// Validate index
 		if ((index < 0) ||
 				(index >= getChildCount()) ||
@@ -255,7 +263,7 @@
 		// Remove the node
 		IDocumentNode node = super.removeChildNode(index);
 		// Fire event
-		if (shouldFireEvent()) {
+		if (fireEvent && shouldFireEvent()) {
 			fireStructureChanged(node, IModelChangedEvent.REMOVE);
 		}	
 		return node;
@@ -285,17 +293,17 @@
 		} else if (newNode == null) {
 			// NEW = NULL, OLD = DEF
 			// Remove the old node
-			removeChildNode((IDocumentNode)oldNode);
+			removeChildNode((IDocumentNode)oldNode, true);
 		} else if (oldNode == null) {
 			// NEW = DEF, OLD = NULL
 			// Add the new node as the first child
-			addChildNode((IDocumentNode)newNode, 0);
+			addChildNode((IDocumentNode)newNode, 0, true);
 		} else {
 			// NEW = DEF, OLD = DEF
 			// Remove the old node
-			removeChildNode((IDocumentNode)oldNode);
+			removeChildNode((IDocumentNode)oldNode, true);
 			// Add the new node as the first child
-			addChildNode((IDocumentNode)newNode, 0);
+			addChildNode((IDocumentNode)newNode, 0, true);
 		}
 		
 		if (shouldFireEvent()) {
@@ -528,13 +536,13 @@
 			return;
 		}
 		// Remove the node
-		removeChildNode(node);
+		removeChildNode(node, true);
 		// Removing the node and moving it to a positive relative index alters
 		// the indexing for insertion; however, this pads the new relative
 		// index by 1, allowing it to be inserted one position after as 
 		// desired
 		// Add the node back at the specified index
-		addChildNode(node, newIndex);
+		addChildNode(node, newIndex, true);
 	}
 	
 	/**
diff --git a/ui/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/XMLEditingModel.java b/ui/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/XMLEditingModel.java
index 8bb4a06..e082943 100644
--- a/ui/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/XMLEditingModel.java
+++ b/ui/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/XMLEditingModel.java
@@ -10,6 +10,7 @@
  *******************************************************************************/
 package org.eclipse.pde.internal.core.text;
 
+import java.io.BufferedInputStream;
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.io.InputStream;
@@ -51,29 +52,7 @@
 		} catch (FactoryConfigurationError e) {
 		}
 	}
-
-	/**
-	 * @param document
-	 */
-	public void reload(IDocument document) {
-		// Get the document's text
-		String text = document.get();
-		InputStream stream = null;
-
-		try {
-			// Turn the document's text into a stream
-			stream = new ByteArrayInputStream(text.getBytes("UTF8")); //$NON-NLS-1$
-			// Reload the model using the stream
-			reload(stream, false);
-			// Remove the dirty (*) indicator from the editor window
-			setDirty(false);
-		} catch (UnsupportedEncodingException e) {
-			PDECore.logException(e);
-		} catch (CoreException e) {
-			// Ignore
-		}
-	}
-
+	
 	protected abstract DefaultHandler createDocumentHandler(IModel model, boolean reconciling);
 	
 	public void adjustOffsets(IDocument document) {
@@ -87,10 +66,22 @@
 		}
 	}	
 
+	/**
+	 * @return
+	 */
+	private boolean isResourceFile() {
+		if (getUnderlyingResource() == null) {
+			return false;
+		} else if ((getUnderlyingResource() instanceof IFile) == false) {
+			return false;
+		}
+		return true;
+	}
+	
 	public void save() {
-		if (getUnderlyingResource() == null 
-				|| !(getUnderlyingResource() instanceof IFile))
+		if (isResourceFile() == false) {
 			return;
+		}
 		try {
 			IFile file = (IFile)getUnderlyingResource();
 			String contents = getContents();
@@ -108,9 +99,53 @@
 		}
 	}
 
+	/* (non-Javadoc)
+	 * @see org.eclipse.pde.internal.core.IWorkspaceModel#reload()
+	 */
+	public void reload() {
+		if (isResourceFile() == false) {
+			return;
+		}
+		IFile file = (IFile)getUnderlyingResource();		
+		// Underlying file has to exist in order to reload the model
+		if (file.exists()) {
+			InputStream stream = null;
+			try {
+				// Get the file contents
+				stream = new BufferedInputStream(file.getContents(true));
+				// Load the model using the last saved file contents
+				reload(stream, false);
+				// Remove the dirty (*) indicator from the editor window
+				setDirty(false);
+			} catch (CoreException e) {
+				// Ignore
+			} 
+		} 		
+	}	
+	
+	public void reload(IDocument document) {
+		// Get the document's text
+		String text = document.get();
+		InputStream stream = null;
+
+		try {
+			// Turn the document's text into a stream
+			stream = new ByteArrayInputStream(text.getBytes("UTF8")); //$NON-NLS-1$
+			// Reload the model using the stream
+			reload(stream, false);
+			// Remove the dirty (*) indicator from the editor window
+			setDirty(false);
+		} catch (UnsupportedEncodingException e) {
+			PDECore.logException(e);
+		} catch (CoreException e) {
+			// Ignore
+		}
+	}	
+	
 	public String getContents() {
 		StringWriter swriter = new StringWriter();
 		PrintWriter writer = new PrintWriter(swriter);
+		setLoaded(true);
 		save(writer);
 		writer.flush();
 		try {
@@ -120,6 +155,9 @@
 		return swriter.toString();
 	}
 
+	/* (non-Javadoc)
+	 * @see org.eclipse.pde.internal.core.text.AbstractEditingModel#save(java.io.PrintWriter)
+	 */
 	public void save(PrintWriter writer) {
 		if (isLoaded()) {
 			getRoot().write("", writer); //$NON-NLS-1$
diff --git a/ui/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/cheatsheet/simple/SimpleCS.java b/ui/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/cheatsheet/simple/SimpleCS.java
index 9d220a8..b9f329c 100644
--- a/ui/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/cheatsheet/simple/SimpleCS.java
+++ b/ui/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/cheatsheet/simple/SimpleCS.java
@@ -38,7 +38,7 @@
 	 */
 	public void addItem(ISimpleCSItem item) {
 		((DocumentObject)item).setInTheModel(true);
-		addChildNode((IDocumentNode)item);
+		addChildNode((IDocumentNode)item, true);
 	}
 
 	/* (non-Javadoc)
@@ -46,7 +46,7 @@
 	 */
 	public void addItem(int index, ISimpleCSItem item) {
 		((DocumentObject)item).setInTheModel(true);
-		addChildNode((IDocumentNode)item, index);
+		addChildNode((IDocumentNode)item, index, true);
 	}
 	
 	/* (non-Javadoc)
@@ -131,7 +131,7 @@
 	 * @see org.eclipse.pde.internal.core.icheatsheet.simple.ISimpleCS#removeItem(org.eclipse.pde.internal.core.icheatsheet.simple.ISimpleCSItem)
 	 */
 	public void removeItem(ISimpleCSItem item) {
-		removeChildNode((IDocumentNode)item);
+		removeChildNode((IDocumentNode)item, true);
 		((DocumentObject)item).setInTheModel(false);
 	}
 
@@ -139,7 +139,7 @@
 	 * @see org.eclipse.pde.internal.core.icheatsheet.simple.ISimpleCS#removeItem(int)
 	 */
 	public void removeItem(int index) {
-		ISimpleCSItem item = (ISimpleCSItem)removeChildNode(index, ISimpleCSItem.class);
+		ISimpleCSItem item = (ISimpleCSItem)removeChildNode(index, ISimpleCSItem.class, true);
 		if (item != null) {
 			((DocumentObject)item).setInTheModel(false);
 		}
diff --git a/ui/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/cheatsheet/simple/SimpleCSItem.java b/ui/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/cheatsheet/simple/SimpleCSItem.java
index d5491ac..f1aa718 100644
--- a/ui/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/cheatsheet/simple/SimpleCSItem.java
+++ b/ui/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/cheatsheet/simple/SimpleCSItem.java
@@ -43,7 +43,7 @@
 	 */
 	public void addSubItem(ISimpleCSSubItemObject subitem) {
 		((DocumentObject)subitem).setInTheModel(true);
-		addChildNode((IDocumentNode)subitem);
+		addChildNode((IDocumentNode)subitem, true);
 	}
 
 	/* (non-Javadoc)
@@ -51,7 +51,7 @@
 	 */
 	public void addSubItem(int index, ISimpleCSSubItemObject subitem) {
 		((DocumentObject)subitem).setInTheModel(true);
-		addChildNode((IDocumentNode)subitem, index);
+		addChildNode((IDocumentNode)subitem, index, true);
 	}
 
 	/* (non-Javadoc)
@@ -159,7 +159,7 @@
 	 * @see org.eclipse.pde.internal.core.icheatsheet.simple.ISimpleCSItem#removeSubItem(org.eclipse.pde.internal.core.icheatsheet.simple.ISimpleCSSubItemObject)
 	 */
 	public void removeSubItem(ISimpleCSSubItemObject subitem) {
-		removeChildNode((IDocumentNode)subitem);
+		removeChildNode((IDocumentNode)subitem, true);
 		((DocumentObject)subitem).setInTheModel(false);
 	}
 
@@ -168,7 +168,7 @@
 	 */
 	public void removeSubItem(int index) {
 		ISimpleCSSubItemObject item = 
-			(ISimpleCSSubItemObject)removeChildNode(index, ISimpleCSSubItemObject.class);
+			(ISimpleCSSubItemObject)removeChildNode(index, ISimpleCSSubItemObject.class, true);
 		if (item != null) {
 			((DocumentObject)item).setInTheModel(false);
 		}
diff --git a/ui/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/cheatsheet/simple/SimpleCSModel.java b/ui/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/cheatsheet/simple/SimpleCSModel.java
index 6967e9b..535f250 100644
--- a/ui/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/cheatsheet/simple/SimpleCSModel.java
+++ b/ui/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/cheatsheet/simple/SimpleCSModel.java
@@ -84,6 +84,9 @@
 		return fSimpleCS;
 	}
 
+	/* (non-Javadoc)
+	 * @see org.eclipse.pde.internal.core.text.XMLEditingModel#getRoot()
+	 */
 	protected IWritable getRoot() {
 		return getSimpleCS();
 	}
diff --git a/ui/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/cheatsheet/simple/SimpleCSOnCompletion.java b/ui/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/cheatsheet/simple/SimpleCSOnCompletion.java
index b63a993..4784f12 100644
--- a/ui/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/cheatsheet/simple/SimpleCSOnCompletion.java
+++ b/ui/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/cheatsheet/simple/SimpleCSOnCompletion.java
@@ -11,7 +11,7 @@
 
 package org.eclipse.pde.internal.core.text.cheatsheet.simple;
 
-import java.io.PrintWriter;
+import java.util.ArrayList;
 import java.util.List;
 
 import org.eclipse.pde.internal.core.icheatsheet.simple.ISimpleCSModel;
@@ -37,36 +37,35 @@
 	 * @see org.eclipse.pde.internal.core.icheatsheet.simple.ISimpleCSOnCompletion#getContent()
 	 */
 	public String getContent() {
-		// TODO: MP: CURRENT: IMPLEMENT
-		return null;
+		return getXMLContent();
 	}
 
 	/* (non-Javadoc)
 	 * @see org.eclipse.pde.internal.core.icheatsheet.simple.ISimpleCSOnCompletion#setContent(java.lang.String)
 	 */
 	public void setContent(String content) {
-		// TODO: MP: CURRENT: IMPLEMENT
-
+		setXMLContent(content);
 	}
 
+	/* (non-Javadoc)
+	 * @see org.eclipse.pde.internal.core.text.cheatsheet.simple.SimpleCSObject#getChildren()
+	 */
 	public List getChildren() {
-		// TODO: MP: CURRENT: IMPLEMENT
-		return null;
+		return new ArrayList();
 	}
 
+	/* (non-Javadoc)
+	 * @see org.eclipse.pde.internal.core.text.cheatsheet.simple.SimpleCSObject#getName()
+	 */
 	public String getName() {
-		// TODO: MP: CURRENT: IMPLEMENT
-		return null;
+		return ELEMENT_ONCOMPLETION;
 	}
 
+	/* (non-Javadoc)
+	 * @see org.eclipse.pde.internal.core.text.cheatsheet.simple.SimpleCSObject#getType()
+	 */
 	public int getType() {
-		// TODO: MP: CURRENT: IMPLEMENT
-		return 0;
-	}
-
-	public void write(String indent, PrintWriter writer) {
-		// TODO: MP: CURRENT: IMPLEMENT
-		
+		return TYPE_ON_COMPLETION;
 	}
 
 }
diff --git a/ui/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/plugin/PluginDocumentNode.java b/ui/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/plugin/PluginDocumentNode.java
index 3072304..2f80a12 100644
--- a/ui/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/plugin/PluginDocumentNode.java
+++ b/ui/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/plugin/PluginDocumentNode.java
@@ -257,13 +257,16 @@
 		IDocumentNode child = (IDocumentNode)fChildren.get(index);
 		// Remove the child
 		fChildren.remove(child);
-		// Determine the new previous sibling
-		IDocumentNode prevSibling = null;
-		if (index != 0) {
-			prevSibling = (IDocumentNode)fChildren.get(index - 1);
+		// Determine the new previous sibling for the new element at the
+		// specified index
+		if (index < fChildren.size()) {
+			IDocumentNode previousSibling = null;
+			if (index != 0) {
+				previousSibling = (IDocumentNode)fChildren.get(index - 1);
+			}
+			IDocumentNode newNode = (IDocumentNode)fChildren.get(index);
+			newNode.setPreviousSibling(previousSibling);
 		}
-		child.setPreviousSibling(prevSibling);
-		
 		return child;
 	}	
 	
diff --git a/ui/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/toc/TocTopic.java b/ui/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/toc/TocTopic.java
index 8a7bba0..8e52ca5 100644
--- a/ui/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/toc/TocTopic.java
+++ b/ui/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/toc/TocTopic.java
@@ -118,7 +118,7 @@
 	 */
 	public void addChild(TocObject child) {
 		child.setInTheModel(true);
-		addChildNode(child);
+		addChildNode(child, true);
 	}
 
 	/**
@@ -136,7 +136,7 @@
 		{	currentIndex++;
 		}
 		child.setInTheModel(true);
-		addChildNode(child, currentIndex);
+		addChildNode(child, currentIndex, true);
 	}
 
 	/* (non-Javadoc)
@@ -153,7 +153,7 @@
 	 * @param child The child to add to the TocObject
 	 */
 	public void removeChild(TocObject tocObject) {
-		removeChildNode(tocObject);
+		removeChildNode(tocObject, true);
 		tocObject.setInTheModel(false);
 	}
 
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/toc/TocSourcePage.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/toc/TocSourcePage.java
index 41ee9c1..10fe483 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/toc/TocSourcePage.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/toc/TocSourcePage.java
@@ -13,10 +13,10 @@
 
 import org.eclipse.jface.viewers.ILabelProvider;
 import org.eclipse.jface.viewers.ITreeContentProvider;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
 import org.eclipse.jface.viewers.ViewerComparator;
+import org.eclipse.pde.internal.core.text.IDocumentNode;
+import org.eclipse.pde.internal.ui.PDEPlugin;
 import org.eclipse.pde.internal.ui.PDEUIMessages;
-import org.eclipse.pde.internal.ui.editor.ISortableContentOutlinePage;
 import org.eclipse.pde.internal.ui.editor.PDEFormEditor;
 import org.eclipse.pde.internal.ui.editor.XMLSourcePage;
 
@@ -52,43 +52,40 @@
 	 * @see org.eclipse.pde.internal.ui.editor.PDESourcePage#createOutlineContentProvider()
 	 */
 	public ITreeContentProvider createOutlineContentProvider() {
-		return null;
+		return new TocContentProvider();
 	}
 
 	/* (non-Javadoc)
 	 * @see org.eclipse.pde.internal.ui.editor.PDESourcePage#createOutlineLabelProvider()
 	 */
 	public ILabelProvider createOutlineLabelProvider() {
-		return null;
+		return PDEPlugin.getDefault().getLabelProvider();
 	}
 
 	/* (non-Javadoc)
-	 * @see org.eclipse.pde.internal.ui.editor.PDESourcePage#updateSelection(java.lang.Object)
-	 */
-	public void updateSelection(Object object) {
-		// NO-OP
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.pde.internal.ui.editor.PDESourcePage#updateSelection(org.eclipse.jface.viewers.SelectionChangedEvent)
-	 */
-	public void updateSelection(SelectionChangedEvent event) {
-		// NO-OP
-	}
-	
-	/* (non-Javadoc)
-	 * @see org.eclipse.pde.internal.ui.editor.PDESourcePage#createOutlinePage()
-	 */
-	protected ISortableContentOutlinePage createOutlinePage() {
-		//TODO: Create a TOC source page outline
-		return new TocFormOutlinePage((PDEFormEditor)getEditor());
-	}	
-	
-	/* (non-Javadoc)
 	 * @see org.eclipse.ui.part.EditorPart#setPartName(java.lang.String)
 	 */
 	protected void setPartName(String partName) {
 		super.setPartName(PDEUIMessages.EditorSourcePage_pageNameSource);
 	}
+
+	
+	protected boolean isSelectionListener() {
+		return true;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.pde.internal.ui.editor.PDESourcePage#updateSelection(java.lang.Object)
+	 */
+	public void updateSelection(Object object)
+	{	if ((object instanceof IDocumentNode) && 
+				!((IDocumentNode)object).isErrorNode()) {
+			fSelection = object;
+			setHighlightRange((IDocumentNode)object, true);
+			setSelectedRange((IDocumentNode)object, false);
+		} else {
+			//resetHighlightRange();
+		}
+	}
 	
 }
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/toc/TocTreeSection.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/toc/TocTreeSection.java
index 47fe8c2..983ee1a 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/toc/TocTreeSection.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/toc/TocTreeSection.java
@@ -50,8 +50,6 @@
 import org.eclipse.pde.internal.ui.editor.toc.actions.TocAddObjectAction;
 import org.eclipse.pde.internal.ui.editor.toc.actions.TocAddTopicAction;
 import org.eclipse.pde.internal.ui.editor.toc.actions.TocRemoveObjectAction;
-import org.eclipse.pde.internal.ui.editor.toc.details.TocAbstractDetails;
-import org.eclipse.pde.internal.ui.editor.toc.details.TocDetails;
 import org.eclipse.pde.internal.ui.parts.TreePart;
 import org.eclipse.pde.internal.ui.util.PDELabelUtility;
 import org.eclipse.swt.SWT;
@@ -70,7 +68,6 @@
 import org.eclipse.ui.actions.ActionFactory;
 import org.eclipse.ui.actions.ContributionItemFactory;
 import org.eclipse.ui.dialogs.PatternFilter;
-import org.eclipse.ui.forms.IDetailsPage;
 import org.eclipse.ui.forms.widgets.FormToolkit;
 import org.eclipse.ui.forms.widgets.Section;
 import org.eclipse.ui.ide.IDE;
@@ -1007,38 +1004,7 @@
 	 * @param event The world-change event
 	 */
 	private void handleModelEventWorldChanged(IModelChangedEvent event) {
-		Object[] objects = event.getChangedObjects();
-
-		if (objects[0] != null && objects[0] instanceof TocObject) 
-		{	TocObject object = (TocObject) objects[0];
-			if (object.getType() == ITocConstants.TYPE_TOC) {
-				// Get the form page
-				TocPage page = (TocPage)getPage();			
-				// Remember the currently selected page
-				IDetailsPage previousDetailsPage = 
-					page.getBlock().getDetailsPart().getCurrentPage();
-				// Replace the current dirty model with the model reloaded from
-				// file
-				fModel = object.getModel();
-				
-				// Re-initialize the tree viewer.  Makes a details page selection
-				initializeTreeViewer();
-				
-				// Get the current details page selection
-				IDetailsPage currentDetailsPage = 
-					page.getBlock().getDetailsPart().getCurrentPage();
-				
-				// If the selected page before the revert is the same as the 
-				// selected page after the revert, then its fields will need to
-				// be updated
-				
-				// TODO: Revisit to see if updating details page is necessary - especially after making static
-				if (currentDetailsPage.equals(previousDetailsPage) && 
-						currentDetailsPage instanceof TocDetails) {
-					((TocAbstractDetails)currentDetailsPage).updateFields();
-				}
-			}		
-		}
+		markStale();
 	}	
 	
 	/**
@@ -1115,6 +1081,16 @@
 		}
 	}	
 
+	public void refresh() {
+		TocModel model = (TocModel)getPage().getModel();
+		fTocTree.setInput(model);
+		fTocTree.expandToLevel(2);
+		fTocTree.setSelection(new StructuredSelection(model.getToc()), true);
+		getManagedForm().fireSelectionChanged(this,
+				fTocTree.getSelection());
+		super.refresh();
+	}
+
 	/* (non-Javadoc)
 	 * @see org.eclipse.pde.internal.ui.editor.TreeSection#createTreeViewer(org.eclipse.swt.widgets.Composite, int)
 	 */