diff --git a/modeling/plugins/org.eclipse.pde.emfforms/META-INF/MANIFEST.MF b/modeling/plugins/org.eclipse.pde.emfforms/META-INF/MANIFEST.MF
index b91033a..64bc3ab 100644
--- a/modeling/plugins/org.eclipse.pde.emfforms/META-INF/MANIFEST.MF
+++ b/modeling/plugins/org.eclipse.pde.emfforms/META-INF/MANIFEST.MF
@@ -12,11 +12,12 @@
  org.eclipse.emf.edit.ui;bundle-version="2.4.0",
  org.eclipse.ui.ide;bundle-version="3.4.0",
  org.eclipse.jface.databinding;bundle-version="1.2.0",
-  org.eclipse.wst.sse.core;bundle-version="1.1.300";resolution:=optional,
+ org.eclipse.wst.sse.core;bundle-version="1.1.300";resolution:=optional,
  org.eclipse.wst.sse.ui;bundle-version="1.1.0";resolution:=optional,
  org.eclipse.wst.xml.core;bundle-version="1.1.300";resolution:=optional,
  org.eclipse.wst.xml.ui;bundle-version="1.0.400";resolution:=optional,
- org.eclipse.jface.text;bundle-version="3.4.0"
+ org.eclipse.jface.text;bundle-version="3.4.0",
+ org.eclipse.ui.editors;bundle-version="3.4.0"
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
 Bundle-Localization: plugin
 Bundle-ActivationPolicy: lazy
diff --git a/modeling/plugins/org.eclipse.pde.emfforms/src/org/eclipse/pde/emfforms/editor/DefaultEmfFormEditorConfig.java b/modeling/plugins/org.eclipse.pde.emfforms/src/org/eclipse/pde/emfforms/editor/DefaultEmfFormEditorConfig.java
index 4b01578..0e13d14 100644
--- a/modeling/plugins/org.eclipse.pde.emfforms/src/org/eclipse/pde/emfforms/editor/DefaultEmfFormEditorConfig.java
+++ b/modeling/plugins/org.eclipse.pde.emfforms/src/org/eclipse/pde/emfforms/editor/DefaultEmfFormEditorConfig.java
@@ -8,7 +8,7 @@
  * Contributors:
  *     Anyware Technologies - initial API and implementation
  *
- * $Id: DefaultEmfFormEditorConfig.java,v 1.1 2009/04/24 11:52:09 bcabe Exp $
+ * $Id: DefaultEmfFormEditorConfig.java,v 1.2 2009/07/05 20:22:09 bcabe Exp $
  */
 package org.eclipse.pde.emfforms.editor;
 
@@ -33,6 +33,10 @@
 		return true;
 	}
 
+	public boolean isShowSourcePage() {
+		return true;
+	}
+
 	public PDEFormToolkit createPDEFormToolkit(Display display) {
 		if (this.customizedToolkit != null) {
 			return this.customizedToolkit;
diff --git a/modeling/plugins/org.eclipse.pde.emfforms/src/org/eclipse/pde/emfforms/editor/EmfFormEditor.java b/modeling/plugins/org.eclipse.pde.emfforms/src/org/eclipse/pde/emfforms/editor/EmfFormEditor.java
index 4b54b11..156d361 100644
--- a/modeling/plugins/org.eclipse.pde.emfforms/src/org/eclipse/pde/emfforms/editor/EmfFormEditor.java
+++ b/modeling/plugins/org.eclipse.pde.emfforms/src/org/eclipse/pde/emfforms/editor/EmfFormEditor.java
@@ -8,7 +8,7 @@
  * Contributors:
  *     Anyware Technologies - initial API and implementation
  *
- * $Id: EmfFormEditor.java,v 1.17 2009/08/07 16:25:33 bcabe Exp $
+ * $Id: EmfFormEditor.java,v 1.18 2009/08/18 08:00:37 bcabe Exp $
  */
 package org.eclipse.pde.emfforms.editor;
 
@@ -50,7 +50,7 @@
 import org.eclipse.jface.window.Window;
 import org.eclipse.pde.emfforms.editor.IEmfFormEditorConfig.VALIDATE_ON_SAVE;
 import org.eclipse.pde.emfforms.internal.Activator;
-import org.eclipse.pde.emfforms.internal.editor.Messages;
+import org.eclipse.pde.emfforms.internal.editor.*;
 import org.eclipse.pde.emfforms.internal.validation.ValidatingEContentAdapter;
 import org.eclipse.swt.dnd.DND;
 import org.eclipse.swt.dnd.Transfer;
@@ -67,6 +67,8 @@
 import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
 import org.eclipse.ui.views.properties.IPropertySheetPage;
 import org.eclipse.ui.views.properties.PropertySheetPage;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
 
 /**
  * A {@link FormEditor} allowing to edit an EMF {@link EObject} in a convenient
@@ -212,11 +214,32 @@
 			for (Image img : getPagesImages())
 				setPageImage(i++, img);
 
+			addSourcePage();
 		} catch (PartInitException e) {
 			Activator.logException(e, Messages.EmfFormEditor_InitError);
 		}
 	}
 
+	private void addSourcePage() throws PartInitException {
+		if (!_editorConfig.isShowSourcePage())
+			return;
+
+		boolean isXmlUiBundlePresent = false;
+		BundleContext bc = Activator.getDefault().getBundle().getBundleContext();
+		for (Bundle b : bc.getBundles()) {
+			if ("org.eclipse.wst.xml.ui".equals(b.getSymbolicName())) { //$NON-NLS-1$
+				isXmlUiBundlePresent = true;
+				break;
+			}
+		}
+
+		if (isXmlUiBundlePresent)
+			addPage(new XmlSourcePage(this));
+		else
+			addPage(new SimpleSourcePage(this));
+
+	}
+
 	/**
 	 * @throws PartInitException
 	 */
diff --git a/modeling/plugins/org.eclipse.pde.emfforms/src/org/eclipse/pde/emfforms/editor/IEmfFormEditorConfig.java b/modeling/plugins/org.eclipse.pde.emfforms/src/org/eclipse/pde/emfforms/editor/IEmfFormEditorConfig.java
index 5ae44b9..c50d71f 100644
--- a/modeling/plugins/org.eclipse.pde.emfforms/src/org/eclipse/pde/emfforms/editor/IEmfFormEditorConfig.java
+++ b/modeling/plugins/org.eclipse.pde.emfforms/src/org/eclipse/pde/emfforms/editor/IEmfFormEditorConfig.java
@@ -8,7 +8,7 @@
  * Contributors:
  *     Anyware Technologies - initial API and implementation
  *
- * $Id: IEmfFormEditorConfig.java,v 1.1 2009/04/24 11:52:09 bcabe Exp $
+ * $Id: IEmfFormEditorConfig.java,v 1.2 2009/07/05 20:22:09 bcabe Exp $
  */
 package org.eclipse.pde.emfforms.editor;
 
@@ -28,6 +28,8 @@
 
 	public abstract boolean isShowOutlinePage();
 
+	public abstract boolean isShowSourcePage();
+
 	/**
 	 * 
 	 * @param display
diff --git a/modeling/plugins/org.eclipse.pde.emfforms/src/org/eclipse/pde/emfforms/internal/editor/AbstractSourcePage.java b/modeling/plugins/org.eclipse.pde.emfforms/src/org/eclipse/pde/emfforms/internal/editor/AbstractSourcePage.java
new file mode 100644
index 0000000..22fde00
--- /dev/null
+++ b/modeling/plugins/org.eclipse.pde.emfforms/src/org/eclipse/pde/emfforms/internal/editor/AbstractSourcePage.java
@@ -0,0 +1,118 @@
+/**
+ * Copyright (c) 2009 Anyware Technologies 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:
+ *     Anyware Technologies - initial API and implementation
+ *
+ * $Id: Messages.java,v 1.2 2009/02/13 10:24:39 bcabe Exp $
+ */
+package org.eclipse.pde.emfforms.internal.editor;
+
+import java.io.IOException;
+import java.io.StringWriter;
+import java.util.Collections;
+import java.util.EventObject;
+import org.eclipse.core.databinding.DataBindingContext;
+import org.eclipse.core.databinding.observable.value.IObservableValue;
+import org.eclipse.emf.common.command.CommandStackListener;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.xmi.XMLResource;
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.jface.layout.GridDataFactory;
+import org.eclipse.jface.text.source.SourceViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.pde.emfforms.editor.AbstractEmfFormPage;
+import org.eclipse.pde.emfforms.editor.EmfFormEditor;
+import org.eclipse.pde.emfforms.internal.Activator;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+
+public abstract class AbstractSourcePage extends AbstractEmfFormPage {
+	private SourceViewer _sourceViewer;
+
+	public static final String ID = "emfforms.source"; //$NON-NLS-1$
+
+	protected static final int VERTICAL_RULER_WIDTH = 12;
+
+	private EditingDomain _editingDomain;
+	private CommandStackListener _commandStackListener;
+
+	/**
+	 * @param editor
+	 */
+	public AbstractSourcePage(EmfFormEditor<?> editor) {
+		super(editor);
+	}
+
+	public void bind(DataBindingContext bindingContext) {
+		_editingDomain = ((EmfFormEditor<?>) getEditor()).getEditingDomain();
+
+		_commandStackListener = new CommandStackListener() {
+			public void commandStackChanged(EventObject event) {
+				refreshSourceContent();
+			}
+		};
+		_editingDomain.getCommandStack().addCommandStackListener(_commandStackListener);
+
+		// initialize content
+		refreshSourceContent();
+	}
+
+	private void refreshSourceContent() {
+		EObject obj = (EObject) getObservedValue().getValue();
+
+		// Copies the root to avoid modifying it
+		final StringWriter writer = new StringWriter();
+		try {
+			((XMLResource) obj.eResource()).save(writer, Collections.EMPTY_MAP);
+		} catch (IOException e) {
+			Activator.log(e);
+		}
+		final String result = writer.toString();
+		writer.flush();
+		if (_sourceViewer != null)
+			_sourceViewer.getDocument().set(result);
+	}
+
+	public void createContents(Composite parent) {
+		GridLayout gl = new GridLayout(getNumColumns(), true);
+		gl.verticalSpacing = 0;
+		parent.setLayout(gl);
+
+		_sourceViewer = createSourceViewer(parent);
+
+		GridDataFactory.fillDefaults().grab(true, true).applyTo(_sourceViewer.getControl());
+	}
+
+	public abstract SourceViewer createSourceViewer(Composite parent);
+
+	@Override
+	public String getId() {
+		return ID;
+	}
+
+	@Override
+	public String getPartName() {
+		return "Source"; //$NON-NLS-1$
+	}
+
+	@Override
+	public Viewer getViewer() {
+		return null;
+	}
+
+	private IObservableValue getObservedValue() {
+		return ((EmfFormEditor<?>) getEditor()).getInputObservable();
+	}
+
+	@Override
+	public void dispose() {
+		_editingDomain.getCommandStack().removeCommandStackListener(_commandStackListener);
+
+		super.dispose();
+	}
+}
diff --git a/modeling/plugins/org.eclipse.pde.emfforms/src/org/eclipse/pde/emfforms/internal/editor/SimpleSourcePage.java b/modeling/plugins/org.eclipse.pde.emfforms/src/org/eclipse/pde/emfforms/internal/editor/SimpleSourcePage.java
new file mode 100644
index 0000000..5a15562
--- /dev/null
+++ b/modeling/plugins/org.eclipse.pde.emfforms/src/org/eclipse/pde/emfforms/internal/editor/SimpleSourcePage.java
@@ -0,0 +1,43 @@
+/**
+ * Copyright (c) 2009 Anyware Technologies 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:
+ *     Anyware Technologies - initial API and implementation
+ *
+ * $Id: Messages.java,v 1.2 2009/02/13 10:24:39 bcabe Exp $
+ */
+package org.eclipse.pde.emfforms.internal.editor;
+
+import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.jface.text.Document;
+import org.eclipse.jface.text.source.SourceViewer;
+import org.eclipse.jface.text.source.VerticalRuler;
+import org.eclipse.pde.emfforms.editor.EmfFormEditor;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.editors.text.TextSourceViewerConfiguration;
+
+public class SimpleSourcePage extends AbstractSourcePage {
+
+	public SimpleSourcePage(EmfFormEditor<?> editor) {
+		super(editor);
+	}
+
+	@Override
+	public SourceViewer createSourceViewer(Composite parent) {
+		SourceViewer sourceViewer = new SourceViewer(parent, new VerticalRuler(VERTICAL_RULER_WIDTH), SWT.V_SCROLL | SWT.WRAP);
+
+		sourceViewer.getTextWidget().setFont(JFaceResources.getTextFont());
+
+		sourceViewer.configure(new TextSourceViewerConfiguration());
+		sourceViewer.setDocument(new Document());
+		sourceViewer.setEditable(false);
+
+		return sourceViewer;
+	}
+
+}
diff --git a/modeling/plugins/org.eclipse.pde.emfforms/src/org/eclipse/pde/emfforms/internal/editor/XmlSourcePage.java b/modeling/plugins/org.eclipse.pde.emfforms/src/org/eclipse/pde/emfforms/internal/editor/XmlSourcePage.java
new file mode 100644
index 0000000..04987f0
--- /dev/null
+++ b/modeling/plugins/org.eclipse.pde.emfforms/src/org/eclipse/pde/emfforms/internal/editor/XmlSourcePage.java
@@ -0,0 +1,55 @@
+/**
+ * Copyright (c) 2009 Anyware Technologies 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:
+ *     Anyware Technologies - initial API and implementation
+ *
+ * $Id: Messages.java,v 1.2 2009/02/13 10:24:39 bcabe Exp $
+ */
+package org.eclipse.pde.emfforms.internal.editor;
+
+import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.jface.text.contentassist.IContentAssistant;
+import org.eclipse.jface.text.source.*;
+import org.eclipse.pde.emfforms.editor.EmfFormEditor;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.wst.sse.core.StructuredModelManager;
+import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument;
+import org.eclipse.wst.sse.ui.internal.StructuredTextViewer;
+import org.eclipse.wst.xml.ui.StructuredTextViewerConfigurationXML;
+
+@SuppressWarnings("restriction")
+public class XmlSourcePage extends AbstractSourcePage {
+
+	public XmlSourcePage(EmfFormEditor<?> editor) {
+		super(editor);
+	}
+
+	@Override
+	public SourceViewer createSourceViewer(Composite parent) {
+		StructuredTextViewer sourceViewer = new org.eclipse.wst.sse.ui.internal.StructuredTextViewer(parent, new VerticalRuler(VERTICAL_RULER_WIDTH), null, false, SWT.V_SCROLL | SWT.WRAP);
+
+		sourceViewer.getTextWidget().setFont(JFaceResources.getFont("org.eclipse.wst.sse.ui.textfont")); //$NON-NLS-1$
+		IStructuredDocument document = StructuredModelManager.getModelManager().createStructuredDocumentFor("org.eclipse.core.runtime.xml"); //$NON-NLS-1$
+
+		SourceViewerConfiguration sourceViewerConfiguration = new StructuredTextViewerConfigurationXML() {
+			@Override
+			public IContentAssistant getContentAssistant(ISourceViewer sourceViewer) {
+				return super.getContentAssistant(sourceViewer);
+			}
+		};
+
+		// sourceViewerConfiguration.getContentFormatter(_sourceStructuredTextViewer).format(document, new Region(0, document.getLength()));
+		sourceViewer.configure(sourceViewerConfiguration);
+		sourceViewer.setDocument(document);
+		sourceViewer.setEditable(false);
+
+		return sourceViewer;
+	}
+
+}
