diff --git a/bundles/common/org.eclipse.apogy.common.emf.ui.emfforms/src-gen/org/eclipse/apogy/common/emf/ui/emfforms/provider/ApogyCommonEMFUiEMFFormsEditPlugin.java b/bundles/common/org.eclipse.apogy.common.emf.ui.emfforms/src-gen/org/eclipse/apogy/common/emf/ui/emfforms/provider/ApogyCommonEMFUiEMFFormsEditPlugin.java
new file mode 100644
index 0000000..bf2920d
--- /dev/null
+++ b/bundles/common/org.eclipse.apogy.common.emf.ui.emfforms/src-gen/org/eclipse/apogy/common/emf/ui/emfforms/provider/ApogyCommonEMFUiEMFFormsEditPlugin.java
@@ -0,0 +1,109 @@
+/**
+ * *******************************************************************************
+ * Copyright (c) 2018 Agence spatiale canadienne / Canadian Space Agency 
+ * 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:
+ *      Pierre Allard - initial API and implementation
+ *      Regent L'Archeveque, 
+ *      Olivier L. Larouche
+ *         
+ * SPDX-License-Identifier: EPL-1.0    
+ * *******************************************************************************
+ */
+package org.eclipse.apogy.common.emf.ui.emfforms.provider;
+
+import org.eclipse.apogy.common.emf.provider.ApogyCommonEMFEditPlugin;
+
+import org.eclipse.apogy.common.emf.ui.provider.ApogyCommonEMFUIEditPlugin;
+
+import org.eclipse.emf.common.EMFPlugin;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+/**
+ * This is the central singleton for the ApogyCommonEMFUiEMFForms edit plugin.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public final class ApogyCommonEMFUiEMFFormsEditPlugin extends EMFPlugin {
+	/**
+	 * Keep track of the singleton.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final ApogyCommonEMFUiEMFFormsEditPlugin INSTANCE = new ApogyCommonEMFUiEMFFormsEditPlugin();
+
+	/**
+	 * Keep track of the singleton.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static Implementation plugin;
+
+	/**
+	 * Create the instance.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ApogyCommonEMFUiEMFFormsEditPlugin() {
+		super
+		  (new ResourceLocator [] {
+		     ApogyCommonEMFUIEditPlugin.INSTANCE,
+		     ApogyCommonEMFEditPlugin.INSTANCE,
+		   });
+	}
+
+	/**
+	 * Returns the singleton instance of the Eclipse plugin.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the singleton instance.
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getPluginResourceLocator() {
+		return plugin;
+	}
+
+	/**
+	 * Returns the singleton instance of the Eclipse plugin.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the singleton instance.
+	 * @generated
+	 */
+	public static Implementation getPlugin() {
+		return plugin;
+	}
+
+	/**
+	 * The actual implementation of the Eclipse <b>Plugin</b>.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static class Implementation extends EclipsePlugin {
+		/**
+		 * Creates an instance.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public Implementation() {
+			super();
+
+			// Remember the static instance.
+			//
+			plugin = this;
+		}
+	}
+
+}
diff --git a/bundles/common/org.eclipse.apogy.common.ui/src-gen/org/eclipse/apogy/common/ui/provider/ApogyCommonUiEditPlugin.java b/bundles/common/org.eclipse.apogy.common.ui/src-gen/org/eclipse/apogy/common/ui/provider/ApogyCommonUiEditPlugin.java
new file mode 100644
index 0000000..f7942ee
--- /dev/null
+++ b/bundles/common/org.eclipse.apogy.common.ui/src-gen/org/eclipse/apogy/common/ui/provider/ApogyCommonUiEditPlugin.java
@@ -0,0 +1,103 @@
+/**
+ * *******************************************************************************
+ * Copyright (c) 2018 Agence spatiale canadienne / Canadian Space Agency 
+ * 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:
+ *      Pierre Allard - initial API and implementation
+ *      Regent L'Archeveque 
+ *      Sebastien Gemme
+ *         
+ * SPDX-License-Identifier: EPL-1.0    
+ * *******************************************************************************
+ */
+package org.eclipse.apogy.common.ui.provider;
+
+import org.eclipse.emf.common.EMFPlugin;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+/**
+ * This is the central singleton for the ApogyCommonUi edit plugin.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public final class ApogyCommonUiEditPlugin extends EMFPlugin {
+	/**
+	 * Keep track of the singleton.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final ApogyCommonUiEditPlugin INSTANCE = new ApogyCommonUiEditPlugin();
+
+	/**
+	 * Keep track of the singleton.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static Implementation plugin;
+
+	/**
+	 * Create the instance.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ApogyCommonUiEditPlugin() {
+		super
+		  (new ResourceLocator [] {
+		   });
+	}
+
+	/**
+	 * Returns the singleton instance of the Eclipse plugin.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the singleton instance.
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getPluginResourceLocator() {
+		return plugin;
+	}
+
+	/**
+	 * Returns the singleton instance of the Eclipse plugin.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the singleton instance.
+	 * @generated
+	 */
+	public static Implementation getPlugin() {
+		return plugin;
+	}
+
+	/**
+	 * The actual implementation of the Eclipse <b>Plugin</b>.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static class Implementation extends EclipsePlugin {
+		/**
+		 * Creates an instance.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public Implementation() {
+			super();
+
+			// Remember the static instance.
+			//
+			plugin = this;
+		}
+	}
+
+}
diff --git a/bundles/core/org.eclipse.apogy.core.environment.earth.orbit.planner.ui/src-gen/org/eclipse/apogy/core/environment/earth/orbit/planner/ui/provider/ApogyCoreEnvironmentEarthOrbitPlannerUIEditPlugin.java b/bundles/core/org.eclipse.apogy.core.environment.earth.orbit.planner.ui/src-gen/org/eclipse/apogy/core/environment/earth/orbit/planner/ui/provider/ApogyCoreEnvironmentEarthOrbitPlannerUIEditPlugin.java
new file mode 100644
index 0000000..5b914a7
--- /dev/null
+++ b/bundles/core/org.eclipse.apogy.core.environment.earth.orbit.planner.ui/src-gen/org/eclipse/apogy/core/environment/earth/orbit/planner/ui/provider/ApogyCoreEnvironmentEarthOrbitPlannerUIEditPlugin.java
@@ -0,0 +1,111 @@
+/**
+ * *******************************************************************************
+ * Copyright (c) 2018 Agence spatiale canadienne / Canadian Space Agency 
+ * 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:
+ *      Pierre Allard - initial API and implementation
+ *      Regent L'Archeveque 
+ *         
+ * SPDX-License-Identifier: EPL-1.0 
+ * *******************************************************************************
+ */
+package org.eclipse.apogy.core.environment.earth.orbit.planner.ui.provider;
+
+import org.eclipse.apogy.common.emf.provider.ApogyCommonEMFEditPlugin;
+
+import org.eclipse.apogy.common.emf.ui.emfforms.provider.ApogyCommonEMFUiEMFFormsEditPlugin;
+
+import org.eclipse.apogy.common.emf.ui.provider.ApogyCommonEMFUIEditPlugin;
+
+import org.eclipse.emf.common.EMFPlugin;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+/**
+ * This is the central singleton for the ApogyCoreEnvironmentEarthOrbitPlannerUI edit plugin.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public final class ApogyCoreEnvironmentEarthOrbitPlannerUIEditPlugin extends EMFPlugin {
+	/**
+	 * Keep track of the singleton.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final ApogyCoreEnvironmentEarthOrbitPlannerUIEditPlugin INSTANCE = new ApogyCoreEnvironmentEarthOrbitPlannerUIEditPlugin();
+
+	/**
+	 * Keep track of the singleton.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static Implementation plugin;
+
+	/**
+	 * Create the instance.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ApogyCoreEnvironmentEarthOrbitPlannerUIEditPlugin() {
+		super
+		  (new ResourceLocator [] {
+		     ApogyCommonEMFUiEMFFormsEditPlugin.INSTANCE,
+		     ApogyCommonEMFUIEditPlugin.INSTANCE,
+		     ApogyCommonEMFEditPlugin.INSTANCE,
+		   });
+	}
+
+	/**
+	 * Returns the singleton instance of the Eclipse plugin.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the singleton instance.
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getPluginResourceLocator() {
+		return plugin;
+	}
+
+	/**
+	 * Returns the singleton instance of the Eclipse plugin.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the singleton instance.
+	 * @generated
+	 */
+	public static Implementation getPlugin() {
+		return plugin;
+	}
+
+	/**
+	 * The actual implementation of the Eclipse <b>Plugin</b>.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static class Implementation extends EclipsePlugin {
+		/**
+		 * Creates an instance.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public Implementation() {
+			super();
+
+			// Remember the static instance.
+			//
+			plugin = this;
+		}
+	}
+
+}
diff --git a/bundles/core/org.eclipse.apogy.core.environment.earth.orbit.ui/src-gen/org/eclipse/apogy/core/environment/earth/orbit/ui/provider/ApogyCoreEnvironmentEarthOrbitUIEditPlugin.java b/bundles/core/org.eclipse.apogy.core.environment.earth.orbit.ui/src-gen/org/eclipse/apogy/core/environment/earth/orbit/ui/provider/ApogyCoreEnvironmentEarthOrbitUIEditPlugin.java
new file mode 100644
index 0000000..fae2e08
--- /dev/null
+++ b/bundles/core/org.eclipse.apogy.core.environment.earth.orbit.ui/src-gen/org/eclipse/apogy/core/environment/earth/orbit/ui/provider/ApogyCoreEnvironmentEarthOrbitUIEditPlugin.java
@@ -0,0 +1,147 @@
+/**
+ * *******************************************************************************
+ * Copyright (c) 2018 Agence spatiale canadienne / Canadian Space Agency 
+ * 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:
+ *      Pierre Allard - initial API and implementation
+ *      Regent L'Archeveque
+ *         
+ * SPDX-License-Identifier: EPL-1.0    
+ * *******************************************************************************
+ */
+package org.eclipse.apogy.core.environment.earth.orbit.ui.provider;
+
+import org.eclipse.apogy.common.emf.provider.ApogyCommonEMFEditPlugin;
+
+import org.eclipse.apogy.common.emf.ui.emfforms.provider.ApogyCommonEMFUiEMFFormsEditPlugin;
+
+import org.eclipse.apogy.common.emf.ui.provider.ApogyCommonEMFUIEditPlugin;
+
+import org.eclipse.apogy.common.math.provider.ApogyCommonMathEditPlugin;
+
+import org.eclipse.apogy.common.processors.provider.ApogyCommonProcessorsEditPlugin;
+
+import org.eclipse.apogy.common.topology.bindings.provider.ApogyCommonTopologyBindingsEditPlugin;
+
+import org.eclipse.apogy.common.topology.provider.ApogyCommonTopologyEditPlugin;
+
+import org.eclipse.apogy.core.environment.earth.orbit.provider.ApogyCoreEnvironmentEarthOrbitEditPlugin;
+
+import org.eclipse.apogy.core.environment.earth.provider.ApogyCoreEnvironmentEarthEditPlugin;
+
+import org.eclipse.apogy.core.environment.earth.ui.provider.ApogyCoreEnvironmentUIEditPlugin;
+
+import org.eclipse.apogy.core.environment.orbit.provider.ApogyCoreEnvironmentOrbitEditPlugin;
+
+import org.eclipse.apogy.core.environment.provider.ApogyCoreEnvironmentEditPlugin;
+
+import org.eclipse.apogy.core.invocator.provider.ApogyCoreInvocatorEditPlugin;
+
+import org.eclipse.apogy.core.provider.ApogyCoreEditPlugin;
+
+import org.eclipse.emf.common.EMFPlugin;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+import org.eclipse.emf.ecore.provider.EcoreEditPlugin;
+
+/**
+ * This is the central singleton for the ApogyCoreEnvironmentEarthOrbitUI edit plugin.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public final class ApogyCoreEnvironmentEarthOrbitUIEditPlugin extends EMFPlugin {
+	/**
+	 * Keep track of the singleton.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final ApogyCoreEnvironmentEarthOrbitUIEditPlugin INSTANCE = new ApogyCoreEnvironmentEarthOrbitUIEditPlugin();
+
+	/**
+	 * Keep track of the singleton.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static Implementation plugin;
+
+	/**
+	 * Create the instance.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ApogyCoreEnvironmentEarthOrbitUIEditPlugin() {
+		super
+		  (new ResourceLocator [] {
+		     ApogyCoreEnvironmentEarthOrbitEditPlugin.INSTANCE,
+		     ApogyCoreEnvironmentUIEditPlugin.INSTANCE,
+		     ApogyCoreEditPlugin.INSTANCE,
+		     ApogyCommonEMFEditPlugin.INSTANCE,
+		     ApogyCommonEMFUIEditPlugin.INSTANCE,
+		     EcoreEditPlugin.INSTANCE,
+		     ApogyCoreInvocatorEditPlugin.INSTANCE,
+		     ApogyCommonEMFUiEMFFormsEditPlugin.INSTANCE,
+		     ApogyCoreEnvironmentEarthEditPlugin.INSTANCE,
+		     ApogyCoreEnvironmentOrbitEditPlugin.INSTANCE,
+		     ApogyCoreEnvironmentEditPlugin.INSTANCE,
+		     ApogyCommonProcessorsEditPlugin.INSTANCE,
+		     ApogyCommonMathEditPlugin.INSTANCE,
+		     ApogyCommonTopologyEditPlugin.INSTANCE,
+		     ApogyCommonTopologyBindingsEditPlugin.INSTANCE,
+		   });
+	}
+
+	/**
+	 * Returns the singleton instance of the Eclipse plugin.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the singleton instance.
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getPluginResourceLocator() {
+		return plugin;
+	}
+
+	/**
+	 * Returns the singleton instance of the Eclipse plugin.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the singleton instance.
+	 * @generated
+	 */
+	public static Implementation getPlugin() {
+		return plugin;
+	}
+
+	/**
+	 * The actual implementation of the Eclipse <b>Plugin</b>.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static class Implementation extends EclipsePlugin {
+		/**
+		 * Creates an instance.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public Implementation() {
+			super();
+
+			// Remember the static instance.
+			//
+			plugin = this;
+		}
+	}
+
+}
diff --git a/bundles/core/org.eclipse.apogy.core.invocator.ui/src-gen/org/eclipse/apogy/core/invocator/ui/provider/ApogyCoreInvocatorUIEditPlugin.java b/bundles/core/org.eclipse.apogy.core.invocator.ui/src-gen/org/eclipse/apogy/core/invocator/ui/provider/ApogyCoreInvocatorUIEditPlugin.java
new file mode 100644
index 0000000..ccdf6c4
--- /dev/null
+++ b/bundles/core/org.eclipse.apogy.core.invocator.ui/src-gen/org/eclipse/apogy/core/invocator/ui/provider/ApogyCoreInvocatorUIEditPlugin.java
@@ -0,0 +1,115 @@
+/**
+ * *******************************************************************************
+ * Copyright (c) 2018 Agence spatiale canadienne / Canadian Space Agency 
+ * 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:
+ *      Pierre Allard - initial API and implementation
+ *      Regent L'Archeveque 
+ *      Olivier L. Larouche
+ *         
+ * SPDX-License-Identifier: EPL-1.0    
+ * *******************************************************************************
+ */
+package org.eclipse.apogy.core.invocator.ui.provider;
+
+import org.eclipse.apogy.common.emf.provider.ApogyCommonEMFEditPlugin;
+
+import org.eclipse.apogy.common.emf.ui.emfforms.provider.ApogyCommonEMFUiEMFFormsEditPlugin;
+
+import org.eclipse.apogy.common.emf.ui.provider.ApogyCommonEMFUIEditPlugin;
+
+import org.eclipse.apogy.core.invocator.provider.ApogyCoreInvocatorEditPlugin;
+
+import org.eclipse.emf.common.EMFPlugin;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+/**
+ * This is the central singleton for the ApogyCoreInvocatorUI edit plugin.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public final class ApogyCoreInvocatorUIEditPlugin extends EMFPlugin {
+	/**
+	 * Keep track of the singleton.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final ApogyCoreInvocatorUIEditPlugin INSTANCE = new ApogyCoreInvocatorUIEditPlugin();
+
+	/**
+	 * Keep track of the singleton.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static Implementation plugin;
+
+	/**
+	 * Create the instance.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ApogyCoreInvocatorUIEditPlugin() {
+		super
+		  (new ResourceLocator [] {
+		     ApogyCommonEMFEditPlugin.INSTANCE,
+		     ApogyCoreInvocatorEditPlugin.INSTANCE,
+		     ApogyCommonEMFUiEMFFormsEditPlugin.INSTANCE,
+		     ApogyCommonEMFUIEditPlugin.INSTANCE,
+		   });
+	}
+
+	/**
+	 * Returns the singleton instance of the Eclipse plugin.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the singleton instance.
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getPluginResourceLocator() {
+		return plugin;
+	}
+
+	/**
+	 * Returns the singleton instance of the Eclipse plugin.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the singleton instance.
+	 * @generated
+	 */
+	public static Implementation getPlugin() {
+		return plugin;
+	}
+
+	/**
+	 * The actual implementation of the Eclipse <b>Plugin</b>.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static class Implementation extends EclipsePlugin {
+		/**
+		 * Creates an instance.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public Implementation() {
+			super();
+
+			// Remember the static instance.
+			//
+			plugin = this;
+		}
+	}
+
+}
diff --git a/bundles/core/org.eclipse.apogy.core.programs.controllers.ui/src-gen/org/eclipse/apogy/core/programs/controllers/ui/provider/ApogyCoreProgramsControllersUIEditPlugin.java b/bundles/core/org.eclipse.apogy.core.programs.controllers.ui/src-gen/org/eclipse/apogy/core/programs/controllers/ui/provider/ApogyCoreProgramsControllersUIEditPlugin.java
new file mode 100644
index 0000000..713ea34
--- /dev/null
+++ b/bundles/core/org.eclipse.apogy.core.programs.controllers.ui/src-gen/org/eclipse/apogy/core/programs/controllers/ui/provider/ApogyCoreProgramsControllersUIEditPlugin.java
@@ -0,0 +1,117 @@
+/**
+ * *******************************************************************************
+ * Copyright (c) 2019 Agence spatiale canadienne / Canadian Space Agency 
+ * 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:
+ *      Pierre Allard - initial API and implementation
+ *      Regent L'Archeveque 
+ *         
+ * SPDX-License-Identifier: EPL-1.0    
+ * *******************************************************************************
+ */
+package org.eclipse.apogy.core.programs.controllers.ui.provider;
+
+import org.eclipse.apogy.common.emf.provider.ApogyCommonEMFEditPlugin;
+
+import org.eclipse.apogy.common.emf.ui.emfforms.provider.ApogyCommonEMFUiEMFFormsEditPlugin;
+
+import org.eclipse.apogy.common.emf.ui.provider.ApogyCommonEMFUIEditPlugin;
+
+import org.eclipse.apogy.core.invocator.provider.ApogyCoreInvocatorEditPlugin;
+
+import org.eclipse.apogy.core.invocator.ui.provider.ApogyCoreInvocatorUIEditPlugin;
+
+import org.eclipse.emf.common.EMFPlugin;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+/**
+ * This is the central singleton for the ApogyCoreProgramsControllersUI edit plugin.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public final class ApogyCoreProgramsControllersUIEditPlugin extends EMFPlugin {
+	/**
+	 * Keep track of the singleton.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final ApogyCoreProgramsControllersUIEditPlugin INSTANCE = new ApogyCoreProgramsControllersUIEditPlugin();
+
+	/**
+	 * Keep track of the singleton.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static Implementation plugin;
+
+	/**
+	 * Create the instance.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ApogyCoreProgramsControllersUIEditPlugin() {
+		super
+		  (new ResourceLocator [] {
+		     ApogyCoreInvocatorUIEditPlugin.INSTANCE,
+		     ApogyCommonEMFUIEditPlugin.INSTANCE,
+		     ApogyCommonEMFUiEMFFormsEditPlugin.INSTANCE,
+		     ApogyCommonEMFEditPlugin.INSTANCE,
+		     ApogyCoreInvocatorEditPlugin.INSTANCE,
+		   });
+	}
+
+	/**
+	 * Returns the singleton instance of the Eclipse plugin.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the singleton instance.
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getPluginResourceLocator() {
+		return plugin;
+	}
+
+	/**
+	 * Returns the singleton instance of the Eclipse plugin.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the singleton instance.
+	 * @generated
+	 */
+	public static Implementation getPlugin() {
+		return plugin;
+	}
+
+	/**
+	 * The actual implementation of the Eclipse <b>Plugin</b>.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static class Implementation extends EclipsePlugin {
+		/**
+		 * Creates an instance.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public Implementation() {
+			super();
+
+			// Remember the static instance.
+			//
+			plugin = this;
+		}
+	}
+
+}
diff --git a/bundles/workspace/org.eclipse.apogy.workspace.ui/src-gen/org/eclipse/apogy/workspace/ui/provider/ApogyWorkspaceUiEditPlugin.java b/bundles/workspace/org.eclipse.apogy.workspace.ui/src-gen/org/eclipse/apogy/workspace/ui/provider/ApogyWorkspaceUiEditPlugin.java
new file mode 100644
index 0000000..e9b4a3f
--- /dev/null
+++ b/bundles/workspace/org.eclipse.apogy.workspace.ui/src-gen/org/eclipse/apogy/workspace/ui/provider/ApogyWorkspaceUiEditPlugin.java
@@ -0,0 +1,110 @@
+/**
+ * *******************************************************************************
+ * Copyright (c) 2018 Agence spatiale canadienne / Canadian Space Agency 
+ * 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:
+ *      Regent L'Archeveque - initial API and implementation
+ *         
+ * SPDX-License-Identifier: EPL-1.0    
+ * *******************************************************************************
+ */
+package org.eclipse.apogy.workspace.ui.provider;
+
+import org.eclipse.apogy.common.emf.provider.ApogyCommonEMFEditPlugin;
+
+import org.eclipse.apogy.common.emf.ui.emfforms.provider.ApogyCommonEMFUiEMFFormsEditPlugin;
+
+import org.eclipse.apogy.common.emf.ui.provider.ApogyCommonEMFUIEditPlugin;
+
+import org.eclipse.emf.common.EMFPlugin;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+/**
+ * This is the central singleton for the ApogyWorkspaceUi edit plugin.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public final class ApogyWorkspaceUiEditPlugin extends EMFPlugin {
+	/**
+	 * Keep track of the singleton.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final ApogyWorkspaceUiEditPlugin INSTANCE = new ApogyWorkspaceUiEditPlugin();
+
+	/**
+	 * Keep track of the singleton.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static Implementation plugin;
+
+	/**
+	 * Create the instance.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ApogyWorkspaceUiEditPlugin() {
+		super
+		  (new ResourceLocator [] {
+		     ApogyCommonEMFEditPlugin.INSTANCE,
+		     ApogyCommonEMFUiEMFFormsEditPlugin.INSTANCE,
+		     ApogyCommonEMFUIEditPlugin.INSTANCE,
+		   });
+	}
+
+	/**
+	 * Returns the singleton instance of the Eclipse plugin.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the singleton instance.
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getPluginResourceLocator() {
+		return plugin;
+	}
+
+	/**
+	 * Returns the singleton instance of the Eclipse plugin.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the singleton instance.
+	 * @generated
+	 */
+	public static Implementation getPlugin() {
+		return plugin;
+	}
+
+	/**
+	 * The actual implementation of the Eclipse <b>Plugin</b>.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static class Implementation extends EclipsePlugin {
+		/**
+		 * Creates an instance.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public Implementation() {
+			super();
+
+			// Remember the static instance.
+			//
+			plugin = this;
+		}
+	}
+
+}
diff --git a/releng/org.eclipse.apogy.site/.gitignore b/releng/org.eclipse.apogy.site/.gitignore
deleted file mode 100644
index 9da02ad..0000000
--- a/releng/org.eclipse.apogy.site/.gitignore
+++ /dev/null
@@ -1,6 +0,0 @@
-**/bin/
-**/target/
-!.gitignore
-**/*/.gitignore
-.polyglot.build.properties
-**/workspace/
