diff --git a/plugins/org.eclipse.graphiti/src/org/eclipse/graphiti/internal/services/impl/MigrationServiceImpl.java b/plugins/org.eclipse.graphiti/src/org/eclipse/graphiti/internal/services/impl/MigrationServiceImpl.java
new file mode 100644
index 0000000..a3d09b7
--- /dev/null
+++ b/plugins/org.eclipse.graphiti/src/org/eclipse/graphiti/internal/services/impl/MigrationServiceImpl.java
@@ -0,0 +1,63 @@
+/*******************************************************************************
+ * <copyright>
+ *
+ * Copyright (c) 2005, 2011 SAP AG.
+ * 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:
+ *    SAP AG - initial API, implementation and documentation
+ *
+ * </copyright>
+ *
+ *******************************************************************************/
+package org.eclipse.graphiti.internal.services.impl;
+
+import java.util.HashSet;
+
+import org.eclipse.emf.common.util.TreeIterator;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.graphiti.mm.algorithms.AbstractText;
+import org.eclipse.graphiti.mm.algorithms.styles.Font;
+import org.eclipse.graphiti.mm.algorithms.styles.Style;
+import org.eclipse.graphiti.mm.pictograms.Diagram;
+import org.eclipse.graphiti.services.Graphiti;
+import org.eclipse.graphiti.services.IMigrationService;
+
+/**
+ *
+ */
+public class MigrationServiceImpl implements IMigrationService {
+
+
+	@Override
+	public void migrate070To080(Diagram d) {
+
+		// Traverse model and collect fonts
+		HashSet<Font> fonts = new HashSet<Font>();
+		Resource eResource = d.eResource();
+		TreeIterator<EObject> allContents = eResource.getAllContents();
+		while (allContents.hasNext()) {
+			EObject next = allContents.next();
+			if (next instanceof AbstractText) {
+				AbstractText t = (AbstractText) next;
+				Font font = t.getFont();
+				fonts.add(font);
+			} else if (next instanceof Style) {
+				Style s = (Style) next;
+				Font font = s.getFont();
+				fonts.add(font);
+			}
+		}
+
+		// Manage collected fonts, including possibly a write.
+		// The caller has to use a write transaction.
+		for (Font font : fonts) {
+			Graphiti.getGaService().manageFont(d, font.getName(), font.getSize(), font.isItalic(), font.isBold());
+		}
+	}
+
+}
diff --git a/plugins/org.eclipse.graphiti/src/org/eclipse/graphiti/services/Graphiti.java b/plugins/org.eclipse.graphiti/src/org/eclipse/graphiti/services/Graphiti.java
index b684951..90ac09f 100644
--- a/plugins/org.eclipse.graphiti/src/org/eclipse/graphiti/services/Graphiti.java
+++ b/plugins/org.eclipse.graphiti/src/org/eclipse/graphiti/services/Graphiti.java
@@ -19,6 +19,7 @@
 import org.eclipse.graphiti.internal.services.impl.GaServiceImpl;
 import org.eclipse.graphiti.internal.services.impl.LayoutServiceImpl;
 import org.eclipse.graphiti.internal.services.impl.LinkServiceImpl;
+import org.eclipse.graphiti.internal.services.impl.MigrationServiceImpl;
 import org.eclipse.graphiti.internal.services.impl.PeServiceImpl;
 
 /**
@@ -40,6 +41,8 @@
 
 	private static ILinkService linkService;
 
+	private static IMigrationService migService;
+
 	/**
 	 * 
 	 * @return the creation service for GraphicsAlgoritm's
@@ -128,4 +131,17 @@
 		}
 		return linkService;
 	}
+
+	/**
+	 * 
+	 * @return the migration service
+	 * 
+	 * @since 0.8.0
+	 */
+	public static IMigrationService getMigrationService() {
+		if (migService == null) {
+			migService = new MigrationServiceImpl();
+		}
+		return migService;
+	}
 }
diff --git a/plugins/org.eclipse.graphiti/src/org/eclipse/graphiti/services/IMigrationService.java b/plugins/org.eclipse.graphiti/src/org/eclipse/graphiti/services/IMigrationService.java
new file mode 100644
index 0000000..631ba9b
--- /dev/null
+++ b/plugins/org.eclipse.graphiti/src/org/eclipse/graphiti/services/IMigrationService.java
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * <copyright>
+ *
+ * Copyright (c) 2005, 2011 SAP AG.
+ * 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:
+ *    SAP AG - initial API, implementation and documentation
+ *
+ * </copyright>
+ *
+ *******************************************************************************/
+package org.eclipse.graphiti.services;
+
+import org.eclipse.graphiti.mm.pictograms.Diagram;
+
+/**
+ * Migration support for converting models from older to newer versions.
+ * 
+ * @since 0.8.0
+ */
+public interface IMigrationService {
+
+	/**
+	 * Moves fonts which, in 0.7.0, were aggregated by AbstractText and Style to
+	 * the diagram which aggregates fonts centrally as of 0.8.0. Possibly
+	 * modifies the diagram. Has to be called from within a write transaction.
+	 * 
+	 * @param diagram
+	 *            the diagram to be migrated.
+	 * 
+	 */
+	public abstract void migrate070To080(Diagram diagram);
+
+}
\ No newline at end of file
