diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/HTMLEditor.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/HTMLEditor.java
index 143c156..2756820 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/HTMLEditor.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/HTMLEditor.java
@@ -43,6 +43,8 @@
 import org.eclipse.jst.pagedesigner.IJMTConstants;
 import org.eclipse.jst.pagedesigner.PDPlugin;
 import org.eclipse.jst.pagedesigner.dnd.internal.DesignerSourceMouseTrackAdapter;
+import org.eclipse.jst.pagedesigner.editors.IWPEPersistenceListener.IPersistenceEvent;
+import org.eclipse.jst.pagedesigner.editors.IWPEPersistenceListener.PersistenceEventType;
 import org.eclipse.jst.pagedesigner.editors.actions.DesignPageActionContributor;
 import org.eclipse.jst.pagedesigner.editors.pagedesigner.PageDesignerResources;
 import org.eclipse.jst.pagedesigner.jsp.core.pagevar.IPageVariablesProvider;
@@ -175,6 +177,8 @@
 //		}
 //	}
 
+	private List<IWPEPersistenceListener> persistenceListeners;
+
 	/**
 	 * Default constructor
 	 */
@@ -476,7 +480,13 @@
 	 * @return StructuredTextEditor
 	 */
 	protected StructuredTextEditor createTextEditor() {
-		return new DesignerStructuredTextEditorJSP();
+		return new DesignerStructuredTextEditorJSP() {
+			@Override
+			protected void performRevert() {
+				super.performRevert();
+				firePersistenceEvent(PersistenceEventType.REVERTED);
+			}
+		};
 	}
 
 	private void disconnectDesignPage() {
@@ -524,12 +534,18 @@
 			_model = null;
 		}
 
+		if (persistenceListeners != null) {
+			persistenceListeners.clear();
+			persistenceListeners = null;
+		}
+
 		super.dispose();
 		
 	}
 
 	public void doSave(IProgressMonitor monitor) {
 		_textEditor.doSave(monitor);
+		firePersistenceEvent(PersistenceEventType.SAVED);
 	}
 
 	/*
@@ -542,6 +558,7 @@
 	 */
 	public void doSaveAs() {
 		_textEditor.doSaveAs();
+		firePersistenceEvent(PersistenceEventType.SAVED_AS);
 	}
 
 	private void editorInputIsAcceptable(IEditorInput input)
@@ -1228,4 +1245,57 @@
 		}
 	}
 
+	/**
+	 * Adds a {@link IWPEPersistenceListener persistence listener} to this editor.
+	 * 
+	 * <p>This type of listener is cleaned when the editor is disposed.</p>
+	 * 
+	 * @param listener
+	 */
+	public void addPersistenceListener(IWPEPersistenceListener listener) {
+		if (persistenceListeners == null) {
+			persistenceListeners = new ArrayList<IWPEPersistenceListener>(5);
+		}
+		persistenceListeners.add(listener);
+	}
+
+	/**
+	 * Removes a {@link IWPEPersistenceListener persistence listener} added to this 
+	 * editor.
+	 * 
+	 * <p>This type of listener is cleaned when the editor is disposed.</p>
+	 * 
+	 * @param listener
+	 */
+	public void removePersistenceListener(IWPEPersistenceListener listener) {
+		if (persistenceListeners != null) {
+			if (persistenceListeners.remove(listener) && persistenceListeners.isEmpty()) {
+				persistenceListeners = null;
+			}
+		}
+	}
+
+	private void firePersistenceEvent(final PersistenceEventType type) {
+		if (persistenceListeners != null) {
+			List<IWPEPersistenceListener> listeners = new ArrayList<IWPEPersistenceListener>(persistenceListeners);
+			IPersistenceEvent event = new IPersistenceEvent() {			
+				public HTMLEditor getWPEInstance() {
+					return HTMLEditor.this;
+				}
+				
+				public PersistenceEventType getEventType() {
+					return type;
+				}
+			};
+			
+			for (IWPEPersistenceListener listener : listeners) {
+				try {
+					listener.notify(event);
+				} catch (Exception e) {
+					PDPlugin.log("Exception thrown while notifying a persistence listener", e); //$NON-NLS-1$
+				}
+			}
+		}
+	}
+
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/IWPEPersistenceListener.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/IWPEPersistenceListener.java
new file mode 100644
index 0000000..af319bc
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/IWPEPersistenceListener.java
@@ -0,0 +1,52 @@
+package org.eclipse.jst.pagedesigner.editors;
+
+/**
+ * Listens for persistence events fired from WPE instances, including
+ * save and revert.
+ */
+public interface IWPEPersistenceListener {
+	/**
+	 * The type of the persistence event.
+	 *
+	 */
+	public static enum PersistenceEventType {
+		/**
+		 * WPE was saved
+		 */
+		SAVED,
+
+		/**
+		 * WPE was saved as
+		 */
+		SAVED_AS,
+
+		/**
+		 * WPE was reverted.
+		 */
+		REVERTED;
+	}		
+
+	/**
+	 * A persistence event.
+	 * 
+	 * <p>Not intended to be implemented by clients.</p>
+	 */	
+	public static interface IPersistenceEvent {		
+		/**
+		 * @return editor
+		 */
+		public HTMLEditor getWPEInstance();
+
+		/**
+		 * @return EventType
+		 */
+		public PersistenceEventType getEventType();		
+	}
+
+	/**
+	 * A persistence event has occurred
+	 * @param event 
+	 */	
+	public void notify(IPersistenceEvent event);
+
+}
