diff --git a/bundles/org.eclipse.e4.core.metaconfig/src/org/eclipse/e4/core/metaconfig/Activator.java b/bundles/org.eclipse.e4.core.metaconfig/src/org/eclipse/e4/core/metaconfig/Activator.java
index f9537f8..e084371 100644
--- a/bundles/org.eclipse.e4.core.metaconfig/src/org/eclipse/e4/core/metaconfig/Activator.java
+++ b/bundles/org.eclipse.e4.core.metaconfig/src/org/eclipse/e4/core/metaconfig/Activator.java
@@ -8,61 +8,61 @@
  * Contributors:
  *    David Orme - initial API and implementation
  ******************************************************************************/
-package org.eclipse.e4.core.metaconfig;
-
-import java.util.Dictionary;
-import java.util.Hashtable;
-
-import org.eclipse.core.runtime.Plugin;
-import org.osgi.framework.BundleContext;
-
-/**
- * The activator class controls the plug-in life cycle
- */
-public class Activator extends Plugin {
-
-	// The plug-in ID
-	public static final String PLUGIN_ID = "org.eclipse.e4.enterprise.utils.config";
-
-	// The shared instance
-	private static Activator plugin;
-	
-	/**
-	 * The constructor
-	 */
-	public Activator() {
-
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see org.eclipse.core.runtime.Plugins#start(org.osgi.framework.BundleContext)
-	 */
-	public void start(BundleContext context) throws Exception {
-		super.start(context);
-		plugin = this;
-		Configuration configuration = new Configuration();
-		Dictionary<String, String> props = new Hashtable<String, String>();
-		props.put("description", "RCP Configuration object");
-		context.registerService(Configuration.class.getName(), configuration, props);
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see org.eclipse.core.runtime.Plugin#stop(org.osgi.framework.BundleContext)
-	 */
-	public void stop(BundleContext context) throws Exception {
-		plugin = null;
-		super.stop(context);
-	}
-
-	/**
-	 * Returns the shared instance
-	 *
-	 * @return the shared instance
-	 */
-	public static Activator getDefault() {
-		return plugin;
-	}
-
-}
+package org.eclipse.e4.core.metaconfig;
+
+import java.util.Dictionary;
+import java.util.Hashtable;
+
+import org.eclipse.core.runtime.Plugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class Activator extends Plugin {
+
+	// The plug-in ID
+	public static final String PLUGIN_ID = "org.eclipse.e4.core.metaconfig";
+
+	// The shared instance
+	private static Activator plugin;
+	
+	/**
+	 * The constructor
+	 */
+	public Activator() {
+
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.core.runtime.Plugins#start(org.osgi.framework.BundleContext)
+	 */
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+		plugin = this;
+		Configuration configuration = new Configuration();
+		Dictionary<String, String> props = new Hashtable<String, String>();
+		props.put("description", "RCP Configuration object");
+		context.registerService(Configuration.class.getName(), configuration, props);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.core.runtime.Plugin#stop(org.osgi.framework.BundleContext)
+	 */
+	public void stop(BundleContext context) throws Exception {
+		plugin = null;
+		super.stop(context);
+	}
+
+	/**
+	 * Returns the shared instance
+	 *
+	 * @return the shared instance
+	 */
+	public static Activator getDefault() {
+		return plugin;
+	}
+
+}
