add migrationservice
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